久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3656|回復: 5
打印 上一主題 下一主題
收起左側

arduino IDE開發ESP8266 MQTT代碼

  [復制鏈接]
跳轉到指定樓層
樓主
ID:706228 發表于 2021-11-9 16:52 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
arduino IDE開發ESP8266開發版終于可以手機遠程控制LED點亮了
  1. #include <ESP8266WiFi.h>
  2. #include <PubSubClient.h>

  3. // 設置wifi接入信息(請根據您的WiFi信息進行修改)
  4. const char* ssid = "可用WiFi";
  5. const char* password = "密碼";
  6. const char* mqttServer = "";
  7. // 如以上MQTT服務器無法正常連接,請前往以下頁面尋找解決方案
  8. WiFiClient wifiClient;
  9. PubSubClient mqttClient(wifiClient);

  10. // ****************************************************
  11. // 注意!以下需要用戶根據然也物聯平臺信息進行修改!否則無法工作!
  12. // ****************************************************
  13. const char* mqttUserName = "自己的";         // 服務端連接用戶名(需要修改)
  14. const char* mqttPassword = "自己的";          // 服務端連接密碼(需要修改)
  15. const char* clientId = "自己的";          // 客戶端id (需要修改)
  16. const char* subTopic = "自己/led_kz";        // 訂閱主題(需要修改)
  17. const char* pubTopic = "自己/led_zt";        // 訂閱主題(需要修改)
  18. const char* willTopic = "自己/led_yz";       // 遺囑主題名稱(需要修改)
  19. // ****************************************************

  20. //遺囑相關信息
  21. const char* willMsg = "esp8266 offline";        // 遺囑主題信息
  22. const int willQos = 0;                          // 遺囑QoS
  23. const int willRetain = false;                   // 遺囑保留

  24. const int subQoS = 1;            // 客戶端訂閱主題時使用的QoS級別(截止2020-10-07,僅支持QoS = 1,不支持QoS = 2)
  25. const bool cleanSession = false; // 清除會話(如QoS>0必須要設為false)

  26. bool ledStatus = HIGH;
  27. //int pushButton =D3;
  28. void setup() {
  29.   pinMode(LED_BUILTIN, OUTPUT);  // 設置板上LED引腳為輸出模式
  30.   //pinMode(pushButton, INPUT);
  31.   digitalWrite(LED_BUILTIN, ledStatus);  // 啟動后關閉板上LED
  32.   Serial.begin(9600);                    // 啟動串口通訊
  33.   
  34.   //設置ESP8266工作模式為無線終端模式
  35.   WiFi.mode(WIFI_STA);
  36.   
  37.   // 連接WiFi
  38.   connectWifi();
  39.   
  40.   // 設置MQTT服務器和端口號
  41.   mqttClient.setServer(mqttServer, 1883);
  42.   mqttClient.setCallback(receiveCallback);

  43.   // 連接MQTT服務器
  44.   connectMQTTserver();
  45. }

  46. void loop() {
  47.   // 如果開發板未能成功連接服務器,則嘗試連接服務器
  48.   if (!mqttClient.connected()) {
  49.     connectMQTTserver();
  50.   }

  51.    // 處理信息以及心跳
  52.    mqttClient.loop();
  53.   /* pushButton = digitalRead(LED_BUILTIN); //讀取引腳2電平狀態并將其賦值給布爾變量
  54.   
  55.   if (!pushButton){          //對布爾變量進行邏輯非運算,并根據運算結構點亮或者熄滅LED
  56.     digitalWrite(LED_BUILTIN, HIGH); //布爾變量數值為假(false)時點亮LED
  57.   } else {
  58.     digitalWrite(LED_BUILTIN, LOW);  //布爾變量數值為真(true)時熄滅LED
  59.   }*/
  60.    
  61. }

  62. // 連接MQTT服務器并訂閱信息
  63. void connectMQTTserver(){
  64.   // 根據ESP8266的MAC地址生成客戶端ID(避免與其它ESP8266的客戶端ID重名)
  65.   

  66.   /* 連接MQTT服務器
  67.   boolean connect(const char* id, const char* user,
  68.                   const char* pass, const char* willTopic,
  69.                   uint8_t willQos, boolean willRetain,
  70.                   const char* willMessage, boolean cleanSession);
  71.   若讓設備在離線時仍然能夠讓qos1工作,則connect時的cleanSession需要設置為false               
  72.                   */
  73.   if (mqttClient.connect(clientId, mqttUserName,
  74.                          mqttPassword, willTopic,
  75.                          willQos, willRetain, willMsg, cleanSession)) {
  76.     Serial.print("MQTT Server Connected. ClientId: ");
  77.     Serial.println(clientId);
  78.     Serial.print("MQTT Server: ");
  79.     Serial.println(mqttServer);   
  80.    
  81.     subscribeTopic(); // 訂閱指定主題
  82.   } else {
  83.     Serial.print("MQTT Server Connect Failed. Client State:");
  84.     Serial.println(mqttClient.state());
  85.     delay(5000);
  86.   }   
  87. }

  88. // 收到信息后的回調函數
  89. void receiveCallback(char* topic, byte* payload, unsigned int length) {
  90.   Serial.print("Message Received [");
  91.   Serial.print(topic);
  92.   Serial.print("] ");
  93.   for (int i = 0; i < length; i++) {
  94.     Serial.print((char)payload[i]);
  95.   }
  96.   Serial.println("");
  97.   Serial.print("Message Length(Bytes) ");
  98.   Serial.println(length);

  99.   if ((char)payload[0] == '1') {     // 如果收到的信息以“1”為開始
  100.     ledStatus = LOW;
  101.     digitalWrite(BUILTIN_LED, ledStatus);  // 則點亮LED。
  102.   } else {
  103.     ledStatus = HIGH;                           
  104.     digitalWrite(BUILTIN_LED, ledStatus); // 否則熄滅LED。
  105.   }

  106.   pubMQTTmsg();
  107. }

  108. // 訂閱指定主題
  109. void subscribeTopic(){

  110.   
  111.   // 通過串口監視器輸出是否成功訂閱主題以及訂閱的主題名稱
  112.   // 請注意subscribe函數第二個參數數字為QoS級別。這里為QoS = 1
  113.   if(mqttClient.subscribe(subTopic, subQoS)){
  114.     Serial.print("Subscribed Topic: ");
  115.     Serial.println(subTopic);
  116.   } else {
  117.     Serial.print("Subscribe Fail...");
  118.   }  
  119. }

  120. // 發布信息
  121. void pubMQTTmsg(){
  122.   char* pubMessage;
  123.   
  124.   if (ledStatus == LOW){
  125.     pubMessage = "LED ON";
  126.   } else {
  127.     pubMessage = "LED OFF";
  128.   }

  129.   // 實現ESP8266向主題發布信息
  130.   if(mqttClient.publish(pubTopic, pubMessage)){
  131.     Serial.println("Publish Topic:");Serial.println(pubTopic);
  132.     Serial.println("Publish message:");Serial.println(pubMessage);   
  133.   } else {
  134.     Serial.println("Message Publish Failed.");
  135.   }
  136. }

  137. // ESP8266連接wifi
  138. void connectWifi(){

  139.   WiFi.begin(ssid, password);

  140.   //等待WiFi連接,成功連接后輸出成功信息
  141.   while (WiFi.status() != WL_CONNECTED) {
  142.     delay(1000);
  143.     Serial.print(".");
  144.   }
  145.   Serial.println("");
  146.   Serial.println("WiFi Connected!");  
  147.   Serial.println("");
  148. }
復制代碼

評分

參與人數 1黑幣 +40 收起 理由
admin + 40 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏6 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:752974 發表于 2021-12-16 17:30 | 只看該作者
手機APP如何實現?
回復

使用道具 舉報

板凳
ID:752974 發表于 2021-12-31 15:39 | 只看該作者
問題解決了,謝謝樓主分享的代碼。
回復

使用道具 舉報

地板
ID:272158 發表于 2022-2-15 14:26 | 只看該作者
那個版本的arduino IDE好用些?????
回復

使用道具 舉報

5#
ID:95059 發表于 2022-5-10 17:42 | 只看該作者
小兄弟談談你的感想!
回復

使用道具 舉報

6#
ID:858009 發表于 2022-8-3 16:13 | 只看該作者
想問一下怎么獲取json長數據?,你這個如果獲取1000字節的JSON數據是否也可以?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲va在线va天堂va狼色在线 | 在线观看av不卡 | 亚洲国产一区在线 | 欧美性猛片aaaaaaa做受 | 亚洲精品视频在线播放 | 欧美日韩国产一区二区 | 久久99精品久久久久久国产越南 | 中文字幕欧美一区二区 | 亚洲午夜电影 | 国产视频1区 | 久久综合成人精品亚洲另类欧美 | 97免费视频在线观看 | 成人国内精品久久久久一区 | 国产精品日产欧美久久久久 | 亚洲欧美日韩成人在线 | 日韩中文字幕免费在线 | 日韩在线高清 | 国产欧美精品一区二区三区 | 亚洲女人天堂网 | 精品人伦一区二区三区蜜桃网站 | 国产一区二区在线免费观看 | 精品久久久久久亚洲精品 | 亚洲国产一区在线 | 国产九一精品 | 中文字幕日韩一区 | av在线二区| 精品毛片 | 日韩精品久久久久久 | h视频免费在线观看 | 欧美一卡二卡在线观看 | 一区二区在线不卡 | 成人免费视频一区二区 | 亚洲97| 欧美激情久久久 | 久精品视频 | 中文字幕av亚洲精品一部二部 | 一区二区成人在线 | 都市激情亚洲 | 成人精品视频 | 羞羞视频网站免费观看 | 久久国产精品视频 |