【BW21-CBV-Kit 开发板测评】蓝牙温湿度计 DIY
本文介绍了安信可 BW21-CBV-Kit 开发板实现 蓝牙温湿度计 的 DIY 制作流程。
简介
介绍了 DHT11 传感器(模块)以及该传感器与开发板的硬件连接。
DHT11
DHT11 温湿度传感器


图中引脚标识分别表示
标识符号 |
指代 |
V |
Vcc |
D |
Data |
G |
GND |
外部电路原理图


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


硬件连接


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


工程方案采用官方例程 DHT_over_BLEUart


默认串口发送数据的时间间隔为 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 选项;


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


效果




注意到 UART 右上方的 MQTT 标识,点击进入并配置相关参数,即可实现远程数据监测。
MQTT 连接
介绍了蓝牙传输温湿度数据通过 MQTT 协议上传至 EMQX 平台的流程,以便实现远程数据监测及管理。
环境搭建
1.安装 Docker 容器
2.本地下载并部署 EMQX 平台


配置 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 链接,进入后台并进行相关配置。


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


其中 Address 填写本地计算机 IP 地址,Publish 填写自定义监听主题,Usema 和 Pass 分别填写 EMQX 平台创建的用户名和密码,点击上方的 Connect 即可。
效果
这里使用 MQTTX 软件测试传输。
新建连接,配置名称和 ip 地址,新建主题(与手机应用设置的主题一致),启动。


MQTTX 软件测试数据传输效果


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