一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

用安信可WiFi+藍(lán)牙模組Ai-WB2-32S-Kit實(shí)現(xiàn)安防檢測(cè)

AIoT行業(yè)洞察 ? 來(lái)源:AIoT行業(yè)洞察 ? 作者:AIoT行業(yè)洞察 ? 2025-06-18 15:30 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

以下作品由安信可社區(qū)用戶

ch999制作

前言:

筆者這次決定使用AI-WB2-32s-Kit+雷達(dá)模塊制+藍(lán)牙信標(biāo)作安防檢測(cè),靈感來(lái)源是想著馬上畢業(yè)要外出租房,擔(dān)心陌生人進(jìn)入房間。

制作這個(gè)項(xiàng)目,目的是實(shí)現(xiàn)當(dāng)有人進(jìn)入房間時(shí)起到提示作用。但如果僅用雷達(dá)檢查,每次自己回家都也會(huì)觸發(fā)報(bào)告,那樣就太煩了,所以決定通過(guò)藍(lán)牙信標(biāo)來(lái)過(guò)濾指定目標(biāo)。

01

材料

●Ai-WB2-32S-Kit

●雷達(dá)模塊(自帶uart串口,通過(guò)串口輸出數(shù)據(jù))

●藍(lán)牙模塊

●服務(wù)器,用來(lái)做中轉(zhuǎn)發(fā)送消息

wKgZPGhSaxmAPHAnAAF5k-tyNrA546.jpg

wKgZO2hSaxqAcsS4AAGt7Enjwrg009.jpg

雷達(dá)部分的代碼

#include
#include
#include
#include
#include
#include "bl_sys.h"
#include
#include
#include
#include
#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 語(yǔ)言標(biāo)準(zhǔn)庫(kù)中的一個(gè)函數(shù),
* 用于從字符串中按照指定的格式讀取數(shù)據(jù),
* 并將數(shù)據(jù)存儲(chǔ)到指定的變量中123。
* 它的原型定義在 頭文件中
*/
//雷達(dá)串口輸出數(shù)據(jù)的格式: 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=%drn", 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);
}

第一階段先通過(guò)這個(gè)小項(xiàng)目,測(cè)試了點(diǎn)燈和串口,以及結(jié)合外設(shè)實(shí)現(xiàn)安防功能。

接下來(lái)要做的:藍(lán)牙信標(biāo)(該部分以完成)

開(kāi)發(fā)板以主機(jī)模式掃描設(shè)備,雷達(dá)發(fā)現(xiàn)有人進(jìn)屋且掃描到指定MAC設(shè)備,表示是自己回家,否則就是陌生人闖入。

藍(lán)牙部分代碼

在bl_interface.c庫(kù)文件里添加如下代碼實(shí)現(xiàn)mac比對(duì)和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);//持續(xù)掃描的時(shí)間
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:%srn",
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 Devicern");
rssi= -127;
}
}
return rssi;
}

再部署完服務(wù)器后,進(jìn)行一下簡(jiǎn)單測(cè)試。

wKgZPGhSaxuALa1lAAEujyB1Fmg711.jpg

wKgZO2hSaxuAFV4uAAA_PjLqw44266.jpg

完成雷達(dá)掃描和藍(lán)牙信標(biāo)后,現(xiàn)在來(lái)完成信息發(fā)送功能,參照安信可社區(qū)這位大佬的做法 :用AI-WB2消息推送到個(gè)人通知https://bbs.ai-thinker.com/forum.php?mod=viewthread&tid=45846&highlight=wb2&_dsign=04722896

wKgZPGhSaxyACVh6AABN2XIaSXk213.jpg

可以看到手機(jī)可以正常接收消息。

接下來(lái)是開(kāi)發(fā)板代碼,notify部分的代碼參考原文鏈接,記得添加必要的network庫(kù)到MAKEFILE以及修改pro_config.mk

notify.h

#ifndef __NOTIFY_H__
#define __NOTIFY_H__
#define WEB_SERVER "192.168.43.218" //這里改成你搭建的gotify服務(wù)器地址
#define WEB_PORT "8000" //默認(rèn)地址是80 我改為了8000,dokcer部署時(shí)選到什么端口這里填什么端口,最好避開(kāi)80,怕運(yùn)營(yíng)商屏蔽
#define WEB_PATH_BASE "/message"
#define QUERY_STRING "?token=AQSv2fQhrE.8_Fq" //token替換為你的通道token,token加到token=Axxxxxx后面
void notify_task(void *pvParameters);
#endif

notify.c

這里的Wi-Fi是從sdk里的Wi-Fi demo修改過(guò)來(lái)的。

#include "notify.h"
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define BOUNDARY "---"
static char REQUEST[512];
typedef struct {
const char *title;
const char *message;
const char *priority;
} Message;
void notify_task(void *pvParameters) {
Message *params = (Message *)pvParameters; // 接收參數(shù)
//
//
//
printf("title=%s rnmessage=%srnpriority=%srn", params->title,
params->message, params->priority);
//
const struct addrinfo hints = {
.ai_family = AF_INET,
.ai_socktype = SOCK_STREAM,
};
struct addrinfo *res;
struct in_addr *addr;
int s, r;
char recv_buf[4096];
while (1) {
int err = getaddrinfo(WEB_SERVER, WEB_PORT, &hints, &res);
if (err != 0 || res == NULL) {
blog_error("DNS lookup failed err=%d res=%p", err, res);
vTaskDelay(1000 / portTICK_PERIOD_MS);
continue;
}
/* Code to print the resolved IP.
Note: inet_ntoa is non-reentrant, look at ipaddr_ntoa_r for "real" code
*/
addr = &((struct sockaddr_in *)res->ai_addr)->sin_addr;
blog_info("DNS lookup succeeded. IP=%s", inet_ntoa(*addr));
s = socket(res->ai_family, res->ai_socktype, 0);
if (s < 0) {
blog_error("... Failed to allocate socket.");
freeaddrinfo(res);
vTaskDelay(1000 / portTICK_PERIOD_MS);
continue;
}
blog_info("... allocated socket");
if (connect(s, res->ai_addr, res->ai_addrlen) != 0) {
blog_error("... socket connect failed errno=%d", errno);
close(s);
freeaddrinfo(res);
vTaskDelay(4000 / portTICK_PERIOD_MS);
continue;
}
blog_info("... connected");
freeaddrinfo(res);
// 構(gòu)造請(qǐng)求體
char body[1024];
snprintf(body, sizeof(body),
"--%srn"
"Content-Disposition: form-data; name="title"rnrn"
"%srn"
"--%srn"
"Content-Disposition: form-data; name="message"rnrn"
"%srn"
"--%srn"
"Content-Disposition: form-data; name="priority"rnrn"
"%srn"
"--%s--rn",
BOUNDARY, params->title, BOUNDARY, params->message, BOUNDARY,
params->priority, BOUNDARY);
snprintf(REQUEST, sizeof(REQUEST),
"POST %s%s HTTP/1.0rn"
"Host: %s:%srn"
"User-Agent: aithinker wb2rn"
"Content-Type: multipart/form-data; boundary=%srn"
"Content-Length: %drn"
"rn"
"%s",
WEB_PATH_BASE, QUERY_STRING, WEB_SERVER, WEB_PORT, BOUNDARY,
strlen(body), body);
if (write(s, REQUEST, strlen(REQUEST)) < 0) {
blog_error("... socket send failed");
close(s);
vTaskDelay(4000 / portTICK_PERIOD_MS);
continue;
}
blog_info("... socket send success");
struct timeval receiving_timeout;
receiving_timeout.tv_sec = 5;
receiving_timeout.tv_usec = 0;
if (setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, &receiving_timeout,
sizeof(receiving_timeout)) < 0) {
blog_error("... failed to set socket receiving timeout");
close(s);
vTaskDelay(4000 / portTICK_PERIOD_MS);
continue;
}
blog_info("... set socket receiving timeout success");
// FIXME fix putchar
extern int bl_putchar(int c);
/* Read HTTP response */
do {
bzero(recv_buf, sizeof(recv_buf));
r = read(s, recv_buf, sizeof(recv_buf) - 1);
for (int i = 0; i < r; i++) {
bl_putchar(recv_buf[i]);
}
} while (r > 0);
blog_info("... done reading from socket. Last read return=%d "
"errno=%drn",
r, errno);
close(s);
for (int countdown = 10; countdown >= 0; countdown--) {
blog_info("%d... ", countdown);
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
blog_info("Starting again!");
}
}
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "bluetooth.h"
#include "ble_interface.h"
#include
#include "notify.h"
#include
#include
#include
#include
#define ROUTER_SSID "Play4T"
#define ROUTER_PWD "qq123456"
typedef struct {
const char *title;
const char *message;
const char *priority;
} Message;
hosal_uart_dev_t ble_uart_dev = {
.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,
},
};
static wifi_conf_t conf = {
.country_code = "CN",
};
//
bool is_Send=false;
uint32_t last_send_time=0;
int rssi;
// 構(gòu)建消息內(nèi)容結(jié)構(gòu)體
static const char title[] = "tt";
static const char message[] = "12345";
static const char priority[] = "0";
static uint8_t target_mac[6] ={0xD1,0x10,0x91,0x29,0x8F,0xF5}; // 目標(biāo)設(shè)備MAC地址,請(qǐng)改為實(shí)際MAC
static Message msg = {title, message, priority};
extern uint8_t axk_HalBleInit();
/**
* @brief wifi_sta_connect
* wifi station mode connect start
* @param ssid
* @param password
*/
static void wifi_sta_connect(char *ssid, char *password) {
wifi_interface_t wifi_interface;
wifi_interface = wifi_mgmr_sta_enable();
wifi_mgmr_sta_connect(wifi_interface, ssid, password, NULL, NULL, 0, 0);
}
// WiFi事件處理
static void event_cb_wifi_event(input_event_t *event, void *private_data) {
static char *ssid;
static char *password;
switch (event->code) {
case CODE_WIFI_ON_INIT_DONE: {
printf("[APP] [EVT] INIT DONE %lldrn", aos_now_ms());
wifi_mgmr_start_background(&conf);
} break;
case CODE_WIFI_ON_MGMR_DONE: {
printf("[APP] [EVT] MGMR DONE %lldrn", aos_now_ms());
//_connect_wifi();
wifi_sta_connect(ROUTER_SSID, ROUTER_PWD);
} break;
case CODE_WIFI_ON_SCAN_DONE: {
printf("[APP] [EVT] SCAN Done %lldrn", aos_now_ms());
// wifi_mgmr_cli_scanlist();
} break;
case CODE_WIFI_ON_DISCONNECT: {
printf("[APP] [EVT] disconnect %lldrn", aos_now_ms());
} break;
case CODE_WIFI_ON_CONNECTING: {
printf("[APP] [EVT] Connecting %lldrn", aos_now_ms());
} break;
case CODE_WIFI_CMD_RECONNECT: {
printf("[APP] [EVT] Reconnect %lldrn", aos_now_ms());
} break;
case CODE_WIFI_ON_CONNECTED: {
printf("[APP] [EVT] connected %lldrn", aos_now_ms());
} break;
case CODE_WIFI_ON_PRE_GOT_IP: {
printf("[APP] [EVT] connected %lldrn", aos_now_ms());
} break;
case CODE_WIFI_ON_GOT_IP: {
printf("[APP] [EVT] GOT IP %lldrn", aos_now_ms());
printf("[SYS] Memory left is %d Bytesrn", xPortGetFreeHeapSize());
} break;
case CODE_WIFI_ON_PROV_SSID: {
printf("[APP] [EVT] [PROV] [SSID] %lld: %srn", aos_now_ms(),
event->value ? (const char *)event->value : "UNKNOWN");
if (ssid) {
vPortFree(ssid);
ssid = NULL;
}
ssid = (char *)event->value;
} break;
case CODE_WIFI_ON_PROV_BSSID: {
printf("[APP] [EVT] [PROV] [BSSID] %lld: %srn", aos_now_ms(),
event->value ? (const char *)event->value : "UNKNOWN");
if (event->value) {
vPortFree((void *)event->value);
}
} break;
case CODE_WIFI_ON_PROV_PASSWD: {
printf("[APP] [EVT] [PROV] [PASSWD] %lld: %srn", aos_now_ms(),
event->value ? (const char *)event->value : "UNKNOWN");
if (password) {
vPortFree(password);
password = NULL;
}
password = (char *)event->value;
} break;
case CODE_WIFI_ON_PROV_CONNECT: {
printf("[APP] [EVT] [PROV] [CONNECT] %lldrn", aos_now_ms());
printf("connecting to %s:%s...rn", ssid, password);
wifi_sta_connect(ssid, password);
} break;
case CODE_WIFI_ON_PROV_DISCONNECT: {
printf("[APP] [EVT] [PROV] [DISCONNECT] %lldrn", aos_now_ms());
} break;
default: {
printf("[APP] [EVT] Unknown code %u, %lldrn", event->code, aos_now_ms());
/*nothing*/
}
}
}
//開(kāi)啟藍(lán)牙掃描必須要聲明bleuart_printf這個(gè)函數(shù),不知道為什么,這個(gè)函數(shù)在ble_interface.c中要用到
//注釋掉ble_interface.c會(huì)報(bào)錯(cuò),實(shí)再?zèng)]看懂,留著吧
void bleuart_printf(char *buf)
{
hosal_uart_send(&ble_uart_dev, buf, strlen(buf));
}
// UART InIt device
static void uart_init(void)
{
hosal_uart_init(&ble_uart_dev);
}
//UART radar
static void radar_detection(void *param)
{
char data[64];
while (1)
{
//接收到數(shù)據(jù)data
hosal_uart_receive(&ble_uart_dev, data, sizeof(data)-1);
/*data: v=-0.6 km/h, str=208
* sscanf 是 C 語(yǔ)言標(biāo)準(zhǔn)庫(kù)中的一個(gè)函數(shù),
* 用于從字符串中按照指定的格式讀取數(shù)據(jù),
* 并將數(shù)據(jù)存儲(chǔ)到指定的變量中123。
* 它的原型定義在 頭文件中
*/
//解析data
float velocity;
int str_value;
if (2 == sscanf(data, "v=%f km/h, str=%d", &velocity, &str_value)) {
//printf("radar data: v=%.1f, str=%drn", velocity, str_value);
}
if(str_value>1000 && rssi==-127){
xTaskCreate(?ify_task, "notify_task", 2048, &msg, 5, NULL);
printf("There are strangers entering the housern");
}
vTaskDelay(200);
}
}
//BLE
static void ble_loop_proc(void *pvParameters)
{
char data[250];
while (1)
{
rssi=ble_master_get_rssi_by_mac(target_mac); // 掃描指定MAC的藍(lán)牙設(shè)備
if(rssi>-80){
bl_gpio_output_set(3, 1);
}
else{
bl_gpio_output_set(3, 0);
}
hosal_uart_receive(&ble_uart_dev, data, sizeof(data));
vTaskDelay(100/portTICK_PERIOD_MS);
}
}
////發(fā)送消息
//static void send_message(void *param){
// while(1){
// if(is_BreakIn){
//printf("is_BreakIn");
// //uint32_t current_time=aos_now_ms();
// //if((current_time-last_send_time)>10){
// xTaskCreate(?ify_task, "notify_task", 1024, &msg, 5, NULL);
// //last_send_time=current_time;
// is_BreakIn=false;
// printf("There are strangers entering the housern");
// //}
//
// }
// }
//
//}
void main()
{
uart_init();
bl_sys_init(); // if use BLE ,must InIt
axk_HalBleInit();
//printf("BLE MASTER InItrn");
tcpip_init(NULL, NULL);
aos_register_event_filter(EV_WIFI, event_cb_wifi_event, NULL);
hal_wifi_start_firmware_task();
aos_post_event(EV_WIFI, CODE_WIFI_ON_INIT_DONE, 0);
bl_gpio_enable_output(3, 0, 0);//GPIO
xTaskCreate(ble_loop_proc, "ble master", 1024, NULL, 15, NULL);
xTaskCreate(radar_detection, "radar", 1024, NULL, 15, NULL);
// xTaskCreate(send_message, "send_message", 1024, NULL, 15, NULL);
}

雷達(dá)掃描到有人時(shí),如果開(kāi)發(fā)板同時(shí)掃描到指定MAC地址的藍(lán)牙,則表示自己回家,否則就發(fā)送消息到服務(wù)器,接下來(lái)只需要把服務(wù)器放公網(wǎng)上或者用內(nèi)網(wǎng)穿透,即可實(shí)現(xiàn)公網(wǎng)通知了,當(dāng)然用其他的消息通知也是一樣的,看個(gè)人喜好。

wKgZO2hSaxyAZzRJAACXNiPulPA532.jpg

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 藍(lán)牙
    +關(guān)注

    關(guān)注

    116

    文章

    6055

    瀏覽量

    173559
  • 檢測(cè)
    +關(guān)注

    關(guān)注

    5

    文章

    4629

    瀏覽量

    92650
  • WIFI
    +關(guān)注

    關(guān)注

    81

    文章

    5386

    瀏覽量

    207867
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    BLE + Mesh ,藍(lán)牙模組從可穿戴到智慧照明全覆蓋場(chǎng)景

    在物聯(lián)網(wǎng)技術(shù)持續(xù)發(fā)展的今天,藍(lán)牙作為一種成熟而高效的近距離無(wú)線通信方式,正被廣泛應(yīng)用于各類智能終端設(shè)備中。科技推出的多款藍(lán)牙
    的頭像 發(fā)表于 05-28 11:16 ?179次閱讀

    Ai-M62-CBS,極小尺寸的Wi-Fi/藍(lán)牙二合一模組

    Ai-M62-CBS是由開(kāi)發(fā)的 Wi-Fi 6+BLE5.3 模組,該模組搭載BL616
    的頭像 發(fā)表于 05-28 11:14 ?174次閱讀
    <b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b><b class='flag-5'>Ai</b>-M62-CBS,極小尺寸的Wi-Fi/<b class='flag-5'>藍(lán)牙</b>二合一<b class='flag-5'>模組</b>

    如何用藍(lán)牙模塊遠(yuǎn)程控制家中的設(shè)備?

    以下作品由社區(qū)用戶 小小鳥(niǎo) 制作 1項(xiàng)目簡(jiǎn)介 本項(xiàng)目通過(guò)PB-03F kit完成了遠(yuǎn)程控制家中的設(shè)備,比如風(fēng)扇、燈光、插座電源等等。配置PC上位機(jī),可以實(shí)時(shí)查看設(shè)備的狀態(tài)以及完成
    的頭像 發(fā)表于 04-22 17:47 ?246次閱讀
    如何用<b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b><b class='flag-5'>藍(lán)牙</b>模塊遠(yuǎn)程控制家中的設(shè)備?

    Ai-WB2-01S做一個(gè)可用網(wǎng)頁(yè)控制的簡(jiǎn)易燈

    以下作品由社區(qū)用戶 KevinLi制作 01簡(jiǎn)介 使用2個(gè)不同功率的Led通過(guò)GPIO的PWM通道+三極管控制亮度 ●供電:5V或3V ●控制:
    的頭像 發(fā)表于 03-26 13:59 ?323次閱讀
    <b class='flag-5'>用</b><b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b><b class='flag-5'>Ai-WB2-01S</b>做一個(gè)可用網(wǎng)頁(yè)控制的簡(jiǎn)易燈

    低價(jià)不貴!WiFi+BLE模組Ai-WB2系列

    Ai-WB2系列模組集成Wi-Fi&BLE于一體,搭載BL602芯片作為核心處理器,支持Wi-Fi 802.11b/g/n協(xié)議和BLE
    的頭像 發(fā)表于 03-06 08:49 ?441次閱讀
    低價(jià)不貴!<b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b><b class='flag-5'>WiFi</b>+BLE<b class='flag-5'>模組</b><b class='flag-5'>Ai-WB2</b>系列

    AI人臉識(shí)別開(kāi)發(fā)板BW21-CBV-Kit驅(qū)動(dòng)墨水屏

    HomeAssistant,實(shí)時(shí)查看Ai攝像頭畫(huà)面? 【教程】小安派BW21-CBV-Kit——讀取 DHT 溫濕度傳感器 以下作品由
    的頭像 發(fā)表于 03-06 08:47 ?402次閱讀
    <b class='flag-5'>用</b><b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b><b class='flag-5'>AI</b>人臉識(shí)別開(kāi)發(fā)板BW21-CBV-<b class='flag-5'>Kit</b>驅(qū)動(dòng)墨水屏

    Ai-M61系列模組實(shí)現(xiàn)藍(lán)牙歌詞播放功能

    以下作品由社區(qū)用戶 sujingliang 制作 Ai-M61 系列模組是由
    的頭像 發(fā)表于 02-26 14:16 ?486次閱讀
    <b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b><b class='flag-5'>Ai</b>-M61系列<b class='flag-5'>模組</b><b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>藍(lán)牙</b>歌詞播放功能

    藍(lán)牙模組PB系列常見(jiàn)問(wèn)題

    科技針對(duì)物聯(lián)網(wǎng)設(shè)計(jì)通用型的藍(lán)牙模組,其功能強(qiáng)大、用途廣泛??梢杂糜?智能燈、智能插座、智能空調(diào) 等其他智能家電。同時(shí)符合 BLE 5.
    的頭像 發(fā)表于 01-16 09:52 ?622次閱讀

    Ai-WB2系列的優(yōu)勢(shì)是?一秒讀懂!

    ) 集成度 (內(nèi)置功能、接口類型等) 功耗與續(xù)航 、 尺寸與外觀 、 成本 等多個(gè)因素。 Ai-WB2系列模組集成Wi-Fi&
    的頭像 發(fā)表于 12-13 18:16 ?752次閱讀

    ,安心!科技亮相2024德國(guó)慕尼黑電子展會(huì)

    展示來(lái)自中國(guó)的前沿科技創(chuàng)新成果。 展會(huì)現(xiàn)場(chǎng) 科技成立于2012年,業(yè)務(wù)包含天線、模組、射頻測(cè)試、云服務(wù)、PCBA等多個(gè)板塊,為客戶提供一站式的解決方案。 此次展品主要包括Wi-F
    的頭像 發(fā)表于 11-21 09:15 ?495次閱讀
    <b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b>,<b class='flag-5'>可</b>安心!<b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b>科技亮相2024德國(guó)慕尼黑電子展會(huì)

    Ai-WB2開(kāi)發(fā)板做智能家居全彩LED小夜燈

    業(yè)余菜狗制作 大家是不是經(jīng)??吹礁鞣N彩色的小燈 bingbing的五顏六色很吸引人 今天WB2開(kāi)發(fā)板做了一個(gè)能加入HA的全彩LED小夜燈 來(lái)看看主要的教程 連接WiFi 先對(duì)Ai-Thin
    的頭像 發(fā)表于 11-13 14:03 ?859次閱讀
    <b class='flag-5'>用</b><b class='flag-5'>Ai-WB2</b>開(kāi)發(fā)板做智能家居全彩LED小夜燈

    外設(shè)移植 Ai-WB2+FPM383C指紋

    以下作品由社區(qū)用戶 WT_0213 制作 關(guān)于 FPM383C 指紋模塊 在之前的帖子介紹的已經(jīng)比較詳細(xì)了可以看下這個(gè)帖子。 【外設(shè)移植】FPM383C 指紋模塊 +Ai-M61-32S
    的頭像 發(fā)表于 10-29 14:54 ?642次閱讀
    外設(shè)移植 <b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b><b class='flag-5'>Ai-WB2</b>+FPM383C指紋

    外設(shè)移植 Ai-WB2-32S開(kāi)發(fā)板+TM1637 NTP時(shí)鐘

    以下作品由社區(qū)用戶 King6688制作 產(chǎn)品說(shuō)明 Ai-WB2-32S 是由深圳市
    的頭像 發(fā)表于 09-24 14:29 ?675次閱讀
    外設(shè)移植 <b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b><b class='flag-5'>Ai-WB2-32S</b>開(kāi)發(fā)板+TM1637 NTP時(shí)鐘

    超??!5款迷你封裝WiFi+BLE模塊

    Ai-WB2-01N/01F/M1/M1-I/05W,這5款模組推出的Ai-WB2系列中
    的頭像 發(fā)表于 07-30 10:23 ?788次閱讀
    超??!<b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b>5款迷你封裝<b class='flag-5'>WiFi</b>+BLE模塊

    Ai-WB2系列模組/開(kāi)發(fā)板連接AWS亞馬遜云方法

    一、軟硬件的準(zhǔn)備二、亞馬遜云物模型建立三、連接亞馬遜云demo獲取以及配置四、硬件接線五、燒錄軟件的使用六、連接亞馬遜云七、聯(lián)系我們前言Ai-WB2系列模組
    的頭像 發(fā)表于 07-05 08:23 ?813次閱讀
    <b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b><b class='flag-5'>Ai-WB2</b>系列<b class='flag-5'>模組</b>/開(kāi)發(fā)板連接AWS亞馬遜云方法