




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、小學(xué)生玩轉(zhuǎn)物聯(lián)網(wǎng)系列教程章節(jié)目錄第一章百度AI智能識(shí)別技術(shù)第二章人臉識(shí)別技術(shù)第三章Arduino 基礎(chǔ)學(xué)習(xí)第四章Arduino 進(jìn)階學(xué)習(xí)第五章IOT物聯(lián)網(wǎng)第六章WIFI與Arduino 的結(jié)合第七章阿里云IOT服務(wù)第八章百度天工物聯(lián)網(wǎng)第九章APPInventor 制作手機(jī)APP第十章自己做的七七八八第H一章制作APPInventor自定義插件第十二章手機(jī)實(shí)現(xiàn)局域網(wǎng)連接第十三章項(xiàng)目應(yīng)用一一小學(xué)生百度天工第十四章項(xiàng)目應(yīng)用一一ESP32-cam攝像頭模塊第十五章項(xiàng)目應(yīng)用一一ESP32-cam攝像頭模塊第十八早項(xiàng)目應(yīng)用一一WIFI模塊手動(dòng)配網(wǎng)第十七章項(xiàng)目應(yīng)用一一紅納里斯的跨陣M1第十八章項(xiàng)目應(yīng)用一一O
2、LED液晶屏插件7-2-WiFi模塊連接阿里云在上節(jié)課中,我們已經(jīng)學(xué)會(huì)讓MQTT-fx客戶端連接到阿里云服務(wù)器了。在客戶端連接服務(wù)器的時(shí)候,需要提交一些認(rèn)證消息,才能通過阿里云服務(wù)器的審核, 才能對(duì)接成功,并訂閱話題、發(fā)布消息。今天,我們先讓 WiFi開發(fā)板連接到阿里云的服務(wù)器(俗稱上云)。我這里整理 了從網(wǎng)上找到的兩個(gè)上云的辦法,先連接服務(wù)器吧,至于怎么用我們后面在說(shuō)。一.利用PubSubClient 連接上云1 我們需要兩個(gè)庫(kù)文件ArduinoJson 和PubSubClient。這兩個(gè)庫(kù)文件可以從我提供的學(xué)習(xí)資料中找到,也可以自己從網(wǎng)上下載(注意有不同的版本號(hào)):https:/githu
3、b.eom/bblanchon/ArduinoJson/tree/5.xhttps:/github.eom/knolleary/pubsubclient/releases/tag/v2.7下載到電腦后,把文件夾解壓出來(lái),然后復(fù)制到Arduino的安裝文件夾下的Libraries文件夾中(或者放在系統(tǒng)文件夾我的文檔下面也有一個(gè)ArduinoLibrarics的文件夾里面也可以)。2 修改PubSubClient . h 文件內(nèi)容。我們使用一個(gè)小程序npp+ (我的資料文件里有,也可以從網(wǎng)上搜索下載),打開 夾中的PubSubClient . h 。修改兩個(gè)參數(shù),并保存。這個(gè)叫?;钚奶鴷r(shí)間(有點(diǎn)相
4、當(dāng)于讓開發(fā)板程序等待服務(wù)器響應(yīng)時(shí)間吧,要把這個(gè)時(shí)間設(shè)置得長(zhǎng)一點(diǎn),要不然由 于網(wǎng)絡(luò)延遲,還沒等服務(wù)器反應(yīng)過來(lái),開發(fā)板這邊都以為連接失敗了,這樣就無(wú)法 連接成功的)。3用Arduino IDE 燒寫開發(fā)板。直接給出程序源碼吧,注意看程序開頭的阿里云的校驗(yàn)三元組,這些校驗(yàn)信息我們?cè)谏弦还?jié)課的時(shí)候,都已經(jīng)詳細(xì)介紹,并操作過了。#include #include #include #include const char* WIFI_SSID = ChinaNet-xxVP”;/ WiFi 賬號(hào)密碼const char* WIFI_PASSWORD = 123456789”;/ WiFi 密碼I*產(chǎn)品/設(shè)
5、備配置(每個(gè)人需要根據(jù)自己的產(chǎn)品設(shè)備信息去動(dòng)態(tài)更換?*#define PRODUCT_KEY a1LsKxjQ3HG” / 產(chǎn)品 key 從產(chǎn)品詳情獲取#define DEVICE_NAME Led_Device1 / 設(shè)備 deviceName從設(shè)備詳情獲取/服務(wù)端相關(guān)#define MQTT_SERVER PRODUCT_KEY ”.iot-as- / 阿里云 MQTT 服務(wù)地址#define MQTT_PORT 1883/MQTT 服務(wù)端口/校驗(yàn)三元組#define MQTT_CLIENT_ID DEVICE_NAME ”|securemode=2,signmethod=hmacsha1
6、| /mqtt clientid#define MQTT_USERNAME DEVICE_NAME & PRODUCT_KEY/mqtt username#define MQTT_PASSWORD ”0570E928E23F70FACF911E0ABADB55DCBBC24026/mqtt password 通過生成工具獲得/相關(guān)主題自定義一個(gè)主題#define TOPIC1 / PRODUCT_KEY / DEVICE_NAME /user/get/*/void mqtt_callback (char* topic, byte* payload, unsigned int length);v
7、oid doWiFiTick();void connectToMqtt();const _FlashStringHelper* connectErrorToString(int8_t code);BearSSL:WiFiClientSecure client_s;PubSubClient mqttclient(MQTT_SERVER, MQTT_PORT, &mqtt_callback, client_s);void setup() / put your setup code here, to run once:delay(2000);Serial.begin(115200);pinMode(
8、LED_BUILTIN, OUTPUT);client_s.setInsecure();Serial.println(star);void 100Po / put your main code here, to run repeatedly:ESP.wdtFeed();doWiFiTick();if (WiFi.status() = WL_CONNECTED) connectToMqtt();mqttclient.100P();delay(2000);/功能:連接到Mqttvoid connectToMqtt() if (mqttclient.connected() return;Serial
9、.print(F(Connecting to MQTT. );int8_t ret;uint8_t retries = 3;while (!mqttclient.connect(MQTT_CLIENT_ID, MQTT_USERNAME,MQTT_PASSWORD) / connect will return true for connectedSerial.println(connectErrorToString(mqttclient.state();Serial.println(F(Retrying MQTT connection in 5 seconds.);mqttclient.dis
10、connect();delay(5000);/ wait 5 secondsretries-;if (retries = 0) / basically die and wait for WDT to reset mewhile (1);yield();Serial.println(F(Success!);/訂閱主題mqttclient.subscribe(TOPIC1);功能:連接路由心跳函數(shù)void doWiFiTick() static bool taskStarted = false;static bool startSTAFlag = false;static uint32_t las
11、tWiFiCheckTick = 0;if (!startSTAFlag) startSTAFlag = true;Serial.print(connect to ap:);Serial.println(WIFI_SSID);WiFi.disconnect();WiFi.mode(WIFI_STA);WiFi.begin(WIFI_SSID, WIFI_PASSWORD);Serial.printf(Heap size:%drn, ESP.getFreeHeap(); /未連接1s重連if ( WiFi.status() != WL_CONNECTED ) if (millis() - las
12、tWiFiCheckTick 1000) lastWiFiCheckTick = millis();Serial.print(.);/連接成功建立else if (taskStarted = false) taskStarted = true;Serial.print(rnGet IP Address:);Serial.println(WiFi.localIP();功能:MQTT回調(diào)void mqtt_callback (char* topic, byte* payload, unsigned int length) byte *end = payload + length;for (byte
13、 *p = payload; p end; +p) Serial.print(*(const char *)p);Serial.println();parseMqttResponse(char *)payload);/解析mqtt數(shù)據(jù)void parseMqttResponse(char* payload)Serial.println(start parseOneNetMqttResponse);StaticJsonBuffer jsonBuffer;/ StaticJsonBuffer在棧區(qū)分配內(nèi)存它也可以被DynamicJsonBuffer(內(nèi)存在堆區(qū)分配)代替/ DynamicJsonB
14、uffer jsonBuffer;JsonObject& root = jsonBuffer.parseObject(payload);/ Test if parsing succeeds.if (!root.success() Serial.println(parseObject() failed);return ;String deviceName = rootdn;int status = roots;if(strcmp(DEVICE_NAME,deviceName.c_str()= 0)if (status = 1) digitalWrite(LED_BUILTIN, LOW); el
15、se digitalWrite(LED_BUILTIN, HIGH);功能:打印錯(cuò)誤const _FlashStringHelper* connectErrorToString(int8_t code) switch (code) case 1: return F(The Server does not support the level of the MQTT protocol requested);case 2: return F(The Client identifier is correct UTF-8 but not allowed by the Server);case 3: re
16、turn F(The MQTT service is unavailable);case 4: return F(The data in the user name or password is malformed);case 5: return F(Not authorized to connect);case 6: return F(Exceeded reconnect rate limit. Please try again later.);case 7: return F(You have been banned from connecting. Please contact the
17、MQTT server administrator for more details.);case -1: return F(Connection failed);case -2: return F(Failed to subscribe);case -3: return F(Connection Lost);case -4: return F(Connection Timeout);default: return F(Unknown error);編譯程序,并把程序燒寫到wemos模塊中,最后我們?cè)诖诒O(jiān)視器可以看到連 接成功的消息,在瀏覽器中,我們登錄阿里云服務(wù)器,也可以看到設(shè)備已經(jīng)通過了
18、 服務(wù)器驗(yàn)證,并顯示已經(jīng)上線了。*Lne-lari 工FrT!;4M:F: 口,VLMliiMMi.sladE iFWSUCljai1 .bLbLlIIR Cifmm mu EF5- KuM-iF*】 -KlEMm f8即麗和9UD -1rmmki if hodEEvi U匕HKkNH 2IUHCL&g Ejfi Itrff. a. 虹陽(yáng)!T#-1再mn_F -tUiftns-rtB 門戶鼻,陽(yáng) urfiiisw不看嗎映4Jriai- Tt_!jiritjl _iUii -u ifLI AaihaliJ |rl!wdsizaiiTKH UE3H咳二3,TTJXCTF EFH:口.3W 10 w
19、 jrMow-J?Bxiw LtiCiXwldnfm yn tRXWl EOTH UW 1“ HCZd -S1wr ” icTr-RmwE rrixvsKZsrvwcrK LeIwc9Q-iui4生9目重工一干主也-1-mp* TWK1 . HWfT.m /. ml k,*211 ECOMCrtTDKEEt l I JfRiMdL詡,皿廣由也門修m叫.I .一 , wrive其,- 一 O 9 D saB 1糖b f HauC O i -* i- * *- “I*;讖.ffiAMfi 孫鼻a *由i 口產(chǎn)丁星i-TCT嚴(yán)MMAI4I-ML7MM4iMr5 2W*g計(jì):二.利用ESP_Aliyu
20、n連接上云我看到有另外一個(gè)連接上云的辦法,也先下載測(cè)試一下吧。至于以后會(huì)用哪一個(gè)辦法連接,到時(shí)候再說(shuō)。1 .添加阿里云驅(qū)動(dòng)庫(kù)可以從我的學(xué)習(xí)資料中找到阿里云的驅(qū)動(dòng)庫(kù)文件,也可以從網(wǎng)上下載: AliYun然后解壓縮到Libraries的文件夾里面。2 .添加crypto加密方法庫(kù)文件。在Arduino IDE 中,從項(xiàng)目一一加載庫(kù)一一管理庫(kù)中,輸入驅(qū)動(dòng)庫(kù)名字,就可 以找到Crypto的庫(kù),點(diǎn)擊就可以安裝。3 .燒寫開發(fā)板還是直接上程序源碼吧,把程序編譯燒寫到模塊中,也能在串口監(jiān)視器中看到連 接服務(wù)器成功,也可以在瀏覽器中看到設(shè)備已經(jīng)完成認(rèn)證,并顯示在線狀態(tài)。#include #include #i
21、nclude #include aliyun_mqtt.h/ GPIO 13, D7 on the Node MCU v3 #define SENSOR_PIN 13#define WIFI_SSIDChinaNet-xxVP” / 替換自己的 WIFI#define WIFI_PASSWD“123456789/ 替換自己的 WIFI#define PRODUCT_KEY#define DEVICE_NAME#define DEVICE_SECRETa1LsKxjQ3HG / 替換自己的 PRODUCT_KEYLED_Device2 / 替換自己的 DEVICE_NAMEcImLDs7Qlxn
22、fAQXwoQqXPfVM5sTv4j0B”替換自己的 DEVICE_SECRET/固件版本信息#define DEV_VERSION“S-TH-WIFI-vl.0-20190220#define ALINKBODYFORMATid:123,version:V10,method:%s,params:%s”#define ALINKTOPICPROPPOST“/sys/ PRODUCT_KEY / DEVICE_NAME /thing/event/property/post”#define ALINKTOPICPROPPOSTRSP”/sys/ PRODUCT_KEY / DEVICE_NAME
23、/thing/event/property/post_reply#define ALINKTOPICPROPSET”/sys/ PRODUCT_KEY / DEVICE_NAME /thing/service/property/set#define ALINKMETHODPROPPOSTperty.post#define ALINKTOPICDEVINFO/ota/device/inform/ PRODUCTKEY / DEVICENAME #define ALINKVERSIONFROMAid: 123,params: version: %sunsigned l
24、ong lastMs = 0;WiFiClient espClient;PubSubClient mqttClient(espClient);void init_wifi(const char *ssid, const char *password)WiFi.mode(WIFI_STA);WiFi.begin(ssid, password);while (WiFi.status() != WL_CONNECTED)Serial.println(WiFi does not connect, try again .);delay(500);Serial.println(Wifi is connec
25、ted.);Serial.println(IP address:);Serial.println(WiFi.localIP();void mqtt_callback(char *topic, byte *payload, unsigned int length)Serial.print(Message arrived );Serial.print(topic);Serial.print();payloadlength = 0;Serial.println(char *)payload);if (strstr(topic, ALINK_TOPIC_PROP_SET)StaticJsonBuffe
26、r jsonBuffer;JsonObject &root = jsonBuffer.parseObject(payload);if (!root.success()Serial.println(parseObject() failed);return;void mqtt_version_post()char param512;char jsonBuf1024;sprintf(param, MotionAlarmState:%d, digitalRead(13);sprintf(param, id: 123,params: version: %s”, DEV_VERSION);/ sprint
27、f(jsonBuf, ALINK_BODY_FORMAT, ALINK_METHOD_PROP_POST, param);Serial.println(param);mqttClient.publish(ALINK_TOPIC_DEV_INFO, param);void mqtt_check_connect()while (!mqttClient.connected()/mqttwhile (connect_aliyun_mqtt(mqttClient, PRODUCT_KEY, DEVICE_NAME, DEVICE_SECRET)Serial.println(MQTT connect succeed!);/client.subscribe(ALINK_TOPIC_PROP_POSTRSP);mqttClient.subscribe(ALINK_TOPIC_PROP_SET);Serial.println(subscribe done);mqtt_version_post();void mqtt_interval_post()char param512;
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 同行合作合同范本
- 綠化苗木栽植合同范本
- 廠區(qū)圍網(wǎng)維修合同范本
- 合同違約金合同范本-
- 業(yè)務(wù)變更合同范本
- 木門及木飾面制作安裝合同范本
- 健身公司合同范本
- 卡丁車加盟合同范本
- 吊車司機(jī)聘用合同范本
- 合同范例主播
- 煤礦機(jī)電事故及其防治措施
- ISO22000體系文件清單
- 失禁性皮炎的護(hù)理
- 檢傷分類課件
- 高等數(shù)學(xué)教案-曲線積分與曲面積分
- 河道地形測(cè)繪服務(wù)投標(biāo)方案
- 液化石油氣鋼瓶倒殘操作規(guī)程
- 蔚縣新源玄武巖礦業(yè)有限公司大岳家山建筑石料玄武巖礦礦山地質(zhì)環(huán)境保護(hù)與治理恢復(fù)方案
- 職工大會(huì)(或職工代表大會(huì))會(huì)議決議書
- 新材料概論課件ppt 第8章 新能源材料
- 毛概課說(shuō)課課件
評(píng)論
0/150
提交評(píng)論