• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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)
 
Сверху Снизу