BasicHttpClient
はじめに 基本的なHTTPクライアントです。指定したURLの内容を取得します。
プログラム 定義等
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/**
* BasicHTTPClient.ino
*
* Created on: 24.05.2015
*
*/
#include <Arduino.h>
#include <WiFi.h>
#include <WiFiMulti.h>
#include <HTTPClient.h>
#define USE_SERIAL Serial
WiFiMulti wifiMulti ;
/*
const char* ca = \
"-----BEGIN CERTIFICATE-----\n" \
"MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/\n" \
"MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT\n" \
"DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow\n" \
"SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT\n" \
"GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC\n" \
"AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF\n" \
"q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8\n" \
"SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0\n" \
"Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA\n" \
"a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj\n" \
"/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T\n" \
"AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG\n" \
"CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv\n" \
"bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k\n" \
"c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw\n" \
"VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC\n" \
"ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz\n" \
"MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu\n" \
"Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF\n" \
"AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo\n" \
"uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/\n" \
"wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu\n" \
"X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG\n" \
"PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6\n" \
"KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg==\n" \
"-----END CERTIFICATE-----\n";
*/
WiFiMulti型の変数wifiMultiを定義しています。WiFiMultiクラスは、複数のアクセスポイントを管理するためのクラスです。
setup()
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
void setup () {
USE_SERIAL . begin ( 115200 );
USE_SERIAL . println ();
USE_SERIAL . println ();
USE_SERIAL . println ();
for ( uint8_t t = 4 ; t > 0 ; t -- ) {
USE_SERIAL . printf ( "[SETUP] WAIT %d... \n " , t );
USE_SERIAL . flush ();
delay ( 1000 );
}
wifiMulti . addAP ( "SSID" , "PASSWORD" );
}
USE_SERIALは、Serialと定義されているので、前半はコンソールへの文字列の出力です。
wifiMullti.addAP() は、WiFiアクセスポイントの登録です。SSIDとPASSWORDは、各自の環境に合わせて変更する必要があります。
loop()
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
void loop () {
// wait for WiFi connection
if (( wifiMulti . run () == WL_CONNECTED )) {
HTTPClient http ;
USE_SERIAL . print ( "[HTTP] begin... \n " );
// configure traged server and url
//http.begin("https://www.howsmyssl.com/a/check", ca); //HTTPS
http . begin ( "http://example.com/index.html" ); //HTTP
USE_SERIAL . print ( "[HTTP] GET... \n " );
// start connection and send HTTP header
int httpCode = http . GET ();
// httpCode will be negative on error
if ( httpCode > 0 ) {
// HTTP header has been send and Server response header has been handled
USE_SERIAL . printf ( "[HTTP] GET... code: %d \n " , httpCode );
// file found at server
if ( httpCode == HTTP_CODE_OK ) {
String payload = http . getString ();
USE_SERIAL . println ( payload );
}
} else {
USE_SERIAL . printf ( "[HTTP] GET... failed, error: %s \n " , http . errorToString ( httpCode ). c_str ());
}
http . end ();
}
delay ( 5000 );
}
wifiMulti.run() は、wifiMullti.addAP() で登録したアクセスポイントに接続するメソッドです。接続に成功するとWL_CONNECTEDが返ってきます。
HTTPClientクラスは、HTTPクライアントを実現するためのクラスです。
http.begin() は、アクセスしたいURLを登録します。
http.GET() は、http.begin() で登録したURLを、GETリクエストを使って取得します。サーバに接続できないなど、エラーの場合は、負の値が返ってきます。HTTP接続が成功した場合は、HTTPのステータスコードが返ってきます。
http.getSting() は、http.GET() で取得したデータを文字列で返します。HTTPレスポンスのボディ部のサイズが大きくなると、メモリをその分多く消費します。目的にもよりますが、データを少しずつ読む例は、StreamHttpClient にあります。
http.end() は、TCPのコネクションを切断します。http.setReuse() を使い、コネクションを再利用することもできるようです。このときは、サーバがkeep-aliveを返してきていれば、コネクションはそのままにしておくようです。
http.GET() の呼び出しに失敗した場合は、http.errorToString() を呼び出して、エラーコードをエラーコードに対応した文字列に変換してから、表示します。
バージョン
Hardware: ESP-WROOM-32 Software: Arduino core for the ESP32 2.0.4
最終更新日
September 4, 2022