[翻訳] NervesとBakeを使った組み込みElixir
Wendy Smoakさんの2016年1月11日付のブログ記事Embedded Elixir with Nerves and Bakeの翻訳です。なおオリジナル記事はクリエイティブ・コモンズCC BY-NCでライセンスされています。
Wendyさんはここのところ続けてRaspberry Piで制御する「自動猫エサやり機(Automated Cat Feeder)の投稿を続けています。本記事はその最新版です。
ということで自動猫エサやり機のためのこのコードとハードウェアを組み合わせるところまできました。再現性の高いRaspberry Piインストール用のリリースを作るには、について見てみましょう。
前回の投稿では私は近接センサーとサーボを別々に使っていましたが、そこからしばらくたって今は一つに繋げています。
ElixirProximitySpinny from Wendy Smoak on Vimeo
そのためにはもう少しピンをServo HATにハンダ付けし、メス-メスのジャンパー線で近接センサーを取り付けます。
ビデオに出てくるパーツは以下のとおり。
- Raspberry Pi 2 Model B
- Adafruit PWM/Servo HAT
- FiTech FS5103R 持続回転サーボ
- VCNL4010 近接センサー
- 5V 2A 電源 ×2
- ヘッダピン
- メス-メスのジャンパー線
残りの2本の線はHDMIとOurlinkワイヤレスアダプタが刺してある電源付きUSBハブに繋がるUSBです。この例では不要です。
このAdafruitのウィッシュリストがパーツリストです。見ての通り既に100ドルを超えているのにまだ何の役にも立たない状態です!きっともっと安いパーツで済んだはず…。
ここに至るまで私はRPi2上で開発を続けてきました。キーボードとモニタを繋いでみたり、SSHで通信してみたり。これがRPi2を何か始めるためのプラットフォームとして優れたものにしているのですが、本当に組み込みのアプリについてはいつも最適解とは言えません。
リモート開発に加え、私はインストールするためのビルドリリースを再現性高く作る方法を探していました。ここでNervesとBake(とexrmとbuildrootとerlinit他多数の裏方もですが)の出番です。
私が最初にNervesを知ったのはElixirConf 2015でのGarth Hitchenの実践組み込みElixir(Embedded Elixir In Action)トークによってです。もし今までNervesについて聞いたことがないのならこのトークを見てください。待っててあげますから。
NervesとBakeは仮想マシンのメンテやターゲットプラットフォームのためのクロスコンパイルの苦労なしに組み込みデバイスのファームウェアをビルドするためにあります。
ほんのいくつかのコマンドでツールチェインやシステムを復帰させたりファームウェアイメージを作成してそれをSDカードに書きだせます。そのSDカードはRPiに挿すことができます。
Raspberry Pi上で直接開発していたプロジェクトを基にして私はソースをMac上にクローンしてwww.bakeware.io:上の手順に従いました。
注: この投稿は1月12日付けのbake 0.1.0に合わせて更新されています。Bakeプロジェクトは今もすごい速さで更新されているのでもし動かなかった場合はBakewareを見て更新事項を確認してください。
1: まずBakeをインストールします。コピペしてダウンロードと実行をするまえにスクリプトを把握してさらに見なおしておくことをおすすめします。少し読めばこれがbake
とfwup
とsquashfs
をインストールすることがわかるはずです。現時点ではこれはRubyスクリプトですが、最終的にはElixirに変換されるでしょう。
$ wget https://bakeware.herokuapp.com/bake/install
# インストールされる中身のファイルを精査してから進みましょう:
$ ruby -e "$(curl -fsSL https://bakeware.herokuapp.com/bake/install)"
注:現時点ではMacのみ対応。LinuxとWindowsへの対応予定。
2: プロジェクトのルートにBakefileを追加します。この場合ターゲットになるプラットフォームはただ一つRaspberry Pi2だけです。Bakefile内のdefault_target
を指定することで各コマンドに--target rpi2
を付けずに済むようになります。
use Bake.Config
platform :nerves
default_target :rpi2
target :rpi2,
recipe: {"nerves/rpi2", "~> 0.1"}
3: "system"と"toolchain"をダウンロードします。Bakefileにdefault_target
を含めたので何も指定する必要はありません。一つ以上のターゲットプラットフォームが必要な場合は--target all
オプションを各コマンドに付けてください。
$ bake system get
$ bake toolchain get
ファイルがホームディレクトリの~/.nerves
以下にダウンロードされたことにお気づきになると思います。正確にはそこに何が含まれるのか、どのように生成されるのかを示すドキュメントは見つけられなかったのですが、これでオーケーのはずです1。
4: ターゲットプラットフォームのためのあなたのプロジェクトのコードを含んだファームウェアをコンパイルします。繰り返しますがデフォルトのターゲットプラットフォームは自動的に選択されます。
$ bake firmware
このコマンドで_image
の下に{あなたのプロジェクト名}-{プラットフォーム名}.fw
という名前のファイルが生成されます。例えば私の場合だと_images/cat_feeder-rpi2.fw
といった感じです。そしてファイルはとても小さいです。LinuxとErlangとElixirとプロジェクトのコードでわずか18MB以下です。
$ ll _images
-rw-r--r-- 1 wsmoak staff 17846793 Jan 10 17:23 cat_feeder-rpi2.fw
このファイルはmicro-SDカードに焼いてRaspberry Piに挿します。
あなた用のmicro-SDカードを焼くのはちょっとしたチャレンジかもしれません。Raspberry Piのウェブサイトの説明を見てください。いいニュースですが@fhunlethさんがその辺りの手間を簡単にするfwup
(firmware update)というツールを書いてくださいました。ただひとつ、micro-SDカードをマウントして上書きするために権限を昇格させる2という点だけがちょっとした技になっています。
$ sudo fwup -a -i _images/cat_feeder-rpi2.fw -t complete
これでmicro-SDカード上にそのままRPiに挿せるちゃんとしたイメージが焼きこまれました。
micro-SDカードをRPiに挿せば約5秒で起動してあなたが書いたプログラムが走り出す、という素晴らしい状態になります。
私の見るところほんとにスゴイですねこれは。私は組み込み系プログラマーではありません。スイッチを入れるだけで物事が全てうまく行ったらいいなと思っていました。Nerves及びBakerWareチームの多大な努力によってその通りになったのです!
もっと知りたくなりましたか?ElixirのSlackチームにインビテーションをリクエストすれば#nerves及び#roboticsチャンネルに私たちはいます。Nerves Google Groupもありますが閑散としちゃってます3。
さて、サーボで何か回してキャットフードを供給しないといけません。私が着目しているのはThingiverseのAugur-based Cat Feederプロジェクトですが、こういう代用品か何かをSephra chocolate fountainで買っちゃったほうが早い気もしますね。
Copyright 2016 Wendy Smoak - This post first appeared on http://wsmoak.net and is CC BY-NC licensed.
Author And Source
この問題について([翻訳] NervesとBakeを使った組み込みElixir), 我々は、より多くの情報をここで見つけました https://qiita.com/HirofumiTamori/items/e90e665af86888fd7f1c著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .