概念
MQTT
MQTT(Message Queuing Telemetry Transport)是一種基于發(fā)布/訂閱范式的“輕量級”消息協(xié)議,由IBM發(fā)布。MQTT可以在TCP/IP協(xié)議族上工作,并且是為硬件性能低下的遠程設備以及網(wǎng)絡狀況糟糕的情況下而設計的發(fā)布/訂閱型消息協(xié)議。因此,MQTT協(xié)議適用于硬件性能低下的遠程設備以及網(wǎng)絡狀況不佳的環(huán)境中,如機器與機器(M2M)通信和物聯(lián)網(wǎng)(IoT)等領域。
關于MQTT還有很多其他的概念例如訂閱發(fā)布機制、消息服務等級、心跳機制等,在閱讀文章之前請先了解相關的知識,推薦學習地址。
ESP8266
樂鑫ESP8266是一款內(nèi)置WiFi功能的單片機,它具有高性能的無線SOC特性,能夠為移動設備和物聯(lián)網(wǎng)應用提供無線連接功能。
ESP8266的特點如下:
封裝尺寸小,超低功耗,支持多種電源模式。
帶有高性能的UART-WiFi透傳模塊,能夠直接連接至其他基于微控制器的設備。
支持STA/AP/STA+AP三種工作模式,可以作為無線接入點或者客戶端使用。
內(nèi)置TCP/IP協(xié)議棧,支持多路TCP Client連接,無需添加任何匹配電路。
支持三種天線接口形式:板載PCB天線、IPEX接口和郵票孔接口。
可廣泛應用于智能電網(wǎng)、智能交通、智能家具、手持設備、工業(yè)控制等領域。
需要注意的是,雖然我提供的信息盡可能準確,但產(chǎn)品可能在不斷更新和變化,建議查閱樂鑫官方網(wǎng)站獲取最新和最準確的信息。
搭建自己的MQTT服務器
本文使用的是EMQX 官網(wǎng)地址
購買自己的服務器后使用下面代碼部署
curl -s https://assets.emqx.com/scripts/install-emqx-rpm.sh | sudo bash
sudo yum install emqx -y
sudo systemctl start emqx
安裝完成之后 打開后臺http://你的IP地址/#/login?to=/websocket
初始賬戶admin密碼是public。
燒錄ESP8266代碼
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
// WiFi
const char *ssid = "mousse"; // Enter your WiFi name
const char *password = "qweqweqwe"; // Enter WiFi password
// MQTT Broker
const char *mqtt_broker = "broker.emqx.io";
const char *topic = "esp8266/test";
const char *mqtt_username = "emqx";
const char *mqtt_password = "public";
const int mqtt_port = 1883;
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
// Set software serial baud to 115200;
Serial.begin(115200);
// connecting to a WiFi network
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.println("Connecting to WiFi..");
}
Serial.println("Connected to the WiFi network");
//connecting to a mqtt broker
client.setServer(mqtt_broker, mqtt_port);
client.setCallback(callback);
while (!client.connected()) {
String client_id = "esp8266-client-";
client_id += String(WiFi.macAddress());
Serial.printf("The client %s connects to the public mqtt broker\n", client_id.c_str());
if (client.connect(client_id.c_str(), mqtt_username, mqtt_password)) {
Serial.println("Public emqx mqtt broker connected");
} else {
Serial.print("failed with state ");
Serial.print(client.state());
delay(2000);
}
}
// publish and subscribe
client.publish(topic, "hello emqx");
client.subscribe(topic);
}
void callback(char *topic, byte *payload, unsigned int length) {
Serial.print("Message arrived in topic: ");
Serial.println(topic);
Serial.print("Message:");
for (int i = 0; i < length; i++) {
Serial.print((char) payload[i]);
}
Serial.println();
Serial.println("-----------------------");
}
void loop() {
client.loop();
}
將上面的信息改成自己的
注意添加PubSubClient庫
微信小程序開發(fā)
官方接入教程
創(chuàng)建微信小程序的項目,并添加庫文件,本文使用的是MQTT.js,同時針對不用的客戶端都有相關的SDK,這里微信小程序使用JavaScript語言所以使用本庫。
EMQX要求微信小程序支持通過 WebSocket 進行即時通信,EMQX 的 MQTT Over WebSocket 能夠完全兼容使用在微信小程序上。
提示
由于微信小程序的規(guī)范限制,EMQX 使用微信小程序接入時需要注意以下幾點:
必須使用已經(jīng)通過域名備案 (opens new window)的域名接入
域名需要在小程序管理后臺 (opens new window)域名/IP 白名單中(開發(fā) -> 開發(fā)設置 -> 服務器域名 -> socket 合法域名)
僅支持 WebSocket/TLS 協(xié)議,需要為域名分配受信任 CA 頒發(fā)的證書
由于微信小程序 BUG,安卓真機必須使用 TLS/443 端口,否則會連接失?。催B接地址不能帶端口)
下載并導入 mqtt.mini.js
在微信小程序onLoad聲明周期中測試。文章來源:http://www.zghlxwxcb.cn/news/detail-850972.html
onLoad(options) {
try {
console.log("開始鏈接");
const clientId = new Date().getTime();//mqtt的連接ID
app.globalData.client = mqtt.connect(`wxs://${host}/mqtt`, {
username,
password,
reconnectPeriod,
connectTimeout,
clientId,
});
} catch (error) {
console.log("mqtt.connect error", error);
}
if (app.globalData.client) {
app.globalData.client.subscribe("test")
}
app.globalData.client.on("message", (topic, payload) => {
console.log(`收到消息 - Topic: ${topic},Payload: ${payload}`)
// app.globalData.currMsg = JSON.parse(payload);
// console.log(typeof payload)
});
}
這里已經(jīng)收到遺囑消息
訂閱、發(fā)布、消息回調(diào)更多API請查詢MQTT.js。文章來源地址http://www.zghlxwxcb.cn/news/detail-850972.html
到了這里,關于MQTT通訊-使用EMQX將ESP8266與微信小程序通訊的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!