这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 玩转“DFRobot盖革计数器模块”+【安信可BW16-Kit】MQTTBasi

共2条 1/1 1 跳转至

玩转“DFRobot盖革计数器模块”+【安信可BW16-Kit】MQTTBasic

工程师
2024-04-06 22:40:33   被打赏 40 分(兑奖)     打赏

安信可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/

1712414058859.jpg

 


代码:

// 引入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[i]));  
    }  
    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:

image.png

 


 

串口输出结果:

image.png

 

示例树状图:

image.png

注意:

  1. LED_R, LED_G, LED_B 需要在代码顶部定义,它们应该是连接到相应LED的GPIO引脚号。

  2. setup() 函数在Arduino环境中自动在启动时调用一次,用于初始化硬件和设置。

  3. loop() 函数是Arduino程序的主体,它在程序运行时不断循环执行。

  4. reconnect() 函数用于在MQTT连接断开时尝试重新连接。

  5. 代码中使用了 delay() 函数来等待一段时间,但在实际的产品开发中,通常建议使用更高效的定时或中断方式,因为 delay() 会阻塞整个程序运行。


安信可BW16-Kit开发板是一款功能强大的核心开发板,专为BW16模组设计,其特性在硬件配置和网络通讯方面尤为突出。

首先,BW16模组基于RTL8720DN芯片开发,这为其带来了显著的技术优势。RTL8720DN支持双频(2.4GHz或5GHz)WLAN和低功耗蓝牙5.0,使得BW16-Kit开发板能够同时处理无线局域网和蓝牙通讯。这一特性为物联网设备提供了强大的连接能力,使其能够在多种网络环境下稳定、高效地运行。

在硬件配置方面,BW16模组集成了高性能和低功耗的MCU(微控制器),为开发者提供了丰富的硬件资源。此外,它还集成了WLAN、MAC、蓝牙基带和RF基带等关键部件,使得开发板能够支持复杂的网络通讯和数据处理任务。

在软件方面,BW16-Kit开发板同样表现出色。它集成了内部存储器,支持简单的应用程序开发,可实现完整的Wi-Fi和BLE 5.0协议功能。这意味着开发者可以轻松地利用开发板为物联网设备添加网络通讯功能,实现设备之间的数据交换和远程控制。同时,开发板还支持多种编程语言和开发工具,使得开发者可以根据自己的需求和习惯进行灵活的开发。











工程师
2024-04-10 00:20:56     打赏
2楼

学习了。谢谢分享。


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]