esp зависает

Тема в разделе "ESP8266, ESP32", создана пользователем galemus, 3 окт 2018.

  1. galemus

    galemus Нерд

    #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 не чего не приходит...
    что делать???
     
  2. parovoZZ

    parovoZZ Гуру

    выкинуть. Купить нормальную.
     
  3. DIYMan

    DIYMan Гуру

    1. Для вставки кода есть кнопочка "<>" на тулбаре редактора;
    2. Что заметил сходу (не относится к зависанию) - неправильное использование
    Код (C++):
    WiFi.setAutoReconnect(true);
    Согласно документации - её вызов не имеет смысла до тех пор, пока ESP не соединена с точкой доступа. Вот после того, как соединилась - надо вызывать эту функцию, тогда ESP при потере связи будет пытаться автоматически переподсоединяться.
     
  4. galemus

    galemus Нерд

  5. SergeiL

    SergeiL Гуру

    Лучше на ESP и MQTT.
    А Mysql оставить на серверную часть.
     
    Mitrandir нравится это.
  6. galemus

    galemus Нерд

    как это сделать???