考虑了种种因素,由EMQX开发的MQTTX成为中小学物联网教育的较佳选择,其功能和特点包括:具有图形化界面,对初学者友好;支持中文界面显示,对中国用户友好;本地部署,完全免费。
以下是MQTTX的下载地址,本教程以Windows客户端为例,即MQTTX在Windows系统上运行。
五、Arduino UNO R4 WIFI + MQTTX
1.方案设计
有了前面的介绍,我们已经了解了物联网、UNO R4和MQTTX是什么。在本教程中,由UNO R4和MQTTX组成的物联网系统将完成两个基本功能——Uno R4向MQTTX发送消息、MQTTX向UNO R4发送消息,见下图。
物联网系统的两个基本功能
在MQTT协议的支持下,UNO R4和MQTTX形成了单工传输。当UNO R4向MQTTX发送消息时,MQTTX要订阅UNO R4指定的主题;当MQTTX向UNO R4发送消息时,UNO R4要订阅MQTTX指定的主题。
2.方案实现
(1)打开MQTTX,用户名和密码均输入test,点击“连接”。
(2)点击“添加订阅”,命名为publish。
(3)下载压缩“UNOR4_MQTTX.zip”并解压缩。
(4)打开“arduino_secrets.h”,修改WIFI名称和密码。
//arduino_secrets.h header file
#define SECRET_SSID "WIFI_NAME"
#define SECRET_PASS "WIFI_PSWD"
(5)运行“recFromMQTTX.ino”,此时MQTTX客户端将收到Hello MQTTX的消息。
#include "WiFiS3.h"
#include <ArduinoMqttClient.h>
#include <ArduinoJson.h>
WiFiClient wifiClient;
MqttClient mqttClient(wifiClient);
// 设置WIFI
char ssid[] = "VICTUS";
char pass[] = "22228888";
// 设置MQTT(EMQX)
char mqtt_user[] = "test";
char mqtt_pass[] = "test";
const char broker[] = "broker.emqx.io";
int port = 1883;
// 指定订阅主题(Arduino为信息接收方)
const char subscribe_topic[] = "subscribe";
void setup() {
Serial.begin(9600);
while (!Serial) {
;
}
// 连接网络
Serial.print("Attempting to connect to WPA SSID: ");
Serial.println(ssid);
while (WiFi.begin(ssid, pass) != WL_CONNECTED) {
Serial.print(".");
delay(5000);
}
Serial.println("You're connected to the network");
Serial.println();
// 连接MQTT
mqttClient.setUsernamePassword(mqtt_user, mqtt_pass);
Serial.print("Attempting to connect to the MQTT broker: ");
if (!mqttClient.connect(broker, port)) {
Serial.print("MQTT connection failed! Error code = ");
Serial.println(mqttClient.connectError());
while (1)
;
}
Serial.println("You're connected to the MQTT broker!");
// 订阅主题
mqttClient.onMessage(onMqttMessage);
mqttClient.subscribe(subscribe_topic);
}
void loop() {
mqttClient.poll(); // 定期检查新消息
}
void onMqttMessage(int messageSize) {
// 读取消息内容
String message;
for (int i = 0; i < messageSize; i++) {
message += (char)mqttClient.read();
}
// 解析 JSON 消息
StaticJsonDocument<512> doc;
DeserializationError error = deserializeJson(doc, message);
// 检查解析是否成功
if (error) {
Serial.print("JSON parse failed: ");
Serial.println(error.c_str());
return;
}
// 打印 JSON 消息的内容
Serial.println("Received JSON message:");
serializeJsonPretty(doc, Serial);
}
(6)运行“sendToMQTTX.ino”,之后在MQTTX中指定subscribe主题,点击“发送”按钮,此时Arduino IDE的“串口监视器”将收到Hello Arduino的消息。
#include "WiFiS3.h"
#include <ArduinoMqttClient.h>
#include <ArduinoJson.h>
WiFiClient wifiClient;
MqttClient mqttClient(wifiClient);
// 设置WIFI
char ssid[] = "VICTUS";
char pass[] = "22228888";
// 设置MQTT(EMQX)
char mqtt_user[] = "test";
char mqtt_pass[] = "test";
const char broker[] = "broker.emqx.io";
int port = 1883;
// 指定发送主题(Arduino为信息发送方)
const char publish_topic[] = "publish";
void setup() {
// 打开串口
Serial.begin(9600);
while (!Serial) {
;
}
// 连接网络
Serial.print("Attempting to connect to WPA SSID: ");
Serial.println(ssid);
while (WiFi.begin(ssid, pass) != WL_CONNECTED) {
Serial.print(".");
delay(5000);
}
Serial.println("You're connected to the network");
Serial.println();
// 连接MQTT
mqttClient.setUsernamePassword(mqtt_user, mqtt_pass);
Serial.print("Attempting to connect to the MQTT broker: ");
if (!mqttClient.connect(broker, port)) {
Serial.print("MQTT connection failed! Error code = ");
Serial.println(mqttClient.connectError());
while (1)
;
}
Serial.println("You're connected to the MQTT broker!");
}
void loop() {
mqttClient.poll();
publishMessage();
}
void publishMessage() {
// 创建一个 JSON 对象
StaticJsonDocument<200> doc;
doc["msg"] = "Hello MQTTX";
## 最后
**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**
**深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。**
**因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
![img](https://img-blog.csdnimg.cn/img_convert/22c028ad2235058d7d2e50bbd68d7906.png)
![img](https://img-blog.csdnimg.cn/img_convert/ae8764a47254cdfb5fe990eb756474d8.jpeg)
![img](https://img-blog.csdnimg.cn/img_convert/9f4166bbae8fb9dc3d26b37d8e846bf3.png)
![img](https://img-blog.csdnimg.cn/img_convert/a85e16b72d20f56a4ae6b3f3fdfeeb49.png)
![img](https://img-blog.csdnimg.cn/img_convert/bf8301521f4cb67e167ff36f05895519.png)
![img](https://img-blog.csdnimg.cn/img_convert/e588b45be619385eeea9a7a2c2758619.png)
![](https://img-blog.csdnimg.cn/img_convert/811de345daaa525689c4b4eb363f4f9a.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!**
[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618654289)
**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**!!
合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!**
[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618654289)
**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**!!