成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

【基于Arduino IDE平臺開發(fā)ESP8266連接巴法云】

不知名網(wǎng)友 / 2304人閱讀

摘要:教程傳送門基于平臺開發(fā)連接巴法云簡介實驗準(zhǔn)備硬件軟件實驗步驟點燈實驗發(fā)送溫濕度指令升級總結(jié)關(guān)于巴法云專注于開源,智造,創(chuàng)新,分享。

Arduino教程傳送門??????

關(guān)于巴法云
專注于開源,智造,創(chuàng)新,分享。關(guān)注硬件與創(chuàng)新,突破技術(shù)極限,面向未來,我們是認真的。
崇尚開源,發(fā)掘未知。 ————巴法科技

1. 簡介

ESP8266-NodeMCU的環(huán)境配置已經(jīng)在一篇文章有所交代,接下讓我們開啟巴法云的物聯(lián)網(wǎng)開發(fā)吧!???

設(shè)計目標(biāo)

  1. 實現(xiàn)esp8266自動配網(wǎng)
  2. 實現(xiàn)ESP8266通過TCP協(xié)議連接巴法云的TCP創(chuàng)客云,串口發(fā)送指令控制LED的亮滅;
  3. 實現(xiàn)ESP8266通過MQTT協(xié)議連接巴法云的MQTT設(shè)備云;串口發(fā)送指令控制LED的亮滅,還實現(xiàn)DHT11溫濕度數(shù)據(jù)的獲取,并將數(shù)據(jù)上發(fā)巴法云平臺,在線顯示數(shù)據(jù);
  4. 實現(xiàn)巴法云平臺對ESP8266的OTA指令升級,基于前面兩個實驗。

2. 實驗準(zhǔn)備

本次需要做三個實驗,分別是TCP點燈實驗,MQTT發(fā)送溫濕度和OTA指令升級,準(zhǔn)備工作包括硬件???和軟件???兩部分。

2.1 硬件

你要實現(xiàn)巴法云的三個實驗,你需要準(zhǔn)備以下材料???

  1. ESP8266-NodeMCU單片機(外加安卓數(shù)據(jù)線);
  2. DHT11溫濕度傳感器;
  3. 三根母母杜邦線;

硬件連接:ESP8266-NodeMCU硬件連接非常簡單,只需將DHT11數(shù)據(jù)線接入D6引腳就好,這套連線三個實驗都通用,具體接線如下???

ESP8266-NodeMCU -----> USBVCC -----> 3.3V GND -----> GNDout -----> D2

2.2 軟件

  1. Arduino IED 1.8.5以上(越高越好);
  2. 瀏覽器登錄巴法云平臺。

3. 實驗步驟

首先搭建巴法云平臺,創(chuàng)建的產(chǎn)品相關(guān)主題,檢測相關(guān)數(shù)據(jù)流,上傳固件和發(fā)送指令,以便后期程序端口接入開發(fā)。???

3.1 TCP點燈實驗

  1. 登錄巴法云物聯(lián)網(wǎng)平臺,選擇控制臺,點擊TCP創(chuàng)客云,然后新建light002主題,那么巴法云TCP就配置好了?
  2. 程序設(shè)計,程序有四部分bemfa02、TCP 、motion和update,其中:??
文件名功能
bemfa02程序初始化調(diào)用和主程序調(diào)用;
TCP發(fā)送數(shù)據(jù)到TCP服務(wù)器,初始化wifi連接,初始化和服務(wù)器建立連接;
motion檢查數(shù)據(jù),發(fā)送心跳,檢查WiFi;
update固件升級函數(shù)。

bemfa02.ino

/* * 智能語言控制控制,支持天貓、小愛、小度、google Assistent同時控制 * Time:20211127 * Author: 2345VOR * 項目實例:發(fā)送on、off的指令開關(guān)燈 * 參考文獻:https://bbs.bemfa.com/84/last */#include #include #define server_ip "bemfa.com" //巴法云服務(wù)器地址默認即可#define server_port "8344" //服務(wù)器端口,tcp創(chuàng)客云端口8344//********************需要修改的部分*******************//#define wifi_name  "J09 502"     //WIFI名稱,區(qū)分大小寫,不要寫錯#define wifi_password   "qwertyuiop111"  //WIFI密碼String UID = "e8882ae28d5bde39766c330ea913fd46";  //用戶私鑰,可在控制臺獲取,修改為自己的UIDString TOPIC = "light002";         //主題名字,可在控制臺新建const int LED_Pin = D4;              //單片機LED引腳值,D2是NodeMcu引腳命名方式,其他esp8266型號將D2改為自己的引腳                         String upUrl = "http://bin.bemfa.com/b/3BcZTg4ODJhZTI4ZDViZGUzOTc2NmMzMzBlYTkxM2ZkNDY=light002.bin";//固件鏈接,在巴法云控制臺復(fù)制、粘貼到這里即可//**************************************************////最大字節(jié)數(shù)#define MAX_PACKETSIZE 512//設(shè)置心跳值30s#define KEEPALIVEATIME 30*1000//tcp客戶端相關(guān)初始化,默認即可WiFiClient TCPclient;String TcpClient_Buff = "";//初始化字符串,用于接收服務(wù)器發(fā)來的數(shù)據(jù)unsigned int TcpClient_BuffIndex = 0;unsigned long TcpClient_preTick = 0;unsigned long preHeartTick = 0;//心跳unsigned long preTCPStartTick = 0;//連接bool preTCPConnected = false;//相關(guān)函數(shù)初始化//連接WIFIvoid doWiFiTick();void startSTA();//TCP初始化連接void doTCPClientTick();void startTCPClient();void sendtoTCPServer(String p);//led控制函數(shù),具體函數(shù)內(nèi)容見下方#define turnOnLed() digitalWrite(LED_Pin,LOW);#define turnOffLed() digitalWrite(LED_Pin,HIGH);// 初始化,相當(dāng)于main 函數(shù)void setup() {  Serial.begin(115200);  pinMode(LED_Pin,OUTPUT);  digitalWrite(LED_Pin,HIGH);  Serial.println("Beginning...");}//循環(huán)void loop() {  doWiFiTick();  doTCPClientTick();}

TCP.ino

/*  *發(fā)送數(shù)據(jù)到TCP服務(wù)器 */void sendtoTCPServer(String p){  if (!TCPclient.connected())   {    Serial.println("Client is not readly");    return;  }  TCPclient.print(p);}/*  *初始化wifi連接*/void startSTA(){  WiFi.disconnect();  WiFi.mode(WIFI_STA);  WiFi.begin(wifi_name, wifi_password);}/*  *初始化和服務(wù)器建立連接 :style="value.online?"訂閱設(shè)備在線":"無訂閱設(shè)備""  color:#9A9A9A;*/void startTCPClient(){  if(TCPclient.connect(server_ip, atoi(server_port))){    Serial.print("/nConnected to server:");    Serial.printf("%s:%d/r/n",server_ip,atoi(server_port));        String tcpTemp="";  //初始化字符串    tcpTemp = "cmd=1&uid="+UID+"&topic="+TOPIC+"/r/n"; //構(gòu)建訂閱指令    sendtoTCPServer(tcpTemp); //發(fā)送訂閱指令    tcpTemp="";//清空    /*     //如果需要訂閱多個主題,可再次發(fā)送訂閱指令      tcpTemp = "cmd=1&uid="+UID+"&topic="+主題2+"/r/n"; //構(gòu)建訂閱指令      sendtoTCPServer(tcpTemp); //發(fā)送訂閱指令      tcpTemp="";//清空     */        preTCPConnected = true;    preHeartTick = millis();    TCPclient.setNoDelay(true);  }  else{    Serial.print("Failed connected to server:");    Serial.println(server_ip);    TCPclient.stop();    preTCPConnected = false;  }  preTCPStartTick = millis();}

motion.ino

/*  *檢查數(shù)據(jù),發(fā)送心跳*/void doTCPClientTick(){ //檢查是否斷開,斷開后重連   if(WiFi.status() != WL_CONNECTED) return;  if (!TCPclient.connected()) {//斷開重連  if(preTCPConnected == true){    preTCPConnected = false;    preTCPStartTick = millis();    Serial.println();    Serial.println("TCP Client disconnected.");    TCPclient.stop();  }  else if(millis() - preTCPStartTick > 1*1000)//重新連接    startTCPClient();  }  else  {    if (TCPclient.available()) {//收數(shù)據(jù)      char c =TCPclient.read();      TcpClient_Buff +=c;      TcpClient_BuffIndex++;      TcpClient_preTick = millis();            if(TcpClient_BuffIndex>=MAX_PACKETSIZE - 1){        TcpClient_BuffIndex = MAX_PACKETSIZE-2;        TcpClient_preTick = TcpClient_preTick - 200;      }      preHeartTick = millis();    }    if(millis() - preHeartTick >= KEEPALIVEATIME){//保持心跳      preHeartTick = millis();      Serial.println("--Keep alive:");      sendtoTCPServer("ping/r/n"); //發(fā)送心跳,指令需/r/n結(jié)尾,詳見接入文檔介紹    }  }  if((TcpClient_Buff.length() >= 1) && (millis() - TcpClient_preTick>=200))  {    TCPclient.flush();    Serial.print("Rev string: ");    TcpClient_Buff.trim(); //去掉首位空格    Serial.println(TcpClient_Buff); //打印接收到的消息    String getTopic = "";    String getMsg = "";    if(TcpClient_Buff.length() > 15){//注意TcpClient_Buff只是個字符串,在上面開頭做了初始化 String TcpClient_Buff = "";          //此時會收到推送的指令,指令大概為 cmd=2&uid=xxx&topic=light002&msg=off          int topicIndex = TcpClient_Buff.indexOf("&topic=")+7; //c語言字符串查找,查找&topic=位置,并移動7位,不懂的可百度c語言字符串查找          int msgIndex = TcpClient_Buff.indexOf("&msg=");//c語言字符串查找,查找&msg=位置          getTopic = TcpClient_Buff.substring(topicIndex,msgIndex);//c語言字符串截取,截取到topic,不懂的可百度c語言字符串截取          getMsg = TcpClient_Buff.substring(msgIndex+5);//c語言字符串截取,截取到消息          Serial.print("topic:------");          Serial.println(getTopic); //打印截取到的主題值          Serial.print("msg:--------");          Serial.println(getMsg);   //打印截取到的消息值   }   if(getMsg  == "on"){       //如果收到指令on==打開燈     turnOnLed();   }else if(getMsg == "off"){ //如果收到指令off==關(guān)閉燈      turnOffLed();    }else if(getMsg == "update"){  //如果收到指令update      updateBin();//執(zhí)行升級函數(shù)    }   TcpClient_Buff="";   TcpClient_BuffIndex = 0;  }}/**************************************************************************                                 WIFI***************************************************************************//*  WiFiTick  檢查是否需要初始化WiFi  檢查WiFi是否連接上,若連接成功啟動TCP Client  控制指示燈*/void doWiFiTick(){  static bool startSTAFlag = false;  static bool taskStarted = false;  static uint32_t lastWiFiCheckTick = 0;  if (!startSTAFlag) {    startSTAFlag = true;    startSTA();  }  //未連接1s重連  if ( WiFi.status() != WL_CONNECTED ) {    if (millis() - lastWiFiCheckTick > 1000) {      lastWiFiCheckTick = millis();    }  }  //連接成功建立  else {    if (taskStarted == false) {      taskStarted = true;      Serial.print("/r/nGet IP Address: ");      Serial.println(WiFi.localIP());      startTCPClient();    }  }}

update.ino

/** * 固件升級函數(shù) * 在需要升級的地方,加上這個函數(shù)即可,例如setup中加的updateBin();  * 原理:通過http請求獲取遠程固件,實現(xiàn)升級 */void updateBin(){  Serial.println("start update");      WiFiClient UpdateClient;  t_httpUpdate_return ret = ESPhttpUpdate.update(UpdateClient, upUrl);  switch(ret) {    case HTTP_UPDATE_FAILED:      //當(dāng)升級失敗        Serial.println("[update] Update failed.");        break;    case HTTP_UPDATE_NO_UPDATES:  //當(dāng)無升級        Serial.println("[update] Update no Update.");        break;    case HTTP_UPDATE_OK:         //當(dāng)升級成功        Serial.println("[update] Update ok.");        break;  }}
  1. 修改bemfa02主程序?qū)?yīng)wifi和巴法云參數(shù),upUrl參數(shù)可以暫時不修改,實驗三再修改???

  2. 編譯程序,然后上傳esp8266,觀察esp8266和巴法云TCP控制臺????

  3. 實驗效果:在訂閱的“l(fā)ight002”主題下,發(fā)送on或者off,可見esp8266板載燈分別會亮滅。?????

3.2 MQTT發(fā)送溫濕度

  1. 登錄巴法云物聯(lián)網(wǎng)平臺,選擇控制臺,點擊MQTT設(shè)備云,然后新建led002控制端和temp004狀態(tài)端主題,那么巴法云MQTT設(shè)備云就配置好了?

  2. 程序設(shè)計,程序有四部分dht11_led_OTA1.0、OTA(update)PubSubClient.cpp和PubSubClient.h,其中:??

文件名功能
dht11_led_OTA1.0程序初始化調(diào)用和主程序調(diào)用,自動連接目標(biāo)wifi,重新連接,led002的回調(diào)函數(shù)處理;
OTA(update)固件升級函數(shù)。

dht11_led_OTA1.0.ino

/*  Time:20211127  Author: 2345VOR  項目示例:通過MQTT協(xié)議發(fā)送on或off控制開關(guān),溫濕度上傳巴法云  參考文獻:https://www.cnblogs.com/bemfa/p/14590133.html*/#include //默認,加載WIFI頭文件#include "PubSubClient.h"//默認,加載MQTT庫文件#include //自動升級庫 https://bbs.bemfa.com/84#include //dht11庫文件String upUrl = "http://bin.bemfa.com/b/1BcZTg4ODJhZTI4ZDViZGUzOTc2NmMzMzBlYTkxM2ZkNDY=led002.bin";const char* ssid = "J09 502";                  //修改,修改為你的路由的WIFI名字const char* password = "qwertyuiop111";           //修改為你的WIFI密碼const char* mqtt_server = "bemfa.com";       //默認,MQTT服務(wù)器地址const int mqtt_server_port = 9501;          //默認,MQTT服務(wù)器端口#define ID_MQTT  "e8882ae28d5bde39766c330ea913fd46"   //mqtt客戶端ID,修改為你的開發(fā)者密鑰const char*  topic = "led002";                       //Led主題名字,可在巴法云控制臺自行創(chuàng)建,名稱隨意const char * dhttopic = "temp004";                 //溫濕度主題名字,可在巴法云mqtt控制臺創(chuàng)建int pinDHT11 = D2;                         //dht11傳感器引腳輸入int B_led = D4;                           //控制的led引腳long timeval = 3 * 1000;                  //上傳的傳感器時間間隔,默認3秒#define ledstatus !digitalRead(B_led);//led狀態(tài)默認0long lastMsg = 0;//時間戳SimpleDHT11 dht11(pinDHT11);//dht11初始化WiFiClient espClient;PubSubClient client(espClient);//mqtt初始化//燈光函數(shù)及引腳定義#define turnOnLed() digitalWrite(B_led, LOW);#define turnOffLed() digitalWrite(B_led, HIGH);//自動連接目標(biāo)wifivoid 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 connected");  Serial.println("IP address: ");  Serial.println(WiFi.localIP());}//重新連接void reconnect() {  // Loop until we"re reconnected  while (!client.connected()) {    Serial.print("Attempting MQTT connection...");    // Attempt to connect    if (client.connect(ID_MQTT)) {//連接mqtt      Serial.println("connected");      client.subscribe(topic);//修改,修改為你的主題    } 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() {  pinMode(B_led, OUTPUT);  Serial.begin(115200);  setup_wifi();  client.setServer(mqtt_server, mqtt_server_port);  client.setCallback(callback);  digitalWrite(B_led, HIGH);}void loop() {  if (!client.connected()) {//判斷mqtt是否連接    reconnect();  }  client.loop();//mqtt客戶端  long now = millis();//獲取當(dāng)前時間戳  if (now - lastMsg > timeval) {//如果達           
               
                                           
                       
                 

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/125585.html

相關(guān)文章

  • esp8266 TCP接入法云物聯(lián)網(wǎng)云平臺

    摘要:本文,將介紹如何通過這個芯片連接到巴法云的設(shè)備云。例如向主題推送數(shù)據(jù),可為示例調(diào)試測試的內(nèi)容就是上面的指令,使用網(wǎng)絡(luò)調(diào)試助手連接上巴法云后,修改就可以直接發(fā)送指令了。 ...

    xingpingz 評論0 收藏0
  • esp32-cam拍照上傳,app inventor 制作安卓app實時顯示

    摘要:導(dǎo)入文件后,如果只是簡單使用,只需要修改兩個地方,一個是主題名字,一個是,均需開發(fā)者置換成自己的主題名字和用戶私鑰,均可在巴法云控制臺獲取點擊跳轉(zhuǎn)。 esp32-...

    garfileo 評論0 收藏0
  • 2021-09-04

    摘要:使用實現(xiàn)連網(wǎng)實現(xiàn)巴法云物聯(lián)網(wǎng)使用硬件程序思路基于正點原子的測試程序在巴法云物聯(lián)網(wǎng)創(chuàng)建的主題初始化代碼比較簡陋主函數(shù)代碼如果想用串口助手調(diào)試,接線方法如下使用硬件我這里使用的是正點原子家的開發(fā)板精英版和模塊。 ...

    Zack 評論0 收藏0
  • ESP8266使用Arduino ide通過MQTT協(xié)議接入阿里云平臺(上傳溫濕度,甲醛濃度,土壤濕

    摘要:具體操作如下創(chuàng)建自己的設(shè)備進入到阿里云控制臺,找到物聯(lián)網(wǎng)平臺,創(chuàng)建屬于自己的設(shè)備點擊公共實例進行創(chuàng)建里面有個設(shè)備管理,點擊產(chǎn)品,里面有個創(chuàng)建產(chǎn)品輸入名稱即可,然后選擇標(biāo)準(zhǔn)品類這里我創(chuàng)建的是溫濕度檢測。 ...

    Loong_T 評論0 收藏0
  • Arduino uno r3 使用 ESP8266 UART-WiFi 透傳模塊

    摘要:查詢附近名稱密碼連接路由器的查看路由器分配給模組的地址例如設(shè)置單連接設(shè)置透傳模式建立的服務(wù)器開始發(fā)送數(shù)據(jù)進入發(fā)送模式發(fā)送數(shù)據(jù)注意退出透傳,直接發(fā)送。取消發(fā)送新行五參考模塊指令入門指南透傳簡單使用模塊指令匯總一、所需硬件材料 1.ESP8266:01s某寶上3、5塊錢 2.杜邦線:某寶幾塊錢一組40P,這里只需要三根,用于連接 樹莓派與繼電器 ?? 3.燒錄器 ...

    amuqiao 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<