完成上一次的基本配置后略水,就要開始測試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ā)郵箱吧灰蛙。
這里說一下自建服務(wù)器的好處就是可以幾乎不限量的使用能量了,每增加一個顯示模塊都需要相應(yīng)的能量隔躲,連接blynk自有服務(wù)器的初始能量僅有2000摩梧,還是挺少的呀。
好了宣旱,測試成功了仅父,后面打算做一個wifi開關(guān),可以遠(yuǎn)程控制并且能讀取實(shí)時的功率浑吟。爭取下一次寫出來吧笙纤。上一張實(shí)物圖吧。
最后還是分享一些資料组力,還是百度網(wǎng)盤省容,如果看不到就私信吧。
鏈接:https://pan.baidu.com/s/1s28AmfZ5EVdF_Ms9GBWRQA 密碼:6xpm
感謝觀看燎字,如有錯誤請私信我腥椒,謝謝。