81 lines
2.2 KiB
C++
81 lines
2.2 KiB
C++
// SPDX-License-Identifier: LGPL-3.0-or-later
|
|
// Copyright 2016-2025 Hristo Gochkov, Mathieu Carbou, Emil Muratov
|
|
|
|
#include "Arduino.h"
|
|
#include "AsyncTCP.h"
|
|
#include "WiFi.h"
|
|
|
|
// Run a server at the root of the project with:
|
|
// > python3 -m http.server 3333
|
|
// Now you can open a browser and test it works by visiting http://192.168.125.122:3333/ or http://192.168.125.122:3333/README.md
|
|
#define HOST "192.168.125.122"
|
|
#define PORT 3333
|
|
|
|
// WiFi SSID to connect to
|
|
#define WIFI_SSID "*********"
|
|
#define WIFI_PASS "*********"
|
|
|
|
bool client_running = false;
|
|
|
|
void makeRequest() {
|
|
client_running = true;
|
|
AsyncClient *client = new AsyncClient;
|
|
if (client == nullptr) {
|
|
Serial.println("** could not allocate client");
|
|
client_running = false;
|
|
return;
|
|
}
|
|
|
|
client->onError([](void *arg, AsyncClient *client, int8_t error) {
|
|
Serial.printf("** error occurred %s \n", client->errorToString(error));
|
|
client->close(true);
|
|
delete client;
|
|
client_running = false;
|
|
});
|
|
|
|
client->onConnect([](void *arg, AsyncClient *client) {
|
|
Serial.printf("** client has been connected: %" PRIu16 "\n", client->localPort());
|
|
|
|
client->onDisconnect([](void *arg, AsyncClient *client) {
|
|
Serial.printf("** client has been disconnected: %" PRIu16 "\n", client->localPort());
|
|
client->close(true);
|
|
delete client;
|
|
client_running = false;
|
|
});
|
|
|
|
client->onData([](void *arg, AsyncClient *client, void *data, size_t len) {
|
|
Serial.printf("** data received by client: %" PRIu16 ": len=%u\n", client->localPort(), len);
|
|
});
|
|
|
|
client->write("GET /README.md HTTP/1.1\r\nHost: " HOST "\r\nUser-Agent: ESP\r\nConnection: close\r\n\r\n");
|
|
});
|
|
|
|
if (!client->connect(HOST, PORT)) {
|
|
Serial.println("** connection failed");
|
|
client_running = false;
|
|
}
|
|
}
|
|
|
|
void setup() {
|
|
Serial.begin(115200);
|
|
|
|
Serial.print("Connecting to ");
|
|
Serial.print(WIFI_SSID);
|
|
WiFi.begin(WIFI_SSID, WIFI_PASS);
|
|
while (WiFi.status() != WL_CONNECTED) {
|
|
delay(500);
|
|
Serial.print(".");
|
|
}
|
|
Serial.println();
|
|
Serial.print("Connected to WiFi. IP: ");
|
|
Serial.println(WiFi.localIP());
|
|
}
|
|
|
|
void loop() {
|
|
if (!client_running) {
|
|
makeRequest();
|
|
}
|
|
delay(1000);
|
|
Serial.printf("** free heap: %" PRIu32 "\n", ESP.getFreeHeap());
|
|
}
|