用BW21
以下作品由安信可社区用户无垠的广袤制作
本文介绍了安信可 BW21-CBV-Kit 开发板实现蓝牙温湿度计的DIY制作流程。
01简介
介绍了 DHT11 传感器(模块)以及该传感器与开发板的硬件连接。
DHT11
DHT11 温湿度传感器
图中引脚标识分别表示
外部电路原理图
这里采用 PCB 设计项目:DHT11 模块
02硬件连接
这里将 DHT11 的 Data 引脚与开发板 Arduino Pin - 8 相连。
工程方案采用官方例程 DHT_over_BLEUart
默认串口发送数据的时间间隔为 5 秒,可调整更新时间。
03工程测试
这里介绍 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 标识,点击进入并配置相关参数,即可实现远程数据监测。
04MQTT连接
介绍了蓝牙传输温湿度数据通过 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 链接,进入后台并进行相关配置。
05客户端配置
打开 Bluefruit BLE Connect 应用,扫描并连接目标蓝牙设备,进入 UART - MQTT,设置参数如下
其中 Address 填写本地计算机 IP 地址,Publish 填写自定义监听主题,Usema 和 Pass 分别填写 EMQX 平台创建的用户名和密码,点击上方的 Connect 即可。
效果
这里使用 MQTTX 软件测试传输。
新建连接,配置名称和 ip 地址,新建主题(与手机应用设置的主题一致),启动。
MQTTX 软件测试数据传输效果
06总结
本文介绍了 Ai-Thinker BW21-CBV-Kit 开发套件结合 DHT11 温湿度传感器,实现蓝牙温湿度计的 DIY 项目设计流程,包括工程代码编译、上传、蓝牙设备调试,并在此基础上拓展实现基于 MQTT 协议的远程数据接收,还可在此基础上实现 HomeAssistant 平台的数据监控,为相关领域在传感器的智能化应用方面提供了参考。