[2日目] ついに外の世界 – ネットワーク – へ「引きこもり係数」ツイートの仕組みを解説 (前編) 〜「ESP8266」で始めるIoT入門


今回のハイライトです。おそらく見返すとしたらこの画像なのでクリックしてご活用ください。

ESP8266 Lua pin配置
ESP8266 Lua pin配置

こんにちは押切です。

アドベントカレンダーブログ2日目ですが、この企画を聞く前に書いたものなので、

通常運用で書かせていただきます。タイトルが長く分かりにくくなって済みません…。

この記事はCerevo Maker seriesのESP8266を使い倒して、スマホで動くミニ四駆をつくる、といったような作例を連載している記事です。過去の記事はこちらをご参考ください。

 

前回お知らせしたミニ四駆改造ワークショップ第1回、第2回ともはおかげ様で好評でした。

何より参加者全員分動作してレースができ、関係者一同安心しました。

参加して下さった方々、ありがとうございました。

第3回以降は未定ですが、今回の経験を今後の活動に活かしたいと思います。

レースの様子
レースの様子

今回は予告通り「Lua」を開発環境とし、ドアの開け閉めを検知してtweet、さらにあまりに外に出ないと、「引きこもり係数」が上昇し勝手に引きこもり宣言を執行するtweet発信するデバイスを作りたいと思います(が情報量の都合上前後編構成にさせていただきます)。

検出装置
検出装置

読者のみなさんは薄々感じていたかと思いますが、これまではIoTといえるほどのものではありませんでした。今回はIFTTTを使って広大なネットワークの海に漕ぎだします。

まず「Lua」の環境を整えるために、ESP8266のファームを書き換えます。

残念ながらファームの書き換え方法には機種依存があるので、WindowsとMacに分けて解説します。Windowsの方がGUIがあり初心者向けです。

・「Lua」とは?

汎用スクリプト言語です。ESP8266以外にも規模の小さめのマイコンにも対応します。一度書き込めば、再度コンパイルして書き込みしなくても、スクリプトを打ち込むだけで手軽に開発することができます。

 

・「Lua」ファームの書き込み「Windows」編

「NodeMCU」を使う

https://github.com/nodemcu/nodemcu-flasher

で書き込みソフトをDL。FT232RLなどシリアル変換モジュールで書き込むことができます。

ESP8266Flasherを起動、使用するCOM portを選択。

5_01

書き込み用ファイルは、

https://github.com/nodemcu/nodemcu-firmware/releases

から、バイナリファイルを持ってくる

2015/11/23時点 nodemcu_integer_0.9.6-dev_20150704.binが最新
(integerは整数のみ、floatは小数点を扱える)
 ESP8266モジュールを「UART DownLoad Mode」にピンヘッダor スイッチを設定します。
5_02
[Config]タブのギアマークをクリックして、DLしたbinファイルを選択。
アドレスは0x00000のままでOK。
5_03

[Operation]タブに戻って[Flash(F)]ボタンをクリックすると、ボタンが[Stop(S)]に変わり、プログレスバーが出て書き込み開始。

5_04

[Stop(S)]が[Flash(S)]に戻って、右下にReady表示が出れば書き込み終了。

書き込んだらモジュールを「FLASH Boot Mode」戻す

これでWindowsでの書き込みは終了。

 

・「Lua」ファームの書き込み「Mac」編

esptoolを使う

1)Macの「ターミナル」を起動

Mac標準アプリの「ターミナル」を使ってインストールします。

ターミナル自体に馴染みのない方も多いかと思います。つまづきそうな箇所はなるべく解説しますが、この記事で詳細な手順まで説明すると字数が膨大になるので、

各自分からない点は検索しながら進めていただければと思います。

Macintosh HD > アプリケーション > ユーティリティから、「ターミナル」を起動

5_05

2)esptoolをインストール

$ git clone https://github.com/themadinventor/esptool/

$以下をコンソールに入力します。

ここでesptoolがインストール出来ればOKですが、

環境によって、Xcodeにagreementする必要があります。

その場合は下記補足1を参照ください。

補足1

 $ sudo xcodebuild -license

と打って、passwordを入力後、文字が大量に表示されるので、

[space]で最後まで文字を送ってから、

 $ agree

と入力すればOK。3)に進みます。

もし、passwordが受け付けない場合は一端rootに設定する必要があるので、

補足2を参照下さい。

補足2

・suコマンドでrootに入り、パスワードを設定

$sudo passwd root

Changing password for root.
New password:

と表示されるのでパスワード入力

Retype new password:

パスワードを再度入力

$ su -

rootのパスワードを入力すれば、成功

「$」が「#」に変化

 $ exit

を入力して、#に戻し、補足1を再度試す

 

3)py serialをインストール

cd esptool (すでにesptool)に移動していればそのままでOK)
 $ sudo python setup.py install
passwordを入れて
Finished processing dependencies for esptool==0. 1. 0

と表示されればインストールOK

 

4)書き込み用fileをDL

https://github.com/nodemcu/nodemcu-firmware/releases

のbinファイルを落とします。integerは整数のみ、floatは小数点を扱えます。

DLしたbinファイルは、esptoolと同じフォルダに入れておくと分かりやすいです。

ユーザー名の直下にあるかと思いますが、

Finderの右上の検索窓でesptoolと入力して、フォルダ検索してもよいと思います。

5_06

5)USBシリアル変換モジュールをつないでドライバ名を調べる

コンソールで

 $ ls /dev/tty*
と入力すると一覧が出ます。今回は下記でした。
/dev/tty.usbserial-DJ004MBQ             /dev/ttyt1
6)esptoolで書き込み
 ESP8266モジュールを「UART DownLoad Mode」にピンヘッダor スイッチを設定します。
 esptoolを落としたフォルダに入って、
 $ cd esptool
 $ sudo python esptool.py --port /dev/tty.usbserial-DJ004MBQ write_flash 0x00000 nodemcu_integer_0.9.6-dev_20150704.bin
 と入力。”tty.usbserial-DJ004MBQ ”の部分は5)で調べた値を使ってください。
現時点での最新版は0.9.6です。
※書き換え時は他のシリアルコンソールは閉じておくこと
5_07
5_08
 %表示されて、コンソールが戻ったら書き込み終了。
と、Macの方がインストールまでに手間が掛かるので、慣れていない方は、ちょっと時間が掛かります。次回書き込みからは6)からでOKです。
ESP8266モジュールを「FLASH Boot Mode」戻します。
とはいえ、Luaだけで使用するならもうesptoolを使う必要もないので、
初回書き込みのみwindows使うというのも手です。

 

 

・Luaのpin配置
Luaのポート指定と、ESP8266のGPIOの配置が異なります。
下記に記載があります。
図示すると下記のようになります。
Lua Pin配置
Lua Pin配置

 

・Luaの機能
現状のバージョンは、
NodeMCU 0.9.6 build 20150704  powered by Lua 5.1.4
となります。
Luaで使えるスクリプト一覧は下記になります。
portのH/Lはもちろん、PWMやI2C、SPIも簡単に扱え充実しています。

 

・Luaスクリプトの記述

シリアルコンソールで記述できます。

Arduinoのシリアルモニタを使ってみます。

ボーレートは9600 デリミタはCR,LFを設定してください。

D2にLEDを繋いだ状態の例です。

5_10

コマンドだけでコンパイルなしにLEDをON/OFFできます。

5_11

起動後、あらかじめ書いたスクリプトを自動実行することも出来ます。

起動後すぐにLEDが点灯して1秒後に消えるスクリプトをinit.luaに記載
>
format done.
> file.open(“init.lua”,”w”)
> file.writeline([[pin = 2]])
> file.writeline([[gpio.write(pin,gpio.LOW)]])
> file.writeline([[tmr.delay(1000000)]])
> file.writeline([[gpio.write(pin,gpio.HIGH)]])
> file.close()
電源をON/OFFする or node.restart()で再起動すると起動時にLEDが点灯して1秒後にOFFされるスクリプトです。

・Lua記述にEsplorerを使う

シリアルコンソールだと編集が面倒なので、

ESP8266専用ツールのEsplorerを使うと便利です。

下記からDL出来ます。

http://esp8266.ru/esplorer/

windowsでもMacでも使えますが、

JAVAをインストールする必要があります。

設定だけで膨大な情報になってきたので今回はさわりだけで。下記のような画面です。

右のCOMポートを選ぶ->connect
NodeMCU 0.9.6 build 20150704  powered by Lua 5.1.4 が出たら接続OK
左下のsave to ESPボタンでファイルをespにセーブする(init.luaでsaveすると自動起動)
右下のテキストボックスに=node.restart()でマイコンをソフトリセットできます。

5_12

・IFTTTで外界へ!

ちょっと唐突ですが、ESP8266に連動してtweetするには、ローカルネットワークでなく、外部のネットワークに接続してWebサービスを使用する必要があります。

最近までより専門知識が必要だったのですが、IFTTTによって、電子工作レベルでも手軽に可能になりました。

IFTTTとは、
if this then thatのから名付けられ、Webサービスを相互に連結することが可能です。

そして今年に入ってから、IFTTTにMaker Channelが出来たことで、電子工作分野でもArduinoやRaspi、ESP8266でもTwitterなどのWebサービスと連結できるようになりました。

・IFTTTに登録
手順としては、他サイトでも解説されているので簡単に列挙します。

・IFTTTにSign Upする
・Maker ChannelにConnectする
5_13

・「Your secret key is」を控えておく
・My Recipes からCreate a Recipe->this->makerを検索
・receiv a web request -> Event Name を入れる(door_opened)
・that->twitter検索->post a tweet ->テキストボックスをクリックしての右上の設定から
・{{OccurredAt}}を追加(発生時間) ,
・{{OccurredAt}} ,{{EventName}}としてCreate Action->Create Recipe
・ifttt.luaのkey部分を書き変える
・EventNameを変えた場合は door_openedの部分を書き変える
また、今回の作例はドアの開け閉めを検出してtweetするものなので、
不在状態を通知してしまうことにもなります。
事件にならないよう、あらかじめテスト用のtwitterアカウントを作成しておいてください。

 

・ESP8266からtweetする
ESP8266モジュールのD2(GPIO4,モジュールの右下のピン)をLOWにしたらツイートする作例です。
esplorerを使って、
init.lua, ifttt.lua,button.luaを左のopenボタンから開き、saveしてください。
ifttt.luaには、各自取得したmaker key、
init.luaには、wifi.sta.config(“Cerevo”,”techblog”)にSSIDとpasswordを
それぞれ書き換えてください。
自宅で使用する場合は、自宅のSSIDで良いかと思いますが、
外でデモする場合やテストではテザリングが手軽でいいかと思います。
また、initを最後に書き込んだ方が安定するようです。
ファイルは、下記GitHubにおきました。
実際にTwitterと連動するか試してみてください。
5_20

 

・後編へ続く
 準備だけでもかなりのボリュームがあったので、もう少し本格的な作例は後編とさせてください。ドアの開閉をESP8266で検出して、自宅滞在時間をカウント、48時間以上外出しないと強制的に「引きこもり係数オーバー300…」とツイートする作例を準備中で、コードの解説を予定しています。

 

(広報さんがアイコンを作ってくれました!)
oshikiri
oshikiri