WiFiClientSecure でなく HTTPClient を使って M5Stack から HTTPS で AirTable にデータを書き込むメモです。
背景
以前、こちらの記事を書いたのですが、HTTPClient というライブラリも使いやすそうなので、試してみます。
コードを書いていく中で、以下の記事が参考になりました。ありがとうございます。
- ESP8266でHTTP GETするならWiFiClientじゃなくてHTTPClientのほうが良い – Androidのメモとか
- 【ESP32】JSONをPOSTするには?HTTPClientがおすすめ! | ばすにっきTips
- M5Stick-CでJsonをPOSTする – Qiita
- HTTPClientライブラリリファレンス
Arduino ソースコード
ソースコードはこちらです。HTTPClient は追加インストールすることなく ESP32 で使えます。
また、コード内で設定するものは、以前の M5Stack から HTTPS で AirTable にデータを書き込むメモ のときと同じです。くわしくはそちらをご覧ください。
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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 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 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 | #include <M5Stack.h> #include <HTTPClient.h> // WiFiClientSecure から HTTPClient 変更 // Wi-FiのSSID char *ssid = "<Wi-FiのSSID>" ; // Wi-Fiのパスワード char *password = "<Wi-Fiのパスワード>" ; void setup() { // init lcd, serial, but don't init sd card // LCD ディスプレイとシリアルは動かして、SDカードは動かさない設定 M5.begin( true , false , true ); // スタート M5.Lcd.fillScreen(BLACK); M5.Lcd.setCursor(10, 10); M5.Lcd.setTextColor(WHITE); M5.Lcd.setTextSize(2); // Arduino のシリアルモニタ・M5Stack LCDディスプレイ両方にメッセージを出す Serial.print( "START" ); // Arduino のシリアルモニタにメッセージを出す M5.Lcd.print( "START" ); // M5Stack LCDディスプレイにメッセージを出す(英語のみ) // WiFi 接続開始 WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); // Arduino のシリアルモニタ・M5Stack LCDディスプレイ両方にメッセージを出す Serial.print( "." ); M5.Lcd.print( "." ); } // WiFi Connected // WiFi 接続完了 M5.Lcd.setCursor(10, 40); M5.Lcd.setTextColor(WHITE); M5.Lcd.setTextSize(2); // Arduino のシリアルモニタ・M5Stack LCDディスプレイ両方にメッセージを出す // 前のメッセージが print で改行入っていないので println で一つ入れる Serial.println( "" ); // Arduino のシリアルモニタにメッセージを出し改行が最後に入る M5.Lcd.println( "" ); // M5Stack LCDディスプレイにメッセージを出す改行が最後に入る(英語のみ) // Arduino のシリアルモニタ・M5Stack LCDディスプレイ両方にメッセージを出す Serial.println( "WiFi Connected." ); // Arduino のシリアルモニタにメッセージを出す M5.Lcd.println( "WiFi Connected." ); // M5Stack LCDディスプレイにメッセージを出す(英語のみ) } void send_message(String msg) { // AirTable ホスト String airtableHost = "api.airtable.com" ; // AirTable の自分のトークン // https://airtable.com/account から自分の API Key を反映します。 String airtableToken = "<AirTable の自分のトークン>" ; // AirTable の Base 名 // https://airtable.com/api に各Baseでの HTTP 仕様が確認できるので、そこから Base ID を反映します。 String airtableBaseName = "<AirTable の Base 名>" ; // AirTable の Table 名 // Table 名は、AirTable の表示上では Table 1。 // %20 はスペースを HTTP で送るためにエンコードしているので Table%201 と指定しています。 String airtableTableName = "Table%201" ; M5.Lcd.fillScreen(BLACK); M5.Lcd.setCursor(10, 10); M5.Lcd.println( "-> AirTable send data" ); Serial.println( "-> AirTable send data" ); M5.Lcd.print( "msg: " ); Serial.print( "msg: " ); M5.Lcd.println(msg); Serial.println(msg); // 送るデータを JSON で。 String queryString = "{\"records\": [{\"fields\": {\"Name\": \"" + msg + "\"}}]}" ; // URL 作成 String url = "https://" + airtableHost + "/v0/" + airtableBaseName + "/" + airtableTableName; HTTPClient httpClient; // URL 設定 httpClient.begin(url); // Content-Type httpClient.addHeader( "Content-Type" , "application/json" ); // Authorization httpClient.addHeader( "Authorization" , "Bearer " + airtableToken); // ポストする int status_code = httpClient.POST(queryString); if ( status_code == 200 ){ String response = httpClient.getString(); M5.Lcd.println( "sended." ); Serial.println( "sended." ); M5.Lcd.println( "response:" ); M5.Lcd.println(response); } httpClient.end(); delay(2000); } void loop() { M5.update(); if (M5.BtnA.wasReleased()) { // A ボタンを押したらテキストメッセージを送る send_message( "Pushed A" ); } else if (M5.BtnB.wasReleased()) { // B ボタンを押したらテキストメッセージを送る send_message( "Pushed B" ); } else if (M5.BtnC.wasReleased()) { // C ボタンを押したらテキストメッセージを送る send_message( "Pushed C" ); } } |