用BW21-CBV-Kit做一个蓝牙温湿度计

描述

以下作品由安信可社区用户

无垠的广袤制作

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

01简介

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

DHT11

DHT11 温湿度传感器

温湿度计

图中引脚标识分别表示

温湿度计

外部电路原理图

温湿度计

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

https://oshwhub.com/jinleili/dht11-module

温湿度计

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) + "°Cn");
Tx.writeString(msg);
if (BLE.connected(0) && notify) {
Tx.notify(0);
}
delay(2000);
}

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

https://www.amebaiot.com/en/amebapro2-arduino-ble-dht/

上传

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 平台的数据监控,为相关领域在传感器的智能化应用方面提供了参考。

审核编辑 黄宇

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分