bool wifi_manager::connectWifi(const char* ssid) { list<wifi_list*> _configList; bool ret = false; wifi_list* _wifi = NULL; do { if(listConfigedWifi(&_configList) == false) break; for(list<wifi_list*>::node* _p_wifi = _configList.begin(); _p_wifi != _configList.end(); _p_wifi = _p_wifi->next) { if(strcmp(_p_wifi->element->ssid,ssid) == 0) { _wifi = _p_wifi->element; break; } } if(_wifi) { if(_wifi->flag == 1) ret = true; else ret = connectWifi(_wifi->id); } clearWifiList(&_configList); }while(0); return ret; }
void wifiSetup() { ESP.wdtFeed(); if (connectWifi() == 0) return; // if couldn't connect the cached WiFi setupAP(); setupAPServer(); while (1) { ESP.wdtFeed(); server.handleClient(); } }
void setup() { Serial.begin(115200); //while (!Serial) { ; } ESPserial.begin(115200); while (1) { resetWifi(); if(connectWifi()) { break; } delay(5000); } clearWifi(); }
int MainWindowImpl::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QMainWindow::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { switch (_id) { case 0: connectWifi(); break; case 1: disconnectWifi(); break; case 2: cmbWifiRefresh(); break; case 3: getSVEQValue((*reinterpret_cast< int(*)>(_a[1]))); break; case 4: getSBassValue((*reinterpret_cast< int(*)>(_a[1]))); break; case 5: getSMidValue((*reinterpret_cast< int(*)>(_a[1]))); break; case 6: getSTrebleValue((*reinterpret_cast< int(*)>(_a[1]))); break; case 7: chkTransReceive((*reinterpret_cast< int(*)>(_a[1]))); break; case 8: chkTransSend((*reinterpret_cast< int(*)>(_a[1]))); break; case 9: setButtons((*reinterpret_cast< int(*)>(_a[1]))); break; default: ; } _id -= 10; } return _id; }
/** * Работа канала связи с Сервером Роботов, запускать в loop. * При получении команды, вызывает handleInput. */ void rraptorRobotServerTasks() { DNETcK::STATUS networkStatus; int readSize; int writeSize; // Держим Tcp-стек в живом состоянии DNETcK::periodicTasks(); if(!DWIFIcK::isConnected(conectionId)) { // Не подключены к WiFi - выключим лампочку digitalWrite(WIFI_STATUS_PIN, LOW); // Подключимся к сети WiFi bool connectedToWifi = false; #ifdef DEBUG_SERIAL Serial.println("Connecting wifi..."); #endif // DEBUG_SERIAL conectionId = connectWifi(&networkStatus); if(conectionId != DWIFIcK::INVALID_CONNECTION_ID) { // На этом этапе подключение будет создано, даже если указанная // сеть Wifi недоступна или для нее задан неправильный пароль #ifdef DEBUG_SERIAL Serial.print("Connection created, connection id="); Serial.println(conectionId, DEC); Serial.print("Initializing IP stack..."); #endif // DEBUG_SERIAL // Получим IP и сетевые адреса по DHCP DNETcK::begin(); // К открытой сети может подключиться с первой попытки, к сети с паролем // может потребоваться несколько циклов (если пароль для сети неправильный, // то ошибка вылезет тоже на этом этапе). bool initializing = true; while(initializing) { #ifdef DEBUG_SERIAL Serial.print("."); #endif // DEBUG_SERIAL // Вызов isInitialized заблокируется до тех пор, пока стек не будет // инициализирован или не истечет время ожидания (по умолчанию 15 секунд). // Если сеть не подключится до истечения таймаута и при этом не произойдет // ошибка, isInitialized просто вернет FALSE без кода ошибки, при необходимости // можно вызвать его повторно до успеха или ошибки. if(DNETcK::isInitialized(&networkStatus)) { // Стек IP инициализирован connectedToWifi = true; initializing = false; } else if(DNETcK::isStatusAnError(networkStatus)) { // Стек IP не инициализирован из-за ошибки, // в этом месте больше не пробуем initializing = false; } } #ifdef DEBUG_SERIAL Serial.println(); #endif // DEBUG_SERIAL } if(connectedToWifi) { // Подключились к Wifi #ifdef DEBUG_SERIAL Serial.println("Connected to wifi"); printNetworkStatus(); #endif // DEBUG_SERIAL // включим лампочку digitalWrite(WIFI_STATUS_PIN, HIGH); } else { // Так и не получилось подключиться #ifdef DEBUG_SERIAL Serial.println("Retry after 4 seconds..."); Serial.print("Failed to connect wifi, status: "); //Serial.print(networkStatus, DEC); printDNETcKStatus(networkStatus); Serial.println(); #endif // DEBUG_SERIAL // Нужно корректно завершить весь стек IP и Wifi, чтобы // иметь возможность переподключиться на следующей итерации DNETcK::end(); DWIFIcK::disconnect(conectionId); conectionId = DWIFIcK::INVALID_CONNECTION_ID; // Немного подождем и попробуем переподключиться на следующей итерации #ifdef DEBUG_SERIAL Serial.println("Retry after 4 seconds..."); #endif // DEBUG_SERIAL delay(4000); } } else if(!tcpClient.isConnected()) { // Подключимся к Серверу Роботов bool connectedToServer = false; #ifdef DEBUG_SERIAL Serial.print("Connecting to Robot Server..."); #endif // DEBUG_SERIAL tcpClient.connect(robot_server_host, robot_server_port); // Сокет для подключения назначен, подождем, чем завершится процесс подключения bool connecting = true; while(connecting) { #ifdef DEBUG_SERIAL Serial.print("."); #endif // DEBUG_SERIAL if(tcpClient.isConnected(&networkStatus)) { // Подключились к сереверу connectedToServer = true; connecting = false; } else if(DNETcK::isStatusAnError(networkStatus)) { // Не смогли подключиться к серверу из-за ошибки, // в этом месте больше не пробуем connecting = false; } } Serial.println(); if(connectedToServer) { // Подключились к Серверу Роботов #ifdef DEBUG_SERIAL Serial.println("Connected to Robot Server"); printTcpClientStatus(&tcpClient); #endif // DEBUG_SERIAL } else { // Так и не получилось подключиться #ifdef DEBUG_SERIAL Serial.print("Failed to connect Robot Server, status: "); //Serial.print(networkStatus, DEC); printDNETcKStatus(networkStatus); Serial.println(); #endif // DEBUG_SERIAL // Вернем TCP-клиента в исходное состояние tcpClient.close(); // Немного подождем и попробуем переподключиться на следующей итерации #ifdef DEBUG_SERIAL Serial.println("Retry after 4 seconds..."); #endif // DEBUG_SERIAL delay(4000); } } else { // Подключены к серверу - читаем команды, отправляем ответы // есть чо почитать? if((readSize = tcpClient.available()) > 0) { readSize = readSize < sizeof(read_buffer) ? readSize : sizeof(read_buffer); readSize = tcpClient.readStream((byte*)read_buffer, readSize); #ifdef DEBUG_SERIAL // Считали порцию данных read_buffer[readSize] = 0; // строка должна оканчиваться нулем Serial.print("Read: "); Serial.println(read_buffer); #endif // DEBUG_SERIAL // и можно выполнить команду, ответ попадет в write_buffer writeSize = handleInput(read_buffer, readSize, write_buffer); write_size = writeSize; } if(write_size > 0) { #ifdef DEBUG_SERIAL Serial.print("Write: "); Serial.print(write_buffer); Serial.print(" (size="); Serial.print(write_size); Serial.println(")"); #endif // DEBUG_SERIAL tcpClient.writeStream((const byte*)write_buffer, write_size); write_size = 0; } } }
/*********************************************************************** module : [WIFI] function : [wifi上传菜单] return : [无] comment : [全局普通函数] machine : [EH-0818] language : [CHN] keyword : [WIFI] date : [11/07/25] author : [chen-zhengkai] ************************************************************************/ void wifi_upload_menu() { int select = -1; //int conStatus = 0; //连接状态,0:连接正常 char db_menu_str[] = "1. 启动连接" "2. 上传数据" "3. 网络设置" "4. 断开连接" "5. 重启模块"; BROWINFO info; info.iStr = db_menu_str; //浏览内容指针 info.lPtr = 0; //显示内容iStr的起始显示行 info.cPtr = 0; //当前选择行 while (1) { //以下BROWINFO结构成员变量必须参与循环,有可能会被EXT_Brow_Select函数改变 // conStatus = CWiFi_GetRepStatus(g_pHandle[0]); // if (!conStatus) { // strncpy(db_menu_str, "1. 断开连接(已连接)", 21); // } // else { // strncpy(db_menu_str, "1. 启动连接(未连接)", 21); // } info.startLine = 2; //在LCD上的显示起始行 info.dispLines = 5; //在LCD上的显示行数 info.mInt = 5; //显示内容的总行数 info.lineMax = 11; //每行最大字符数 info.sFont = 0; //7x9大字体显示 info.numEnable = 0; //是否允许数字键代替方向控制 info.qEvent = EXIT_KEY_F1|EXIT_AUTO_QUIT|EXIT_KEY_POWER|EXIT_KEY_CANCEL; //可导致函数退出的事件标志 info.autoexit = 1200; //自动退出的时间 //菜单 Disp_Clear(); DispStr_CE(0, 0, "wifi传输菜单", DISP_CENTER); select = EXT_Brow_Select(&info); switch (select) { case 0: //启动连接,断开连接 connectWifi(); //启动连接 break; case 1: //上传数据 sendRecords(); break; case 2: //网络设置 wifinet_set(); break; case 3: //断开连接 disConnect(); break; case 4: //重启模块 resetWifi(); break; default: //降低CPU占用率,降低能耗 if (info.qEvent == EXIT_KEY_F1 || EXIT_AUTO_QUIT || EXIT_KEY_POWER || EXIT_KEY_CANCEL) { //返回上级菜单 return; } Sys_Power_Sleep(3); break; } } }