/************************************************************************************************** * @brief Set mode for ESP8266 * @param[in] mode Mode for the esp8266 * @return true if success **************************************************************************************************/ bool esp8266_wifi::esp8266_mode(uint8_t mode) { esp8266_reset(); delay_ms(10000); esp8266_flushin(); delay_ms(2000); esp8266_send((int8_t *)"ATE0\r\n",strlen("ATE0\r\n")); esp8266_flushin(); delay_ms(3000); if(!esp8266_sendCheckReply((int8_t *)"AT+CWMODE=1\r\n",(int8_t *) "OK")) { printf("AT+CWMODE=1 error\n"); return false; } delay_ms(2000); return true; }
//======================================================================= boolean VirtuinoEsp8266_WebServer::initLocalWifiServer(String wifiNetworkName,String wifiNetworkPassword,int port,int mode=2){ if (DEBUG) Serial.println(END_LINE+serverInitString); if ((mode<2)|| (mode>3)) mode=2; esp8266_reset(); delay(2000); esp8266_info(); delay(1000); esp8266_baud(9600); delay(1000); if (esp8266_mode(mode)){ // configure as access point delay(1000); if (esp8266_printIP()){ // get ip address esp8266_softAccessPoint(wifiNetworkName,wifiNetworkPassword); if (esp8266_multiple(1)){ // configure for multiple connections if (esp8266_serverPort(port)){ // turn on server on port 80 if (DEBUG) Serial.println(END_LINE+serverReadyString); return true; } } } } if (DEBUG) Serial.println(END_LINE+serverNotConnectedString); return false; }
void esp8266_serial_init(esp8266_serial_t **serial, HardwareSerial *hw_serial, uint32_t baud_rate) { if (!serial || !hw_serial) return; esp8266_serial_t *self = (esp8266_serial_t *)calloc(1,sizeof(esp8266_serial_t)); if (!self) { *serial = NULL; return; } esp8266_reset(); self->hw_serial = hw_serial; hw_serial->begin(baud_rate); *serial = self; }
kaa_error_t kaa_client_state_process(kaa_client_t *kaa_client) { KAA_RETURN_IF_NIL(kaa_client, KAA_ERR_BADPARAM); kaa_error_t error_code = KAA_ERR_NONE; esp8266_error_t esp8266_error; switch (kaa_client->connection_state) { case KAA_CLIENT_ESP8266_STATE_UNINITED: esp8266_error = esp8266_init(kaa_client->controler); if (esp8266_error == ESP8266_ERR_NONE) { kaa_client->connection_state = KAA_CLIENT_ESP8266_STATE_INIT_OK; KAA_LOG_INFO(kaa_client->kaa_context->logger, KAA_ERR_NONE, "ESP8266 initialized successfully"); } else { KAA_LOG_ERROR(kaa_client->kaa_context->logger, KAA_ERR_NONE, "ESP8266 initialization failed: %d", esp8266_error); esp8266_reset(); } break; case KAA_CLIENT_ESP8266_STATE_INIT_OK: ledOn(); esp8266_error = esp8266_connect_wifi(kaa_client->controler, kaa_client->wifi_ssid, kaa_client->wifi_pswd); if (esp8266_error == ESP8266_ERR_NONE) { kaa_client->connection_state = KAA_CLIENT_WIFI_STATE_CONNECTED; KAA_LOG_INFO(kaa_client->kaa_context->logger, KAA_ERR_NONE, "ESP8266 WiFi to %s network connected", kaa_client->wifi_ssid); } else { KAA_LOG_ERROR(kaa_client->kaa_context->logger, KAA_ERR_NONE, "ESP8266 connect to WiFi %s failed: %d", kaa_client->wifi_ssid, esp8266_error); kaa_client->connection_state = KAA_CLIENT_WIFI_STATE_UNCONNECTED; } ledOff(); break; case KAA_CLIENT_WIFI_STATE_CONNECTED: break; default: kaa_client->connection_state = KAA_CLIENT_ESP8266_STATE_UNINITED; break; } return error_code; }
//======================================================================================== boolean VirtuinoEsp8266_WebServer::wifiInternetConnect(String wifiNetworkName,String wifiNetworkPassword, int port=80){ if (DEBUG) Serial.println(END_LINE+serverInitString); esp8266_reset(); delay(2000); esp8266_info(); delay(1000); esp8266_baud(9600); delay(1000); esp8266_mode(1); // configure as client if (esp8266_connect(wifiNetworkName,wifiNetworkPassword)){ delay(2000); esp8266_printIP(); // get ip address delay(1000); esp8266_multiple(1); // configure for multiple connections delay(1000); esp8266_serverPort(port); // turn on server on port 80 if (DEBUG) Serial.println(END_LINE+serverReadyString); return true; } else { if (DEBUG) Serial.println(END_LINE+serverNotConnectedString); return false; } }
void esp8266_init(Esp8266 *esp){ GPIO_InitTypeDef gpio; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_StructInit(&gpio); gpio.GPIO_Pin = GPIO_Pin_8; gpio.GPIO_Mode = GPIO_Mode_IPD; gpio.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOA, &gpio); AT_init(&(esp->at)); AT_add_compare_callback(&(esp->at),"OK\r\n",esp8266_ok_response_callback,esp); //0 AT_add_compare_callback(&(esp->at),"ERROR\r\n",esp8266_error_response_callback,esp);//1 AT_add_compare_callback(&(esp->at),"FAIL\r\n",esp8266_fail_response_callback,esp); //2 AT_add_compare_callback(&(esp->at),"0,CONNECT\r\n",esp8266_start_0_connect,esp); //3 AT_add_compare_callback(&(esp->at),"1,CONNECT\r\n",esp8266_start_1_connect,esp); //4 AT_add_compare_callback(&(esp->at),"2,CONNECT\r\n",esp8266_start_2_connect,esp); //5 AT_add_compare_callback(&(esp->at),"3,CONNECT\r\n",esp8266_start_3_connect,esp); //6 AT_add_compare_callback(&(esp->at),"4,CONNECT\r\n",esp8266_start_4_connect,esp); //7 AT_add_compare_callback(&(esp->at),"0,CLOSED",esp8266_end_0_connect,esp); //8 AT_add_compare_callback(&(esp->at),"1,CLOSED",esp8266_end_1_connect,esp); //9 AT_add_compare_callback(&(esp->at),"2,CLOSED",esp8266_end_2_connect,esp); //10 AT_add_compare_callback(&(esp->at),"3,CLOSED",esp8266_end_3_connect,esp); //11 AT_add_compare_callback(&(esp->at),"4,CLOSED",esp8266_end_4_connect,esp); //12 AT_add_compare_callback(&(esp->at),"SEND OK\r\n",esp8266_end_send_data,esp); //13 AT_add_compare_callback(&(esp->at),"> ",esp8266_start_send_data,esp); //14 AT_add_compare_callback(&(esp->at),"+IPD,",esp8266_start_recive_data_header,esp); //15 AT_add_compare_callback(&(esp->at),":",esp8266_end_recive_data_header,esp); //16 AT_add_compare_callback(&(esp->at),"busy p...\r\n",esp8266_busy_p,esp); //17 AT_add_compare_callback(&(esp->at),"ready\r\n",esp8266_ready,esp); //18 esp8266_disable_callback(esp,CALLBACK_OK_INDEX); esp8266_disable_callback(esp,CALLBACK_ERROR_INDEX); esp8266_disable_callback(esp,CALLBACK_FAIL_INDEX); esp8266_disable_callback(esp,CALLBACK_END_0_CONNECT_INDEX); esp8266_disable_callback(esp,CALLBACK_END_1_CONNECT_INDEX); esp8266_disable_callback(esp,CALLBACK_END_2_CONNECT_INDEX); esp8266_disable_callback(esp,CALLBACK_END_3_CONNECT_INDEX); esp8266_disable_callback(esp,CALLBACK_END_4_CONNECT_INDEX); esp8266_disable_callback(esp,CALLBACK_SEND_OK_INDEX); esp8266_disable_callback(esp,CALLBACK_TERMINAL_START_SEND_INDEX); esp8266_disable_callback(esp,CALLBACK_END_DATA_HEADER_INDEX); esp->connects[0].id = 0; esp->connects[1].id = 1; esp->connects[2].id = 2; esp->connects[3].id = 3; esp->connects[4].id = 4; memset(esp->response_buffer,0,RESPONSE_BUFFER_LENGTH); memset(esp->resive_header_buffer,0,RESIVE_HEADER_BUFFER_LENGTH); esp->response_index = 0; esp->resive_heade_index = 0; esp->sended_command = NULL; esp->recive_connect = NULL; esp->is_resive_header = 0; esp->is_resive_data = 0; esp->closing_connect=NULL; esp->is_ready = 0; GPIOA->BSRR = GPIO_Pin_8; esp8266_reset(esp); }