無事、超音波距離センサーを使って「猫の食事」を検知することに成功した、はとね&きょろ夫婦。今回は、「検知を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()メソッドでリクエストを送信したあと、サーバーから応答があるまで待機し、レスポンスを読み出してシリアルコンソールに書き出したら終了です。
一方的に送りつけるだけだから簡単ですね。
きょろ
「あとは起動時のsetup関数内でwifiConnect関数を呼び出し、ねこ検知の部分で、新しく対象物を認知してLEDを変更するときにsendLineNotify関数を呼び出せばいい」
▲GitHubのリンクはこちら
きょろ
「よし、動くようになった。これで『ねこもぐ』のコードは完成だ」
思ったより手軽に完成
Lチカの次がいきなりインターネット経由でLINEに通知ってちょっと無謀と思っていたけど、気がつけば、あっという間に実装が終わってしまいました。シンプルに特化したLINE NotifyのAPIも素敵ですが、何よりArduinoエコシステムの力を手に入れたESP8266恐るべし……。
最終的に、完成した『ねこもぐ』はこんな感じに仕上がりました。
▲完成した『ねこもぐ』とジンジャーの夜ご飯
はたして本当に猫たちのごはんは通知されるのでしょうか……と言ってる側から
▲ジンジャー「……!!!!」
さっそく、ジンジャーさん登場。ごはんに気づくの早っ(笑)。
▲ジンジャー「じーっ……」
▲LINE「ピローン」
やりました大成功です!
ごはんを食べに来たジンジャーを検知して、LINEの通知が私のiPhoneに届きました。
こんな簡単な仕組みでも、自分で作ったガジェットが実際に動くと感動しますね。
ちょっとした日常のハックで、実世界がインターネットやスマホと連携して便利になるのは本当に素敵です。IoTってやっぱりおもしろい。
LINE「ピローン」
ん……
LINE「ピローン」
LINE「ピローン」
LINE「ピローン」
▲……。
▲我が家ではIAMSというシリーズをまとめ買いしています。
ジンジャー、さすがにごはん食べ過ぎだよ、とほほ。。。
どーじん先生
「食事の回数が多いこと自体は、それほどおかしいことじゃないですよ。ルーツから考えると、猫は単独で小動物を狩る動物です。一日何回も狩りをして、あまり急がず食べる。群れで狩りをして一気に食べる犬のルーツとは対照的です」
ん? 食事の回数が多いのが肥満の原因かと思ったら、そうでもないんですか? しかも、そんなルーツから来てるような行動だったなんて、スケールの大きい話で驚きです。
どーじん先生
「美食家のブリアサヴァランのアフォリスムに『どんなものを食べているか言ってみたまえ。君がどんな人であるかを言いあててみせよう』(『美味礼讃 上』、関根秀雄・戸部松実訳、1967年、岩波文庫、p23)とありますが、動物の場合は、食事パターンから祖先の行動まで想像できておもしろいんです。
そういう食事方法ができなかった個体は淘汰されていったのかもしれません。今回のIoTロギングを発展させて、バジルとジンジャーを見分けられるようになったら、普遍的なことと個性の違いもわかってきそうで、楽しみだなぁ」
何気ない日常の行動でも、よく観察するといろいろなことがわかるんですねぇ、すごい。あれ、でもそういえばジンジャーは狩りはしてなくて、普段ペットフードを食べているわけですけど、ペットフードが作られてから、猫の行動パターンは変わっていないんですか?
どーじん先生
「ペットフードができたのって、そんなに昔のことじゃないんですよ。1860年にジェームズ・スプラットがビスケット状のドックフードをロンドンで作ったのが始まりで、さらにキャットフードは遅れること16年、スプラットの会社が馬肉で缶詰を作ったのが最初期の製品だと言われています。
けっこう歴史あるじゃん、と思われるかもしれませんが、猫の栄養メカニズムがちゃんとわかるのはもっと後で、1980年代くらいになってからのこと」
▲スプラット社のドッグフードの広告(Source British Vetinar Journal v. 2 – 1876)より
そんな最近なんですか? 栄養メカニズムといえば、どーじん先生は連載第1回目から、猫が完全な肉食動物だって話をされてましたよね。
どーじん先生
「そう、犬が雑食なのに対して、猫は植物をエサにする能力が完全にないんです。人間よりも多くのタンパク質を必要としていて、エネルギーの大部分を炭水化物ではなくタンパク質から得ています。
炭水化物は全く必要ないし、セルロースやラクトースにいたっては消化できない。しかも、人間はタンパク質のタウリンを体内で合成できるんですが、猫はできないという。
昔はこういうことが全然わかっていなかった。だから、数世代前までのキャットフードは、とてもそれだけを食べて生きていけるようなものじゃなかったわけです。ネコちゃんたちは相変わらず裏で狩りをしていたんです」
だから最近まで、行動パターンは変わってなかったというわけですね! キャットフードをあげるのが当たり前の世の中で育ってきた身には衝撃です。しかも、食生活も人間とそこまで違うなんて、それも衝撃。。。
どーじん先生
「同じ哺乳類で一緒に生活しているのに、ここまで人間と全然違うってのは驚きですよね。栄養だけじゃなくて味覚レベルでも、甘味受容体の遺伝子に欠失があるから甘味を感じなかったり、いろいろと人間と違うんですよ。今後、無理な品種改良などがない限り、基本的な行動はそうそう変化しないでしょうし、こういう違いはちゃんと意識して、人間的な価値観を押し付けないようにしたいですね」
そうですね! 今後はそういう観点もふまえて、ロギングしたデータを見ていきたいです。しかし、科学や技術は一気に進歩したんですね。今回はいろいろと驚きでした。
どーじん先生
「技術の発展で生活環境が変わるスピードは、遺伝子の変化スピードよりも速くなってますからね。“いま、ここ”だけに視野を狭めることなく、データを見る必要があります。今回の食事のロギングの話に戻ると、1日何回も食事を取るのは、ルーツを考えたらおかしくない行動だけど、1日何十回も食事しにきていたら、さすがにおかしいと言えるでしょう」
確かにデータに基づいて健康を考えるなら、そういう視点で見ていくのが良さそうですね。
どーじん先生
「そういえばブリアサヴァランは、こうも言ってました。『だれかを食事に招くということは、その人が自分の家にいる間じゅうその幸福を引き受けるということである』(前出『美味礼讃 上』、p24)と。
これ、猫にも通じる名言じゃないですか(笑)。ごはんは猫にとっても毎日の基本的な”幸せ”でしょう。科学や技術の進歩で、猫にとっての従来の自然環境が失われていく中で、何が猫にとっての幸福になるのか? 食事ひとつとってみても、考えることはたくさんありすぎますね(笑)」
⇒「にゃんてっく☆やせないアイツ」シリーズ一覧はこちら
ジンジャーの体重:現在6.4 kg(夏痩せ?)
著者プロフィール
はとね(大島 孝子)
アメリカ西海岸で日々奮闘するバックエンド寄りのエンジニア。高校時代パソコン研究部に所属し、NHK BS2 高校生ITキング決定戦というTV番組で全国3位、Web教材開発コンテストThinkQuest@JAPAN 2004で最優秀賞を受賞。2011年に、情報処理推進機構が主催する「未踏ソフトウェア創造事業」に採択される。2012年にインターネット広告代理店へ入社して米国駐在員として渡米し、2014年にAT&T Internet of Things Hackathon and Accelerator SeriesというIoTでは最大級のハッカソンでFooDrawというプロダクトを制作して全米1位を獲得。現在もソフトウェアエンジニアとして働きながら、US事業の拡大に努めている。
きょろ(井上 恭輔)
Webやアプリの開発に留まらず、ハードウェアの設計や量産まで幅広く手がけるエンジニア。高専在学中の2006年に情報処理推進機構が主催する「未踏ソフトウェア創造事業」に採択され、スーパークリエータ/天才プログラマーの認定を受ける。2008年にミクシィ入社。iOS/Android向けテスト配信サービス「DeployGate」の立ち上げにを行い、2014年に寿退職ののち渡米。日経BP主催のAndroid Application Award(A3)において優秀賞および特別賞、高専プロコン最優秀賞&文部科学大臣賞、AT&T IoT Hackathon 全米部門優勝など。現在の趣味はドローン撮影とダイエット。