【安信可BW16-Kit】+MQTT_Basic
<p>安信可BW16-Kit是一款针对BW16模组设计的核心开发板,其特性主要体现在硬件配置和网络通讯方面。</p><p>BW16模组基于RTL8720DN开发,支持双频(2.4GHz或5GHz)WLAN和低功耗蓝牙5.0,这使得BW16-Kit开发板能够同时处理无线局域网和蓝牙通讯,为物联网设备提供了强大的连接能力。此外,BW16还集成了高性能和低功耗的MCU(微控制器),以及WLAN、MAC、蓝牙基带和RF基带,为开发者提供了丰富的硬件资源。</p>
<p>在软件方面,BW16-Kit开发板集成了内部存储器,支持简单的应用程序开发,可实现完整的Wi-Fi和BLE 5.0协议功能。这使得开发者能够轻松地为物联网设备添加网络通讯功能,实现设备之间的数据交换和远程控制。</p>
<p>平台:Arduino</p>
<p>软件:MQTT-Explorer-Setup-0.4.0-beta1</p>
<p> </p>
<p>软件下载地址:</p>
<p><a href="https://mqtt-explorer.com" target="_blank">https://mqtt-explorer.com</a>/</p>
<p> </p>
<p>代码:</p>
<pre>
<code>// 引入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();
}
</code></pre>
<p>使用MQTT:</p>
<p> </p>
<p> </p>
<p>串口输出结果:</p>
<p> </p>
<p>注意:</p>
<ol>
<li>LED_R, LED_G, LED_B 需要在代码顶部定义,它们应该是连接到相应LED的GPIO引脚号。</li>
<li>setup() 函数在Arduino环境中自动在启动时调用一次,用于初始化硬件和设置。</li>
<li>loop() 函数是Arduino程序的主体,它在程序运行时不断循环执行。</li>
<li>reconnect() 函数用于在MQTT连接断开时尝试重新连接。</li>
<li>代码中使用了 delay() 函数来等待一段时间,但在实际的产品开发中,通常建议使用更高效的定时或中断方式,因为 delay() 会阻塞整个程序运行。</li>
</ol>
<p>视频:</p>
<p>87046194f91fee8c15a490c4a0c21317<br />
</p>
<p>文章很好,赞一个!这模块据说还蛮便宜!</p>
damiaa 发表于 2024-4-7 09:21
文章很好,赞一个!这模块据说还蛮便宜!
<p>这个是还可以哟</p>
页:
[1]