基于Arduino用Esp8266的幾種控制模式
用ESP8266控制IO端,并回報IO端的狀态。常用的模式是web端代碼插入程式中。手機或電腦通路ip位址,web端給出端口信号,然後程式給出相應信号。 有必要時,回報IO端信号到web端。 有幾種控制模式如下(《C0》《C2》是兩種不同的基礎控制方法):
一,C語言+html代碼打包一起上傳。 通路網址控制和 IO端回報IO端狀态。
這一種是常用的方式,連接配接ARDUINO, 更新相關的庫檔案,選擇闆的型号,端口号。編譯上傳。 附件中有兩個方法:《C0語言11.txt》m?x1=1
可以回報IO信号《C2語言20.txt》mx1/1 《C0》相較于《C2》後者能回報每個端口的狀态。在可視化的web端,視覺效果更好。 整理html 代碼插入程式中 常用兩個工具《UTF-8 轉換工具.html》《Html壓縮整理工具2.html》具體方法可以參考基于Arduino 用Esp8266燒錄Html檔案,實作手機電腦通路内置網頁控制裝置開和關!(一)
二,C語言+傳回代碼打包一起上傳。 html代碼在手機電腦中打開控制。m?x1=1,mx1/1
這個和《一》有些不一樣,《一》中的web端代碼 改成通路0.001秒傳回上一級。利用這個功能,我們在控制IO端口時,可以直接打開html 或将 html打包成app 。 示例參考《C0語言11通路并傳回.txt》 《C0》《C2》兩種控制方式,但是《C2》不能回報IO端口的信号。 相較于《一》優勢是web端和APP可以做的更好看一些。不用限制于1M的記憶體。
三,C語言+SPIFFS 打包一起上傳。html圖檔css再上傳。
參考示例《C0語言11SPIFFS檔案系統21簡.txt》 和《二》類似,差別在于《二》html 和app是存儲在手機或電腦中,《三》存儲在esp8266另外的3M記憶體中,不同的晶片記憶體不一樣,安裝 SPIFFS ,見附件 Tool 安裝到arduino tools 中 重新開機 。選擇工具Flash size 再上傳程式, 然後 工具ESP8266 Upload。更新 html css 圖檔,或其他檔案。

四,在一的基礎上 OTA無線更新
示例《C0語言11OTA無線更新.txt》 《C2語言20OTA無線更新.txt》
第一次燒寫時連接配接電腦, 會在端口看到一個新的esp8266-xxxxx 192.168.xx.xxx" 的菜單項 選中,拔掉esp接上電源。 esp可以通過網絡端口更新程式。相較于《一》不用連接配接電腦更新程式。在以後esp已經應用到實際生活中,不友善拆卸時,可以用此類方法更新程式。 WIFI密碼,端口号。源碼見《C0語言11OTA源碼.txt》
#include <ESP8266WebServer.h>
#include <ArduinoOTA.h>
const char* ssid = "XXXX"; // WIFI名和密碼
const char* password = "XXXXXXXXX";
void setup() { Serial.begin(115200); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password);
while (WiFi.waitForConnectResult() != WL_CONNECTED) { Serial.println("Failed"); delay(5000); ESP.restart(); }
ArduinoOTA.begin(); // 開啟 arduino 的 OTA
Serial.print("IP address: "); Serial.println(WiFi.localIP());
pinMode(2, OUTPUT); digitalWrite(2, LOW);
pinMode(4, OUTPUT); digitalWrite(4, HIGH);
}
void loop() { ArduinoOTA.handle(); }
小記:
一,在控制家中電器裝置時,需要多個esp,最好是一個房間安裝一個。這樣給每個esp 配置設定一個固定的IP位址更友善控制。路由器指定ip。
或《設定靜态IP和hostname.txt》
IPAddress local_IP(192, 168, 31, 200);IPAddress gateway(192, 168, 31, 1);IPAddress subnet(255, 255, 255, 0);// 以下 String html = " "; 是網頁部分
void setup(void){
Serial.begin(115200);
WiFi.config(local_IP, gateway, subnet); WiFi.mode(WIFI_STA); //設定靜态IP}
void loop(void){ }
二, 《C2》示例中,定義端口的狀态,回報到web端,示例二,縮寫
String s = "<div style=\"font-size: 280px; color: red ;\">";
s += (val0) ? "H" : "L";
s += (val1) ? "A" : "B";
s += "</div>";
String a = (val0)?"H":"L";
String b = (val1)?"A":"B";
String s = "<div style=\"font-size: 280px; color: red ;\">" + a + b + "</div>";
"+a+"
" + a + b + "
附件截圖下載下傳: