基於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 + "