Fix for ESP32 3.x NetworkClient, Client interface
@facchinm @andreagilardoni Hi - this pull request allows this library to be used with the ESP32 board support package 3.x (Arduino ESP32 v3.0 based on ESP-IDF v5.1)by adding two extra connect() definitions into this library's HTTPClient.h to match the updated Client-type interfaces within ESP32, NetworkClient and NetworkSecureClient.
Since the bug only impacts devices running ESP32 on ESP-IDF 5.x or greater, I've provided a macro to detect the ESP-IDF version and a conditional inclusion guard around these two virtual connect() header-only interfaces.
The PR fixes the following compiler error (compiled with ESP Arduino 3.1.0 RC1):
src/wifi/AdafruitIO_ESP32.cpp:26:52: error: invalid new-expression of abstract class type 'HttpClient'
26 | _http = new HttpClient(_client, _host, _http_port);
| ^
In file included from /Users/brentrubell/Documents/Arduino/libraries/ArduinoHttpClient/src/ArduinoHttpClient.h:8,
from /Users/brentrubell/Documents/Arduino/libraries/Adafruit_IO_Arduino/src/AdafruitIO.h:27,
from /Users/brentrubell/Documents/Arduino/libraries/Adafruit_IO_Arduino/src/wifi/AdafruitIO_ESP32.h:20:
/Users/brentrubell/Documents/Arduino/libraries/ArduinoHttpClient/src/HttpClient.h:41:7: note: because the following virtual functions are pure within 'HttpClient':
41 | class HttpClient : public Client
| ^~~~~~~~~~
In file included from /Users/brentrubell/Library/Arduino15/packages/esp32/hardware/esp32/3.1.0-RC1/cores/esp32/Arduino.h:197,
from /Users/brentrubell/Documents/Arduino/libraries/Adafruit_IO_Arduino/src/AdafruitIO_Dashboard.h:19,
from /Users/brentrubell/Documents/Arduino/libraries/Adafruit_IO_Arduino/src/AdafruitIO.h:19:
/Users/brentrubell/Library/Arduino15/packages/esp32/hardware/esp32/3.1.0-RC1/cores/esp32/Client.h:29:15: note: 'virtual int Client::connect(IPAddress, uint16_t, int32_t)'
29 | virtual int connect(IPAddress ip, uint16_t port, int32_t timeout) = 0;
| ^~~~~~~
/Users/brentrubell/Library/Arduino15/packages/esp32/hardware/esp32/3.1.0-RC1/cores/esp32/Client.h:31:15: note: 'virtual int Client::connect(const char*, uint16_t, int32_t)'
31 | virtual int connect(const char *host, uint16_t port, int32_t timeout) = 0;
| ^~~
Memory usage change @ 770bc04799f7f342f978db019933a7c7899d7067
| Board | flash | % | RAM for global variables | % |
|---|---|---|---|---|
arduino:samd:mkr1000 |
0 - 0 | 0.0 - 0.0 | 0 - 0 | 0.0 - 0.0 |
Click for full report table
| Board | examples/BasicAuthGetflash |
% | examples/BasicAuthGetRAM for global variables |
% | examples/CustomHeaderflash |
% | examples/CustomHeaderRAM for global variables |
% | examples/DweetGetflash |
% | examples/DweetGetRAM for global variables |
% | examples/DweetPostflash |
% | examples/DweetPostRAM for global variables |
% | examples/HueBlinkflash |
% | examples/HueBlinkRAM for global variables |
% | examples/ParseURLflash |
% | examples/ParseURLRAM for global variables |
% | examples/PostWithHeadersflash |
% | examples/PostWithHeadersRAM for global variables |
% | examples/SimpleDeleteflash |
% | examples/SimpleDeleteRAM for global variables |
% | examples/SimpleGetflash |
% | examples/SimpleGetRAM for global variables |
% | examples/SimpleHttpExampleflash |
% | examples/SimpleHttpExampleRAM for global variables |
% | examples/SimplePostflash |
% | examples/SimplePostRAM for global variables |
% | examples/SimplePutflash |
% | examples/SimplePutRAM for global variables |
% | examples/SimpleWebSocketflash |
% | examples/SimpleWebSocketRAM for global variables |
% |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
arduino:samd:mkr1000 |
0 | 0.0 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0 |
Click for full report CSV
Board,examples/BasicAuthGet<br>flash,%,examples/BasicAuthGet<br>RAM for global variables,%,examples/CustomHeader<br>flash,%,examples/CustomHeader<br>RAM for global variables,%,examples/DweetGet<br>flash,%,examples/DweetGet<br>RAM for global variables,%,examples/DweetPost<br>flash,%,examples/DweetPost<br>RAM for global variables,%,examples/HueBlink<br>flash,%,examples/HueBlink<br>RAM for global variables,%,examples/ParseURL<br>flash,%,examples/ParseURL<br>RAM for global variables,%,examples/PostWithHeaders<br>flash,%,examples/PostWithHeaders<br>RAM for global variables,%,examples/SimpleDelete<br>flash,%,examples/SimpleDelete<br>RAM for global variables,%,examples/SimpleGet<br>flash,%,examples/SimpleGet<br>RAM for global variables,%,examples/SimpleHttpExample<br>flash,%,examples/SimpleHttpExample<br>RAM for global variables,%,examples/SimplePost<br>flash,%,examples/SimplePost<br>RAM for global variables,%,examples/SimplePut<br>flash,%,examples/SimplePut<br>RAM for global variables,%,examples/SimpleWebSocket<br>flash,%,examples/SimpleWebSocket<br>RAM for global variables,%
arduino:samd:mkr1000,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0
Thankx per1234! That was quick. The patch works for me!
Yup, let's close this in favor of the platform Client API PR.