Ви не увійшли.
Сторінки 1
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...
Неактивний
#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);
}
Неактивний
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();
Додайте який-небудь Serial.println("Connected.") замість того delay().
Непогано би на стороні сервера запустити сніффер, наприклад wireshark, і подивитись чи встановлюється зʼєднання, чи приходить хоча б TCP SYN з ардуіни на відповідний порт. Якщо приходить, то на якому етапі комунікація зупиняється.
UPD: при успішному виконанні conn.connect() в консоль має вивестить версія SQL-сервера.
Остання редакція dimich (2024-10-10 16:14:29)
Неактивний
Можливо десь треба явно указати що в мене 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)
Неактивний
Так вдалося,всім дякую, але з іншою бібліотекою, десь вичитав, що ethernet2.h для w5500 краще адаптована , все запрацювало коли змінив бібліотеку.
P.S. якщо використовувати <MySQL_Connection.h> разом із "Ethernet2.h" треба в теці MySQL_Connector_Arduinosrc в файлі MySQL_Packet.h замінити #include <Ethernet.h> на #include <Ethernet2.h>
Неактивний
Сторінки 1