Подключение Arduino ethernet shield (ip-адрес - 0.0.0.0)
Мне нужна помощь для подключения моего arduino uno R3 и ethernet-щита. У меня нет mac-адреса с моим щитом, поэтому я использую этот: байтовый mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
Контроллер Ethernet на экране Ethernet-это W5100, и я не использую SD-карту.
У меня есть модуль приемника, который принимает данные от передатчика, и я хочу сохранить их в базе данных, но есть проблема, связанная с подключением. Когда я печатаю Ethernet.localIP, я наблюдал только 0.0.0.0.
Это IP - адрес моего сервера локальной сети-char[] = "192.168.0.106"
Вы можете найти мой код ниже:
#include <Wire.h> // use Wire library for protocol i2c (A4 = SDA & A5 = SCL)
#include <VirtualWire.h> // use Virtual library for decode signal from Rx module
#include <SPI.h>
#include <Ethernet.h>
EthernetClient client;
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
char server[] = "192.168.0.106";
int humidity=0;
int temp=0;
int pressure=0;
char MsgReceived[21];
void setup()
{
Serial.begin(115200);
Ethernet.begin(mac);
Serial.println(Ethernet.localIP());
// Bits per sec
vw_setup(2000);
// set pin for connect receiver module
vw_set_rx_pin(3);
// Start the receiver PLL running
vw_rx_start();
}
void loop()
{
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
//Taking the data from the control base
if (vw_get_message(buf, &buflen))
{
int i;
// Message with a good checksum received, dump it.
for (i = 0; i < buflen; i++)
{
// Fill Msg Char array with corresponding
// chars from buffer.
MsgReceived[i] = char(buf[i]);
//Serial.print(MsgReceived[i]);
}
sscanf(MsgReceived, "%d,%d,%d",&humidity, &temp,&pressure); // Converts a string to an array
lcd_display();
memset( MsgReceived, 0, sizeof(MsgReceived));// This line is for reset the StringReceived
Serial.print("Temperature = ");
Serial.print(temp);
Serial.println(" *C");
Serial.print("Pressure = ");
Serial.print(pressure);
Serial.println(" Pa");
Serial.print("humidity = ");
Serial.print(humidity);
Serial.println(" %");
if (client.connect(server, 80)) {
Serial.println("CONNECTED");
client.print( "GET /diplomna/Arduino/add_data.php?");
client.print("temperature=");;
client.print( temp);
client.print("&&");
client.print("humidity=");
// change this to a print rather than println
client.print( humidity );
// add a leading space in this println
client.println( " HTTP/1.1");
// add a second cr/lf here to denote end of header
client.println();
client.println( "Connection: close\r\n" );
while(client.connected()) {
while(client.available()) {
char ch = client.read();
Serial.write(ch);
}
}
client.stop();
Serial.println("DISCONNECTED");
}
else {
// you didn't get a connection to the server:
Serial.println("-> connection failed/n");
}
delay(10000);
}
}
Вы можете найти вывод последовательного монитора ниже:
0.0.0.0 Температура = 26 *C Давление = 997 Па влажность = 57 % -> сбой подключения/n>
Я также попытался выполнить следующий пример кода (DhcpAddressPrinter), и результаты те же - 0.0.0.0
#include <SPI.h>
#include <Ethernet.h>
// Введите MAC - адрес вашего контроллера ниже.
// Более новые экраны Ethernet имеют MAC-адрес, напечатанный на наклейке на
byte mac[] = {
0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02
};
// Инициализация клиентской библиотеки Ethernet
// с IP - адресом и портом сервера
// к которому вы хотите подключиться (порт 80 по умолчанию для HTTP):
EthernetClient client;
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
// this check is only needed on the Leonardo:
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
// start the Ethernet connection:
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
// no point in carrying on, so do nothing forevermore:
for (;;)
;
}
// print your local IP address:
printIPAddress();
}
void loop() {
switch (Ethernet.maintain())
{
case 1:
//renewed fail
Serial.println("Error: renewed fail");
break;
case 2:
//renewed success
Serial.println("Renewed success");
//print your local IP address:
printIPAddress();
break;
case 3:
//rebind fail
Serial.println("Error: rebind fail");
break;
case 4:
//rebind success
Serial.println("Rebind success");
//print your local IP address:
printIPAddress();
break;
default:
//nothing happened
break;
}
}
void printIPAddress()
{
Serial.print("My IP address: ");
for (byte thisByte = 0; thisByte < 4; thisByte++) {
// print the value of each byte of the IP address:
Serial.print(Ethernet.localIP()[thisByte], DEC);
Serial.print(".");
}
Serial.println();
}
Выход последовательного монитора: Не удалось настроить Ethernet с помощью DHCP
Я также попытался установить ip-адрес экрана на 192.168.137.1 и сделал следующее обновление: Ethernet.begin(mac); ===> Ethernet.begin(mac,ip); Результаты те же самые.
Не могли бы вы, пожалуйста, помочь мне решить эту проблему. Заранее спасибо!
С уважением, СК
@Supreme, 👍1
Обсуждение2 ответа
Лучший ответ:
из комментариев: "Я использую прямой соединительный кабель для подключения экрана Ethernet к ноутбуку и пользуюсь сетью Wi-Fi. "
В этом-то и проблема. Подключитесь к маршрутизатору.
Для прямого подключения Ethernet может потребоваться использование перекрестного кабеля, а на ПК, вероятно, нет DHCP-сервера для интерфейса Ethernet, поэтому вам следует установить IP-адрес для сетевого интерфейса и в скетче Arduino.
смотрите этот вопрос SO
Привет, Юрай, ты прав. Я подключил ethernet к маршрутизатору, и теперь пример scratch работает., @Supreme
Первое, что вам следует сделать, это отключить или отключить все устройства от Arduino, кроме сетевой карты, а затем снова запустить тесты, если они работают (в чем я сомневаюсь), то проблема заключается в столкновении аппаратных ресурсов, для чего вам нужно будет прочитать спецификации.
Я подозреваю, что проблема, с которой вы столкнулись, более фундаментальна: у вас есть DHCP-сервер в вашей сети?
В первом примере конкретно не упоминается DHCP, но во втором примере выполняется тот же вызов top Ethernet.begin()
и, похоже, ожидается, что вызов настроил сетевой адаптер через DHCP.
Поэтому я бы посоветовал взглянуть на API для сетевой карты и посмотреть, что вам нужно сделать, чтобы статически настроить параметры IPv4. Кроме того, вам, возможно, придется отказаться от адресов IPv4 и сетевых масок, потому что адреса, которые вы упомянули, не смогут обмениваться данными, если у вас нет специального механизма маршрутизации (возможно, я неправильно прочитал вопрос).
Надеюсь, это поможет.
- Разбор HTTP с аутентификацией в Arduino + Ethernet Shield
- Как подключить устройство SPI к плате Etherntet на Arduino Uno
- связь между двумя arduino с помощью ENC28J60?
- Два порта на Uno с Ethernet-экраном
- Отправка буквы за буквой на ЖК-дисплей, однако дисплей знает полную строку?
- Ethernet Shield не работает с TFT-экраном
- Ограничения подключения ко многим ардуино через Ethernet?
- Отправить строку через текстовое поле веб-сервера без использования SD-карты?
Если вы не используете одно из периферийных устройств в своей программе, вам нужно будет явно отменить его выбор. Чтобы сделать это с помощью SD-карты, установите вывод 4 в качестве вывода и запишите на него высокое значение. https://store.arduino.cc/arduino-ethernet-shield-2, @Juraj
какие исследования вы провели? .... вы пробовали примерный скетч?, @jsotola
Как ваш экран Ethernet подключен к вашей сети? Из чего состоит ваша сеть?, @Majenko
Привет, Юрай, спасибо за отзыв. Я попробую это сделать сегодня., @Supreme
Привет, джстола, Да, я сделал повторное исследование. Я прочитал много темзы и просмотрел множество видеороликов, касающихся проблем, связанных с подключениями. У вас была возможность прочитать о моей проблеме, прежде чем комментировать ее? Там я объясняю, что попробовал примерный скетч, но результаты оказались не такими, как ожидалось., @Supreme
Привет, Майенко, Я использую прямой соединительный кабель для подключения экрана Ethernet к своему ноутбуку и использую сеть Wi-Fi. Я также использую xampp для создания виртуального хоста с портом 80., @Supreme
Также спрашивали по адресу: http://forum.arduino.cc/index.php?topic=552471 Если вы собираетесь это сделать, пожалуйста, будьте достаточно внимательны, чтобы добавить ссылки на другие места, которые вы разместили. Это позволит нам избежать пустой траты времени из-за дублирования усилий, а также поможет другим, у кого есть те же вопросы, найти ваш пост и получить всю необходимую информацию., @per1234
Привет, Пер, ты прав. Спасибо вам за комментарий., @Supreme
в моем случае был контакт SS, он был отключен., @Silviu Seico