The author: WildboarG
Materials
- Ai-WB2-12F
- Rd-04
Notification Push
This project uses Gotify, which requires setting up a server. For details, refer to AI-WB2 Notification Push to Personal Devices.
Enable Notifications
A simple HTTP server has been set up with a static toggle switch to control notifications, preventing frequent triggers and making the system more user-friendly.
Disable the sentry to stop notifications.
Enable it to resume normal notification pushes to the mobile client.
Code Example
Repository: https://github.com/WildboarG/Picket.git
Main Thread
void rd_task(void *pvParameters) {
// Construct message content structure
static const char title[] = "RD04";
static const char message[] = "Trigger the radar notification";
static const char priority[] = "0";
static Message msg = {title, message, priority};
printf("title=%s \r\nmessage=%s\r\npriority=%s\r\n", msg.title, msg.message,
msg.priority);
while (1) {
// Continuously monitor RD output
hosal_gpio_input_get(&show, status);
vTaskDelay(3000);
// Trigger notification
if (status[0]) {
// Push message to mobile
xTaskCreate(¬ify_task, "notify_task", 1024 * 10, &msg, 5, NULL);
}
}
}
Radar Driver
#include "FreeRTOS.h"
#include "hosal_i2c.h"
#include "task.h"
#include <rd04.h>
#include <stdint.h>
#include <stdio.h>
#define RD_ADDR 0x71
extern hosal_i2c_dev_t i2c0;
void IIC_WriteData(uint8_t reg_addr, uint8_t Buff) {
uint8_t Data[2];
uint8_t ret = -1;
Data[0] = reg_addr;
Data[1] = Buff;
ret = hosal_i2c_master_send(&i2c0, RD_ADDR, Data, sizeof(Data),
HOSAL_WAIT_FOREVER);
if (ret != 0) {
printf("err:%c\n", Buff);
}
}
uint8_t IIC_ReadData(uint8_t reg_addr) {
uint8_t read_data[1];
read_data[0] = reg_addr;
hosal_i2c_master_recv(&i2c0, RD_ADDR, read_data, 1, HOSAL_WAIT_FOREVER);
return read_data;
}
void RD_04_Init(void) {
printf("Initializing radar\r\n");
uint8_t value;
for (uint8_t i = 0; i < 5; i++) {
IIC_WriteData(0x13, 0x9B);
vTaskDelay(1);
value = IIC_ReadData(0x13);
printf("READ VALUE =0x%02X\r\n", value);
}
IIC_WriteData(0x24, 0x03);
IIC_WriteData(0x04, 0x20);
IIC_WriteData(0x10, 0x20);
IIC_WriteData(0x03, 0x40);
IIC_WriteData(0x1C, 0x21);
IIC_WriteData(0x18, 0x6a);
IIC_WriteData(0x19, 0x00);
IIC_WriteData(0x1A, 0x55);
IIC_WriteData(0x1B, 0x01);
IIC_WriteData(0x1D, 0x80);
IIC_WriteData(0x1E, 0x0C);
IIC_WriteData(0x1F, 0x00);
IIC_WriteData(0x20, 0x00);
IIC_WriteData(0x21, 0x7D);
IIC_WriteData(0x22, 0x00);
IIC_WriteData(0x23, 0x0C);
vTaskDelay(3000);
printf("Radar initialization successful\r\n");
}
Notification Task
void notify_task(void *pvParameters) {
Message *params = (Message *)pvParameters; // Receive parameters
printf("title=%s \r\nmessage=%s\r\npriority=%s\r\n", params->title,
params->message,...
Read more »