使用NodeMCU和Blynk一步一步搭建物聯(lián)網(wǎng)小玩具(二)

完成上一次的基本配置后略水,就要開始測試APP了徽诲,先做一個能顯示溫濕度的小玩具吧森瘪。

啟動web服務(wù)

根據(jù)文檔介紹牡属,使用ESP8266WebServer的例子寫一個配置頁面,用來引導(dǎo)用戶保存配置信息到文件系統(tǒng)扼睬,這里我也是參考了好多資料(在第一部分中有介紹)為了界面美觀又要提升讀取的速度使用了Ajax的方式逮栅,html的代碼就不做過多介紹了,可以看百度網(wǎng)盤的文件自行修改。

這里主要說一下 server.on函數(shù)是將頁面指定到相應(yīng)的處理函數(shù)措伐,另外就是server.serveStatic這個函數(shù)特纤,文檔中沒有具體介紹但是比起我一開始使用的 server.streamFile函數(shù)先讀取文件到一個file中,然后再加載到streamFile中要好用的多了侥加,代碼簡潔了也不用在定義一個file的臨時變量了捧存。

void startWebServer()

{

????Serial.println("startWebServer begin");

????server.on("/", handleIndex);

????server.on("/saveconfig", handleSaveConfig);

????server.on("/reset", handleResetChip);

????server.on("/loadstate", handleLoadState);

????server.serveStatic("/css", SPIFFS, "/css");

????server.begin();

}

下面就是讀取配置信息然后測試連接wifi并返回相應(yīng)的狀態(tài),如果沒有讀取到配置信息或wifi連接失敗担败,模塊將啟動到AP模式進(jìn)行配置(默認(rèn)地址為:192.168.4.1)昔穴。

void loadWifiConfig()

{

? ????Serial.println("loadWifiConfig begin");

? ????pinMode(D0,OUTPUT);

? ????pinMode(D4,OUTPUT);

? ????digitalWrite(D4, 1);

? ????for(int l=0; l<3; l++)

?????{

????????????digitalWrite(D0,0);

? ? ????????delay(500);

? ? ????????digitalWrite(D0,1);

? ? ????????delay(500);

? ????}

????SPIFFS.begin();

? ? File file = SPIFFS.open(configfile,"r");

????ssid = file.readStringUntil('\n');

????pass = file.readStringUntil('\n');

????auth = file.readStringUntil('\n');

????addr = file.readStringUntil('\n');

????port = file.readStringUntil('\n');

????file.close();

????ssid.trim();

????pass.trim();

????auth.trim();

????addr.trim();

????port.trim();

? //Serial.println(ssid+","+pass+","+auth+","+addr+","+port);

????if (ssid != "")

????{

? ? ????WiFi.disconnect();

????????WiFi.mode(WIFI_STA);

????????WiFi.begin(ssid.c_str(), pass.c_str());

????????for (int i = 0; i < 12; ++i)

????????{

? ? ? ????????Serial.println("test connect "+ (String)i);

?????????????if (WiFi.status() == WL_CONNECTED)

????????????{

????????????????digitalWrite(D0, 0);

????????????????wifiChecked = true;

? ? ? ? ????????Serial.println(WiFi.localIP());

? ? ? ????????? break;

????????????}

? ? ? ????digitalWrite(D0, 0);

????????delay(1000);

????????digitalWrite(D0, 1);

? ? ? ? ?delay(1000);

????????}

????}

????if (!wifiChecked)

????{

????????WiFi.mode(WIFI_AP);

????????String apssid = "ESP_" + (String)ESP.getChipId();

????????WiFi.softAP(apssid.c_str());

? ? ? ? Serial.println("ap mode");

????}

????startWebServer();

}

以上是模塊的聯(lián)網(wǎng)配置部分由于對C語言也不是很熟,所以將上面的內(nèi)容放到了一個h文件中氢架。下面要進(jìn)行Blynk的連接測試了傻咖,我把這部分放到項目的seup函數(shù)中。

void setup() {

? // put your setup code here, to run once:

? Serial.begin(115200);

? Serial.println("setup begin");

? loadWifiConfig();

? //設(shè)置Blynk的端口默認(rèn)值

? if(port == "") port = "8080";

? if(wifiChecked) {

? ? //讀取Blynk的服務(wù)器配置信息岖研,否者將連接到blynk的默認(rèn)服務(wù)器

? ? if(addr != "") {

? ? ? Blynk.config(auth.c_str(),addr.c_str(),port.toInt());

? ? } else {

? ? ? Blynk.config(auth.c_str());

? ? }

? ? //嘗試連接Blynk服務(wù)器

? ? for(int i = 0; i < 10; i++) {

? ? ? Serial.println("*");

? ? ? if(Blynk.connect()) {

? ? ? ? //連接成功點(diǎn)亮ESP8266芯片的led指示燈卿操,否則關(guān)閉led。

? ? ? ? digitalWrite(D4,0);

? ? ? ? blynkChecked = true;

? ? ? ? timer.setInterval(2000, readDHT11Value);

? ? ? ? Serial.println("blynk connected success");

? ? ? ? return;

? ? ? }

? ? ? delay(1000);

? ? }

? ? digitalWrite(D4,1);

? ? Serial.println("blynk connected faild");

? }

}

同樣在loop函數(shù)中做了一些wifi和blynk的狀態(tài)檢查孙援。

void loop() {

? // put your main code here, to run repeatedly:

? //網(wǎng)頁服務(wù)器響應(yīng)客戶端請求害淤。

? server.handleClient();

? //檢查wifi和blynk的連接狀態(tài)。

? if(Blynk.connected())

? {

? ? digitalWrite(D4,0);

? ? Blynk.run();

? ? timer.run();

? }

? else

? {

? ? Blynk.connect();

? ? blynkChecked = false;

? ? digitalWrite(D4,1);

? }

? if(WiFi.status() != WL_CONNECTED)

? {

? ? digitalWrite(D0, 0);

? ? delay(500);

? ? digitalWrite(D0, 1);

? }

}

以上的內(nèi)容有可能處理的不是很完美拓售,希望大家優(yōu)化代碼后發(fā)給我窥摄。下面是配置頁面,由于Blynk的自有服務(wù)器國內(nèi)連接不穩(wěn)定础淤,所以自建了一個服務(wù)崭放,感謝blynk這些開源項目(遺憾的是自建服務(wù)器不可以生成定制的app),讓我們可以愉快的進(jìn)行測試鸽凶,有需要測試的朋友可以私聊哦币砂。

配置頁面

增加傳感器模塊進(jìn)行測試吧

這里我只加了一個溫濕度模塊DHT11,簡單測試一下玻侥。

//讀取溫濕度决摧,并將數(shù)值寫入兩個虛擬引腳中。

void readDHT11Value()

{

? byte h = 0;

? byte t = 0;

? dht11.read(D5,&t,&h,NULL);

? Blynk.virtualWrite(4,(int)h);

? Blynk.virtualWrite(5,(int)t);

}

安裝APP吧

下面可以安裝app了凑兰,安卓版可以在華為商城里面下載掌桩,也可以去墻外下載最新版。其實(shí)我第一篇的內(nèi)容中所有的軟件都有分享姑食,但是被百度網(wǎng)盤屏蔽了波岛,最后才發(fā)現(xiàn)是這個app的原因,刪除后就可以分享了音半。不過沒關(guān)系盆色,有需要的私信我發(fā)郵箱吧灰蛙。


連接blynk服務(wù)器


增加顯示模塊

這里說一下自建服務(wù)器的好處就是可以幾乎不限量的使用能量了,每增加一個顯示模塊都需要相應(yīng)的能量隔躲,連接blynk自有服務(wù)器的初始能量僅有2000摩梧,還是挺少的呀。

配置相應(yīng)的顯示信息針腳


顯示效果圖

好了宣旱,測試成功了仅父,后面打算做一個wifi開關(guān),可以遠(yuǎn)程控制并且能讀取實(shí)時的功率浑吟。爭取下一次寫出來吧笙纤。上一張實(shí)物圖吧。

實(shí)物圖

最后還是分享一些資料组力,還是百度網(wǎng)盤省容,如果看不到就私信吧。

鏈接:https://pan.baidu.com/s/1s28AmfZ5EVdF_Ms9GBWRQA 密碼:6xpm

感謝觀看燎字,如有錯誤請私信我腥椒,謝謝。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末候衍,一起剝皮案震驚了整個濱河市笼蛛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蛉鹿,老刑警劉巖滨砍,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異妖异,居然都是意外死亡惋戏,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門他膳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來响逢,“玉大人,你說我怎么就攤上這事矩乐×渚洌” “怎么了回论?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵散罕,是天一觀的道長。 經(jīng)常有香客問我傀蓉,道長欧漱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任葬燎,我火速辦了婚禮误甚,結(jié)果婚禮上缚甩,老公的妹妹穿的比我還像新娘。我一直安慰自己窑邦,他們只是感情好擅威,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著冈钦,像睡著了一般郊丛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瞧筛,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天厉熟,我揣著相機(jī)與錄音,去河邊找鬼较幌。 笑死揍瑟,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的乍炉。 我是一名探鬼主播绢片,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼恩急!你這毒婦竟也來了杉畜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤衷恭,失蹤者是張志新(化名)和其女友劉穎此叠,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體随珠,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡灭袁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了窗看。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片茸歧。...
    茶點(diǎn)故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖显沈,靈堂內(nèi)的尸體忽然破棺而出软瞎,到底是詐尸還是另有隱情,我是刑警寧澤拉讯,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布涤浇,位于F島的核電站,受9級特大地震影響魔慷,放射性物質(zhì)發(fā)生泄漏只锭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一院尔、第九天 我趴在偏房一處隱蔽的房頂上張望蜻展。 院中可真熱鬧喉誊,春花似錦、人聲如沸纵顾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽施逾。三九已至幻林,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間音念,已是汗流浹背沪饺。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留闷愤,地道東北人整葡。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像讥脐,于是被迫代替她去往敵國和親遭居。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容