目錄
前言
一、準備工具
二、百度天工物聯網平臺的搭建
三、Arduino IDE 環境的搭建和代碼
四、微信小程式的搭建和代碼
前言
基于MQTT協議借助百度天工物聯網平臺,通過Arduino IDE燒錄程式,實作微信小程式下發指令到ESP8266 Node MCU,從而簡單控制小車的前進、后退、左右轉,
作為一個實打實的新手,自己對這方面可以說是完全不了解,我在看了B站的視頻以及很多博客之后,最后選擇跟著安信可科技發布的B站視頻一步步來做:https://www.bilibili.com/video/BV1W7411o7cg
當然,這個視頻的發布也在一年前了,現在會有一些內容上的更新,我會在下面提及,我在跟著安裝IDE環境的時候并未成功,最后在Arduino IDE上燒錄的程式,另外還有一些我遇到的問題和坑都會在下文中進行說明,
一、準備工具
- 小車底盤、電池、電機驅動模塊(我用的逐飛科技)、舵機
- esp8266Node Mcu 12-E(安信可科技)、連接電腦的串口線
- 百度天工物聯網平臺 物聯網核心套件_物聯網接入-百度智能云 (baidu.com) 如果是第一次使用需要打開物聯網接入的功能
- Arduino IDE http://www.taichi-maker.com/homepage/download/#software-download
- 微信開發者工具 微信公眾平臺 (qq.com)
二、百度天工物聯網平臺的搭建
在打開物接入平臺的功能后,進入控制臺,

創建專案,選擇地域,填寫自己的專案名稱以及描述,選擇專案型別為資料型,

創建完專案之后,點擊藍色專案名稱進入專案串列

創建策略,如果需要微信端下發指令到ESP8266端,同時需要微信端接受8266的反饋資訊,則創建兩個主題分別由微信端和8266端訂閱和發布,這里要注意的是:微信端訂閱的主題是8266端要發布的主題,同樣8266端訂閱的主題是微信端發布的主題,

創建身份,選擇密碼驗證,點擊下一步,選擇剛剛創建的策略,點擊下一步完成身份的創建,保存好身份密匙,這是8266和微信小程式連接MQTT服務器的密碼,



點擊用戶串列創建用戶,首先創建微信小程式端用戶,選擇身份為剛剛創建的身份以及剛剛創建的策略,同樣,創建8266端用戶,


至此,服務器基本搭建完成,
三、Arduino IDE 環境的搭建和代碼
由于要實作微信小程式遠程遙控小車的功能需要WIFI功能的參與,所以需要對Arduino配置WiFi環境,
打開Arduino IDE,點擊工具——>開發板——>開發板管理器,輸入ESP8266,然后下載出現的8266庫,需要注意的是由于這里是在Arduino的后臺官網下載,所以下載可能會失敗,而且不止一次,我的解決辦法是當下載失敗,就是出現紅色錯誤的時候,斷開無線網,連接自己的手機熱點,即只要下載不動了,就在WiFi和手機熱點之間來回切換,反復橫跳,所用流量大概在300M左右,

下載完成后,點擊工具——>開發板,選擇NodeMcu 1.0即可,
接著,下載連接MQTT服務器的相關庫,點擊專案——加載庫——管理庫,輸入PubSubClient下載,

這樣就基本完成了IDE的配置,
然后在IDE環境中撰寫代碼,燒錄進8266中,
其中百度天工中創建的服務器地址

要訂閱和發布的主題

服務器的用戶名

用戶串列中8266端的用戶名,點擊連接測驗為用戶ID


#include <ESP8266WiFi.h>
#include <PubSubClient.h>
const char* STA_SSID = "8266連接WiFi名稱";
const char* PSD = "WiFi密碼";
const char *mqtt_server = "百度天工中創建的服務器地址";
const char *subTopic = "要訂閱的主題";
const char *pubTopic = "要發布的主題";
const char *client_id = "用戶串列中8266端的用戶名";
const char *mqtt_username = "服務器的用戶名";
const char *mqtt_password = "創建身份時記下用來連接MQTT的密碼";
WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient); //定義MQTT客戶端
void setup() {
Serial.begin(9600);
WiFi.begin(STA_SSID, PSD); // 啟動網路連接
Serial.print("Connecting to "); // 串口監視器輸出網路連接資訊
Serial.print(STA_SSID); Serial.println(" ..."); // 告知用戶NodeMCU正在嘗試WiFi連接
int i = 0; // 這一段程式陳述句用于檢查WiFi是否連接成功
while (WiFi.status() != WL_CONNECTED) { // WiFi.status()函式的回傳值是由NodeMCU的
WiFi連接狀態所決定的,
delay(1000); // 如果WiFi連接成功則回傳值為WL_CONNECTED
Serial.print(i++); Serial.print(' '); // 此處通過While回圈讓NodeMCU每隔一秒鐘檢查一次WiFi.status()函式回傳值
} // 同時NodeMCU將通過串口監視器輸出連接時長讀
秒,
// 這個讀秒是通過變數i每隔一秒自加1來實作的,
Serial.println(""); // WiFi連接成功后
Serial.println("Connection established!"); // NodeMCU將通過串口監視器輸出"連接成功"信
息,
Serial.print("IP address: "); // 同時還將輸出NodeMCU的IP地址,這一功能是通
過呼叫
Serial.println(WiFi.localIP()); // WiFi.localIP()函式來實作的,該函式的回傳值
即NodeMCU的IP地址,
mqttClient.setServer(mqtt_server, 1883); //設定MQTT服務器與使用的埠,1883是默認的MQTT埠
mqttClient.setCallback(callback); //設定回呼方式,當ESP8266收到訂閱訊息時會呼叫此方法
delay(1500);
}
//這里就開始進行MQTT的回呼,就是當收到服務器傳來的資訊之后可以對ESP8266執行相應的動作,
void callback(char *topic, byte *payload, unsigned int length)
{
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
Serial.println();
Serial.println(String(length));
for (int i = 0; i < length; i++)
{
Serial.print((char)payload[i]);
}
Serial.println();
}
void reconnect() //為防止MQTT服務器下線,當斷開服務時嘗試重新連接/
{
while (!mqttClient.connected())
{
Serial.print("Attempting MQTT connection...");
// Attempt to connect
if (mqttClient.connect(client_id, mqtt_username, mqtt_password))
{
Serial.println("connected");
if (mqttClient.subscribe(subTopic, 1))
{
Serial.println("subscribe success");
}
else
{
Serial.println("subscribe fail");
}
}
else
{
Serial.print("failed, rc=");
Serial.print(mqttClient.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);
}
}
}
進行燒錄的時候,用串口線將8266接在電腦上,通過設備管理器——


埠查看COM埠號,設定Arduino中接入的為相應的埠,

然后進行燒錄,燒錄成功后按下8266上的復位按鍵,可以在串口檢測器上看到WiFi連接成功和服務器連接成功,

四、微信小程式的搭建和代碼
打開微信開發者工具,我這里使用的是測驗號,自己修改專案名稱,定義目錄,其他不做修改點擊確定,

接著下載連接MQTT服務器的第三方庫,打開下面的鏈接,右鍵另存為一個mqtt檔案,將次此檔案復制放在你創建的小程式目錄的utils中,
https://unpkg.com/mqtt@2.18.8/dist/mqtt.js

我這里不涉及微信小程式界面的代碼,請自行在網上尋找,
小程式連接服務器以后寫吧...累人.....
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/295255.html
標籤:其他
上一篇:(四十六:2021.08.17)《醫療物聯網單導聯心電波心房顫動檢測研究》
下一篇:2021-08-19
