微信小程序+mqtt,esp8266溫濕度讀取的實現(xiàn)方法
第一、原理講解
esp8266 通過mqtt發(fā)布消息,微信小程序通過mqtt 訂閱消息,小程序訂閱后,就可以實時收到esp8266 傳輸來的消息。
第二、溫濕度測試
這里使用的是D4口。
本demo 是利用arduino IDE開發(fā),關(guān)于arduino IDE 的ESP8266環(huán)境配置可參考:環(huán)境配置: 點擊跳轉(zhuǎn)
安裝庫
本案例使用一個非常簡單易用且與ESP8266配合使用的是Simple DHT傳感器庫??梢酝ㄟ^Arduino IDE Library Manager輕松安裝該庫。
在 arduino IDE上方選項處----> 工具—>管理庫,然后直接搜索dht11即可。點擊安裝庫,如下圖:
測試程序:
#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); }
正常工作的話,串口會正常輸出的,如下圖所示:
第三、溫濕度推送到云端
如果上一步的溫濕度可以讀取輸出,那么就可以在上版的基礎(chǔ)上,把數(shù)據(jù)上傳到云端。
增加了按鈕控制,數(shù)據(jù)用#號包裹,以便app采用字符串切割,分割出來數(shù)據(jù),#23#80#on,即#溫度#濕度#按鈕狀態(tài),小程序端會根據(jù)#號分割字符串進(jìn)行取值,以便顯示。
如果上傳的數(shù)據(jù)不止溫濕度,可在#號后面繼續(xù)添加&msg=#23#80#data1#data2#data3#data4#\r\n,app字符串分割的時候,要根據(jù)上傳的數(shù)據(jù)進(jìn)行分割
升級版程序下載:
點擊下載 https://cloud.bemfa.com/zip/mqtt/dht11_led.zip
需要修改的地方
const char* ssid = "newhtc"; //修改,修改為你的路由的WIFI名字 const char* password = "qq123456"; //修改為你的WIFI密碼 const char* mqtt_server = "bemfa.com"; //默認(rèn),MQTT服務(wù)器地址 const int mqtt_server_port = 9501; //默認(rèn),MQTT服務(wù)器端口 #define ID_MQTT "4d9ec352e0376f2110a0c601a2857225" //mqtt客戶端ID,修改為你的開發(fā)者密鑰 const char* topic = "led002"; //Led主題名字,可在巴法云控制臺自行創(chuàng)建,名稱隨意 const char * dhttopic = "temp004"; //溫濕度主題名字,可在巴法云mqtt控制臺創(chuàng)建 int pinDHT11 = D4; //dht11傳感器引腳輸入 int B_led = D5; //控制的led引腳 long timeval = 3*1000; //上傳的傳感器時間間隔,默認(rèn)3秒
在巴法mqtt設(shè)備云控制臺 新建兩個主題,主題名字隨意,例如temp004 用于傳輸溫濕度,led002用于控制led,本實例用用temp004和led002使用示例代碼時應(yīng)修改為自己的主題名字,字母或數(shù)字或字母加數(shù)字組合。UID為用戶私鑰,在 巴法創(chuàng)客云控制臺 注冊登陸后可獲得。
注意:在mqtt設(shè)備云創(chuàng)建主題。
登陸完成后,可在控制臺看到自己的私鑰UID,如圖所示:
WIFI名稱為自己的路由器WIFI名稱,區(qū)分大小寫,寫錯會導(dǎo)致連接不上網(wǎng)絡(luò)的。
例程中,每三秒上傳一次數(shù)據(jù):
long now = millis();//獲取當(dāng)前時間戳 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ù)封裝#溫度#濕度#開關(guān)狀態(tài)# client.publish(dhttopic, msg.c_str());//數(shù)據(jù)上傳 }
如果路由器有網(wǎng)絡(luò)的話,數(shù)據(jù)會自動上傳,可在巴法mqtt設(shè)備云 刷新網(wǎng)頁,即可看到上傳的數(shù)據(jù)。如下圖所示:
數(shù)據(jù)上傳時用#號進(jìn)行了封裝,27是溫度,24是濕度,off是上傳的燈的狀態(tài)。
第四、微信小程序開發(fā)
在 微信公眾平臺注冊小程序賬號,拿到小程序 appid,右側(cè)點擊 -開發(fā)–> 開發(fā)管理–>開發(fā)設(shè)置---->開發(fā)者ID,里面可以看到,長的大概是這樣:wx34a2063de5cec04b,下面導(dǎo)入項目的時候會用到。
右側(cè)點擊 -開發(fā)–> 開發(fā)管理–>開發(fā)設(shè)置---->服務(wù)器域名。下方服務(wù)器域名處,點擊修改,在request合法域名處,和 socket合法域名處 ,分別添加域名https://api.bemfa.com 和wss://bemfa.com 保存提交即可。如下圖。
下載安裝微信開發(fā)者工具,可百度下載。
下載demo示例程序。下載地址: 點擊下載
打開微信開發(fā)者工具,小程序項目,導(dǎo)入項目。在目錄處選擇剛剛下載解壓的demo示例程序,AppID處填入你的小程序AppID,然后點擊下方導(dǎo)入即可。如下圖。
本示例程序非常簡單,各位大神可以繼續(xù)開發(fā)添加各種功能,添加背景,優(yōu)化色彩等等,如果只是簡單使用,只需修改/pages/index/index.js 文件中uid 和topic 信息為自己的即可,這里的uid和topic需要和esp8266填入的uid和topic相同,這里有兩個主題,一個用于傳輸溫度和濕度,一個用于控制LED。如下圖。
data: { uid:"4d9ec352e0376f2110a0c601a2857225",//用戶密鑰,巴法云控制臺獲取 ledtopic:"led002",//控制led的主題,mqtt控制臺創(chuàng)建 dhttopic:"temp004",//傳輸溫濕度的主題,控制臺創(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 保存修改??梢渣c擊左邊屏幕上的按鈕進(jìn)行調(diào)試,如下圖。
console控制臺可以查看小程序的調(diào)試信息。默認(rèn)每3秒會自動請求一下服務(wù)器上的數(shù)據(jù),查看esp8266的狀態(tài)信息。點擊打開或者關(guān)閉按鈕,打開esp8266串口調(diào)試助手,可查看esp8266是否收到指令,如果第一步esp8266已聯(lián)網(wǎng),都是可以收到信息的。
如果界面和其他功能都開發(fā)完畢??梢渣c擊微信開發(fā)者工具的上面的上傳按鈕,如下圖。
上傳成功后,再登陸剛剛注冊的微信公眾平臺,在版本管理處,可以看到自己剛剛上傳的小程序,提交審核即可,等一天左右,一般都會通過,通過后登陸微信公眾平臺,提交發(fā)布即可。如果是自己使用的,做好加上登陸驗證功能,比如驗證匹配一下某個字符串是否正確等等,不然小程序上線后別人也可以隨意控制了。
到此這篇關(guān)于微信小程序+mqtt,esp8266溫濕度讀取的文章就介紹到這了,更多相關(guān)微信小程序esp8266溫濕度讀取內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Javascript 獲取鏈接(url)參數(shù)的方法
Javascript 獲取鏈接(url)參數(shù)的實現(xiàn)方法2009-02-02用云開發(fā)Cloudbase實現(xiàn)小程序多圖片內(nèi)容安全監(jiān)測的代碼詳解
這篇文章主要介紹了用云開發(fā)Cloudbase實現(xiàn)小程序多圖片內(nèi)容安全監(jiān)測,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06通過js隨機(jī)函數(shù)Math.random實現(xiàn)亂序
這篇文章主要介紹了通過js隨機(jī)函數(shù)Math.random實現(xiàn)亂序,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-05-05JS實現(xiàn)數(shù)組/對象數(shù)組刪除其中某一項
這篇文章主要介紹了JS實現(xiàn)數(shù)組/對象數(shù)組刪除其中某一項,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09bootstrap 下拉多選框進(jìn)行多選傳值問題代碼分析
項目開發(fā)遇到個問題,就是引入bootstrap下拉多選框進(jìn)行多選的時候,用form表單提交到后臺,獲取不到多選的值,只能獲取的選擇的第一個值,怎么回事呢?下面小編給大家分析下bootstrap 下拉多選框進(jìn)行多選傳值問題,一起看看吧2017-02-02JavaScript中判斷頁面關(guān)閉、頁面刷新的實現(xiàn)代碼
這篇文章主要介紹了JavaScript中判斷頁面關(guān)閉、頁面刷新的實現(xiàn)代碼,在一些特殊的場合中會用到這個技術(shù),需要的朋友可以參考下2014-08-08Google 爬蟲如何抓取 JavaScript 的內(nèi)容
我們測試了谷歌爬蟲是如何抓取 JavaScript,下面就是我們從中學(xué)習(xí)到的知識,需要的朋友可以參考下2017-04-04