首先感谢“单片机菜鸟哥”给予的原码思路及帮助。
自己做天气时钟已经有一段时间了,照着各位大神的教程几下就可以完成一个“作品”。但作完之后总感觉不满意,于是各种改,苦于各方面的知识有限,于是各种恶补。但还是不得要领,很多东西拿现成的是没有的,比如显示农历,配网时输入和风天气key和城市Id。网上的资料多数只是个思路,实现也不太满意。
比如,配网时输入和风天气key和城市id,有人已经做完了,但需要二次输入,就是先配网,再输入。很麻烦。于是我就想一次配网时搞定,各种查资料,都没有实现,终于找到了“单片机菜鸟哥”,拜读了大神的几篇文章和代码找到了思路,实现了一次配网完成数据输入。
这样就可以把做好的东西送人了,可以让对方自己输入天气相关信息,而不是把数据烧死在系统里,再转送别人也可以,实现了让不会烧机的“小小白”也可以体验使用这个东西的乐趣。大大增加了使用这个东西的灵活性。
思路:
1、WiFiManagerParameter custom_hefeng_key("key", "和风key", hefengkey, 40);在配网时显示输入界面。如下图:
2、点击保存时把和风key和城市id写入eeprom.
if (shouldSaveConfig) {
Serial.println("开始保存参数");
EEPROM.begin(1024);
String key=String(hefengkey);//将char改为字符型
String id=String(cityid);
String all=key+id;//key长度+key+城市id长度+城市id
//和风key和城市id写入内存
EEPROM.write(0,key.length());//地址0写key长度
EEPROM.write(1,id.length());//地址1写城市id长度
for (int i=0;i<all.length();i++){//按位写入
EEPROM.write(2+i,all[i]);
Serial.print(all[i]);
}
EEPROM.end();//所有数据写入eeprom
Serial.print("数据长度:");
Serial.println(all.length());
Serial.print("数据内容:");
Serial.println(all);
Serial.println("写入参数结束!");
}
3、平时直接从eeprom里面读出数据就可以了。
EEPROM.begin(1024);
String key="";
Serial.print("eeprom_key长度:");
Serial.println(EEPROM.read(0));//读取eeprom内保存的和风key的长度
Serial.print("eeprom_id长度:");
Serial.println(EEPROM.read(1));//读取eeprom内保存的和风城市id长度
//读取eeprom内存储的和风key并连接成字符串
for (int i=0;i<EEPROM.read(0);i++){
key+=char(EEPROM.read(i+2));
}
Serial.print("和风key长度为:");
Serial.println(key.length());
Serial.print("和风key为:");
Serial.println(key);//显示和风key
//读取eeprom存储的城市id
String id="";
for (int j=0;j<EEPROM.read(1);j++){
id+=char(EEPROM.read(34+j));//按位从第34位读取城市id并连接成字符串。32id+1位key长度+1位城市id长度
}
Serial.print("id长度为:");
Serial.println(id.length());
Serial.print("城市id为:");
Serial.println(id);
4、eeprom数据规划:
和风天气key是32位,城市id是9位。eeprom共计需要43位,第一位写key的长度,第二位写id的长度,这样如果一旦key和id的长度有变化可以自动适应,增加了灵活性,不至于长度变化后又要重新烧rom。
5、串口调试信息:
因为代码还没移植完成,先不公布。移植过程估计还有很多坑要填。