HTTPクライアント/ESP32-WROOM-32E/Arduino IDE (Debian11.4.0)

2022/08/05


HTTPクライアント

ESP32をHTTPクライアントとして使う。
どこかのwebサーバに接続してhtmlが送られてくるはずだ。シリアルモニタでhtmlを確認しよう。
スケッチ例中のHTTPAuthorizationを参考に(ほぼそのまま)、「4.Wifi,DHCPクライアント」(esp32-04.html)にアクセスしてみた。
httpClient.ino
(ほぼHTTPAuthorization.ino)
 実行結果 シリアルモニター
「4.Wifi,DHCPクライアント」(esp32-04.html) を表示
httpclient

データを送信したい:データを受け取る仕組みが必要(Servlet)

ESP32からデータをWebサーバに送信したい。データを受け取る仕組みが必要なので、サーブレット(+Tomcat)を用意する。サーブレットでなくてもCGIやPHP,Ruby on Railsでも似たようなことができればOK。
サーブレットはdoGet()メソッドとdoPost()を用意する。
サーブレットがdoGet()メソッドまたはdoPost()メソッドでデータを受け取るとEclipse内のコンソールにデータを表示する。htmlで返信しない。
いつもなら、「ブラウザからデータを送る」→「ブラウザへデータを含むhtmlを返信をする」の流れだが、ESP32にhtmlを送っても・・・だし、ESP32にhtmlを表示する部分が別に必要だし・・・というわけで、ESP32に返信はしない。
doGet()メソッド,doPost()メソッドほぼ同じ内容なのでもう少しどうにかできないかと思わんでもないが、順調に進むとdoGet()メソッドは不要になるので、いまはこのままにする。
サーブレット Esp32_01.java
サーブレットがhttp://192.168.xx.xx/eps32/ESP32でアクセスできるようにweb.xmlを記述
 動作確認実行結果 Eclipse中のコンソールに[GET]...で受信したデータを表示
webブラウザのアドレスバーにつぎのように入力
#リクエストパラメータがないので para1..5はnullになる
http://192.168.xx.xx:8080/esp32/ESP32

#リクエストパラメータあり
http://192.168.xx.xx:8080/esp32/ESP32?para1=ESP32&para2=23.4&para3=567.89012&para4=ABCD&para5=-99
または端末から
#リクエストパラメータなし
curl http://192.168.xx.xx:8080/esp32/ESP32

#GETで送信
curl "http://192.168.xx.xx:8080/esp32/ESP32?para1=ESP32&para2=23.4&para3=567.89012&para4=ABCD&para5=-99"
wget "http://192.168.xx.xx:8080/esp32/ESP32?para1=ESP32&para2=23.4&para3=567.89012&para4=ABCD&para5=-99"

#POSTで送信
curl -X POST -d "para1=ESP32&para2=23.4&para3=567.89012&para4=ABCD&para5=-99" http://192.168.xx.xx:8080/esp32/ESP32
wget --post-data="para1=ESP32&para2=23.4&para3=567.89012&para4=ABCD&para5=-99" http://192.168.xx.xx:8080/esp32/ESP32
httpclient

データを送信:GETメソッド

ESP32からデータをWebサーバに送信したい。
まずはGETメソッドで試す。
HTTPクライアントでwebページが取得できのだからURL(http://IPアドレス:ポート番号/)のあとにURN(/path/?query)をつければGETメソッドでリクエストパラメータ(query)を送信できるはずだ。para5はWiFiの受信強度WiFi.RSSI()を表示している。ESP32-WROOM-32Eの周囲で手を振ったり障害物をおいたので、ときどきpara5の値が変わる。
httpClientGet.ino
 実行結果 Eclipse中のコンソールに[GET]...で受信したデータを表示
httpclient

データを送信:POSTメソッド

GETメソッドでリクエストパラメータが送信できた。今度はPOSTメソッドでリクエストパラメータを送信する。
リクエストパラメータをPOST(...)関数に渡すだけでよいらしい。
httpHeaderで"application/x-www-form-urlencoded"をつけている。 ヘッダとしてよく見るのが"Content-Type: text/html; charset=UTF-8"だが、いまはリクエストパラメータを送付するので"Content-Type: application/x-www-form-urlencoded"になる。 「application/x-www-form-urlencoded」は「para1=ESP32&para2=23.4&...」のようなパラメータ(key=value対)を&で連結した形を指す。
httpClientPost.ino
 実行結果 Eclipse中のコンソールに[POST]...で受信したデータを表示
httpclient


RANDOM NERD TUTORIALS   ESP32 HTTP GET and HTTP POST with Arduino IDE (JSON, URL Encoded, Text) ( https://randomnerdtutorials.com/esp32-http-get-post-arduino/)