• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Зависает NODEMCU

axenov048

New member
Здравствуйте.
В арсенале Nodemcu + HX711 + тензодатчик. Через Wifi подключаюсь к базе данных с помощью библиотеки MySQL_Connection и передаю данные каждую минуту. Через абсолютно разные периоды контроллер "повисает". Может через час, через 12, через сутки. Рекорд 3 дня беспрерывной работы.
Питание: USB 5в. от блок питания 2А.(зарядка от Самсунг), пробовал от Powerbank.
"Повисает" странно - данные не передаются, а в сети wifi продолжает отображаться.
Что делать, чтобы не зависало?)


Код:
#include <MySQL_Connection.h>
#include <MySQL_Cursor.h>
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <HX711_ADC.h>

float calibration_factor = -3.79;       
float tare;
float weight;
float h;
long lastMsg = 0;
const char* id_tbl = "value";

//WiFi setting
const char* ssid = "wifi";
const char* password_wifi = "012345678";


//MySQL database
char user[] = "user";                                  // MySQL user login username
char password[] = "password";               // MySQL user login password
char hostname[] = "hostname";              // change to your server's hostname/URL


// SQL запрос
char INSERT_SQL[] = "INSERT INTO database.%s (scale, drain) VALUES (%05.3f, %05.3f)";
char query[128];


WiFiClient client;
MySQL_Connection conn((Client *)&client);
HX711_ADC scale(5, 4);

void setup_wifi() {
  delay(10);
  Serial.println();
  Serial.print("Подключение к ");
  Serial.println(ssid);
  WiFi.begin(ssid, password_wifi);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  randomSeed(micros());

  Serial.println("");
  Serial.println("WiFi подключен");
  Serial.println("IP адрес: ");
  Serial.println(WiFi.localIP());
  setup_db();
}

void setup_db() {
  IPAddress server_ip;

  WiFi.hostByName(hostname, server_ip);
  Serial.println(server_ip);
  Serial.println("Подключение к базе данных");
 
  while (conn.connect(server_ip, 3306, user, password) != true) {
    delay(500);
    WiFi.hostByName(hostname, server_ip);
    Serial.print ( "." );
  }

  Serial.println("");
  Serial.println("Соединение с SQL сервером установлено!");
}


void setup() {
  Serial.begin(115200);
 
  setup_wifi();
  scale.begin();
  long stabilisingtime = 2000; // tare preciscion can be improved by adding a few seconds of stabilising time
  scale.start(stabilisingtime);
  scale.setCalFactor(-696.9);
}

void loop() {

if (!client.connected()) {
    setup_wifi();
}

scale.update();

  long now = millis();
  if (now - lastMsg > 60000) {
 
    weight = scale.getData();
    weight = (weight / 154.56);
 
    h = (weight + 1);// random(1, 401) / 100.0;

    sprintf(query, INSERT_SQL, id_tbl, weight, h);
     Serial.println("Запись данных в базу.");
      Serial.println(query);
 
    MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);
    cur_mem->execute(query);
    delete cur_mem;
 
    lastMsg = now;
    n++;
  }
}
 

Вложения

=AK=

New member
Надо разводку смотреть, т.е. монтажную схему. Куда что подключено, длина проводов, не проходят ли сетевые провода рядом с сигнальными и т.д.
 

Юрий Ботов

Moderator
Команда форума
Возможно роутер хулиганит. Как вариант - при каждой посылке данных: присоединиться/проверить присоединение/послать/отсоединиться/отдыхать минуту...
 

axenov048

New member
Надо разводку смотреть, т.е. монтажную схему. Куда что подключено, длина проводов, не проходят ли сетевые провода рядом с сигнальными и т.д.
NodeMCU питание 5в. от зарядного устройства самсунг 2А.
Питание платы HX711 и тензодатчика от платы 3в.
Сигнал D1 и D2.
Провода по 15 см. рядом нет силовых проводов.

Возможно роутер хулиганит. Как вариант - при каждой посылке данных: присоединиться/проверить присоединение/послать/отсоединиться/отдыхать минуту...
Роутер вроде не причем, подключение к БД вроде тоже. Пробовал специально выключал wifi, плата уходит в цикл переподключения - все нормально, при потери соединения с БД - работает цикл переподключения к БД.

Выяснил, что зависает после строчки MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn)
 
Сверху Снизу