首先感谢“单片机菜鸟哥”给予的原码思路及帮助。

自己做天气时钟已经有一段时间了,照着各位大神的教程几下就可以完成一个“作品”。但作完之后总感觉不满意,于是各种改,苦于各方面的知识有限,于是各种恶补。但还是不得要领,很多东西拿现成的是没有的,比如显示农历,配网时输入和风天气key和城市Id。网上的资料多数只是个思路,实现也不太满意。

比如,配网时输入和风天气key和城市id,有人已经做完了,但需要二次输入,就是先配网,再输入。很麻烦。于是我就想一次配网时搞定,各种查资料,都没有实现,终于找到了“单片机菜鸟哥”,拜读了大神的几篇文章和代码找到了思路,实现了一次配网完成数据输入。

这样就可以把做好的东西送人了,可以让对方自己输入天气相关信息,而不是把数据烧死在系统里,再转送别人也可以,实现了让不会烧机的“小小白”也可以体验使用这个东西的乐趣。大大增加了使用这个东西的灵活性。

思路:

1、WiFiManagerParameter custom_hefeng_key("key", "和风key", hefengkey, 40);在配网时显示输入界面。如下图:

和风天气Demo 和风天气的key_c++

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、串口调试信息:

和风天气Demo 和风天气的key_和风天气Demo_02

因为代码还没移植完成,先不公布。移植过程估计还有很多坑要填。