2015年12月3日 星期四

Step By Step系列---開始玩ESP8266-12 with Arduino IDE(第5篇-模擬NB多組SSID自動WiFi連線)




讓ESP8266最大能儲存5組SSID和PASSWORD, 模擬像NB的WiFi能自動連線曾經使用過的SSID



連線時,  以最後一次使用的SSID開始連線, 若連不上, 則依序連線使用過的SSID, 若全部連線不上, 則轉為AP mode, 提供設定新的SSID和PASSWORD, 目前最大只能儲存5組, 每組會試著連線10秒鐘, 10秒連不到則試為timeout, 超過5組則一直覆蓋最後一組, 可在AP mode或Station Mode清除所有儲存的無線網路, 這個方式不是很理想, 本來想用偵測到的訊號強度來決定要連那一組, 但是會搞的太複雜, 暫時放棄, 如何再縮短嘗試連線的時間是後續的重點

程式碼基本上和前篇差不多, 差在EEPROM的讀和寫, 貼出EEPROM的讀和寫的函數供大家參考

void ReadEEPROM(int sdNumber) {
  Serial.println("Reading EEPROM SSID (MAX=32 BYTE)");
  Read_essid = "";
  Read_epassword = "";
  for (int i = 4 + (sdNumber * 100); i < 36 + (sdNumber * 100); ++i)
  {
    Read_essid += char(EEPROM.read(i));
  }
  Serial.print("SSID NAME : ");
  Serial.println(Read_essid);
  Read_essid.toCharArray(charBuf, 32);
  delay(1000);
  OLED.sendStrXY(0, 0, "Connect SSID");  
  char sdStr[2];
  String t = String(sd + 1);
  t.toCharArray(sdStr, 2);
  OLED.sendStrXY(13, 0, sdStr);
  OLED.sendStrXY(0, 2, charBuf);
  delay(1000);
  Serial.println("Reading EEPROM PASSWORD (MAX=64 BYTE)");

  for (int i = 36 + (sdNumber * 100); i < 100 + (sdNumber * 100); ++i)
  {
    Read_epassword += char(EEPROM.read(i));
  }
  Serial.print("PASSWORD NAME : ");
  Serial.println(Read_epassword);
}

void WriteEEPROM(int sdNumber) {
  Serial.println("clearing eeprom");
  Serial.print("sdNumber=");
  Serial.println(sdNumber);
  for (int i = 4 + (sdNumber * 100); i < 100 + (sdNumber * 100); ++i) {
    EEPROM.write(i + (sdNumber * 100), 0);
  }
  Serial.println(Write_qsid);
  Serial.println("");
  Serial.println(Write_qpass);
  Serial.println("");

  Serial.println("writing eeprom ssid:");
  for (int i = 0; i < Write_qsid.length(); ++i)
  {
    EEPROM.write(4 + i + (sdNumber * 100), Write_qsid[i]);
    Serial.print("Wrote: ");
    Serial.println(Write_qsid[i]);
  }
  Serial.println("writing eeprom pass:");
  for (int i = 0; i < Write_qpass.length(); ++i)
  {
    EEPROM.write(i + 36 + (sdNumber * 100), Write_qpass[i]);
    Serial.print("Wrote: ");
    Serial.println(Write_qpass[i]);
  }
  EEPROM.commit();
}


沒有留言:

張貼留言

歡迎大家來討論交流一下~~~