第一、原理講解
esp8266 通過(guò)mqtt發(fā)布消息,微信小程序通過(guò)mqtt 訂閱消息,小程序訂閱后,就可以實(shí)時(shí)收到esp8266 傳輸來(lái)的消息。
第二、溫濕度測(cè)試
這里使用的是D4口。
本demo 是利用arduino IDE開(kāi)發(fā),關(guān)于arduino IDE 的ESP8266環(huán)境配置可參考:環(huán)境配置: 點(diǎn)擊跳轉(zhuǎn)
安裝庫(kù)
本案例使用一個(gè)非常簡(jiǎn)單易用且與ESP8266配合使用的是Simple DHT傳感器庫(kù)。可以通過(guò)Arduino IDE Library Manager輕松安裝該庫(kù)。
在 arduino IDE上方選項(xiàng)處----> 工具—>管理庫(kù),然后直接搜索dht11即可。點(diǎn)擊安裝庫(kù),如下圖:
測(cè)試程序:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
#include <SimpleDHT.h> // for DHT11, // VCC: 5V or 3V // GND: GND // DATA: 2 int pinDHT11 = D4; SimpleDHT11 dht11(pinDHT11); void setup() { Serial.begin(115200); } void loop() { // start working... Serial.println( "=================================" ); Serial.println( "Sample DHT11..." ); // read without samples. byte temperature = 0; byte humidity = 0; int err = SimpleDHTErrSuccess; if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess) { Serial.print( "Read DHT11 failed, err=" ); Serial.println(err);delay(1000); return ; } Serial.print( "Sample OK: " ); Serial.print((int)temperature); Serial.print( " *C, " ); Serial.print((int)humidity); Serial.println( " H" ); // DHT11 sampling rate is 1HZ. delay(1500); } |
正常工作的話,串口會(huì)正常輸出的,如下圖所示:
第三、溫濕度推送到云端
如果上一步的溫濕度可以讀取輸出,那么就可以在上版的基礎(chǔ)上,把數(shù)據(jù)上傳到云端。
增加了按鈕控制,數(shù)據(jù)用#號(hào)包裹,以便app采用字符串切割,分割出來(lái)數(shù)據(jù),#23#80#on,即#溫度#濕度#按鈕狀態(tài),小程序端會(huì)根據(jù)#號(hào)分割字符串進(jìn)行取值,以便顯示。
如果上傳的數(shù)據(jù)不止溫濕度,可在#號(hào)后面繼續(xù)添加&msg=#23#80#data1#data2#data3#data4#\r\n,app字符串分割的時(shí)候,要根據(jù)上傳的數(shù)據(jù)進(jìn)行分割
升級(jí)版程序下載:
點(diǎn)擊下載 https://cloud.bemfa.com/zip/mqtt/dht11_led.zip
需要修改的地方
1
2
3
4
5
6
7
8
9
10
|
const char* ssid = "newhtc" ; //修改,修改為你的路由的WIFI名字 const char* password = "qq123456" ; //修改為你的WIFI密碼 const char* mqtt_server = "bemfa.com" ; //默認(rèn),MQTT<a href="http://www.zhuxianfei.com/server/" target="_blank" class="infotextkey">服務(wù)器</a>地址 const int mqtt_server_port = 9501; //默認(rèn),MQTT服務(wù)器端口 #define ID_MQTT "4d9ec352e0376f2110a0c601a2857225" //mqtt客戶端ID,修改為你的開(kāi)發(fā)者密鑰 const char* topic = "led002" ; //Led主題名字,可在巴法云控制臺(tái)自行創(chuàng)建,名稱隨意 const char * dhttopic = "temp004" ; //溫濕度主題名字,可在巴法云mqtt控制臺(tái)創(chuàng)建 int pinDHT11 = D4; //dht11傳感器引腳輸入 int B_led = D5; //控制的led引腳 long timeval = 3*1000; //上傳的傳感器時(shí)間間隔,默認(rèn)3秒 |
在巴法mqtt設(shè)備云控制臺(tái) 新建兩個(gè)主題,主題名字隨意,例如temp004 用于傳輸溫濕度,led002用于控制led,本實(shí)例用用temp004和led002使用示例代碼時(shí)應(yīng)修改為自己的主題名字,字母或數(shù)字或字母加數(shù)字組合。UID為用戶私鑰,在 巴法創(chuàng)客云控制臺(tái) 注冊(cè)登陸后可獲得。
注意:在mqtt設(shè)備云創(chuàng)建主題。
登陸完成后,可在控制臺(tái)看到自己的私鑰UID,如圖所示:
WIFI名稱為自己的路由器WIFI名稱,區(qū)分大小寫,寫錯(cuò)會(huì)導(dǎo)致連接不上網(wǎng)絡(luò)的。
例程中,每三秒上傳一次數(shù)據(jù):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
long now = millis(); //獲取當(dāng)前時(shí)間戳 if (now - lastMsg > timeval) { //如果達(dá)到3s,進(jìn)行數(shù)據(jù)上傳 lastMsg = now; // read without samples. byte temperature = 0; byte humidity = 0; int err = SimpleDHTErrSuccess; if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess) { Serial.print( "Read DHT11 failed, err=" ); Serial.println(err); delay(1000); return ; } String msg = "#" + (String)temperature + "#" + (String)humidity + "#" + ledstatus; //數(shù)據(jù)封裝#溫度#濕度#開(kāi)關(guān)狀態(tài)# client.publish(dhttopic, msg.c_str()); //數(shù)據(jù)上傳 } |
如果路由器有網(wǎng)絡(luò)的話,數(shù)據(jù)會(huì)自動(dòng)上傳,可在巴法mqtt設(shè)備云 刷服務(wù)器之家頁(yè),即可看到上傳的數(shù)據(jù)。如下圖所示:
數(shù)據(jù)上傳時(shí)用#號(hào)進(jìn)行了封裝,27是溫度,24是濕度,off是上傳的燈的狀態(tài)。
第四、微信小程序開(kāi)發(fā)
在 微信公眾平臺(tái)注冊(cè)小程序賬號(hào),拿到小程序 appid,右側(cè)點(diǎn)擊 -開(kāi)發(fā)–> 開(kāi)發(fā)管理–>開(kāi)發(fā)設(shè)置---->開(kāi)發(fā)者ID,里面可以看到,長(zhǎng)的大概是這樣:wx34a2063de5cec04b,下面導(dǎo)入項(xiàng)目的時(shí)候會(huì)用到。
右側(cè)點(diǎn)擊 -開(kāi)發(fā)–> 開(kāi)發(fā)管理–>開(kāi)發(fā)設(shè)置---->服務(wù)器域名。下方服務(wù)器域名處,點(diǎn)擊修改,在request合法域名處,和 socket合法域名處 ,分別添加域名https://api.bemfa.com 和wss://bemfa.com 保存提交即可。如下圖。
下載安裝微信開(kāi)發(fā)者工具,可百度下載。
下載demo示例程序。下載地址: 點(diǎn)擊下載
打開(kāi)微信開(kāi)發(fā)者工具,小程序項(xiàng)目,導(dǎo)入項(xiàng)目。在目錄處選擇剛剛下載解壓的demo示例程序,AppID處填入你的小程序AppID,然后點(diǎn)擊下方導(dǎo)入即可。如下圖。
本示例程序非常簡(jiǎn)單,各位大神可以繼續(xù)開(kāi)發(fā)添加各種功能,添加背景,優(yōu)化色彩等等,如果只是簡(jiǎn)單使用,只需修改/pages/index/index.js 文件中uid 和topic 信息為自己的即可,這里的uid和topic需要和esp8266填入的uid和topic相同,這里有兩個(gè)主題,一個(gè)用于傳輸溫度和濕度,一個(gè)用于控制LED。如下圖。
1
2
3
4
5
6
7
8
9
10
11
12
|
data: { uid: "4d9ec352e0376f2110a0c601a2857225" , //用戶密鑰,巴法云控制臺(tái)獲取 ledtopic: "led002" , //控制led的主題,mqtt控制臺(tái)創(chuàng)建 dhttopic: "temp004" , //傳輸溫濕度的主題,控制臺(tái)創(chuàng)建 device_status: "離線" , // 顯示led是否在線的字符串,默認(rèn)離線 ledOnOff: "關(guān)閉" , checked: false , //led的狀態(tài)。默認(rèn)led關(guān)閉 wendu: "" , //溫度值,默認(rèn)為空 shidu: "" , //濕度值,默認(rèn)為空 ledicon: "/utils/img/lightoff.png" , //顯示led圖標(biāo)的狀態(tài)。默認(rèn)是關(guān)閉狀態(tài)圖標(biāo) client: null , //mqtt客戶端,默認(rèn)為空 }, |
修改完畢后,ctrl+s 保存修改。可以點(diǎn)擊左邊屏幕上的按鈕進(jìn)行調(diào)試,如下圖。
console控制臺(tái)可以查看小程序的調(diào)試信息。默認(rèn)每3秒會(huì)自動(dòng)請(qǐng)求一下服務(wù)器上的數(shù)據(jù),查看esp8266的狀態(tài)信息。點(diǎn)擊打開(kāi)或者關(guān)閉按鈕,打開(kāi)esp8266串口調(diào)試助手,可查看esp8266是否收到指令,如果第一步esp8266已聯(lián)網(wǎng),都是可以收到信息的。
如果界面和其他功能都開(kāi)發(fā)完畢。可以點(diǎn)擊微信開(kāi)發(fā)者工具的上面的上傳按鈕,如下圖。
上傳成功后,再登陸剛剛注冊(cè)的微信公眾平臺(tái),在版本管理處,可以看到自己剛剛上傳的小程序,提交審核即可,等一天左右,一般都會(huì)通過(guò),通過(guò)后登陸微信公眾平臺(tái),提交發(fā)布即可。如果是自己使用的,做好加上登陸驗(yàn)證功能,比如驗(yàn)證匹配一下某個(gè)字符串是否正確等等,不然小程序上線后別人也可以隨意控制了。
到此這篇關(guān)于微信小程序+mqtt,esp8266溫濕度讀取的文章就介紹到這了,更多相關(guān)微信小程序esp8266溫濕度讀取內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!
原文鏈接:https://bemfa.blog.csdn.net/article/details/115282152