ちゃんと理解できてないけど「なぜか動いた」系エントリーなので、解説を加えていたたげると大変ありがたいと思いつつ、同じようなことで困ってる方がもしいたらと思い公開したエントリーです。
Wi-Fi のみならず Ethernet や GSM(セルラー通信) でも HTTP 通信を簡単に実装できる ArduinoHttpClient.h
ですが、M5Stack Basic/Gray にて利用しようとすると、以下のようなコンパイルエラーが発生します。
C:\Users\USERNAME\Documents\Arduino\libraries\M5Stack\src\M5Display.cpp: In member function 'void M5Display::drawPngUrl(const char*, uint16_t, uint16_t, uint16_t, uint16_t, uint16_t, uint16_t, double, uint8_t)':
Arduino\libraries\M5Stack\src\M5Display.cpp:543:3: error: 'HTTPClient' was not declared in this scope
HTTPClient http;
^
Arduino\libraries\M5Stack\src\M5Display.cpp:545:7: error: 'WiFi' was not declared in this scope
if (WiFi.status() != WL_CONNECTED) {
^
Arduino\libraries\M5Stack\src\M5Display.cpp:545:24: error: 'WL_CONNECTED' was not declared in this scope
if (WiFi.status() != WL_CONNECTED) {
^
Arduino\libraries\M5Stack\src\M5Display.cpp:550:3: error: 'http' was not declared in this scope
http.begin(url);
^
Arduino\libraries\M5Stack\src\M5Display.cpp:553:19: error: 'HTTP_CODE_OK' was not declared in this scope
if (httpCode != HTTP_CODE_OK) {
^
Arduino\libraries\M5Stack\src\M5Display.cpp:559:3: error: 'WiFiClient' was not declared in this scope
WiFiClient *stream = http.getStreamPtr();
^
Arduino\libraries\M5Stack\src\M5Display.cpp:559:15: error: 'stream' was not declared in this scope
WiFiClient *stream = http.getStreamPtr();
^
(M5Stack 0.3.0, 0.3.1 にて確認)
原因と回避方法
これは M5Stack-Core-ESP32 に同梱されている HTTPClient.h
が組み込まれてない事が要因であるため、以下のように
#include <M5Stack.h>
#include <HTTPClient.h> # <= 追加した行
と明示することでコンパイルできるようになります。
解せぬ点。
よくわからないのが M5Stack\src\M5Display.cpp
では #include <HTTPClient.h>
と指定されていることから、 #include <M5Stack.h>
の時点で include されても良さそうなのだが、同エラーが発生してしまう。解せぬ。
あとがき
解せぬよ。
EoT