void ESPHB::restore(void){ String _null=""; IPAddress _nil=(0,0,0,0); save_ip(_nil,__IP_adrr); save_ip(_nil,__gateway_adrr); save_ip(_nil,__mask_adrr); update1byte_EEPROM(__first_start, 0); update1byte_EEPROM(__ip_static, 0); save(__ssid,_null); save(__password,_null); }
boolean ESPHB::save_ip(String _ip,String *_return){ // Hàm check và lưu IP vào EEPROM (_ip: ip cần setup, *_return kết quả chuỗi IP trả về sau lưu) String _curent_ip=""; // khởi tạo ip tạm *_return=""; // trả về = "" IPAddress _ip_tosave; // khởi tạo struct IPAddress để lưu int _start=0; // vị trí xuất phát String IP int _dot=_ip.indexOf('.'); // vị trí dấu . đầu tiên int _ends=_ip.length(); // tổng chiều dài String IP for(char k=0;k<4;k++){ String ipk=_ip.substring(_start,_dot); // octet 1: từ vị trí xuất phát đến dấu . đầu tiên _ip_tosave[k]=ipk.toInt(); // convert String to Int _start=_dot+1; // dấu . đầu thành điểm xuất phát if(k<3){ _dot=_ip.indexOf('.',_start);} else{ // tại octet 4(octet cuối) điểm kết thúc là chiều dài String IP(ends) _dot=_ends;}; } WiFi.config(_ip_tosave,gateway,mask); // thiết lập lại địa chỉ IP IPtoString(WiFi.localIP(),&_curent_ip); // lấy địa chỉ IP sau khi thiết lập if(_curent_ip==_ip){ // nếu địa chỉ IP nhận được == địa chỉ IP setup save_ip(_ip_tosave,__IP_adrr); // lưu ip mới vào EEPROM for (unsigned char i = 0; i < 4; i++) { // Đọc IP vừa lưu từ EEPROM _ip_tosave[i] = read1byte_EEPROM(i + __IP_adrr + 1); } IPtoString(_ip_tosave,_return); // trả về String ip sau khi được lưu return true; // return true hàm }else{ *_return=_ip; // trả về String ip ban đầu đem setup return false; } }
boolean ESPHB::wifi_connect(){ if(ssid!=""){ unsigned char _timeout=0; // khởi tạo biến timeout debug("Connecting to "); char _sta_ssid[(ssid).length()+1]; // chuyển đổi String ssid, password sang char array char _sta_password[(password).length()+1]; ssid.toCharArray(_sta_ssid, ssid.length()+1); password.toCharArray(_sta_password, password.length()+1); debug(_sta_ssid); debug(_sta_password); WiFi.begin(_sta_ssid, _sta_password); // kết nối tới mạng wifi while (WiFi.status() != WL_CONNECTED) { // nếu chưa kết nối được delay(500); if(isdebug){Serial.print(".");} // xuất ký tự . mỗi 0.5s _timeout++; // tăng timeout apmode=false; if(_timeout>__timeout_STA){ // nếu timeout > thời gian cho phép timeout_STA apmode=true; // bật cờ apmode break; } } if((!ipstatic)&&(!apmode)){ String _tmp=""; save_ip(WiFi.localIP(),__IP_adrr); save_ip(WiFi.gatewayIP(),__gateway_adrr); save_ip(WiFi.subnetMask(),__mask_adrr); IPtoString(WiFi.localIP(),&_tmp);debug("New IP: "+_tmp); IPtoString(WiFi.gatewayIP(),&_tmp);debug("New gateway: "+_tmp); IPtoString(WiFi.subnetMask(),&_tmp);debug("New submask: "+_tmp); update1byte_EEPROM(__ip_static,1); ipstatic=true; } else if(ipstatic&&(!apmode)){ WiFi.config(ip,gateway,mask); }; if(!apmode){ // nếu cờ apmode chưa bật( đã kết nối tới wifi) debug(""); debug("WiFi connected to:"); debug(_sta_ssid); } } return apmode; // trả về true nếu kết nối và false chưa kết nối };
boolean ESPHB::wifi_connect(String _ssid, String _password, String *_ip,String * _result){ unsigned char _timeout=0; String _tmp=""; boolean _receiveip=true; debug("Connecting to "); // convert String of ssid, password to array (as update_EEPROM) char _sta_ssid[(_ssid).length()+1]; char _sta_password[(_password).length()+1]; _ssid.toCharArray(_sta_ssid, _ssid.length()+1); _password.toCharArray(_sta_password, _password.length()+1); debug(_sta_ssid); debug(_sta_password); WiFi.begin(_sta_ssid, _sta_password); while (WiFi.status() != WL_CONNECTED) { delay(500); if(isdebug){Serial.print(".");} _timeout++; if(_timeout>__timeout_STA){ _receiveip=false; *_result="failed"; *_ip=""; break; } } if(_receiveip){ debug(""); debug("WiFi connected to:"); debug(_sta_ssid); IPtoString(WiFi.localIP(),&_tmp); save_ip(WiFi.localIP(),__IP_adrr); save_ip(WiFi.gatewayIP(),__gateway_adrr); save_ip(WiFi.subnetMask(),__mask_adrr); update1byte_EEPROM(__ip_static,1); debug("IP: "+_tmp); *_ip=_tmp; *_result="connected"; save(__ssid,_ssid); save(__password,_password); } return !_receiveip; }
int set_local_ip(PRO* p) { int ret = 0; if(connectState == 1) { int i = 0,j = 0,k=0; u8 str[6]={0}; while(1) { str[k] = p->para[i]; if(p->para[i] == '.' || p->para[i] == '\0') { str[k] = '\0'; lip[j] = atof((const char*)str); j++; k=0; } else { k++; } i++; if(j>=4 && i <= MAX_LENGTH) { save_ip(lip); ret = 0; break; } if(i > MAX_LENGTH)//参数错误 { ret = -1; break; } } uart1.printf("IP : %d.%d.%d.%d\r\n", lip[0],lip[1],lip[2],lip[3]); ret = 0; } else ret = -2; return ret; }