Wio Terminal MQTT 连接
本文将演示如何在 Wio Terminal 上通过 WiFi 与 MQTT 服务器建立连接(以及 MQTTs 服务器)。Wio Terminal 配备的无线网卡是 Realtek RTL8720,在开始本次学习之前,请确保你已经阅读 Wio Terminal 网卡固件更新,并完成固件更新和 Arduino 依赖库的安装。
安装依赖
本示例用到了一个 Arduino MQTT 库 PubSubClient,需要自行安装。
1、在 PubSubClient 的 GitHub 仓库 下载 zip 包。
2、然后将 PubSubClient 库安装到 Arduino IDE 中。具体操作:点击 项目 > 加载库 > 添加 .ZIP 库...,然后选择刚刚下载的 pubsubclient-2.8.zip 文件。
另外,我们还使用了一个免费的 MQTT 服务器 Mosquitto。如果你想在本地网络进行测试,可以执行下面命令安装 Mosquitto 服务器。
sudo apt install mosquitto
连接 MQTT 服务器
下面示例演示使用 Wio Terminal 与 MQTT 服务器建立连接,这里使用的 MQTT 服务器是 Mosquitto 官方提供用于测试的。有了 MQTT 通信能力之后,你可以使用 Wio Terminal 订阅和发布消息到 MQTT 服务器,这种通信方式在物联网中应用非常广泛。
#include "rpcWiFi.h"
#include <PubSubClient.h>
// Update these with values suitable for your network.
const char *ssid = "yourNetworkName"; // your network SSID
const char *password = "yourNetworkPassword"; // your network password
const char *ID = "Wio-Terminal-Client"; // Name of our device, must be unique
const char *TOPIC = "WioTerminal"; // Topic to subcribe to
const char *subTopic = "inTopic"; // Topic to subcribe to
const char *server = "test.mosquitto.org"; // Server URL
WiFiClient wifiClient;
PubSubClient client(wifiClient);
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
for (int i=0;i<length;i++) {
Serial.print((char)payload[i]);
}
Serial.println();
}
void reconnect() {
// Loop until we're reconnected
while (!client.connected())
{
Serial.print("Attempting MQTT connection...");
// Attempt to connect
if (client.connect(ID)) {
Serial.println("connected");
// Once connected, publish an announcement...
client.publish(TOPIC, "{\"message\": \"Wio Terminal is connected!\"}");
Serial.println("Published connection message successfully!");
// ... and resubscribe
client.subscribe(subTopic);
Serial.print("Subcribed to: ");
Serial.println(subTopic);
}
else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);
}
}
}
void setup()
{
Serial.begin(115200);
while (!Serial)
; // Wait for Serial to be ready
Serial.print("Attempting to connect to SSID: ");
Serial.println(ssid);
WiFi.begin(ssid, password);
// attempt to connect to Wifi network:
while (WiFi.status() != WL_CONNECTED)
{
Serial.print(".");
WiFi.begin(ssid, password);
// wait 1 second for re-trying
delay(1000);
}
Serial.print("Connected to ");
Serial.println(ssid);
delay(500);
client.setServer(server, 1883);
client.setCallback(callback);
}
void loop()
{
if (!client.connected()) {
reconnect();
}
client.loop();
}