ラベル IoT の投稿を表示しています。 すべての投稿を表示
ラベル IoT の投稿を表示しています。 すべての投稿を表示

2015年11月14日

Arduino core for ESP8266でHTTPSが叩けるようになっていた件

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
以前から使っている Arduino core for ESP8266 WiFi chip のStaging Version (ver. 1.6.5-1160-gef26c5f) でWiFiClientSecureが使えるようになっていました。

今まではWiFiClientではhttpしか叩けなかったのですが、これでhttpsなWebサーバにもアクセス可能です。
(以前の記事では、espconn_secure_connectを直接叩くことでhttpsなWebサーバにアクセスする方法を紹介していました)

多分、こんなコードでPOSTできるはず!
(現在やってるプロジェクトからhttpsPostの関数だけコピって持ってきたので、全体としては動作確認してませんが、関数自体は問題なく動くことを確認済み)

ちなみに、text=Hello ESP8266!とbat=現在のVCC電圧がPOSTされます。

もっとイケてるコードは examples/HTTPSRequest/HTTPSRequest.ino があるので、そちらを参考にしてください... (GitHubのAPIを叩いてJSONをパースしてる)
→ https://github.com/esp8266/Arduino/commit/2ff8aa08d478aceee39fe4147cb7fcc1eef263f1

以前の記事で、SSLライブラリを有効化して、直接ESP8266のAPIを叩くという方法でHTTPS通信した場合と同様、暗号種は以下の4種対応です。

  • TLS_RSA_WITH_AES_128_CBC_SHA
  • TLS_RSA_WITH_AES_256_CBC_SHA
  • TLS_RSA_WITH_RC4_128_SHA
  • TLS_RSA_WITH_RC4_128_MD5

WireSharkでパケット見た結果↓


ライブラリはlibsslではなく、axTLSという組み込み向けのSSLライブラリを使っています。

axTLS Embedded SSL

これに気づいたのも、おニュー環境のMacにArduino IDEとArduino core for ESP8266のStaging Versionを入れて、以前の記事の通りにplatform.txtの27行目に -lsslを追記しようとしていたら...


axTLSがリンクされていたので、まさか... と思いGitHubのIssuesを遡ってたら、WiFiClientSecureを追加したよ!みたいな会話があったという。

まだステージングなので色々変わるかもしれませんが、とりあえずこれでサクッとhttps使えますね。

2015年8月26日

ESP-WROOM-02でIoTデバイスっぽいものを作る(1)

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

前回(ESP-WROOM-02を使ってみる)の続き。

サンプルを漁ってたらCaptive Portalを使ったものがあったので、早速この機能を使って何か作ることに。
Captive Portal = APに接続したら強制的にWebページ(普通は認証ページなど)を開かせる、公衆無線LANに良くあるアレです。
そして、
1. ESP-WROOM-02をアクセスポイントにできる
2. Captive Portalが使える
3. ESP-WROOM-02がクライアントになれる
ということは...
スマホだけで家のアクセスポイントへの接続設定が出来るIoTデバイスを作れる訳です。

想定
1. 利用者がIoTデバイスの電源を入れる
2. 取説に書いてある特定のSSIDのAPが出現するので、それにスマホで接続する
3. 設定ページが自動的に立ち上がる
4. 家に既設のAPを選択し、パスワードを入力して設定
5. 自動的に再起動して、今度はクライアントとして家のLANにぶら下がってくれる

こういう物が出来れば素敵... というわけで、まずは雛形として使えそうなものを作ってみました。

9SQ/esp8266-wifi-setup (GitHub)

Arduino core for ESP8266を使っているので、前回の記事でも書いたようにArduino IDEへのボード情報の設定が必要です。

実際のスマホでの設定画面はこんな感じ。


その時のシリアルモニタはこんな感じ。


動作としては、
1. EEPROMを読みに行って、設定が存在しない場合はSetup Modeになる
2. 一旦、STA modeで周辺のアクセスポイントを検索して保存
3. AP modeに切り替えて、設定されたSSIDでアクセスポイントを立てる
4. WebサーバとDNSサーバも立てる
5. 接続してきたクライアントはCaptive Portalで設定ページに飛ばす
6. 設定ページから入力されたSSIDとパスワードをURLデコード
7. EEPROMに書き込み
8. 再起動
9. EEPROMを読みに行って、設定されたSSIDのAPに接続する
10. 接続を確立したらWebサーバを立てる
という流れです。

・設定したSSIDのAPに接続できなかったら、再びSetup Modeになります。
・設定後にシリアルモニタに出力されるIPアドレスに接続するとWebサーバが立ち上がってますが、ここにアクセスすると接続設定のリセットが可能です。

あとは、これにセンサーなどを接続してあげれば、同一LAN内からブラウザで値を覗いたり、外部のサーバにデータを定期的に送るようなデバイスが作れると思います。

実はまだ手を入れるところ(接続確立後に何らかの問題で接続断したときの再接続処理など)が結構残っているので、ぼちぼち修正する予定...と並行して次回は実際に何か作ってみたものを載せようと思います。