Intel Edison for Arduinoを使って部屋の温度をセンシング。温度状況によってエアコンを制御する仕組みを作りました。コンセプトは「気軽に作ろう電子工作」半田ごてすら使ってません。赤外線コントロールには既存のIRKit。IRKitの制御は自前のWebサーバーに設置したPHPから行っています。
1/31現在の進捗(最終締め切り:1月31日23時59分)
★開発環境の用意
★Edison動作テストをしてみよう(はじめてのスケッチでLチカ)
★サーバー側ソフトウェアの開発(PHP+IRKit)
エアコンの赤外線コントロールの試験(サーバー側ソフトウェアの開発)
★Edison側ソフトウェアの開発(スケッチ)
サーモセンサーから温度を取得してみよう。(Edison側ソフトウェアの開発1)
取得した温度に従ってIRkitを制御(Edison側ソフトウェアの開発2)
★動作の確認
EdisonからIRkitにデータをわたし、エアコンの制御を確認しました。完成!
最終更新日 2015年2月1日(誤字修正)
続きを読みたい方は記事中盤の前回までのお話(お急ぎの方向け)からお読みください。
○これはなに?
Intel EdisonはほぼSDカードサイズの組み込み用超小型コンピュータです。 Intel EdisonのIOは底部のコネクタに集約されています。そのため単体では扱いが難しく、通常専用の基板を用意します。
引用元:SWITCH SCIENCE
うん、よくわかりません。
すごく小さくて、無線機能が最初からついてるよ。あとArduinoと互換性があるとも書いてあります。それってなにが素敵なの?
ということでもう少し調べてみました。
ネットを見るとArduino(アルデュイーノ)とは一言でいうと「初心者でも簡単に扱えるマイコンボード」とあります。
どうもセンサーからのインプット情報をもとに、音を出したり、モーターを動かしたり、Web上にデータを送ったりなど、様々なアウトプットができるものらしいです。
しかもオープンソースハードウェアだから、安価に様々なセンサーを駆使して色々なものを作れるともあります。
でもOSがないので、タスク管理が必要な用途には向かないし、そのままではLAN通信の仕組みもありません。
そこでEdisonなんだとか。
Edisonは小さいながらもOS(Linux)を積んだ立派なコンピュータです。
しかもこのサイズでWi-Fi、Bluetoothが標準モデルで搭載されているのがすごいとのこと。
まだいまいちピンときていませんが、早い話「超小型コンピュータ無線付き」というのが素晴らしいみたいです。
あれ?最初の記述と対してかわってませんね。むむむ。
ともかく、どこがすごいのかしばらくいじり倒してその魅力を探していきましょう。
○こんな人がレビューを書きます。
僕はといえば図工は5だったけど電子工作の経験なし、仕事でPHP等のスクリプト言語の知識やサーバー監視のためにLinuxコマンドをたまに打ったことがある程度、というかなり「ど素人に近い存在」です。そんないい加減な人がどのくらいこの商品を触って楽しめたかを視点にレポートをしようと思っています。
あと開発環境は基本全部Mac上でやっています。他の方のレポートはWindowsの作業が多いようでしたが、Macユーザーの視点での作業となるので参考になるかもしれません。
○なにをつくろう?
Edisonの箱はシンプルなデザインですが、そこには大きな字で
「What will you make?(君は何を作るの?)」
と半ば挑戦的とも捉えられる文字が書いてあります。
小さいコンピューターを使って何を作るのか?
とりあえず基盤をいじってみましたではつまらないので、ここは箱を開けたい気持ちをぐっと我慢して作りたい物を考えてみます。
Edisonの得意分野はセンシング、つまりセンサーを用いて外部の機会を制御することにありそうです。今流行りのInternet of Thingsで「loT(アイ・オー・ティー)」ってやつが実現できるかもしれません。全てのものがインターネットに繋がる!なんと夢が膨らむ言葉でしょうか。
でもいきなりなんでもはできないので、とりあえず今回は「家のエアコンを制御する箱」を作ってみることにしました。早速設計図を書いてみます。
うん、我ながら絵心が皆無な出来。
でも書きながら方向性が決まりました。
今回はEdisonにつないだセンサーで室内の状況を監視、その情報からエアコンのコントロールをしてみましょう。
Edisonの仕事はセンシングとネット上の自前サーバに逐一あげることにしました。
エアコンのコントロールは去年おもちゃ代わりに買って部屋に転がっていたIRkitにやらせることにします。
本当はEdison単体で全部できる気がしますが、外出先でも家の状況をモニタしたかったのと役割分担を明確化することで個々の装置の開発がシンプルになって後々カスタマイズが容易になることを期待してこの構成にしました。
さてうまくできるでしょうか?
○箱を開けて組み立ててみた
作りたいものも決まったので、やっと箱を開けてみます。
箱の真ん中には切手大のEdison本体があって、その下にはArduino互換の基盤があります。さらに下にはネジと基盤の足、ペラペラの説明書が一枚とかなりシンプルな内容。
電源やUSBケーブルなどの類もありません。自分で用意しろいう事なのでしょう。今回僕は携帯についてきたケーブルを流用することにしましたが、データ通信ができるものであれば普通のマイクロUSB端子のついたケーブルならどれも使えそうです。。
説明書は他言語で「一年保証がついてるからよろしくね」みたいな内容が書いてあるだけで、技術的な情報は一切ありません。必要な情報はネットで調べてねという姿勢は潔ぎ良すぎ。まあこんな趣味性の高い品物を購入する人にはあたり前なんでしょうけど。
とりあえず組み立ててみます。
Edison本体とArduino基盤の固定にはビス2本。基盤を支える足4本をねじ止めするとあっという間に組み立て完了。インスタントラーメンを作るより早く終わってしまいました。
説明書きなどは一切ありませんが、他にとりつけようがないので迷う事はなさそうです。
○パソコンとつないでみた
おっかなびっくりケーブルを本体に刺して、母艦であるMacBookProに差し込んでみます。
程なくデスクトップ上に「Edison」というリムーバブルストレージがマウントされました。Mac上ではUSBメモリと同じく認識されるようです。
とりあえずちゃんと動いているかをみるために、ターミナルからscreenコマンドを使ってEdisonに対してUSBシリアル接続をしてみましょう。
ちなみに接続方法は下記のサイトを参考にしてみました。
Edisonを使ってセンサデータをAmazon Kinesisにあげてみる【前編】
http://qiita.com/KenTamagawa/items/3f2e2bd3bb36a27dc439
ターミナルから“screen /dev/cu.usbserial”まで打ってから“Tab"をうつと、環境にあわせてデバイスの名前を補完してくれました。その後、続けて“115200 -L”を打つと、ログイン画面が表示されます。
初期設定はユーザー名が「root」パスワードが空らしいのでそのまま打つと、無事ログインできたようです。
○バージョンをあげよう
次に出荷時のバージョンの確認をしてみます。バージョンの確認はログイン後に“cat /etc/version”で確認できます。
「2014-08-20_15-54-05」とでました。どうもファームウェアが最新版ではないようです。
最新版のファームウェアはインテルのサイトから落とせるそうなので、そこから落として来ましょう。
Edison - Software Downloads
https://communities.intel.com/docs/DOC-23242
の真ん中あたり「Edison Yocto complete image」というzipファイルがそれのようです。とりあえず落としてみました。
次に今のEdisonにあるファイルを一旦全て削除します。これはコンソールからLinuxコマンドを使って行いました。
$ rm -rf *
$ rm -rf \.*
Macのデスクトップ上にあるEdisonフォルダの中身が空になったのを確認して、先ほど落としてきた新しいファームウェアをコピーします。
コンソールからLinuxコマンド
reboot ota
を使ってリブートさせると、勝手に再起動を数回繰り返すとまたログインできるようになりました。再度“cat /etc/version”コマンドでファームウェアの確認をしてみます。
2014-10-14_14-56-19とあり、verが更新されていました。無事ファームウェアが書き換わったようです。
○初期設定をしてみよう
次にいよいよEdisonをネットワークにつないでみることにします。
ネットワークの設定等もターミナルからLinuxコマンドで設定できるようです。
configure_edison
と打つと、設定画面がでてきました。
Edisonに名前、ログインするためのパスワード、Wifiのアクセスポイントなどを設定すると、無事IPアドレスが振られたようです。
名前(今回はhakonekoedisonと命名)
ログインするためのパスワード(二回いれます。空でもいいみたいです)
Wifi設定、周辺のアクセスポイントをスキャンして、繋ぎたいSSIDとパスワードを入力します。
設定した後に、ブラウザから
http://hakonekoedison.local/
にアクセスすると、無事Edisonの画面が表示されました。
○ここまでの感想
ネットの情報を色々調べながら触っていましたが、Linuxコマンドを打つのが久々で少し戸惑いました。
特にscreenコマンドなんてあまり使ってなかったので、プロセスをkillしないでターミナルを閉じてしまい、もう一度ログインしようとしてできなかったりして結構困りました。
※screenコマンドを使った後はctrl+aのあとkでプロセスを切るようにしましょう。
まだ全然工作らしいことはしていませんが、この小さなチップにLinuxがちゃんと動いていることがわかってちょっと感動です。確かにこれなら色々できそうですね。
○次回
次回はいよいよセンサーを使って部屋の温度を取得してみようと思います。
余裕があれば温度だけでなく湿度や画像なんかも取得すると楽しそうですね。
2015年1月31日更新
○前回までのお話(お急ぎの方向け)
・Intel Edisonは用超小型コンピュータ(本体はMINTIAケースの半分!)だよ。
・for Arduinoモデルだからアルデュイーノマイコンボードと互換性があるよ。
・しかも最初からWi-FiやBluetoothを積んでるから便利だよ。それにOS(Linux)も積んでるよ。
・Eidsonを使って「家のエアコンを制御する箱」を作ってみることにしたよ。
・パソコン(Mac)に繋いでターミナルから操作ができたよ。
・出荷設定のバージョンは古いから最新版のファームウェアにしたよ。
・初期設定をして家の無線環境につなげたらブラウザで画面が見れたよ。
というところまででした。
今回のレビューではいよいよ「家のエアコンを制御する箱」完成までの道のりをレビューしたいと思います。
完成編レビュー
○開発環境の用意してみよう
Intel Edison for Arduinoは、他のレビュアーさんも書いている通り様々な開発環境が用意されています。
マルチプラットフォーム向けの「Intel XDK Iot Edition」や、C/C++言語が使える「Eclipse IDE+Intel IoT Developer Kit」ode.js/Python/C/C++言語も使える「MRAAライブラリ」など多彩な選択肢がありますが、今回は一番初心者向けと呼ばれるArduinoの開発環境「Arduino IDE」を用いて色々なプログラムを書いてみることにしましょう。
最初に開発用のPC(僕の場合はMac)に開発環境をインストールします。
下記のURLからEdison用のソースをダウンロードしました。
Edison - Software Downloads
https://communities.intel.com/docs/DOC-23242
本家のArduinoIDEも使えないことはないようですが、微妙にツールの初期設定やスケッチの例が異なるようです。僕のような初心者はおとなしくEdison用のをインストールしたほうが無難です。
リンク先からファイルをダウンロードしたら、そのままアプリケーションフォルダに入れてあげるとインストール終了です。LaunchPadでも無事アイコンが確認できました。Macはこのあたり楽ちんですね。
以上で開発環境の用意は終了です。
ここまでは普段普通にMacを触っている人なら迷うことはないでしょう。さあ本番はここからです。
○Edison動作テストをしてみよう(はじめてのスケッチ)
まず最初に、目の前にあるEdisonの動作テストとして、みなさんもやっているLEDチカチカ(略してLチカ)をやってみることにしましょう。
MacとEdisonをUSBケーブルでつなぎます。前回と同じく電源用とシリアル通信用のケーブル二本が必要です。
最初電源コネクタは9V電池を繋いでいたのですが、電源用にもUSBケーブルつながないとシリアル通信ができなかったので結局2本とも繋いでいます、どうせ開発中は繋ぎっぱなしだから気にしない。
先ほどインストールしたArduinoIDEを立ち上げてみます。ArduinoIDEにはすでに何種類か「スケッチの例」という項目から何種類かのプログラムがあらかじめ登録されています。なので初心者でも適当にスケッチの例からプログラムを読み出すことでプログラムを一行も書かなくてもEdisonを動かす事ができる仕組みです。便利な世の中になりました。
今回は最初に「Lチカ」をやりたいので、それ用のスケッチの例を呼び出してみます。
ファイル→スケッチの例→01.Basics→Blinkと選択します。
画面上になにやらプログラムがでてきました。
ソースコードにはどうも13番のピンにさしたLEDを500ミリ秒間隔でチカチカさせろと書いてあるようです。なので赤色のLEDをEdisonの13番ピンと、隣にあるGNDにLEDを挿して、左上の書き込みボタンを押すと…。
点きました!Edisonに書き込んだプログラム(僕は一行も書いてませんが)が無事動いた歴史的瞬間です。でもあらためて動画をみると大したことないですね。まあそんなもんです。
○エアコンの赤外線コントロール試験。(サーバー側ソフトウェアの開発)
Edisonに書き込んだプログラムが動いたところで、今度はエアコンのコントロールを考えてみます。
エアコンは通常赤外線のリモコンで動かすので、赤外線信号を出せるものが必要ですね。Edisonに赤外線送信用のLEDを搭載すればできなくもないですが、敷居が高そうなので今回は別途IRKitというものを使って赤外線信号の送信をすることにしました。
IRKitデバイスはArduino派生のプロダクト。Edison for Arduinoと同じくArduinoIDEで開発できる他、JavaScriptやTerminal画面から赤外線信号を送ることができるデバイスです。IRKitについては下記リンクを参照ください。
※当レビューはEdisonのレビューなので詳細は省略しますが、IRKitデバイスはJSON形式の赤外線情報を HTTP POSTリクエストにのせて送ることで、赤外線信号を送ることが可能です。
今回はインターネット上にあるサーバのAPI経由で我が家のエアコンのスイッチのON/OFF制御信号を送って制御することにしました。
エアコンのリモコン信号をIRkitデバイスに学習させて、取得できた赤外線信号と、IRKit自身のdeviceid、それとclientkeyをIRKitのAPIにjson形式で送信します。送信については自前のサーバに設置したPHPプログラムから行いました。
サーバー側プログラム(PHPで書きました、数字の羅列は覚えさせた赤外線信号)
ブラウザから直接設置したPHPプログラムを叩いてみると、ちゃんと自宅のエアコンがON/OFFできているようです。
HTTPリクエストをAPI経由で投げるだけで家電の制御できるなんて素敵すぎます。あとはこれをそうEdisonから制御するか、ですね。
○サーモセンサーから温度を取得。(Edison側ソフトウェアの開発1)
エアコン側のコントロールの目処が経ったので、いよいよEdisonに温度を計らせてエアコンを制御していきます。
まずEdison側にセンサーを取り付けます。Arduinoとほぼ同じ環境でセンサーが使えるEdisonにとってセンサーは選び放題ですが、今回はseeedstudio社が提供しているGROVE Systemを利用することにしました。
GROVE System(英語サイトです)
http://www.seeedstudio.com/wiki/GROVE_System
通常Arduinoでセンサを利用する場合は”ブレッドボード”にパーツを差して実験するのに対し、このGROVE Systemは各パーツを”ベースシールド”に繋いで使用できるため、気軽に各種センサーモジュールを利用できる商品です。
半田ごてが不要なのは生粋の電子工作マニアに言わせれば「何を甘えたことを!」となるかもしれませんが、僕は動けば気にしない派なのでどんどんこういった製品は使っていきたいところ、GROVEベースシールドをEdison基盤に差し込んで、温度センサモジュールと表示用のLCDモジュールを繋ぐだけで準備は完了。これは気軽でいいですねえ。
温度を測るスケッチはスケッチの例からコピペで持ってきます。あわせてEdison本体のみでも現在の温度を表示させるため、LCD表示用のスケッチもコピペで持ってきました。測った温度をArduinoIDEのシリアルコンソールとLCDに表示させてみます。
無事室温を表示することができました!センサーを指で握るとちゃんと体温で温度があがってくれます。これは楽しい!
○取得した温度に従ってIRkitを制御(Edison側ソフトウェアの開発2)
Edisonで無事温度が測れたので、次はいよいよ測った温度に従ってエアコンを制御してみます。
先ほど書いたスケッチに色々と付け足して、以下のような処理を書いてみました。
1.室温を測ってシリアルコンソールと本体のLCDコンソールに表示(ここまではさっき書いた)
2.もし室温がXX℃以下なら→寒いのでエアコンのスイッチをONに。
3.もし室温がXX℃以上なら→暑いのでエアコンのスイッチをOFFに。
※繰り返し
なんか書いてみたら歌詞みたいになりました(笑
本当は温度設定なんかはEdison上のスイッチやWeb上から行えるとか、部屋の温度に従ってエアコンの設定温度を変更するなんてことができるとスマートですが、今回は試作なので設定温度はソースにベタ書き&制御は潔く電源のON/OFFのみ。いいんです。まずはシンプルに動くものを作りましょう。
Edison側プログラム(エアコン制御用)
※測った数値を元にサーバー上のプログラムを連動させる処理については、このサイトの記事を参考にしました。すごくわかりやすい記事なので是非みなさんも参考に。
【Intel(R)Edison × Arduino】WiFi接続してArduinoでデータ送信しPHPで受け取る
http://ticablog.com/archives/670
Edisonのスケッチは一度書き込むとLoop()の間をひたすらぐるぐる繰り返します。今回は1秒(1000ミリ)秒毎に温度を測り、測った温度を条件式に当てはめて、条件に合致したら先ほど用意したIRKit制御用のPHPプログラムをスケッチから直接叩く、という仕組みにしました。これで無事動くでしょうか?
○動作の確認
部屋の温度を自由に変化させるのは大変なので、保冷剤を入れた箱で冷やしたり指で握って温めてみながら動作をみてみます。
うまく動作してれば、センサを冷やせばエアコンがついて、逆に温めればエアコンのスイッチが自動的に切れるはず。果たしてどうでしょうか?
やりました成功です!!ちゃんと我が家のボロエアコンがEdisonの指令によってピッピと制御されています。
期限ギリギリですが無事完成できました。たいへんだった……。
○番外編 はまったところ。
△Edisonへ書き込みができなくなった!
スケッチを何度も書き換えたり温度をずっと計り続けていたら、ある日急にIDEからスケッチに書き込めなくなりました。
本体やPC側を再起動をしたりしましたが全然改善されません。結局Linuxの再インストールをして一からやり直したらなんとかリカバリできたのですがかなり焦りました。
あとで調べたらどうもログファイルがいっぱいになっていたのが原因だったみたいです。
参考URL:Edisonへ書き込み出来ない [ write error: No space left on device ]
http://nonnoise.github.io/Edison/NoSpace.html
幸いハードのトラブルじゃなかったのでよかったのですが、このへんは壊したかと思ってかなりドキドキでした。これからEdisonを触る人で同じ症状の人は上記リンクを参考にしてみてください。
この大きさで見事!無線もついてかなりの高スペック
このサイズでAtomデュアルコア搭載、しかもWifiとBluetoothまで乗ってるのはすごいです。もっともArduino基盤に載せると大きくなっちゃうんですが。
あとArduino UNOと互換があるのは開発資料を探すには楽でした。書籍も十分ありますしネットにはたくさん情報は載っています。
通常のArduino UNOと違うのはPWMが6つ同時に出力なのに対して、この製品は出力が4つと制限があるとのこと、でも正直そこまで使いこなしていないのでよくわかりません(笑
少なくても電子工作を趣味でやる分には十分すぎるスペックだと思います。
他製品に比べれば若干高め。高スペックに対してその価値を活かせるか?
現在の実売価格が12,500円なので、Arduino UNOやRaspberry Piに比べると倍近いお値段を払わないといけません。スペックを考えると十分納得できる金額だとは思いますが、気軽に電子工作を始めようという用途だと少し高く感じます。
さらに製品の性質上、単体だけの活用というのは考えにくいので、実際に利用する際はここにさらにセンサー等の部品代がかかってきます。なのでできれば本体価格が10,000円を切るくらいだとイメージがずいぶん違っていいと思うんですけどね。でたばかりの製品なのでしばらくは我慢しましょう。
アイディア次第で実用性は無限大!はたして上手に使いこなせる?
人によりけりだとは思いますが、個人的にはすごく可能性を秘めた端末で使いごなしがいがある商品だと感じました。
ただそれにはそれ相当の知識と準備、作業をする手間をかけてあげる必要があります。まだまだ趣味の延長線上で利用される方がメインなんでしょうね。
ただ一度セットアップしてしまえばパソコンよりも気軽に利用ができそうです。流行りのIOT端末としての利用なんかは相性がよさそうですね。
CUI操作とプログラムの基本知識は必須
まずある程度CUIの操作に慣れていないとセットアップすらできないので導入難度は高めと言わざるおえません。でもArduino UNOの開発環境がほぼそのまま使えるのは非常に魅力的です。スケッチでプログラムを書いてそれを書き込むと動き出すというのは電子工作初心者にはありがたい限りです。
また今回は「GROVE System」というセンサの付け替えが容易にできるモジュールを使用したことからかなり難易度は下がっていますが、それにしても文献が英語だったりと全くの素人には少しハードルが高めなのは否めません。
でもそれだけに思い描いた装置が動いた時の感動はひとしおです。電子工作の勉強にはちょうどいいかもしれませんね。
キミなら何を作る?夢を現実にする第一歩はこのマシンから。
最初はどこから手をつけていいかさっぱりでしたが、次第にやりたい事がカタチになってくるのはすごく楽しい経験でした。
Edison単体のネット上の情報はまだ少なくて調べ物に苦労したところもありましたが、Arduinoの知識や従来のWeb技術の応用でほとんどの事ができる事がわかったのは収穫だと思います。じきにEdison単体の情報も充実してくるでしょう。(願わくばこのレビューもその情報の一つとして活用してほしいです)
次の目標としては部屋の環境情報(照度、気圧、温度、画像等)をWeb上から確認できるようにしたり、他の家電の制御(照明や扇風機、TVやステレオコンポ等)の制御をしてみたいです。Edissonから直接Twitterに投稿したりなんかも楽しそうですね。
アイディアは無限大!楽しすぎるこのおもちゃをどんどん使い倒して、これからもなんちゃってIOT技術を楽しみたいと思います。
しばさん
2015/01/24
赤外線をどうやって飛ばすかが問題ですね…。Edison単体で38kHzのパルス位置変調ができるかどうか…。
hakonekoさん
2015/01/31
コメントありがとうございます。赤外線に関しては結局IRKitに頼りきりでした。Edisonならたぶん単体でできるだろうけど、そこまで余裕なかったです。ぬぬぬ。
でもおかげでEdisonはセンシングしたデータをサーバにあげる機械、IRKitはサーバの値から赤外線信号を送る機械といううまい棲み分けができました。これはこれでありなのかなあと。
でもEdison単体での制御もできると素敵なので、今度赤外線送信モジュールでも調達して試してみることにします。
jakeさん
2015/01/31
エアコンの制御にIRKitを活用されたんですね。
いい具合に手間が省けるのがいいですね。
PHPですが、Edisonでも稼働できそうですよ。
うまくやれば全部をEdisonで賄うのも行けるかもしれません。
ちばとどさん
2015/01/31
すごいです!
これを進めれば、遠隔地からの操作もできそうですね。
IRKitとGROVE System、便利ですね。Galileoでマネしたいかも。
hakonekoさん
2015/02/02
コメントありがとうございます。
そうなんです。多分やれば全部Edisonでできそうなんですが、そのあたりは随分楽させていただきました。
全部Edison化はこれからの宿題ですね、精進します。
>ちばとどさん
コメントありがとうございます。
IRKitとGROVE Systemは僕みたいなズボラな人にぴったり。
むつかしい事を考えないで色々できるのが魅力ですよねえ。
Galileoでもきっと組み合わせ次第で色々できると思います。
うまくできたらレビューしてください。