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();//然后关闭本次连接,释放资源
}