发帖
5 0 0

【BW21-CBV-Kit 开发板测评】蓝牙温湿度计 DIY

无垠的广袤
金牌会员

14

主题

16

回帖

2326

积分

金牌会员

积分
2326
QQ
小安派·BW21-CBV-KIt 46 5 昨天 13:02

【BW21-CBV-Kit 开发板测评】蓝牙温湿度计 DIY

本文介绍了安信可 BW21-CBV-Kit 开发板实现 蓝牙温湿度计 的 DIY 制作流程。

简介

介绍了 DHT11 传感器(模块)以及该传感器与开发板的硬件连接。

DHT11

DHT11 温湿度传感器

DHT11_1.jpg

图中引脚标识分别表示

标识符号 指代
V Vcc
D Data
G GND

外部电路原理图

DHT11_SCH.jpg

这里采用 PCB 设计项目:DHT11 模块

DHT11_module.jpg

硬件连接

DHT11_Connect.jpg

这里将 DHT11 的 Data 引脚与开发板 Arduino Pin - 8 相连。

BLE_UART_DHT11.jpg

工程方案采用官方例程 DHT_over_BLEUart

Arduino_BLE_DHT11_UART.jpg

默认串口发送数据的时间间隔为 5 秒,可调整更新时间。

工程测试

这里介绍 Demo 测试流程及效果展示。

代码

#include "BLEDevice.h"
#include "DHT.h"
​
#define UART_SERVICE_UUID      "6E400001-B5A3-F393-E0A9-E50E24DCCA9E"
#define CHARACTERISTIC_UUID_RX "6E400002-B5A3-F393-E0A9-E50E24DCCA9E"
#define CHARACTERISTIC_UUID_TX "6E400003-B5A3-F393-E0A9-E50E24DCCA9E"
​
#define STRING_BUF_SIZE 100
​
// The digital pin we're connected to.
#define DHTPIN 8
​
// Uncomment whatever type you're using!
#define DHTTYPE DHT11    // DHT 11
// #define DHTTYPE DHT22   // DHT 22 (AM2302), AM2321
// #define DHTTYPE DHT21   // DHT 21 (AM2301)
​
DHT dht(DHTPIN, DHTTYPE);
​
BLEService UartService(UART_SERVICE_UUID);
BLECharacteristic Rx(CHARACTERISTIC_UUID_RX);
BLECharacteristic Tx(CHARACTERISTIC_UUID_TX);
BLEAdvertData advdata;
BLEAdvertData scndata;
bool notify = false;
​
void writeCB(BLECharacteristic* chr, uint8_t connID)
{
    printf("Characteristic %s write by connection %d :\n", chr->getUUID().str(), connID);
    if (chr->getDataLen() > 0) {
        Serial.print("Received string: ");
        Serial.print(chr->readString());
        Serial.println();
    }
}
​
void notifCB(BLECharacteristic* chr, uint8_t connID, uint16_t cccd)
{
    if (cccd & GATT_CLIENT_CHAR_CONFIG_NOTIFY) {
        printf("Notifications enabled on Characteristic %s for connection %d \n", chr->getUUID().str(), connID);
        notify = true;
    } else {
        printf("Notifications disabled on Characteristic %s for connection %d \n", chr->getUUID().str(), connID);
        notify = false;
    }
}
​
void setup()
{
    Serial.begin(115200);
​
    advdata.addFlags();
    advdata.addCompleteName("AMEBA_BLE_DEV");
    scndata.addCompleteServices(BLEUUID(UART_SERVICE_UUID));
​
    Rx.setWriteProperty(true);
    Rx.setWritePermissions(GATT_PERM_WRITE);
    Rx.setWriteCallback(writeCB);
    Rx.setBufferLen(STRING_BUF_SIZE);
    Tx.setReadProperty(true);
    Tx.setReadPermissions(GATT_PERM_READ);
    Tx.setNotifyProperty(true);
    Tx.setCCCDCallback(notifCB);
    Tx.setBufferLen(STRING_BUF_SIZE);
​
    UartService.addCharacteristic(Rx);
    UartService.addCharacteristic(Tx);
​
    BLE.init();
    BLE.configAdvert()->setAdvData(advdata);
    BLE.configAdvert()->setScanRspData(scndata);
    BLE.configServer(1);
    BLE.addService(UartService);
​
    BLE.beginPeripheral();
    dht.begin();
}
​
void loop()
{
    float h = dht.readHumidity();
    float t = dht.readTemperature();
​
    if (isnan(h) || isnan(t)) {
        Serial.println("Failed to read from DHT sensor!");
        return;
    }
​
    String msg = ("Humidity: " + String((int)h) + "%\t" + "Temperature: " + String((int)t) + "°C\n");
​
    Tx.writeString(msg);
    if (BLE.connected(0) && notify) {
        Tx.notify(0);
    }
    delay(2000);
}

细节请参考该代码的官方指导:BLE – DHT over BLE UART – Realtek IoT/Wi-Fi MCU Solutions

上传

1.按住 BOOT(下载) 按钮的同时按一下 EN(复位)按钮,进入下载模式;

2.选择目标串口对应的端口号,点击 Download 按钮,待上传成功提示 Success,完成固件上传;

3.再次短按 EN 键复位,执行程序。

数据读取

1.手机端安装蓝牙调试应用,Realtek 官方推荐 Adafruit Bluefruit LE Connect

2.进入应用,扫描周围蓝牙设备,选择目标 AMEBA_BLE_DEV 设备 Connect,选择并进入 UART 选项;

BLE_connect.jpg

3.此时接收到设备通过蓝牙串口发送的温湿度信息。

BLE_APK_UART.jpg

效果

BLE_APK_DHT11.jpg

BLE_DHT11_UART.gif

注意到 UART 右上方的 MQTT 标识,点击进入并配置相关参数,即可实现远程数据监测。

MQTT 连接

介绍了蓝牙传输温湿度数据通过 MQTT 协议上传至 EMQX 平台的流程,以便实现远程数据监测及管理。

环境搭建

1.安装 Docker 容器

2.本地下载并部署 EMQX 平台

emqx_official_net.jpg

配置 EMQX

(1)浏览器打开网址 http://localhost:18083/ ,初始登录账户名 admin 密码 public ;

(2)依次打开 访问控制 - 客户端认证 - 创建 - Password-Based - 内置数据库 - (默认配置)- 创建 ;

(3)用户管理 - 新建用户 - 自定义用户名和密码(建议 admin).

连接 EMQX 与 HA (1)命令行或 PowerShell 输入 ipconfig 获取本地计算机 IPv4 地址,如 42.34.25.153

(2)配置 Home Assistant ,依次点击设置 - 设备与服务 - 添加集成 - 搜索 MQTT - 填写代理信息。

代理栏输入计算机 IP 地址,端口 1883,用户名和密码为 EMQX 中创建的用户信息。

(3)点击 提交 后显示 成功创建 MQTT ,此时 集成 选项下出现 MQTT 条目,EMQX 网页 集群 的 总连接数 和 在线连接数 由 0 变为 1,表明 MQTT 设备已连接。

3.部署 HomeAssistant 智能家居平台;

(1)下载部署文件 github 并解压得到 docker-compose.yml 保存至上述 homeassistant 文件夹;

(2)Windows 打开 命令提示符Windows PowerShell,输入如下代码实现自动下载镜像

cd C:\homeassistant
docker-compose.yml
docker-compose up

即可在 Docker 容器中创建 Home Assistant 镜像;

(3)浏览器输入网址 **http://localhost:8123/ 进入Home Assistant 主界面,创建智能家居账号。

4.安装部署完成后,可运行 EMQX 和 HA 平台,点击 Port 链接,进入后台并进行相关配置。

Docker_emqx_HA.jpg

客户端配置

打开 Bluefruit BLE Connect 应用,扫描并连接目标蓝牙设备,进入 UART - MQTT,设置参数如下

BLE_APK_MQTT_Config.jpg

其中 Address 填写本地计算机 IP 地址,Publish 填写自定义监听主题,Usema 和 Pass 分别填写 EMQX 平台创建的用户名和密码,点击上方的 Connect 即可。

效果

这里使用 MQTTX 软件测试传输。

新建连接,配置名称和 ip 地址,新建主题(与手机应用设置的主题一致),启动。

MQTTX_receive.jpg

MQTTX 软件测试数据传输效果

MQTT_Temp_Humi.gif

总结

本文介绍了 Ai-Thinker BW21-CBV-Kit 开发套件结合 DHT11 温湿度传感器,实现蓝牙温湿度计的 DIY 项目设计流程,包括工程代码编译、上传、蓝牙设备调试,并在此基础上拓展实现基于 MQTT 协议的远程数据接收,还可在此基础上实现 HomeAssistant 平台的数据监控,为相关领域在传感器的智能化应用方面提供了参考。

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

使用道具 举报

棒~不打算用下它的AI识别功能吗
昨天 14:11
爱笑 发表于 2025-3-11 14:03
棒~不打算用下它的AI识别功能吗

嘿嘿,后面就更新摄像头的应用;这篇先介绍HA平台的部署,之后再实现摄像头画面的远程投影,智能手势识别也有,再试试数字和人脸识别……可以搞的项目太多啦
无垠的广袤 发表于 2025-3-11 14:11
嘿嘿,后面就更新摄像头的应用;这篇先介绍HA平台的部署,之后再实现摄像头画面的远程投影,智能手势识别 ...

nice~期待
厉害
昨天 19:46
优秀
您需要登录后才可以回帖 立即登录
高级模式
返回
统计信息
  • 会员数: 28061 个
  • 话题数: 39612 篇