Экран Ethernet, подключенный к локальной сети, а не к Интернету

Используя пример файла WebServer, я смог убедиться, что моя Arduino подключена к моей локальной сети, и я могу открыть страницу в своем браузере. Однако любая попытка связаться с адресами за пределами моей собственной сети терпит неудачу. Например, этот простой скрипт:


    #include <SPI.h>
    #include <Ethernet.h>

    EthernetClient client;

    byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
    IPAddress ip(192, 168, 1, 25);
    IPAddress gateway(192, 168, 1, 1);
    IPAddress dns(8, 8, 8, 8);
    byte server[] = { 64, 233, 187, 99 }; // Google

    void setup() {  
      Ethernet.begin(mac, ip, dns, gateway);
      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");
      }
    }

Это постоянно возвращает сбой подключения. Кабель Ethernet в Arduino имеет активное подключение к Интернету, хотя и через коммутатор. Моя плата — Arduino Uno.

, 👍0


1 ответ


1

Найдите сервер, который не переключает режимы автоматически на https, как это делает Google. Если вы введете 64.233.187.99/search?q=arduino%20HTTP/1.0 в свой браузер, вы увидите, что он переключается на https.

Если сделать тот же запрос через приложение терминала wget, произойдет сбой.

--2020-01-17 11:42:26--  http://64.233.187.99/search?q=arduino%20HTTP/1.0
Connecting to 64.233.187.99:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: http://www.google.com/search?q=arduino%20HTTP/1.0 [following]
--2020-01-17 11:42:26--  http://www.google.com/search?q=arduino%20HTTP/1.0
Resolving www.google.com... 172.217.4.132, 2607:f8b0:4007:80c::2004
Connecting to www.google.com|172.217.4.132|:80... connected.
HTTP request sent, awaiting response... 403 Forbidden
2020-01-17 11:42:28 ERROR 403: Forbidden.

Кроме того, объекту клиента должна быть возвращена ошибка, которую вы можете распечатать для отладки соединения.

Измените свой код, чтобы распечатать возвращаемое значение вызова client.connect следующим образом

void loop() {
      int result = client.connect(server, 80); 
      if (x) {
        Serial.println("connected");
        client.println("GET /search?q=arduino HTTP/1.0");
        client.println();
      } else {
        Serial.println("connection failed");
        Serial.println(x);  // распечатать ошибку
      }
    }

И последнее, вы устанавливаете свой DNS-сервер на 8.8.8.8, который обычно должен быть установлен на ваш шлюз/маршрутизатор 192.168.1.1.

,