EEPROM
斷電後可記錄數據。通常用於單片機的初始化數據參數的保存或系統數參數的保存。
EEPROM的使用
- EEPROM的配置
- include <EEPROM.h>
- EEPROM.Begin(512)會佔用內存使用完畢後釋放內存EEPROM.End()此點在示例中未得到進一步的證實,需在使用中遇到後進一步的驗證。
- EEPROM.read(addr,byte); EEPROM.write(addr, byte);
- 對於複雜數據EEPROM.get(addr,obj); EEPROM.put(addr,obj);
- myobj cusVar={ String field1; const char* field2;}
字符串與char的處理
1.String 轉爲 char[](const char* pp)
pp=Str.c_str();
2.char[] 轉爲 String()
String(pp);
3.const char* t;
String f=“abcde”;
t=&f[0];
4.在struct中用char m[20];來定義字符串
在使用中strcpy(customVar2.sname,assid.c_str());
預置頁面
前綴加入此句
String(“HTTP/1.1 200 OK\r\n”) +
“Content-Type: text/html\r\n” +
“Connection: close\r\n” + // the connection will be closed after completion of the response
“\r\n” +
"
函數可以寫成這樣
“function su(F,args){\n”+
“var saction=’’;\n”+
“for(var i=0;i<args.length;i++){\n”+
“var m0=F.concat(’-’).concat(args[i]).concat(’-’);\n”+
“var m1=(’-’).concat(F).concat(’-’).concat(args[i]);\n”+
“var s=document.getElementById(F.concat(’-’).concat(args[i])).value;\n”+
“saction=saction.concat((m0.concat(s)).concat(m1).concat(’|’));\n”+
“}\n”+
“console.log(saction);\n”+
“document.getElementById((‘F-’).concat(F)).action=saction;\n”+
“document.getElementById((‘F-’).concat(F)).submit();\n”+
“}\n”+
表單可以寫成這樣
“<form id='F-N1' action='N1'>"+
"<label>主機名稱:</label><input id='N1-1' type='text'><br>"+
"<label>主機密碼:</label><input id='N1-2' type='text'><br>"+
"<input class='button button-off' type='button' value='保存主機信息' onclick='javascript:su(\"N1\",[\"1\",\"2\"]);' >"+
</form>\n”+
在操作EEPROM時爲了不礙單機片的日常使用速度需做初始化設置處理
此處初始化設置處理採用的 ArduinoOTA
ArduinoOTA的使用
開機初始化參數
WiFiServer server(80); //創建tcp server
1.在setup中設置
a.EEPROM.begin(128);
b.設置查看系統初始化參數的函數,當然這個函數的設置是用來讀取EEPROM中的數據
EEPROM.get(addr,customVar1);
賦值給單片機,如是wifi模塊則對熱點參,路由參數數據進行賦值
WiFi.mod(WIFI_AP_STA);
WiFi.softAP(assid,asecret);
server.begin();啓動tcp服務
c.設置 ArduinoOTA服務
ArduinoOTA.setHostname(""xyWebOTA");
ArduinoOTA.begin();
2.在運行中進行監測
通過監測初始化的配置狀態來讀取初始化數據,爲防置在setup中漏檢初始化數據。
通過監測設備初始化設置狀態來決定是否要執行OTA()
通過以上的監測過後可進行常規的單片機運轉。
3.OTA()的執行
1.先開啓 ArduinoOTA.handle()
2.WiFiClient client=server.available();監測客戶端的訪問
if(client){
while(client.connected()){ //不斷監測請求內容,
if(client.available()){ //如果有請求
//取得請求地址
String line=client.readStringUntil(’\r’);
//如果含有某個參數說明是表單提交了 ,對得參數數據後調用writeEEPROM
line.indexOf("")>0{}
//如果無請求的參數(line.length()1) && line[0]’\n’){client.println(調用預置頁函數)}
}
}
delay(1) //給瀏覽器接收數據的時間
client.flush();//然後關閉本次連接,釋放資源
}