#1 2024-10-10 13:51:19

ijonhson
Учасник
Зареєстрований: 2023-01-07
Повідомлень: 18

Робота з mysql висне ардуїнка

Доброго дня намагаюсь створити зєднання з базою даних , підключення до мережі ок , але при спробі підключення до бази даних ардуїнка висне

Остання редакція ijonhson (2024-10-10 13:52:07)

Неактивний

#2 2024-10-10 13:53:12

ijonhson
Учасник
Зареєстрований: 2023-01-07
Повідомлень: 18

Re: Робота з mysql висне ардуїнка

Initialize Ethernet with DHCP:
  DHCP assigned IP 192.168.1.5
...trying...
Initialize Ethernet with DHCP:
  DHCP assigned IP 192.168.1.5
...trying...
Initialize Ethernet with DHCP:
  DHCP assigned IP 192.168.1.5
...trying...
Initialize Ethernet with DHCP:
  DHCP assigned IP 192.168.1.5
...trying...
Initialize Ethernet with DHCP:
  DHCP assigned IP 192.168.1.3
...trying...

Неактивний

#3 2024-10-10 13:56:00

ijonhson
Учасник
Зареєстрований: 2023-01-07
Повідомлень: 18

Re: Робота з mysql висне ардуїнка

#include "SPI.h"
//  Подключаем стандартную библиотеку для работы с Ethernet
#include "Ethernet.h"
#include <MySQL_Connection.h>
#include <MySQL_Cursor.h>
#include <GyverINA.h>
//  Задаём статический IP-адрес на тот случай, если динамическое присвоение адреса даст сбой
IPAddress ip(***********);
IPAddress myDns(**********);
INA219 ina; 
//  Создаём объект client класса EthernetClient

// Задаём MAC-адрес устройству. Главное, чтобы в сети не было уже зарегистрированно устройство с таким адресом
byte mac_addr[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

EthernetClient client;
MySQL_Connection conn((Client *)&client);

IPAddress server_addr(*********);  // IP of the MySQL *server* here
char user[] = "******";              // MySQL user login username
char password[] = "********";        // MySQL user login password
float volt,amper,watt,tIme;




void setup() {
  //  Инициируем работу с монитором последовательного порта на скорости 9600 бод
  Serial.begin(9600);
  //  Выводим в монитор последовательного порта сообщение о начале инициализации Shield'а
  Serial.println("Initialize Ethernet with DHCP:");
  //  Если соединение с динамической адресацией не было установлено, то
  if (Ethernet.begin(mac_addr) == 0) {
    //  Выводим сообщение об этом в монитор последовательного порта и
    Serial.println("Failed to configure Ethernet using DHCP");
    //  проверяем наличие самого Shield'а
    if (Ethernet.hardwareStatus() == EthernetNoHardware) {
      //  Если Shield не найден, то выводим соответствующее сообщение в монитор порта
      Serial.println("Ethernet shield was not found.  Sorry, can't run without hardware. :( ");
      //  Ничего больше не выполняется
      while (true) {
        delay(1); // do nothing, no point running without Ethernet hardware
      }
    }
    //  Проверяем наличие соединения
    if (Ethernet.linkStatus() == LinkOFF) {
      //  Если соеднинение не установлено, то выводим соответствующее сообщение в монитор порта
      Serial.println("Ethernet cable is not connected.");
    }
    // Пробуем установить соединение, используя статический IP-адрес
    Ethernet.begin(mac_addr, ip, myDns);
  }
  //  Если соединение с динамической адресацией было установлено, то
  else {
    //  Выводим в монитор порта соответствующее сообщение об этом и выводим назначенный устройству IP-адрес
    Serial.print("  DHCP assigned IP ");
    Serial.println(Ethernet.localIP());
     if (conn.connect(server_addr,****, user, password)) {
      delay (4000);// тут висне
    
  }
  else
    Serial.println("Connection failed.");
  }  
  
}
void loop() {
  
volt=ina.getVoltage();
amper=ina.getCurrent();
watt=watt+ina.getPower()/360;
tIme=tIme+1;
  Serial.println("Recording data.");

  // Initiate the query class instance
  MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);
  // Execute the query
  cur_mem->execute("INSERT INTO `***********`(`V`,`A`,`t`,W) VALUES(volt,amper,tIme,watt);" );
  // Note: since there are no results, we do not need to read any data
  // Deleting the cursor also frees up memory used
  delete cur_mem;
   delay(1000);
}

Неактивний

#4 2024-10-10 13:57:44

ijonhson
Учасник
Зареєстрований: 2023-01-07
Повідомлень: 18

Re: Робота з mysql висне ардуїнка

arduino nano+ w5500

Неактивний

#5 2024-10-10 15:44:33

dimich
Учасник
Зареєстрований: 2023-12-01
Повідомлень: 193

Re: Робота з mysql висне ардуїнка

ijonhson пише:
     if (conn.connect(server_addr,****, user, password)) {
      delay (4000);// тут висне
  }
  else
    Serial.println("Connection failed.");

delay() не висне, а затримує виконання на 4 секунди. Який в цьому сенс, навіщо воно тут потрібне?
Оскільки "...trying..." виводиться тільки один раз, а "Connection failed." не виводиться, то можна припустити що або зʼєднання успішно встановлено, або виконання затрималось у conn.connect(), а саме на

connected = client->connect(server, port);

або на

read_packet();
parse_handshake_packet();
send_authentication_packet(user, password, db);
read_packet();

в MySQL_Connection::connect.

Додайте який-небудь Serial.println("Connected.") замість того delay().

Непогано би на стороні сервера запустити сніффер, наприклад wireshark, і подивитись чи встановлюється зʼєднання, чи приходить хоча б TCP SYN з ардуіни на відповідний порт. Якщо приходить, то на якому етапі комунікація зупиняється.

UPD: при успішному виконанні conn.connect() в консоль має вивестить версія SQL-сервера.

Остання редакція dimich (2024-10-10 16:14:29)

Неактивний

#6 2024-10-13 10:39:47

ijonhson
Учасник
Зареєстрований: 2023-01-07
Повідомлень: 18

Re: Робота з mysql висне ардуїнка

Можливо десь треба явно указати що в мене w5500?

Неактивний

#7 2024-10-13 14:51:20

dimich
Учасник
Зареєстрований: 2023-12-01
Повідомлень: 193

Re: Робота з mysql висне ардуїнка

ijonhson пише:

Можливо десь треба явно указати що в мене w5500?

Якщо по DHCP адреса отримується, то з ethernet і з модулем все нормально.
Хіба що я б замінив mac_addr на щось випадково сгенероване, бо якщо в мережі буде ще один пристрій таким же MAC'ом, буде конфлікт.

Що мені не подобається, це оцей кастинг в C-стилі:

MySQL_Connection conn((Client *)&client);

Бачу, що так само у прикладах MySQL Connector'а. Що ж, це говорить про "якість" бібліотеки. В даному випадку це ніяк не має впливати. А взагалі, він там не потрібен, достатньо

MySQL_Connection conn(&client);

З вашим кодом, коли MySQL-сервер взагалі недоступний, conn.connect() завершується після трьох спроб зʼєднатись:

Initialize Ethernet with DHCP:
  DHCP assigned IP 192.168.1.176
...trying...
...got: 0 retrying...
...trying...
...got: 0 retrying...
...trying...
...got: 0 retrying...
Connection failed.

Коли клієнту (arduino) з його IP-адресою немає дозволу для віддаленого доступу до MySQL:

Initialize Ethernet with DHCP:
  DHCP assigned IP 192.168.1.176
...trying...
ERROR: Timeout waiting for client.
Error: -1 = Connection failed.

Коли логін або пароль невірні:

Initialize Ethernet with DHCP:
  DHCP assigned IP 192.168.1.176
...trying...
Error: 79 = Access denied for user 'baduser'@'192.168.1.176' (using password: YES).
Connection failed.

Ethernet 2.0.2
MySQL Connector Arduino 1.2.0

Дивіться логи MySQL-сервера. Впевніться, що в конфігурації MySQL-сервера вашому юзеру дозволений віддалений доступ з адреси, яку отримує ардуіна, або з будь-якої адреси в цій мережі.
Запустість сніфер на стороні сервера. Подивіться, що відбувається під час комунікації.

Схоже, що проблема в налаштуваннях аутентифікації на самому сервері, а не в ардуіно. Взагалі, вдається зʼєднатись із цими самими логіном/паролем з якого-небудь іншого пристроя? В конфігурації MySQL сервера конкретна адреса пристроя або вся мережа має бути дозволена для конкретного логіна .

Остання редакція dimich (2024-10-13 14:58:17)

Неактивний

#8 2024-10-13 21:46:02

ijonhson
Учасник
Зареєстрований: 2023-01-07
Повідомлень: 18

Re: Робота з mysql висне ардуїнка

Так вдалося,всім дякую, але з іншою бібліотекою, десь вичитав, що ethernet2.h для w5500 краще адаптована , все запрацювало коли змінив бібліотеку.
P.S. якщо використовувати <MySQL_Connection.h> разом із "Ethernet2.h" треба в теці  MySQL_Connector_Arduinosrc в файлі MySQL_Packet.h замінити #include <Ethernet.h> на #include <Ethernet2.h>

Неактивний

#9 2024-10-13 21:49:37

ijonhson
Учасник
Зареєстрований: 2023-01-07
Повідомлень: 18

Re: Робота з mysql висне ардуїнка

зараз Error: 33 = Got packets out of order. вилазе буду палити мануали)

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму