При подключении 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

Согласно документации, он не должен иметь возможности вернуть это. Почему бы этому не сработать? Заранее спасибо.

, 👍0

Обсуждение

`не работает " не очень полезно, потому что оно не описывает наблюдаемое поведение ... чего вы ожидали от возврата client.connect ()?, @jsotola

одно из значений, указанных в документации, которое будет: 1, -1, -2, -3 или -4., @Simon V.


2 ответа


-1

Вам нужно предоставить больше, чем просто 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.


0

Документация неверна. Функция 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