Здравствуйте. В продолжении темы на старом форуме, есть несколько поросов.
Спойлер
#include <SPI.h>
#include <Ethernet.h>
#include <avr/wdt.h>
#define PORT_NUMBER 80
const uint8_t mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
const uint8_t ip[] = {192, 168, 1, 88};
const uint8_t gateway[] = {192, 168, 1, 1};
const uint8_t subnet[] = {255, 255, 255, 0};
const uint8_t dns[] = {192, 168, 1, 1};
const uint8_t server[] = {192, 168, 1, 42};
EthernetClient client;
void setup() {
wdt_disable();
Serial.begin(9600);
Ethernet.begin(mac, ip, dns, gateway, subnet);
Serial.println("Start");
wdt_enable(WDTO_8S);
}
void http_request_get() {
client.stop();
if (client.connect(server, PORT_NUMBER)) {
Serial.println("СONNECTED");
client.print(F("GET /12.php?text=12345 HTTP/1.1\r\n"));
client.print(F("User-Agent: ARDUINO\r\n"));
client.print(F("Host: "));
for (uint8_t i = 0; i < 4; i++) {
client.print(server[i]);
if (i < 3)client.print(".");
}
client.print(F("\r\n"));
client.print("Connection: close\r\n");
client.print("\r\n");
} else {
Serial.println("CONNECTION_FAILED");
}
}
void http_request_post() {
client.stop();
if (client.connect(server, PORT_NUMBER)) {
client.print(F("POST /12.php HTTP/1.1\r\n"));
client.print(F("User-Agent: ARDUINO\r\n"));
client.print(F("Host: "));
for (uint8_t i = 0; i < 4; i++) {
client.print(server[i]);
if (i < 3)client.print(".");
}
client.print(F("\r\n"));
client.print(F("Content-Type: application/x-www-form-urlencoded\r\n"));
client.print(F("Content-Length: 9 \r\n"));
client.print(F("\r\n"));
client.print(F("text=1234"));
} else {
Serial.println("CONNECTION_FAILED");
}
}
void get_response() {
if (client.available()) {
char c = client.read();
Serial.print(c);
}
}
void loop() {
wdt_reset();
get_response();
static uint32_t timer_status;
if (millis() - timer_status >= 500) {
timer_status = millis();
Serial.print("Status = ");
Serial.print(client.connected());
Serial.println("");
}
static uint32_t timer;
if (millis() - timer >= 5000) {
timer = millis();
http_request_get();
//http_request_post();
}
}
<?php
if (isset($_GET['text'])) {
echo ("Text_GET = {$_GET['text']}\r\n");
}
if (isset($_POST['text'])) {
echo ("Text_POST= {$_POST['text']}\r\n");
}
?>
При выполнении GET запроса клиент сразу после отправки “останавливается”
Спойлер
Start
Status = 0
Status = 0
Status = 0
Status = 0
Status = 0
Status = 0
Status = 0
Status = 0
Status = 0
СONNECTED
HTTP/1.1 200 OK
Date: Fri, 30 Dec 2022 12:01:52 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 18
ConnectioStatus = 1
n: close
Server: Apache
X-Content-Type-Options: nosniff
Text_GET = 12345
Status = 0
Status = 0
Status = 0
Status = 0
Status = 0
Status = 0
Status = 0
А при выполнении POST запроса
Спойлер
Start
Status = 0
Status = 0
Status = 0
Status = 0
Status = 0
Status = 0
Status = 0
Status = 0
Status = 0
HTTP/1.1 200 OK
Date: Fri, 30 Dec 2022 12:04:20 GMT
Content-Type: text/html; charset=UTF-8
Content-LengthStatus = 1
: 17
Connection: keep-alive
Keep-Alive: timeout=120
Server: Apache
X-Content-Type-Options: nosniff
Text_POST= 1234
Status = 1
Status = 1
Status = 1
Status = 1
Status = 1
Status = 1
Status = 1
Клиент после выполнения запроса не остановится.
Если строку client.stop(); перенести сразу после выполнения запроса, нужно делать задержку, примерно 100 мс, чтобы данные отправились.
Как отследить что данные отправились и остановить клиент ? (чтобы не ждать 100 мс, а остановить по факту). Ожидать строку HTTP/1.1 и останавливать?