這幾天沒事看到我還有Esp8266在哪里吃灰戒洼,想著馬上5G了也得搞搞IOT是吧,然后翻閱些資料自己整理下防止以后忘了哈哈······
這里我主要做了一個連接訂閱阿里IOT而已,主要是手上也就一個8266板子然后啥都沒有,過幾天買些硬件在數(shù)據(jù)上傳和發(fā)布數(shù)據(jù)。
廢話不多說先上硬件
這是在某寶上買的(好便宜啊)楼咳,買來的時候上面已經(jīng)標注固件已經(jīng)刷了ModeMcu所以我沒刷固件,刷固件教程也不少烛恤,推薦嗶哩嗶哩 哈哈暴露了·····
下來我們先注冊阿里IOT根據(jù)圖示操作
第一次使用的畫應(yīng)該是立即使用好像母怜,這里很簡單注冊認證就好
下來我們創(chuàng)建一個產(chǎn)品,產(chǎn)品定義通俗的來講就是一個有許多功能的設(shè)備缚柏,比如網(wǎng)絡(luò)攝像機(可能有舵機苹熏,攝像頭,紅外線等等····)
我用的8266所以聯(lián)網(wǎng)方式是WIFI,有些設(shè)備是直接通過網(wǎng)關(guān)連接阿里的
然后開始創(chuàng)建設(shè)備轨域,設(shè)備顧名思義就是一臺機器袱耽。產(chǎn)品和設(shè)備就屬于一種一對多關(guān)系,一個產(chǎn)品就會有多個運行的設(shè)備對吧干发,這樣是不是好理解點朱巨。
主要就是選擇對應(yīng)產(chǎn)品;DeviceName如果不想輸入會默認生成枉长,DeviceName就是方便你查看設(shè)備的狀態(tài)冀续,比如你有100臺設(shè)備你想知道某一臺設(shè)備的情況就需要DeviceName去查詢;備注就隨意看你自己需求
創(chuàng)建完成后會生成一條設(shè)備必峰,可以查看MQTT連接所需要的KEY
上面所指的三個信息也是連接最主要的東西了
接下來阿里還是開發(fā)環(huán)境好洪唐,為我們提供了在線編譯器,省去了我們下載IDE配置環(huán)境等一些麻煩的操作
怎么樣感覺是不是很開森
接下來我們創(chuàng)建項目
這里注意下這個ini文件吼蚁,這個文件就是配置項目依賴的配置文件
打開ini配置些依賴凭需,
是不是想問依賴怎么加的?
然后在頁面下方有個build選項點擊會加載所需要的庫
加載完后需要改些參數(shù)桂敛,這個很重要哦功炮,不然會運行失敗的溅潜。
接下來開始編寫代碼术唬,也就是官方提供的實例代碼很簡單沒什么太多改動。
創(chuàng)建main.ino文件滚澜,名字自己隨意沒啥區(qū)別粗仓,粘貼下面代碼填入自己對應(yīng)的參數(shù)
#include <ESP8266WiFi.h>
#include <ArduinoJson.h>
#include <aliyun_mqtt.h>
// Wifi名稱和密碼,你WemosD1Mini上網(wǎng)時需要接入的Wifi賬號和密碼
#define WIFI_SSID "自家WIFI賬號"
#define WIFI_PASSWD "自家WIFI密碼"
// LP的設(shè)備三元組(PK/DN/DS)根據(jù)你云端創(chuàng)建的設(shè)備三碼進行更改
#define PRODUCT_KEY "阿里云ProductKey"
#define DEVICE_NAME "阿里云DeviceName"
#define DEVICE_SECRET "阿里云DeviceSecret"
// Alink協(xié)議格式和Topic定義 這個部分是固定格式不用進行修改
#define ALINK_BODY_FORMAT "{\"id\":\"123\",\"version\":\"1.0\",\"method\":\"%s\",\"params\":%s}"
#define ALINK_TOPIC_PROP_POST "/sys/" PRODUCT_KEY "/" DEVICE_NAME "/thing/event/property/post"
#define ALINK_TOPIC_PROP_POSTRSP "/sys/" PRODUCT_KEY "/" DEVICE_NAME "/thing/event/property/post_reply"
#define ALINK_TOPIC_PROP_SET "/sys/" PRODUCT_KEY "/" DEVICE_NAME "/thing/service/property/set"
#define ALINK_METHOD_PROP_POST "thing.event.property.post"
// 創(chuàng)建WiFiClient實例
WiFiClient espClient;
//創(chuàng)建MqttClient實例
PubSubClient mqttClient(espClient);
//連接Wifi
void initWifi(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(3000);
}
Serial.println("Wifi is connected.");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
//監(jiān)聽云端下發(fā)的指令
void callback(char *topic, byte *payload, unsigned int length)
{
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
payload[length] = '\0';
Serial.println((char *)payload);
if (strstr(topic, ALINK_TOPIC_PROP_SET))
{
StaticJsonBuffer<200> jsonBuffer;
JsonObject &root = jsonBuffer.parseObject(payload);
if (!root.success())
{
Serial.println("parseObject() failed");
} else {
Serial.println("parseObject() success");
//下一步對收到的云端指令進行處理
}
}
}
//連接Mqtt
void mqttCheckConnect()
{
bool connected = connectAliyunMQTT(mqttClient, PRODUCT_KEY, DEVICE_NAME, DEVICE_SECRET);
if (connected) {
Serial.println("MQTT connect succeed!");
// client.subscribe(ALINK_TOPIC_PROP_POSTRSP);
mqttClient.subscribe(ALINK_TOPIC_PROP_SET); // 訂閱屬性設(shè)置Topic
Serial.println("subscribe done");
}
}
void setup() {
Serial.begin(115200);
initWifi(WIFI_SSID, WIFI_PASSWD); // 連接Wifi
mqttClient.setCallback(callback); // 設(shè)置回調(diào)監(jiān)聽云端下發(fā)的指令
}
void loop() {
mqttCheckConnect(); // MQTT上云
mqttClient.loop();
delay(3000); // 每1秒連接一次
}
再次運行Build看下有沒有異常设捐,應(yīng)該是沒有借浊,有的話檢查下依賴是不是正確,最好和我上面依賴相同萝招,之前發(fā)現(xiàn)阿里有的官方代碼是不支持Json v6只能用v5蚂斤,看下異常log就知道
沒問題的話還需要在下載設(shè)備驅(qū)動,用于我們聯(lián)機刷程序進去
下載完后解壓就好
在刷系統(tǒng)前先看下串口驅(qū)動是否正常槐沼,CH340就是8266曙蒸,如果沒有的小伙伴需要去下載驅(qū)動
沒問題后打開我們解壓出來的run-win.bat
可不要吧這個關(guān)了,不然網(wǎng)頁編輯器識別不到設(shè)備
接著打開在網(wǎng)頁中點擊run選擇自己的設(shè)備串口就等待燒錄成功咯
然后打開阿里云IOT平臺就能看到設(shè)備已激活
下次等我買些硬件就做消息訂閱推送岗钩,這就就這樣
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者