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();
}
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言
歡迎大家來討論交流一下~~~