Intel Edison/Galileo開発入門(Windows編)
誰でもできる! IoT時代の極小コンピューター「Edison」で初めての“Lチカ”
IoTデバイス開発初心者の筆者が、ほぼSDカードサイズの極小コンピューターとして注目を集める「Intel Edison」を使って、LinuxベースのEdison Yoctoに触れ、ArduinoボードのLEDライトをチカチカさせる。
最近、“IoT”という単語が新たなバズワードとなりつつある。すでにバズワードとなっている“クラウド”や“ビッグデータ”と同じように、いろんなところでこの単語が使われるようになっており、関連製品や関連サービスが次々と登場している。そういう状況のため、何となく「このテクノロジが、未来ではより重要になっていくのかな」と感じている人は少なくないだろう。
そもそもIoTとは、直訳すると「モノのインターネット(Internet of Things)」となり、身の回りの“モノ”が“インターネット”に接続して情報を送受信できるようになることを意味する。クラウド上に集まった情報はビッグデータを形成し、それを活用した未来のサービスを生み出す可能性を秘めている。
IoTを実現する“モノ”には、インターネットに接続するための機能(Wi-Fiなど)や各種センサーを搭載する必要がある。つまり、モノにもコンピューターが必要となる。その代表が、Raspberry PiやArduinoといった汎用(はんよう)的で低価格のマイコン・ボードだ。そして最近、IoTを実現できる、SDカードサイズのコンピューターが登場した。これが、本稿で解説する「インテル Edison」(以降、Edison)である。
※下にあるのは、サイズの比較対象として置いたSDカード。ちなみにEdisonの厚みは、3.9mmとなっている。
「この小ささなら、こんなモノやあんなモノにもコンピューターを搭載できる」と、今後、さまざまな利用ケースが登場してくることが予想され、ますますモノのインターネット化に拍車が掛かるだろう。そこで本稿では、そんな未来のコンピューター「Edison」を、IoTデバイス制作やプログラミングが初めてという視点で試し、プログラミングで言うところの“Hello World”(=初心者が最初に動かすプログラム)に相当する“Lチカ”(=プログラムによりLEDライトをチカチカさせる)をしてみる(※なお筆者にとって、今回が実際に初めてのIoTデバイス開発になるので、本当に初心者目線のはずだ)。
※今回使用したEdisonの種類は「Intel Edison Kit for Arduino」で(=Lチカを行うには、Edison単体では無理で、Edisonの搭載する各種インターフェースをArduino互換に変換するボードとセットになった「Intel Edison Kit for Arduino」が必要になる。詳細は後述)、開発用PCはWindowsである(MacやLinux向けの記事については「ニーズがありそうであれば書きたい」と考えている)。
Intel Edisonとは?
Edisonに触る前に、どういう人が何のためにEdisonを使い、ハードウェア仕様がどうなっているかを簡単に紹介しよう。
Edisonの利用目的
前述したように、今、一番話題となっているのは、
- IoTデバイス
を制作するための開発ボードとして使うことだ。これ以外に、
- 素早くプロトタイピング(=試作機を開発)するため
- ロボットやウェアラブル機器の頭脳として
- 電子機器(例えば照明の演出など)をコントールするため
- 小型のLinuxコンピューターとして
- 趣味としてテクノロジで遊び、楽しむため
など、あらゆる使い方が考えられる。
Edisonの利用者
しかもEdisonを使うのに、専門知識は(昔、ボードを自作していたころと比べて)あまり必要なく、電子工学を専門に学んでいないプログラマーや、私のような文系出身のエンジニアでも使いこなしやすい。実際に、以下のような非プログラマーの人らが、Edisonと同様のハードウェアの開発ボード(後述するArduinoなど)を使いこなしている。
- アーティスト
- デザイナー
- 建築家
- 発明家や起業家
- 家電の設計者やデザイナー
Edisonの種類
Edisonとして販売されているものには、主に下記の3種類がある。
- Intel Edison(本体のみ)
- Intel Edison Breakout Board Kit(本体+Breakout拡張ボード付き)
- Intel Edison Kit for Arduino(本体+Arduino拡張ボード付き)
どれを購入するかだが、実はIntel Edison本体だけではかなり扱いづらい。次の写真の赤枠で示す部分が、Edison本体と外部機器を接続するためのインターフェース(=接続口)となっており、USBのような一般的なものではないので、基本的に素人は手を出せないだろう。
よって、Edisonと組み合わせられる拡張ボード付きのKitの方を購入した方がよい。KitにはBreakoutボードとArduinoボードの2種類がある。それぞれのサイズは、BreakoutボードがEdison本体より一回り大きなサイズ(=少しはみ出す程度)になっており、Arduinoボードはかなり大きい(後述)。Edisonの小ささを生かして、例えばロボットなどに組み込みたいといった要望があるのであれば、Breakoutボードの方がよい。しかし、特に初心者などでArduino(後述)も使いたい場合はArduinoボードの方がよい。
Arduinoとは?
ここまでArduino(読み方:アルドュイーノ)という単語が出てきているので、ここで簡単にその内容を説明しておこう。
Arduinoは、(最近のコンピューターには搭載されなくなってしまったシリアルポートではなく)ほとんどのPCに搭載されているUSB経由でデータの読み書きやプログラムの配置ができる手軽なマイコンボードで、初心者でも理解しやすいArduino言語というプログラミング言語でプログラムが書けるのが特徴だ。書籍『MAKERS―21世紀の産業革命が始まる』で取り上げられたことで、一般人でもこの名前を知っている人は少なくない。掲示板「Arduino Forum」をのぞくと、多数のスレッドがあり、世界中で広く使われていることが分かる。いわゆる“メイカーズ・ムーブメント”の火付け役だ。
ハードウェア仕様
本稿の読者対象は「初心者」としているので、詳しい仕様ではなく、代表的な機能面で仕様を紹介しよう。
Edisonの主要なハードウェア仕様
- サイズ: 25×35.5×3.9mm
- CPU: Intel Atom SoC(500MHzデュアルコア)
- MCU: 32-bit Intel Quark マイクロコントローラー(100MHz)
- メモリ(RAM): 1Gbytes(※低電圧・低消費電力の仕様のLPDDR3)
- 内部ストレージ: 4Gbytes eMMC(v4.51)
- Wi-Fi: IEEE802.11 a/b/g/n、2.4GHz/5GHzデュアルバンド
- Bluetooth: Bluetooth 4.0
Arduinoボードの主要なハードウェア仕様
- サイズ: 72×127.5×12.5mm
- Arduino UNO互換: デジタルI/Oピン×20本(うち4つはPWM出力可能)、アナログ入力ピン×6本
- 外部ストレージ: microSDカード
- 外部インターフェース: Micro USB(Type B)×2つ、標準USB(Type A)×1つ
※なお、Arduinoボードの方はEdison本体の拡張用なので、Arduinoボード上にはCPUやRAMなどのコンピューターの基盤部品は搭載されていない。より詳しい仕様については、公式サイトから資料(英語)(日本語訳はこちら)を参照されたい。
開発環境・開発言語
Edisonの特長は、Windows PCなどと同じx86アーキテクチャのCPUで動作するため、x86で蓄積してきた開発資産を生かしやすいことだ。それに加えて、上記の通り、Arduinoの1製品であるArduino UNOと互換性があり、Arduino開発もサポートしているので、(その他のIoTの開発環境と比べて)開発の幅が大きく広がっているのも、Edisonが優れているところだ。
例えばEdison開発では、次のような環境を用いて開発が行える。
- Arduino IDE: Intel Galileo/Edisonボード専用版のIDE(統合開発環境)(詳細後述。※ファームウェアをアップデートする場合は、ボードの型やバージョンを間違えないように注意してほしい)。Arduino言語が使える。
- Intel XDK Iot Edition: マルチプラットフォーム向けのハイブリッドアプリを開発するためのIDE(※その外観は、IDEというよりはSublime Textのようなテキストエディターに似ている)。Node.js(JavaScript言語)が使える。
- Eclipse IDE+Intel IoT Developer Kit: C/C++言語が使える(後述のMRAAライブラリも利用可能)。
- MRAAライブラリ: Node.js/Python/C/C++言語が使える。
今回はこのうち、最も初心者に優しい「Arduino IDE」を用いてプログラムを開発する。
誰でもできる! Intel Edisonを試そう
それでは、Edison開発を始めよう。今回は、準備を整えた上で、Edison上のLinux OSにアクセスし、最後に今回の主目的である“Lチカ”を実現する。
※本稿と同じ内容で試したい方のために、入手する必要がある物の(Amazon.co.jpでの)購入用リンクをまとめておく:本体+接続ケーブル+ACアダプター。
ステップ1 今回の“Lチカ”に必要な物
まずは、開発に必要な物をそろえよう。
- Intel Edison Kit for Arduino: 1個
- Micro USB(Type B)<Edison側>←→標準USB(Type A)<パソコン側>のUSBケーブル: 1本(※2本あるとさらに便利)
- ACアダプター(電源供給用)*1: 1個。7~15Vのもの。DCプラグサイズは外径5.5mm×内径2.1mm(※上記の購入リンク先は、このサイズを切り替えられる製品にしている)。
- PC(開発用): Windows 7/8/8.1マシン(※Mac OSやLinuxのマシンでもよいが、本稿ではWindowsを使用する)
- *1 USB接続から給電することも可能だが、Wi-Fiを使う場合などで電力が足りなくなったりすると不安定になるので、最初から用意しておくと安心だ。Edisonには付属していないが、Intel Galileo Gen 2ボードにはACアダプターが付属しており、それをそのまま使い回せる(※本稿では次の写真のように、その付属ADアダプターを使った)。
ステップ2 必要な製品のダウンロード
※以下では、本稿執筆時点でのバージョン番号(例えば1.0.0
など)を明記しているが、状況に応じて読み替えてほしい。
まずは、USB接続を仮想COMポートとして扱うためのCDM(Combined Driver Model)ドライバーを、次のリンク先からダウンロードする。ダウンロードできるリンクがいくつかあるが、ここでは[setup executable]をクリックすればよい。これにより、.exeファイルがダウンロードされる。この実行可能ファイルは、32bitと64bitで兼用のようだ。
本稿の例では、CDM v2.10.00 WHQL Certified.exe
ファイルがダウンロードされた。これを必ずWindowsの[管理者として実行]し(=右クリックメニューで選択できる)、開発プラットフォーム(=ホスト)となるWindows PCにインストールする。インストール方法は特に難しくはない。一つ目のウィザードで[Extra]ボタンを、二つ目のウィザードで[次へ]-(使用許諾契約に)[同意します]&[次へ]-[完了]ボタンと進めるだけだ。
次に、Edisonモジュールを認識するためのIntel Edisonドライバーをインストールする。これには、次のリンク先で[Driver Software.]の表内にある[Windows Driver setup 1.0.0]左の[Download]ボタンをクリックすればよい。
本稿の例では、IntelEdisonDriverSetup1.0.0.exe
ファイルがダウンロードされた。これを、先ほどと同様に[管理者として実行]する。このインストールも詳しく手順を説明するまでもなく簡単なので、流れだけ示しておく。表示されたウィザードの[Next]-(ライセンス同意書に同意できるなら)[I Agree]-[Next]-[Install]ボタンと進める。
次に、開発環境となるArduino IDEをダウンロードしてインストールしよう。Edison開発に必須ではないが、本稿の例では使用する。次のリンク先で[Arduino Software 1.5.3 - Intel 1.0.4]の[Windows]版を[Download]する。
ダウンロードしたarduino-windows-1.0.4.7z
ファイルに対して右クリックメニューの[プロパティ]を実行し、これにより表示されるダイアログの[全般]タブで[ブロックの解除]ボタンをクリックする。[OK]ボタンをクリックしてダイアログを閉じたら、その.7zファイルを展開する*2。この際の注意点として、展開先はCドライブの直下など浅い階層にした方がよい(※展開されるファイル名が長かったりフォルダーの階層が深かったりするため、結果的にファイルパスが長くなりすぎてエラーとなってしまう可能性があるためだ)。なお、このArduino IDEがインストールできるのは、(執筆時点で)Windows 7/8/8.1となっている。
- *2 .7zファイルは、圧縮・解凍ソフトの7-Zipなどで解凍する。展開されたフォルダー内の
arduino.exe
ファイルを実行すると、Arduino IDEが起動する。
最後に、Edison上で動かす最新Linuxイメージをダウンロードしておこう。次のリンク先で[Edison Yocto complete image]を[Download]する。
本稿の例では、edison-image-rel1-maint-rel1-ww42-14.zip
ファイルがダウンロードされた。上記と同じ手順で[ブロックの解除]もしておこう。.zipファイルの展開は、実際にEdisonボードに対して行うため、その前にEdisonボードとPCを接続しよう。
ステップ3 EdisonボードのArduino拡張ボードへの取り付け
それでは、Edison本体をArduinoボードに取り付けよう。これは、次の写真に示す部分をはめ込むだけだ。
特に難しくはないが、精密機器なので壊さないように慎重にゆっくりと取り付けてほしい(※筆者の場合は、はめ込むと最後にカチッと音がした)。なお、取り付けるために押さえる箇所は、次の写真では赤丸で示しているシール部分がよいようだ。
ちなみに「Intel Edison Kit for Arduino」では、Edison本体とArduinoボードの他にも、次の写真に示すように、赤色で示したEdisonボード固定用の小型ナット2個と、緑色で示したArduinoボードの足(※写真に写っているボードの裏側の方に白いスペーサー棒を取りつける)になるスペーサー&ネジの4個セットも付属している。どちらも本稿では取り付けなかった。
以上で拡張ボードへの本体の取り付けは完了だ。
ステップ4 Edisonを外部ドライブとして使用する
次に、EdisonにACアダプターを差す(図7)。これで電源が取れるようになった。
さらに、EdisonとWindows PCをUSBケーブルで接続しよう。今回は2つのMicro USB接続口を使うが、ここでは次の写真のように、電源に近い方のMicro USB(OTG側)*3に差す。
- *3 2つあるMicro USBのうちOTG(On-The-Go)側に接続した場合は、(初期設定のままであれば)EdisonがクライアントUSB機器として処理され、ストレージの一部が外部ドライブとして認識される。Arduinoボードの初期設定では、電源真横の標準USBがホスト(つまりEdisonホスト側から他のUSB機器に接続可能な状態)になっており、Micro USB(OTG側)がクライアント(つまりWindows PCなどからEdisonクライアントに接続可能な状態)になっている。Arduinoボード上のUSB MUX(Multiplexer)では、このホストとクライアントをスイッチ1つで切り替えられる(つまり、標準USBをクライアントに、Micro USBをホストに変えられる)。ちなみにそのスイッチは、標準USBとMicro USB(OTG側)の中間に存在する(※本稿から脱線するので、ここでそれ以上の説明は割愛する)。
OTG側に接続した場合、Edison(のLinuxインストール用領域)が、図9で赤枠で示しているように、Windows PC上では外部ドライブとして認識される。
※参考までに、[デバイス ドライバー]を起動して、どのようなデバイスが認識されているかを(画面左側で)見えるようにした。緑枠で示したものがEdisonのデバイスだ。
ステップ5 EdisonにLinuxをインストールする
その外部ドライブに、先ほどダウンロードしたLinuxをインストールしよう。「インストールする」といっても、先ほどダウンロードした.zipファイルを解凍し、展開されたEdison Yocto(=Edison用Linuxイメージ)を、外部ドライブに配置するだけだ(図10)。
ステップ6 Edisonにシリアル接続する
Linuxのインストールが完了したら、OSにアクセスしてみよう。
開発機のWindows PCから、EdisonのLinuxにリモート接続するには、外部ドライブとしてではなく、COMポート経由のシリアル接続にする必要がある。そのために、先ほど接続したUSBケーブルをMicro USB(OTG側)から抜き取り、もう一方のMicro USB(UART側)*4に差し込む(図10)。
- *4 Micro USBのUART(非同期シリアル通信)側は、USB接続とUART接続を変換するFTDI(社製モジュール)につながっている。このFTDIのおかげで、Micro USBが「仮想COMポート」と認識され、Edison内部にシリアル(UART 2)接続できる。
ステップ7 EdisonのLinuxにコマンドラインでリモート接続する
これでシリアルポートと認識されるので、実際にCOMポート番号を指定して、コマンドラインで接続してみよう。
接続するためのツールとして今回は、Telnet/SSHクライアントでもあるPuTTY(パティ)を使用する。PuTTYは、次のリンク先からダウンロードできる(※リンク先ページ上の[For Windows on Intel x86]の[putty.exe]リンクをクリックすればよい)。
putty.exe
ファイルをダウンロードしたら、前述と同じ手順で[ブロックの解除]を行い、その.exeファイルを実行する。これにより、PuTTYが起動する(図11)。
PuTTYは図11の赤枠で示しているような内容で設定すればよい。
具体的にはまず、[Connection Type](接続種別)欄から[Serial](シリアル)を選択し、[Serial line](シリアル回線)欄にCOM名(この例では「COM5」)を指定する。この「COM5」は、デバイスマネージャーで確認できる(※デバイスマネージャーを起動するには、Windows 8.1であればWindows+Xキーで管理用メニューを表示して、そこから[デバイス マネージャー]を選択すればよい)。
次に[Speed](速度)欄に「115200」bps(=シリアル接続の速度)を指定して、[Open]ボタンをクリックする。これにより、リモート接続が開始される。なお、上記の設定を保存しておけば、何度も接続するようなケースでは設定処理が省けて便利だ。これには、[Saved Sessions]欄に「Intel Edison Board」というような名前を指定して[Save]ボタンをクリックすればよい(緑枠)。
接続が開始されて、次の画面のように何も表示されていない状態になったら、Enterキーを2回押す。
これにより、ログインするユーザー名を聞かれるのでroot
と入力してEnterキーを押す(※参考: 筆者の場合、なぜかすぐにはログインしてくれなかった。そこで、時間を少し置いた後、何度かEnterキーを押したところ、ログインできた)。
ログインが完了し、コマンドを受け付ける状態になったら、reboot ota
と入力してEnterキーを押す(図14)。このコマンドは、Edisonのファームウェア・アップデートを行うためのものだ。
再びログインする状態になったら、アップデートは完了だ。
ここからもっと使っていってもよいが、今回はLinuxとしての利用はここまでにしよう。最後にexit
とコマンド入力してログアウトし、PuTTYも終了しよう。
ステップ8 Edisonで“Lチカ”プログラムを実行する
ここまで長かったが、ついに今回の本題に入る。
Arduino IDEで作ったプログラムをEdisonに配置するには、外部ドライブとして認識させる必要がある。そこで、USBケーブルの接続先を再びMicro USB(OTG側)に差し直す(※ここまでの説明で分かると思うので、作業の写真は割愛する)。
外部ドライブが認識できたら、Arduino IDEを起動する(=前述した通り、arduino.exe
ファイルを実行すればよい)。
Arduino IDEの設定
IDEが起動したら、図15のようにメニューバーの[ツール]-[マイコンボード]-[Intel® Edison]を選択する。
さらに、図16のようにメニューバーの[ツール]-[シリアルポート]-[<COM名>]を選択する。このCOM名も、先ほどと同じようにデバイスマネージャーで調べる(本稿の例では先ほどより1少ないポート番号の「COM4」となっていた)。
スケッチの作成
いよいよプログラムを作成して、実行する。Arduinoでは、プログラムのことを“スケッチ”と呼ぶ。Makers(=モノ作りをする人たち)にとってプログラムは、アイデアを紙にスケッチするのと同じような作業だからだ。
それでは目的の“Lチカ”のスケッチを作成しよう。
実はこのスケッチは、サンプルとして提供されているので、今回はこれをこのまま利用する。これには、図17のようにメニューバーの[ファイル]-[スケッチの例]-[01.Basics]-[Blink]を選択すればよい。
これにより、スケッチのコードがエディター内に生成される。そのコード内容は次のようになっている(※日本語部分は筆者が翻訳した)。コード内容の説明は、かなり長くなってしまうので、今回は割愛する。
/*
Blink(チカチカ)
LEDを、1秒間オンにし、1秒間オフにするのを、繰り返します。
このサンプルコードは一般公開しています。
*/
// ほとんどのArduinoボードで、13番ピンはLEDに接続されています。
// そのピンに名前を付けます:
int led = 13;
// このsetupルーチンは、resetを押した時に一度だけ実行します:
void setup() {
// そのデジタルピンを、出力として初期化します。
pinMode(led, OUTPUT);
}
// このloopルーチンは、永遠に繰り返して実行されます。
void loop() {
digitalWrite(led, HIGH); // LEDをオンにする(HIGHは電圧レベルです)
delay(1000); // 1秒間待ちます
digitalWrite(led, LOW); // LEDをオフにします(LOW電圧を指定することで)
delay(1000); // 1秒間待ちます
}
|
スケッチの実行
最後に、スケッチを実行するには、(→)(=マイコンボードに書き込む)ボタンをクリックすればよい。
少し時間がかかるが、スケッチがArduinoボードに配置されて実行される。図19のように、LEDがチカチカし始めたら成功だ。
以上で、今回の目標が達成できた。お疲れ様!
スケッチ実行の停止
結果に満足して、「スケッチの実行を止めたい」と思う人もいるだろう。しかし、Arduinoのスケッチには「プログラムの終了」という概念がなく、スケッチの実行を停止することはできない(※電源が切れるまで動き続ける)。
どうしても止めたい場合には、停止ではなく、スケッチを最初の状態に戻せば、実質的にスケッチの実行は停止できる。つまり、空のスケッチで上書きすればよい。空のスケッチは、メニューバーの[ファイル]-[スケッチの例]-[01.Basics]-[BareMinimum]を選択すれば取得できる。
■
以上、IoTデバイス開発の“Lチカ”までが終わり、初歩の初歩を達成できた。これをきっかけに、より高度なEdison/Arduino開発の世界に飛び込んでいただけるとうれしい。本連載続編の執筆については、PV(ページ参照数)やSNSでの言及を見て、反応が良ければ書きたいと思う。