Простой запрос GET молча терпит неудачу
Я пытаюсь сделать простой запрос GET на сервер (который имеет статический IP - адрес, но не имеет имени). Я использую библиотеку EtherCard и дешевый модуль Ethernet ENC28J60. Основные конфигурации в порядке (я могу получить назначение DHCP и поиск DNS), но когда я пытаюсь сделать простой запрос GET с помощью
метода browseUrl, ничего не происходит. Я попытался вызвать страницу из браузера, и все работает нормально, так что это не проблема сервера. Код выглядит следующим образом:
#include <EtherCard.h>
// mac-адрес интерфейса ethernet, должен быть уникальным в
byte mymac[] = { 0x54, 0x55, 0x58, 0x10, 0x00, 0x24 };
const char website[] PROGMEM = "http://10.10.10.10"; // мой сервер
const char dnsLook[] PROGMEM = "google.com";
byte Ethernet::buffer[700];
uint32_t timer;
Stash stash;
// вызывается, когда клиентский запрос завершен
static void requestCallback (byte status, word off, word len) {
Serial.print(">>>");
Serial.print(status);
Serial.print("-");
Serial.print(status);
Serial.print("-");
Serial.print(status);
Serial.println("<<<");
}
void setup () {
Serial.begin(9600);
delay (10000);
int res = ether.begin(sizeof Ethernet::buffer, mymac, 8);
if (res == 0)
Serial.println( "Cannot access ethernet interface");
const static uint8_t ip[] = {192,168,1,117};
const static uint8_t gw[] = {192,168,1,1};
const static uint8_t dns[] = {8,8,8,8};
if (!ether.staticSetup(ip, gw, dns))
{
Serial.println("Cannot set static parameters");
}
// вручную установить
ether.netmask[0] = 255;
ether.netmask[1] = 255;
ether.netmask[2] = 255;
ether.netmask[3] = 0;
// поиск dns
if (!ether.dnsLookup(dnsLook))
Serial.println("DNS failed");
}
void loop () {
ether.packetLoop(ether.packetReceive());
if (millis() > timer) {
timer = millis() + 10000;
ether.browseUrl(PSTR("/page.php?"), "var=value", website, requestCallback);
}
}
@user2959923, 👍1
Обсуждение1 ответ
Я сделал это с помощью библиотеки EthernetENC, как предложил @Juraj.
Чтобы установить библиотеку, просто воспользуйтесь менеджером библиотек и найдите EthernetENC.
Для тех, кто в этом нуждается, ниже приведен рабочий код
#include <SPI.h>
#include <EthernetENC.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // MAC-адрес модуля ethernet
IPAddress server(10,10,10,10); // IP-адрес сервера, без DNS
//char server[] = "www.site.com"; // если ваш сервер имеет DNS - имя, используйте эту переменную для подключения
// статические переменные конфигурации
IPAddress staticIp(192, 168, 1, 217);
IPAddress staticDnsServer(8, 8, 8, 8);
EthernetClient client; // объект клиента ethernet
void setup() {
// настройка CS pin
Ethernet.init(8);
// начать последовательное соединение
Serial.begin(9600);
// подождите несколько секунд, чтобы позволить модулю начать
delay(5000);
// инициализация модуля ethernet со статической конфигурацией
Ethernet.begin(mac, staticIp, staticDnsServer);
// подождите, пока модуль правильно инициализируется
delay(1000);
// подключение к серверу
Serial.print("Connecting to: ");
Serial.print(server);
Serial.println("...");
// уведомить об успешном подключении
if (client.connect(server, 80)) {
Serial.print("Connected to ");
Serial.println(client.remoteIP());
// простой запрос GET
client.println("GET /page.php?var=test HTTP/1.1");
client.println("Host: 10.10.10.10");
client.println("User-Agent: Arduino/1.0");
client.println("Connection: close");
client.println();
} else {
// уведомление о сбое соединения
Serial.println("Connection failed");
}
}
void loop() {
// если я получил ответ от сервера, read and print to serial
int len = client.available();
if (len > 0) {
byte buffer[80];
if (len > 80) len = 80;
client.read(buffer, len);
Serial.write(buffer, len);
}
// отключение
if (!client.connected()) {
Serial.println();
Serial.println("Disconnected");
client.stop();
// остановить выполнение
while (true) {
delay(1);
}
}
}
по этой ссылкевы можете увидеть, как правильно подключить этот модуль к Arduino UNO.
вы можете снизить использование флэш-памяти и памяти с помощью настроек в разделе "утилита/uipethernet-conf".ч` https://github.com/jandrassy/EthernetENC/wiki/Settings самая интересная настройка-UIP_CONF_UDP, @Juraj
- Как публиковать запросы HTTP POST на моем веб-сайте?
- Почтовый запрос HTTP в формате JSON с использованием модуля SIM900
- Клиент MQTT на Arduino + SIM900
- Удаленная загрузка кода на плату Arduino через интернет
- HTTP GET запрос с использованием Arduino Uno и ESP8266
- GSM-модуль Sim800l не может подключить данные gprs
- Отправка данных Arduino через Ethernet на сервер PHP.
- Простая веб-страница с Ethernet-шилдом Arduino на SD-карте
сначала запустите пример кода, @jsotola
Я рекомендую вам использовать мою библиотеку EthernetENC, @Juraj
@Juraj Я попробую, @user2959923