亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

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

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

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

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

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

1. 簡(jiǎn)介

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

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

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

2. 實(shí)驗(yàn)準(zhǔn)備

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

2.1 硬件

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

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

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

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

2.2 軟件

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

3. 實(shí)驗(yàn)步驟

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

3.1 TCP點(diǎn)燈實(shí)驗(yàn)

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

bemfa02.ino

/* * 智能語(yǔ)言控制控制,支持天貓、小愛、小度、google Assistent同時(shí)控制 * Time:20211127 * Author: 2345VOR * 項(xiàng)目實(shí)例:發(fā)送on、off的指令開關(guān)燈 * 參考文獻(xiàn):https://bbs.bemfa.com/84/last */#include #include #define server_ip "bemfa.com" //巴法云服務(wù)器地址默認(rèn)即可#define server_port "8344" //服務(wù)器端口,tcp創(chuàng)客云端口8344//********************需要修改的部分*******************//#define wifi_name  "J09 502"     //WIFI名稱,區(qū)分大小寫,不要寫錯(cuò)#define wifi_password   "qwertyuiop111"  //WIFI密碼String UID = "e8882ae28d5bde39766c330ea913fd46";  //用戶私鑰,可在控制臺(tái)獲取,修改為自己的UIDString TOPIC = "light002";         //主題名字,可在控制臺(tái)新建const int LED_Pin = D4;              //單片機(jī)LED引腳值,D2是NodeMcu引腳命名方式,其他esp8266型號(hào)將D2改為自己的引腳                         String upUrl = "http://bin.bemfa.com/b/3BcZTg4ODJhZTI4ZDViZGUzOTc2NmMzMzBlYTkxM2ZkNDY=light002.bin";//固件鏈接,在巴法云控制臺(tái)復(fù)制、粘貼到這里即可//**************************************************////最大字節(jié)數(shù)#define MAX_PACKETSIZE 512//設(shè)置心跳值30s#define KEEPALIVEATIME 30*1000//tcp客戶端相關(guān)初始化,默認(rè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è)備在線":"無(wú)訂閱設(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="";//清空    /*     //如果需要訂閱多個(gè)主題,可再次發(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只是個(gè)字符串,在上面開頭做了初始化 String TcpClient_Buff = "";          //此時(shí)會(huì)收到推送的指令,指令大概為 cmd=2&uid=xxx&topic=light002&msg=off          int topicIndex = TcpClient_Buff.indexOf("&topic=")+7; //c語(yǔ)言字符串查找,查找&topic=位置,并移動(dòng)7位,不懂的可百度c語(yǔ)言字符串查找          int msgIndex = TcpClient_Buff.indexOf("&msg=");//c語(yǔ)言字符串查找,查找&msg=位置          getTopic = TcpClient_Buff.substring(topicIndex,msgIndex);//c語(yǔ)言字符串截取,截取到topic,不懂的可百度c語(yǔ)言字符串截取          getMsg = TcpClient_Buff.substring(msgIndex+5);//c語(yǔ)言字符串截取,截取到消息          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í)行升級(jí)函數(shù)    }   TcpClient_Buff="";   TcpClient_BuffIndex = 0;  }}/**************************************************************************                                 WIFI***************************************************************************//*  WiFiTick  檢查是否需要初始化WiFi  檢查WiFi是否連接上,若連接成功啟動(dòng)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

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

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

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

3.2 MQTT發(fā)送溫濕度

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

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

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

dht11_led_OTA1.0.ino

/*  Time:20211127  Author: 2345VOR  項(xiàng)目示例:通過MQTT協(xié)議發(fā)送on或off控制開關(guān),溫濕度上傳巴法云  參考文獻(xiàn):https://www.cnblogs.com/bemfa/p/14590133.html*/#include //默認(rèn),加載WIFI頭文件#include "PubSubClient.h"//默認(rèn),加載MQTT庫(kù)文件#include //自動(dòng)升級(jí)庫(kù) https://bbs.bemfa.com/84#include //dht11庫(kù)文件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";       //默認(rèn),MQTT服務(wù)器地址const int mqtt_server_port = 9501;          //默認(rèn),MQTT服務(wù)器端口#define ID_MQTT  "e8882ae28d5bde39766c330ea913fd46"   //mqtt客戶端ID,修改為你的開發(fā)者密鑰const char*  topic = "led002";                       //Led主題名字,可在巴法云控制臺(tái)自行創(chuàng)建,名稱隨意const char * dhttopic = "temp004";                 //溫濕度主題名字,可在巴法云mqtt控制臺(tái)創(chuàng)建int pinDHT11 = D2;                         //dht11傳感器引腳輸入int B_led = D4;                           //控制的led引腳long timeval = 3 * 1000;                  //上傳的傳感器時(shí)間間隔,默認(rèn)3秒#define ledstatus !digitalRead(B_led);//led狀態(tài)默認(rèn)0long lastMsg = 0;//時(shí)間戳SimpleDHT11 dht11(pinDHT11);//dht11初始化WiFiClient espClient;PubSubClient client(espClient);//mqtt初始化//燈光函數(shù)及引腳定義#define turnOnLed() digitalWrite(B_led, LOW);#define turnOffLed() digitalWrite(B_led, HIGH);//自動(dòng)連接目標(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)前時(shí)間戳  if (now - lastMsg > timeval) {//如果達(dá)           
               
                                           
                       
                 

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/125585.html

相關(guān)文章

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

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

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

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

    garfileo 評(píng)論0 收藏0
  • 2021-09-04

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

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

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

    Loong_T 評(píng)論0 收藏0
  • Arduino uno r3 使用 ESP8266 UART-WiFi 透?jìng)髂K

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

    amuqiao 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<