发帖
5 0 0

使用AI-WB2-32s-Kit制作安防检测

ch999
高级会员

3

主题

10

回帖

502

积分

高级会员

积分
502
电子DIY 133 5 3 天前

AI-WB2-32s-Kit开发板测试,测评第6项目:结合外设开发实际场景

说明

  • 使用AI-WB2-32s-Kit雷达模块制+蓝牙信标作安防检测。灵感来源是想着马上毕业要外出租房,担心陌生人进入房间,所以制作这个项目,以实现当有人进入房间时起到提示作用。但如果仅用雷达检查,每次自己回家都也会触发报告,那样就太烦了,所以我决定通过蓝牙信标来过滤指定目标。

材料

1、AI-WB2-32s-Kit

2、雷达模块(自带uart串口,通过串口输出数据)

3、蓝牙模块

4、服务器,用来做中转发送消息

IMG_20250526_2057151.jpg

IMG_20250526_2057341.jpg

雷达部分的代码

#include <stdio.h>
#include <string.h>
#include <FreeRTOS.h>
#include <task.h>
#include <blog.h>
#include "bl_sys.h"
#include <stdio.h>
#include <cli.h>
#include <hosal_uart.h>
#include <bl_gpio.h>
#include "bl_uart.h"

#define TAG "uart_demo"
#define GPIO_LED_PIN 3

hosal_uart_dev_t uart_dev_log = {
        .config = {
            .uart_id = 0,
            .tx_pin = 16, // TXD GPIO
            .rx_pin = 7,  // RXD GPIO
            .cts_pin = 255,
            .rts_pin = 255,
            .baud_rate = 115200,
            .data_width = HOSAL_DATA_WIDTH_8BIT,
            .parity = HOSAL_NO_PARITY,
            .stop_bits = HOSAL_STOP_BITS_1,
            .mode = HOSAL_UART_MODE_POLL,
        },
    };

//UART radar
void uart_radar_data(void *param)
{
    char data[64];
    int ret;

    while (1)
    {
        /* UART receive poll */
        ret = hosal_uart_receive(&uart_dev_log, data, sizeof(data)-1);
        if (ret > 0)
        {
           bl_gpio_output_set(GPIO_LED_PIN, 1);//set led
        }
        else{
           bl_gpio_output_set(GPIO_LED_PIN, 0);//set led
        }


        /* sscanf 是 C 语言标准库中的一个函数,
         * 用于从字符串中按照指定的格式读取数据,
         * 并将数据存储到指定的变量中123。
         * 它的原型定义在 <stdio.h> 头文件中
         */
         //雷达串口输出数据的格式: v=-0.6 km/h, str=208
        float velocity;
        int str_value;
        if (2 == sscanf(data, "v=%f km/h, str=%d", &velocity, &str_value)) {
        	    printf("Parsed: v=%.1f, str=%d\r\n", velocity, str_value);
        }

        vTaskDelay(200);
    }
}


void main(void)
{
	/* UART InIt device */
	hosal_uart_init(&uart_dev_log);
	/*LED*/
	bl_gpio_enable_output(GPIO_LED_PIN, 0, 0);

    xTaskCreate(uart_radar_data, "radar", 1024, NULL, 15, NULL);
}


因为我最近要期末考,等考完再把项目做完整。项目暂时先搁置一下,所以先通过这个小项目,测试了点灯和串口,以及结合外设实现安防功能。

接下来要做的:蓝牙信标(该部分以完成)。开发板以主机模式扫描设备,雷达发现有人进屋且扫描到指定MAC设备,表示是自己回家,否则就是陌生人闯入。

蓝牙部分代码

  • 我是在bl_interface.c库文件里添加如下代码实现mac比对和rssi的
//
int ble_master_get_rssi_by_mac(uint8_t *target_mac){
	if(target_mac==NULL)return -127;
	int ret=0;
	int rssi=0;
	int retry=3;
	struct bt_le_scan_param scan_param;
	char scan_data[250];
	scan_param.type = BT_LE_SCAN_TYPE_ACTIVE;
	scan_param.filter_dup = BT_LE_SCAN_FILTER_DUPLICATE;
	scan_param.interval = 320;
	scan_param.window = 48;

	master_current_scan = 0;
	memset(scan_le_addr, 0, sizeof(scan_le_addr));
	memset(master_scan_tbl, 0, sizeof(master_scan_tbl));

	//scan
	ret = bt_le_scan_start(&scan_param, scan_device_found);
	if(ret!=0){rssi=-127;}

	vTaskDelay(800 / portTICK_PERIOD_MS);//持续扫描的时间

	for (int i = 0; i < master_current_scan; i++) {
		ble_reverse_byte(master_scan_tbl[i].mac, 6);
		if(memcmp(target_mac,master_scan_tbl[i].mac, 6)==0){
			 sprintf(scan_data,"My BLE MAC:%02X%02X%02X%02X%02X%02X RSSI:%i name:%s\r\n",
			 master_scan_tbl[i].mac[0],master_scan_tbl[i].mac[1],master_scan_tbl[i].mac[2],
			 master_scan_tbl[i].mac[3],master_scan_tbl[i].mac[4],master_scan_tbl[i].mac[5],
			 master_scan_tbl[i].rssi, master_scan_tbl[i].name);
			 bleuart_printf(scan_data);
			 rssi=master_scan_tbl[i].rssi;
			 break;
	   }
		else{
			  //bleuart_printf("Not Found MAC Device\r\n");
			  rssi= -127;
		}
	 }
     return rssi;
}

有了雷达数据和蓝牙数据,剩下的就是消息发送了,待有时间完成。

──── 0人觉得很赞 ────

使用道具 举报

有两张图需要重新粘贴,裂开了。
我之前也准备弄这个,后来直接弄了个摄像头,实时检测有没有人
这个点子就很棒
牛犇
优秀
您需要登录后才可以回帖 立即登录
高级模式
返回
统计信息
  • 会员数: 28847 个
  • 话题数: 41308 篇