体験を伝える―『ガジェット通信』の考え方

面白いものを探しにいこう 本物を体験し体感しよう 会いたい人に会いに行こう 見たことのないものを見に行こう そしてそれをやわらかくみんなに伝えよう [→ガジェ通についてもっと詳しく] [→ガジェット通信フロアについて]

「猫の食生活」を超音波距離センサーでLINEに通知してみた─にゃんてっく☆やせないアイツ

センサーの検知をLINEに通知する

こんにちは、猫を愛するエンジニア夫婦、はとね(@hatone)ときょろ(@kyoro353)です。

前回は、LINE NotifyのAPIをコールするために、トークンの発行まで行いました。今回から、いよいよ実装していきます。

きょろ
「それじゃあ、ESP-WROOM-02からWi-Fi経由でLINE NotifyのAPIを叩いてみよう。LINE NotifyのAPIはHTTPSなので、SSL通信ができるマイコンでないとアクセスができないんだ」

SSL通信をするためにはそれなりのCPUパワーが必要になります。

Arduinoに使われているAVRでは性能的に難しいのですが、ESP8266はこの価格にも関わらず、32ビットクロック80MHzの高性能チップを搭載しています。これによって、SSL通信も軽々とこなしてくれます。

きょろ
第3回で書いたコードにWi-Fiの接続処理とLINE NotifyのAPI呼び出し処理を追加していくよ」

ESP-WROOM-02にWi-Fiの接続処理を書こう

きょろ
「まず、Wi-Fiの接続部分は、「ESP8266WiFi」というライブラリをIncludeすればいいんだ。使い方は超簡単。WiFi.beginというメソッドを、Wi-FiアクセスポイントのSSIDとパスワードを引数にして呼び出すだけだよ」

ESP8266WiFiは、無線LANの暗号化方式のWEP、WPA/WPA2に対応しています。

きょろ
「WiFi.statusが接続状態になるまで待ってあげると、接続完了後にWiFi.localIP()でIPアドレスを取得できるよ。DHCPに依存するけど、だいたい10秒もかからないかな」

GitHubのリンクはこちら。※ssidとpasswordは利用する環境にあわせて変更してください。

思ったより、各行数が少ない……。
予想以上に簡単でした。これでインターネットにアクセスできるなんて驚きです。

LINE Notifyを叩く処理を書こう

次は、LINE Notifyを叩く処理です。

きょろ
「次はLINE NotifyのAPI呼び出し部分だ。今回はAPIを簡単に呼び出すだけだから、HTTP 1.1のリクエストをそのまま手書きしたよ」

どんなライブラリを使うのかな?

きょろ
「HTTPSといっても簡単で、WiFiClientSecureというライブラリをIncludeすれば、あとは通常のHTTPのリクエスト処理を書くのと同じだよ。本当はHTTPSだから証明書の検証などが必要だけど、まぁ今回は猫のごはん通知だし、証明書の検証はスキップで!」

GitHubのリンクはこちら。※ソースコードのtokenという部分は、前回に取得したLINE Notifyのトークンに置き換えて使ってください。

WiFi ClientSecureのインスタンスを作り、443ポート(HTTPS)に接続します。あとはHTTP 1.1のリクエストを生成して送信しています。

このmessageが変な文字になっているのはなんだろう?

きょろ
「それはURLエンコードされた絵文字だよ。Web上のツールなどを使ってあらかじめエンコードしておくといいよ。文字コードはUTF-8を使ってね」

client.print()メソッドでリクエストを送信したあと、サーバーから応答があるまで待機し、レスポンスを読み出してシリアルコンソールに書き出したら終了です。

1 2 3 4次のページ
CodeIQ MAGAZINEの記事一覧をみる
  • 誤字を発見した方はこちらからご連絡ください。
  • ガジェット通信編集部への情報提供はこちらから
  • 記事内の筆者見解は明示のない限りガジェット通信を代表するものではありません。