При подключении client.connect() возвращает 0
Я использую arduino UNO с экраном ethernet. Следуя нескольким руководствам в Интернете для школьного проекта, я столкнулся с этой проблемой. Первый пример кода:
#include <SPI.h>
#include <Ethernet.h>
EthernetClient client;
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 1, 25);
byte server[] = { 64, 233, 187, 99 }; // Google
void setup() {
Ethernet.begin(mac, ip);
Serial.begin(9600);
delay(1000);
Serial.println(Ethernet.localIP());
}
void loop() {
if (client.connect(server, 80)) {
Serial.println("connected");
client.println("GET /search?q=arduino HTTP/1.0");
client.println();
} else {
Serial.println("connection failed");
Serial.println(client.connect(server, 80));
}
}
К сожалению, это не работает. Мы успешно подключаемся к нашей сети, но client.connect() не работает и возвращает 0. Ожидаемый результат:
успех: 1 ТАЙМ-АУТ: -1 НЕДЕЙСТВИТЕЛЬНЫЙ СЕРВЕР: -2 УСЕЧЕНО: -3 НЕДЕЙСТВИТЕЛЬНЫЙ ОТВЕТ: -4
Согласно документации, он не должен иметь возможности вернуть это. Почему бы этому не сработать? Заранее спасибо.
@Simon V., 👍0
Обсуждение2 ответа
Вам нужно предоставить больше, чем просто IP-адрес. Arduino также должен знать адрес маршрутизатора по умолчанию, чтобы отправлять пакеты в нужное место.
К сожалению, нет способа предоставить ему эту информацию, не указав также DNS-адрес, поэтому вам также придется это сделать.
Вам необходимо иметь:
IPAddress gateway(192, 168, 1, 1);
IPAddress dns(8, 8, 8, 8);
IPAddress ip(192, 168, 1, 25);
А затем в настройках:
Ethernet.begin(mac, ip, dns, gateway);
В качестве альтернативы вы можете положиться на DHCP, который предоставит вам все подробности, и просто используйте:
Ethernet.begin(mac);
К сожалению, это не решает мою проблему, @Simon V.
Я предполагаю, что ваш маршрутизатор 192.168.1.1 - это может быть не так. Вы должны убедиться, что используете правильный IP-адрес для своей сети., @Majenko
библиотека по умолчанию использует шлюз и dns, рассчитанные по предоставленному IP-адресу (последнее число изменено на 1) и маске сети 255.255.255.0, @Juraj
Я проверил, и я действительно использую правильный шлюз. Повлияет ли на это адаптер линии электропередачи? Я использую шлюз сетевого адаптера, к которому я подключен., @Simon V.
Документация неверна. Функция connect
возвращает только 1 при успешном выполнении и 0 при сбое. Во всех примерах есть if (client.connect(хост, порт)) {
(0 - ложь, 1-истина).
Попробуйте пример WebClient, приведенный в меню Примеры IDE для библиотеки Ethernet. Он имеет лучшую диагностику канала Ethernet.
Вы можете попробовать пример веб-сервера. Для этого не требуется подключение к Интернету.
Вы можете попробовать проверить IP-адрес экрана Ethernet.
Экран должен быть подключен к маршрутизатору или коммутатору, а IP-адрес шлюза должен указывать на устройство, маршрутизирующее сетевой трафик в Интернет.
Инициализация Ethernet с помощью DHCP: Не удалось настроить Ethernet с помощью подключения DHCP к www.google.com... не удалось установить соединение отсоединяюсь. Получено 0 байт за 0,0000, скорость = 0,00 кбайт в секунду-это ответ, который я получаю, @Simon V.
это говорит нам о том, что щит обнаружен и ссылка активна. вы установили IP-адрес и адрес dns-сервера?, @Juraj
Да, я установил ip, dns и шлюз на свой собственный, @Simon V.
К переключателю да. Ping возвращает 0% потерь., @Simon V.
ОК. попробуйте пример веб-сервера. для этого не требуется подключение к Интернету, @Juraj
Это работает. Я могу подключиться к arduino, и он покажет веб-страницу, @Simon V.
в примере WebClient измените сервер на "arduino.cc" и client.println("ПОЛУЧИТЬ /asciilogo.txt HTTP/1.1");
как здесь https://github.com/jandrassy/WiFiEspAT/blob/a2176889757be3fc3cf9c09a1512081864b39111/examples/Basic/WebClient/WebClient.ino#L57, @Juraj
Это возвращает сбой подключения, @Simon V.
используйте IP-адрес маршрутизатора в качестве шлюза. это должен быть шлюз в Интернет, @Juraj
Использование IP маршрутизаторов в качестве шлюза не устраняет проблему, @Simon V.
@SimonV., каковы настройки IP-адреса вашего компьютера? почему в вашей сети нет DHCP?, @Juraj
- Клиент MQTT на Arduino + SIM900
- Удаленная загрузка кода на плату Arduino через интернет
- Отправка данных Arduino через Ethernet на сервер PHP.
- Простая веб-страница с Ethernet-шилдом Arduino на SD-карте
- Есть ли тайм-аут для Ethernet.begin?
- Как создать сервер сокетов Arduino для получения сообщений
- Невозможно настроить Ethernet с помощью Arduino Uno R3
- Проблемы со сбросом Ethernet shield
`не работает " не очень полезно, потому что оно не описывает наблюдаемое поведение ... чего вы ожидали от возврата client.connect ()?, @jsotola
одно из значений, указанных в документации, которое будет: 1, -1, -2, -3 или -4., @Simon V.