【雷达灯控】安信可 Rd-03E+ 灯 + Ai-M61-32S 手势识别

[复制链接]
查看1602 | 回复19 | 2024-3-10 22:14:12 | 显示全部楼层 |阅读模式

本帖最后由 WT_0213 于 2024-3-14 09:03 编辑

免费申请 | 挑战智能家居!毫米波雷达模组,100个名额,先到先得!(活动已停)

https://bbs.ai-thinker.com/forum.php?mod=viewthread&tid=44214

参加论坛活动,用毫米波雷达点灯。由于没有合适的灯控制,直接点亮M61-32S上面的LED了。

基于Rd-03E原生固件通过手势识别进行点灯。

企业微信截图_20240311084953.png

相关资料:

Rd-03E手势识别上位机:Rd-03E手势识别上位机

Rd-03E快速入门使用文档

Rd-03E 手势识别固件用户手册

接线方式:

Rd-03E M61-32S
VCC 5V
GND GND
OT1 GPIO24
RX GPIO23

如下图按数字标号连线即可。 WX20240310-220354.png

1710079596294.jpg

下面是示例代码:

#include "bflb_mtimer.h"
#include "board.h"
#include "bflb_uart.h"
#include "bflb_gpio.h"
#include "FreeRTOS.h"
#include "task.h"
#include "math.h"

#define DBG_TAG "MAIN"
#include "log.h"

struct bflb_device_s *gpio;
struct bflb_device_s *rd03e;
uint8_t UART_RECEIVE_BUFFER[5];

// 创建任务持续获取雷达数据
void _rd03eTask(void* pvParameters){
    int index = 0;
    int data_count = 5;
    int status = 0;
    while (1)
    {
          // 获取单个数据
         int ch = bflb_uart_getchar(rd03e);
        // 如果ch不等于-1说明有数据
         if(ch!=-1){
            // 如果当前数据是雷达指令头
            if(ch == 0xAA){
                 // 重置数据缓存
                memset(UART_RECEIVE_BUFFER,0 , data_count);
                index = 0;
            }
            // 如果当前数据量小于指令数据
            if(index < data_count){
                UART_RECEIVE_BUFFER[index++] = ch;
                // 如果是数据帧结束标记
                if(ch == 0x55){
                    // for (size_t i = 0; i < data_count; i++)
                    // {
                    //     printf("0x%02x ", UART_RECEIVE_BUFFER[i]);
                    // }
                    // 检测手势
                    if(UART_RECEIVE_BUFFER[3] == 0x01){
                      printf("触发了手势\r\n");   
                      if(status==0){
                        status = 1;
                        bflb_gpio_set(gpio, GPIO_PIN_14);
                      }else{
                        status = 0;
                        bflb_gpio_reset(gpio, GPIO_PIN_14);
                      }
                    }
                    // printf("\r\n");
                }
            }
         }
       vTaskDelay(1);
    }

}

int main(void)
{
    board_init();
    // 初始化gpio
    gpio = bflb_device_get_by_name("gpio");

    // 初始化led针脚gpio
    bflb_gpio_init(gpio, GPIO_PIN_14, GPIO_OUTPUT | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_0);
    bflb_gpio_reset(gpio, GPIO_PIN_14);

    // 初始化uart
    rd03e = bflb_device_get_by_name("uart1");
    // 初始化uart gpio
    bflb_gpio_uart_init(gpio, GPIO_PIN_23, GPIO_UART_FUNC_UART1_TX);
    bflb_gpio_uart_init(gpio, GPIO_PIN_24, GPIO_UART_FUNC_UART1_RX);

    // 初始化uart配置参数
    struct bflb_uart_config_s conf = {
        .baudrate = 256000,
        .data_bits = UART_DATA_BITS_8,
        .stop_bits = UART_STOP_BITS_1,
        .parity = UART_PARITY_NONE,
        .flow_ctrl = UART_FLOWCTRL_NONE,
        .rx_fifo_threshold = 7,
        .tx_fifo_threshold = 7
    };

    bflb_uart_init(rd03e, &conf);

    // 创建任务接收数据
    xTaskCreate(_rd03eTask, (char*)"rd03e", 1024, NULL, 1, NULL);
    vTaskStartScheduler();

    while (1) {

    }
}
回复

使用道具 举报

WT_0213 | 2024-3-10 22:53:49 | 显示全部楼层

本帖最后由 WT_0213 于 2024-3-11 09:22 编辑

目前仅支持手势开灯

回复 支持 反对

使用道具 举报

WT_0213 | 2024-3-11 08:46:43 | 显示全部楼层
回复 支持 反对

使用道具 举报

cnfulishe | 2024-3-11 08:48:23 | 显示全部楼层
可以可以
回复

使用道具 举报

1055173307 | 2024-3-11 09:15:12 | 显示全部楼层
tql
回复

使用道具 举报

爱笑 | 2024-3-11 09:15:45 | 显示全部楼层
有个图裂开了!
用心做好保姆工作
回复 支持 反对

使用道具 举报

lazy | 2024-3-11 09:19:05 | 显示全部楼层
回复

使用道具 举报

WT_0213 | 2024-3-11 09:24:11 | 显示全部楼层
爱笑 发表于 2024-3-11 09:15
有个图裂开了!

应该是好了吧
回复 支持 反对

使用道具 举报

干簧管 | 2024-3-11 09:27:31 | 显示全部楼层
智能马桶
回复

使用道具 举报

1084504793 | 2024-3-11 11:27:03 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则