Экран 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.
@Simon V., 👍0
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.
- Клиент MQTT на Arduino + SIM900
- Удаленная загрузка кода на плату Arduino через интернет
- Отправка данных Arduino через Ethernet на сервер PHP.
- Простая веб-страница с Ethernet-шилдом Arduino на SD-карте
- Есть ли тайм-аут для Ethernet.begin?
- Как создать сервер сокетов Arduino для получения сообщений
- При подключении client.connect() возвращает 0
- Невозможно настроить Ethernet с помощью Arduino Uno R3