ここまででできたこと
- 環境モニタを作ろう with ESP32 DEV Module 〜 No1. まずは動かして見よう
- 環境モニタを作ろう with ESP32 DEV Module 〜 No2. 温度湿度センサーをつけよう
さて、前回で温度と湿度のデータを取ることができましたね。
あれ、このままではシリアルモニタでみるだけですよね。
ここから、Wifi 、もしくはSoracomなどを使って通信できるようにして、クラウドにデータを保存して、スマホやタブレットやPCでその状況をみれたりすると良いですよね。
さて、一つ一つやっていきましょう。
Wifiに接続してみる
う、どうやって?
Arduinoには、スケッチ例というサンプルコードがたくさんあるので、まずはそのスケッチ例を見て見ましょう。
Wifiのサンプルだけでもたくさんありますね。
この中で、WifiClientBasicの例を見て見ましょう。
WiFi/examples/WiFiClientBasic/WiFiClientBasic.ino
setupのメソッド部分だけ動かすだけで、Wifiに接続できます。
ssidとpasswordだけ、自分の環境に合わせるだけです。
#include <WiFi.h> #include <WiFiMulti.h> WiFiMulti WiFiMulti; void setup() { Serial.begin(115200); delay(10); // We start by connecting to a WiFi network WiFiMulti.addAP("ssid", "password"); Serial.println(); Serial.println(); Serial.print("Wait for WiFi... "); while(WiFiMulti.run() != WL_CONNECTED) { Serial.print("."); delay(500); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); delay(500); }
シリアルモニターを開いて、Wifiに接続したメッセージとIPアドレスが取得できたか確認しましょう。
httpに接続してみる
さて、Wifiに繋がったので、次はインターネットに接続して、どこかのサイトを取得できるか試してみましょう。
今回もスケッチ例を参考にします。
HTTPClient/examples/BasicHttpClient/BasicHttpClient.ino
setup()の部分は、Wifiに接続している部分なので、説明は省略します。
loop()の部分でhttpに接続しています。
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); }
HTTPClientのライブラリを使うことで、サイトをgetすることができます。
上記の「http://example.com/index.html」を実際にあるWebサイトのURLに書き換えて実行してみましょう
httpsに接続してみる
さて、上記のコードを見てみると、httpsのサイトへのアクセスも、ルート証明書を渡すことでできるようです。
簡単にできるかなー、と思ったのですが、この証明書の取得で引っかかりました。
こちらのサイトでChromeからの証明書の取得方法が書かれているのですが、
私のChromeでは、すでに証明書の取得がDeveloperToolでできませんでした・・。
バージョン: 62.0.3202.94(Official Build) (64 ビット)
なので、今回はFireFoxから以下のようにして取得しました。
httpsのサイトを表示し、アドレスバーの鍵をクリックして、MoreInformationでさらに情報を表示させ、View Certificateで証明書の情報を表示させます。
Certificate FieldsでSubject’s Private Keyを選択してExportします。
これで証明書が取得できます。
取得できた証明書は、変数にセットして
const char* ca = \ "-----BEGIN CERTIFICATE-----\n" \ "MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/\n" \ "MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT\n" \ "DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow\n" \ "........................\n" \ "-----END CERTIFICATE-----\n";
証明書を引数につけて呼ぶだけです。
http.begin("https://www.hogehoge.com/", ca); //HTTPS
ESP32 DEV Moduleはhttpsも使えるんですね。
暗号化には馬力が足りないデバイスも多いのですが、これなら、ここからAWS-IoTとかにつながるかも?
ということで、次回はAWS-IoTにつなぎにいきましょう
参考サイト
Arduino – ESP32 WiFiClientSecure ライブラリで、安定して https ( SSL )記事をGETする方法 | mgo-tec電子工作