【安信可BW16-Kit】+MQTT_Basic

[复制链接]
查看275 | 回复4 | 2024-4-6 22:28:13 | 显示全部楼层 |阅读模式

安信可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][size=1em]











百度云

d2cad3ebb5f73e63bc6d3666c6dc3a17


回复

使用道具 举报

1084504793 | 2024-4-7 09:05:10 | 显示全部楼层
回复

使用道具 举报

干簧管 | 2024-4-7 10:37:15 | 显示全部楼层
回复

使用道具 举报

lovzx | 2024-4-7 14:33:36 | 显示全部楼层
学习
看到这条评论的人都发财了
回复

使用道具 举报

7788 | 2024-4-15 14:44:24 | 显示全部楼层
除了wifi 和8266 区别大吗
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则