1. 程式人生 > 其它 >esp8266/32+Arduino+MQTT+通訊貓,案例

esp8266/32+Arduino+MQTT+通訊貓,案例

技術標籤:微控制器

**

吐槽一下,國內微控制器語言,比前端後端語言落後至少10年

我會python,用micropython非常快捷方便,但是文件,例程都很少,只有用Arduino,但是至今阿里雲iot,onenet,的MQTT都連線不上,搞了幾天,例程太少,token一直弄不明白,官方也不友好沒啥例程,可能只在乎c++使用者

**只有用通訊貓的服務,因為不用令牌
非常簡潔,最要是搞清楚原理,再慢慢擴充套件
參考:https://www.jianshu.com/p/7f54b92d7a7b

#include <ESP8266WiFi.h>
#include <PubSubClient.h>
//自己安裝,可能要翻牆 const char* ssid = "wifi"; const char* password = "11111111"; const char* mqtt_server = "mq.tongxinmao.com"; // 使用HIVEMQ 的資訊中轉服務 const char* TOPIC = "/public/TEST/www"; // 訂閱資訊主題 const char* client_id = "不用"; // 標識當前裝置的客戶端編號
WiFiClient espClient; // 定義wifiClient例項 PubSubClient client(espClient); // 定義PubSubClient的例項 long lastMsg = 0; // 記錄上一次傳送資訊的時長 //啟動 void setup() { pinMode
(BUILTIN_LED, OUTPUT); // 定義板載LED燈為輸出方式 Serial.begin(115200); setup_wifi(); //執行Wifi初始化,下文有具體描述 client.setServer(mqtt_server, 18830); //設定MQTT伺服器與使用的埠,1883是預設的MQTT埠 client.setCallback(callback); //設定回撥方式,當ESP8266收到訂閱訊息時會呼叫此方法 } //連線wifi void setup_wifi() { delay(10); // 板子通電後要啟動,稍微等待一下讓板子點亮 Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi ok"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } //有訊息回撥 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.print((char)payload[0]);//內容流第一個字 Serial.println(); if ((char)payload[0] == '1') { //判斷內容第一個字 digitalWrite(BUILTIN_LED, LOW); // 亮燈 } if ((char)payload[0] == '2') { digitalWrite(BUILTIN_LED, HIGH); // 熄燈 } } //訂閱mqtt void reconnect() { while (!client.connected()) { Serial.print("lianjie MQTT ..."); // Attempt to connect if (client.connect(client_id)) { Serial.println("mqtt ok"); // 連線成功時訂閱主題 client.subscribe(TOPIC); } else { Serial.print("lianjie_no, rc="); Serial.print(client.state()); Serial.println("stop 5 miao"); // Wait 5 seconds before retrying delay(5000); } } } //迴圈 void loop() { if (!client.connected()) { reconnect(); } client.loop(); long now = millis(); //程式執行總時間,毫秒 if (now - lastMsg > 2000) { //總時間-上次記錄時間=間隔時間,心跳連線 lastMsg = now; client.publish("/public/TEST/www", "ok"); } }