安信可BW16-Kit是一款针对BW16模组设计的核心开发板,其特性主要体现在硬件配置和网络通讯方面。 BW16模组基于RTL8720DN开发,支持双频(2.4GHz或5GHz)WLAN和低功耗蓝牙5.0,这使得BW16-Kit开发板能够同时处理无线局域网和蓝牙通讯,为物联网设备提供了强大的连接能力。此外,BW16还集成了高性能和低功耗的MCU(微控制器),以及WLAN、MAC、蓝牙基带和RF基带,为开发者提供了丰富的硬件资源。 在软件方面,BW16-Kit开发板集成了内部存储器,支持简单的应用程序开发,可实现完整的Wi-Fi和BLE 5.0协议功能。这使得开发者能够轻松地为物联网设备添加网络通讯功能,实现设备之间的数据交换和远程控制。 平台:Arduino 软件:MQTT-Explorer-Setup-0.4.0-beta1
软件下载地址: https://mqtt-explorer.com/
代码: [url=]复制[/url]
- // 引入WiFi库和PubSubClient库
- #include <WiFi.h>
- #include <PubSubClient.h>
- // 定义Wi-Fi网络的SSID和密码
- char ssid[] = "mldesk"; // 你的网络SSID(名称)
- char pass[] = "12345671"; // 你的网络密码
- // 定义MQTT服务器的地址和客户端ID,以及发布和订阅的主题
- char mqttServer[] = "test.mosquitto.org";
- char clientId[] = "amebaClient";
- char publishTopic[] = "outTopic";
- char subscribeTopic[] = "inTopic";
- // 创建WiFi客户端对象和PubSubClient对象
- WiFiClient wifiClient;
- PubSubClient client(wifiClient);
- // 回调函数,当收到MQTT消息时触发
- void callback(char* topic, byte* payload, unsigned int length) {
- // 定义LED控制消息的字符串
- char payload_r_on[]="LED_R_ON";
- char payload_g_on[]="LED_G_ON";
- char payload_b_on[]="LED_B_ON";
- char payload_all_off[]="LED_OFF";
- // 打印接收到的消息主题和内容
- Serial.print("Message arrived [");
- Serial.print(topic);
- Serial.print("] ");
- for (unsigned int i = 0; i < length; i++) {
- Serial.print((char)(payload));
- }
- Serial.println();
- // 打印接收到的消息长度
- Serial.print("payload len:");
- Serial.println(length);
- // 检查接收到的消息主题是否为我们订阅的主题
- if(strcmp(topic,subscribeTopic)==0) {
- Serial.println("Receive subscribe.");
- // 检查接收到的消息内容,并根据内容控制LED的亮灭
- if(memcmp((char *)payload,payload_r_on,strlen(payload_r_on))==0) {
- Serial.println("Light the Led Red");
- digitalWrite(LED_R, HIGH); // 点亮红色LED
- digitalWrite(LED_G, LOW); // 熄灭绿色LED
- digitalWrite(LED_B, LOW); // 熄灭蓝色LED
- client.publish(publishTopic,payload_r_on); // 发布消息到MQTT服务器,表示红色LED已点亮
- }
- if(memcmp((char *)payload,payload_g_on,strlen(payload_g_on))==0) {
- Serial.println("Light the Led Green");
- digitalWrite(LED_R, LOW); // 熄灭红色LED
- digitalWrite(LED_G, HIGH); // 点亮绿色LED
- digitalWrite(LED_B, LOW); // 熄灭蓝色LED
- client.publish(publishTopic,payload_g_on); // 发布消息到MQTT服务器,表示绿色LED已点亮
- }
- if(memcmp((char *)payload,payload_b_on,strlen(payload_b_on))==0) {
- Serial.println("Light the Led Blue");
- digitalWrite(LED_R, LOW); // 熄灭红色LED
- digitalWrite(LED_G, LOW); // 熄灭绿色LED
- digitalWrite(LED_B, HIGH); // 点亮蓝色LED
- client.publish(publishTopic,payload_b_on); // 发布消息到MQTT服务器,表示蓝色LED已点亮
- }
- }
- }
- // 定义一个函数用于MQTT客户端重连
- void reconnect() {
- // 循环直到我们重新连接
- while (!(client.connected())) {
- Serial.print("\r\n尝试MQTT连接...");
- // 尝试连接
- if (client.connect(clientId)) {
- Serial.println("连接成功");
- // 连接成功后,发布一个通知消息并重新订阅主题
- // client.publish(publishTopic, publishPayload);
- client.subscribe(subscribeTopic);
- } else {
- Serial.println("连接失败, rc=");
- Serial.print(client.state());
- Serial.println(" 5秒后重试");
- // 等待5秒后再重试
- delay(5000);
- }
- }
- }
- // setup() 函数用于初始化设置
- void setup() {
- // 初始化三种颜色LED的GPIO引脚为输出
- pinMode(LED_R, OUTPUT);
- pinMode(LED_G, OUTPUT);
- pinMode(LED_B, OUTPUT);
- // 初始状态下,所有LED关闭
- digitalWrite(LED_R, LOW);
- digitalWrite(LED_G, LOW);
- digitalWrite(LED_B, LOW);
- // 初始化串口通信,并等待串口打开
- Serial.begin(115200);
- // 等待串口连接
- while (!Serial) {
- ;
- }
- Serial.println("串口初始化成功");
- // 尝试连接到Wi-Fi网络
- while (status != WL_CONNECTED) {
- Serial.print("\r\n尝试连接到SSID: ");
- Serial.println(ssid);
- // 连接到WPA/WPA2网络。如果使用开放或WEP网络,请修改此行代码
- status = WiFi.begin(ssid, pass);
- // 等待10秒以进行连接
- delay(10000);
- }
- Serial.println("Wi-Fi连接成功");
- // 设置MQTT服务器地址和端口号
- client.setServer(mqttServer, 1883);
- // 设置MQTT回调函数
- client.setCallback(callback);
- // 允许硬件自我调整
- delay(1500);
- // 尝试连接MQTT服务器
- reconnect();
- }
- // loop() 函数用于处理循环中的任务
- void loop() {
- // 检查客户端是否连接
- if (!client.connected()) {
- reconnect();
- }
- client.loop();
- // 这里可以添加其他任务,比如周期性发布消息等
- }
- void loop() {
- if (!(client.connected())) {
- reconnect();
- }
- client.loop();
- }
使用MQTT:
串口输出结果:
注意: - LED_R, LED_G, LED_B 需要在代码顶部定义,它们应该是连接到相应LED的GPIO引脚号。
- setup() 函数在Arduino环境中自动在启动时调用一次,用于初始化硬件和设置。
- loop() 函数是Arduino程序的主体,它在程序运行时不断循环执行。
- reconnect() 函数用于在MQTT连接断开时尝试重新连接。
- 代码中使用了 delay() 函数来等待一段时间,但在实际的产品开发中,通常建议使用更高效的定时或中断方式,因为 delay() 会阻塞整个程序运行。
视频:
[size=1em][size=1em]
[size=1em][size=1em]
[size=0.75em]00:02 [size=0.75em]/ [size=0.75em]00:33
[size=1em][size=1em][size=1em]
[size=1em][size=1em][size=1em]
[size=0.75em]
[size=1em][size=1em][size=0.75em]×1
[size=1em][size=1em][size=1em][size=1em]
百度云
d2cad3ebb5f73e63bc6d3666c6dc3a17
|