#include <ESP8266WiFi.h> #include <WiFiUdp.h> #include <ESP8266Ping.h> #include <MySQL_Connection.h> #include <MySQL_Cursor.h> #include <WiFiClient.h> ADC_MODE(ADC_VCC); IPAddress ip2 (192, 168, 10, 115); // The remote ip to ping #define DEBUG_MODE true; byte data; int data_int, flag_print; int i = 1; int n1 = 0; int n2 = 0; int n3 = 0; char buf[3]; static const char * enumConnectionStatus[] = { "WL_IDLE_STATUS", "WL_NO_SSID_AVAIL", "WL_SCAN_COMPLETED", "WL_CONNECTED", "WL_CONNECT_FAILED", "WL_CONNECTION_LOST", "WL_DISCONNECTED" }; const char* ssid = "*****"; const char* password = "********"; WiFiClient client; MySQL_Connection conn((Client *)&client); //char INSERT_SQL[] = "INSERT INTO officeto_plants.TBL_READINGS(ID_PLANT, AIR_HUMIDITY, AIR_TEMPERATURE, SOIL_MOISTURE_1) VALUES (1, NULL, NULL, %d)"; //char INSERT_SQL[] = "INSERT INTO officeto_plants.TBL_READINGS(ID_PLANT, AIR_HUMIDITY, AIR_TEMPERATURE, SOIL_MOISTURE_1, SOIL_MOISTURE_2) VALUES (1, NULL, NULL, %d, %d)"; char INSERT_SQL[] = "UPDATE david.esp1 SET n1='%d',n2='%d',n3='%d' WHERE id = '0'"; char query[128]; IPAddress server_addr(192, 168 ,10, 115); // MySQL server IP char* user = "******"; // MySQL user char* passwordsql = "********"; // MySQL password int soil_hum = '102'; void setup() { Serial.begin(9600); #ifdef DEBUG_MODE Serial.println("Starting..."); Serial.println("WiFi initializing..."); #endif WiFi.setOutputPower(20); //WiFi.setAutoConnect(false); WiFi.setAutoReconnect(true); WiFi.mode(WIFI_STA); #ifdef DEBUG_MODE Serial.print("WiFi connecting"); #endif uint8_t wifiStatus = WL_IDLE_STATUS; int attempts = 0; WiFi.begin(ssid, password); //wifiStatus = WiFi.waitForConnectResult(); delay(100); while (wifiStatus != WL_CONNECTED) { #ifdef DEBUG_MODE Serial.print("."); #endif wifiStatus = WiFi.status(); delay(1000); attempts++; if (attempts > 20) { #ifdef DEBUG_MODE Serial.println(""); Serial.print("Connection status: "); Serial.println(enumConnectionStatus[wifiStatus]); Serial.println("Connection failed! Rebooting..."); #endif ESP.restart(); } } #ifdef DEBUG_MODE Serial.println(""); Serial.print("Connection status: "); Serial.println(enumConnectionStatus[wifiStatus]); Serial.print("Connected to WiFi, IP address: "); Serial.println(WiFi.localIP()); #endif delay(5000); while (conn.connect(server_addr, 3306, user, passwordsql) != true) { delay(200); Serial.print ( "mysqlnot" ); } Serial.println(""); Serial.println("Connected to SQL Server!"); } void sql_Serial() { if (conn.connected()){ sprintf(query,INSERT_SQL,n1,n2,n3); MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn); cur_mem->execute(query); delete cur_mem; } else { conn.close(); if (conn.connect(server_addr, 3306, user, passwordsql)) { delay(500); } } } void loop() { if (WiFi.getAutoConnect() != true) //configuration will be saved into SDK flash area { WiFi.setAutoConnect(true); //on power-on automatically connects to last used hwAP WiFi.setAutoReconnect(true); //automatically reconnects to hwAP in case it's disconnected } if (Serial.available()>3) { byte x = Serial.read(); if (x==0xff) // sync byte { for (int i =0; i < sizeof(buf); i++) { x = Serial.read(); if (i == 0) n1 = x; if (i == 1) n2 = x; if (i == 2) n3 = x; } sql_Serial(); delay(500); } } } Работает часа 2, потом в базу mysql не чего не приходит... что делать???
1. Для вставки кода есть кнопочка "<>" на тулбаре редактора; 2. Что заметил сходу (не относится к зависанию) - неправильное использование Код (C++): WiFi.setAutoReconnect(true); Согласно документации - её вызов не имеет смысла до тех пор, пока ESP не соединена с точкой доступа. Вот после того, как соединилась - надо вызывать эту функцию, тогда ESP при потере связи будет пытаться автоматически переподсоединяться.