У вас нет ограничений на отправку повторных запросов, кроме времени для каждого запроса. Ваш код в порядке, за исключением части, которая делает HTTP-запрос. Библиотека Arduino по умолчанию немного сложна для обработки HTTP-запросов (например, нет HttpClient.GET
).
Существует много высокоуровневых API, которые обрабатывают запросы для вас, а также могут устанавливать различные типы заголовков.
Например, ArduinoHTTPClient хороший. Просто возьмите библиотеку и посмотрите примеры. Я переписываю ваш код на основе этого, и вы получите ваше тело ответа JSON. Затем вы можете просто использовать один из синтаксических анализаторов JSON, например ArduinoJSON , для анализа результатов.
#include <ArduinoHttpClient.h>
#include <SPI.h>
#include <Ethernet.h>
// Enter a MAC address for your controller below.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
// Set the static IP address to use if the DHCP fails to assign
IPAddress ip(192, 168, 0, 177);
IPAddress myDns(192, 168, 0, 1);
char serverAddress[] = "http://jsonplaceholder.typicode.com"; // server address
int port = 80;
EthernetClient EthClient;
HttpClient client = HttpClient(EthClient, serverAddress, port);
void setup()
{
Serial.begin(9600);
// start the Ethernet connection:
Serial.println("Initialize Ethernet with DHCP:");
if (Ethernet.begin(mac) == 0)
{
Serial.println("Failed to configure Ethernet using DHCP");
// Check for Ethernet hardware present
if (Ethernet.hardwareStatus() == EthernetNoHardware)
{
Serial.println("Ethernet shield was not found. Sorry, can't run without hardware. :(");
while (true)
{
delay(1); // do nothing, no point running without Ethernet hardware
}
}
if (Ethernet.linkStatus() == LinkOFF)
{
Serial.println("Ethernet cable is not connected.");
}
// try to congifure using IP address instead of DHCP:
Ethernet.begin(mac, ip, myDns);
}
else
{
Serial.print(" DHCP assigned IP ");
Serial.println(Ethernet.localIP());
}
}
void loop()
{
Serial.println("making GET request");
client.get("/comments?id=10");
// read the status code and body of the response
int statusCode = client.responseStatusCode();
String response = client.responseBody();
Serial.print("Status code: ");
Serial.println(statusCode);
Serial.print("Response: ");
Serial.println(response);
Serial.println("Wait five seconds");
delay(5000);
}