はじめに3 はじめに makerへの第一歩にbeaglebone blackを!...
TRANSCRIPT
3
はじめにMakerへの第一歩にBeagleBone Blackを!
Raspberry財団が供給している小さなシングルボードコンピュータRaspberry Piが大きな話題になり、Linuxが動作するARMベースの小型コンピュータを活用する人が増えています。それに合わせて、以前からあるマイコンボードArduinoやPICマイコンといった利用のハードルが比較的低いマイコンボードにも関心が集まっているようです。 さらに3Dプリンタの発達などもあり“モノづくり”を志す「Makerムーブメント」とも呼ばれる流行が世界的にも広まっているようで、日本でもそれに呼応した動きも出てきています。 シングルボードコンピュータは今に始まったカテゴリではありませんが、以前はアマチュアが入手することが難しい上に、資料もプロ向けでハードルが高い面がありました。そのハードルを下げる試みを最初に行ったのは、2008年に登場した「BeagleBoard」というボードコンピュータでした。 そのBeagleBoardを手がけたBeagleBoardプロジェクトの現行製品が本書の主題である「BeagleBone Black」です。 BeagleBone Blackは1GHzで動作するCortex-A8コアを中核に、PowerVRのグラフィックアクセラレータなどを集積したARMベースのSoCを搭載するシングルボードコンピュータです。3年ほど前のスマートフォンとほぼ肩を並べる程度の性能を持っており、Raspberry Piが搭載しているSoCに比べ、CPU性能を含めて1.5~2倍程度の性能が期待できます。 また、BeagleBone Blackは合計92ピンのコネクタに多数のI/O端子を持つにもかかわらず、基板サイズは名刺大と極めて小さく、まさにモノ作りには最適な製品といえます。 価格も手頃で、日本でもRaspberry Piに対して1000円程度高い5000円前後で手に入るでしょう。小型で安価、しかも高性能と三拍子そろったBeagleBone Blackですが、日本での人気はRaspberry Piに遠く及びません。なぜでしょうか? いくつか理由はありそうですが、まず第一に日本語の情報がほとんどないことが大きな理由かもしれません。BeagleBone Blackのまとまった日本語の情報はネットにもほとんどなく、もっぱら海外のサイトに頼らざるをえない状況です。 さらに加えて、BeagleBone Blackが極めて高機能という点がハードルを高くしているようです。BeagleBone Blackは多数のI/Oをモードで切り替えることができ、そのモードの切替えに
4
Contents
Linuxカーネルバージョン3.7から実装されたDevice Treeの仕組みを生かしています。そのため多機能ではあるものの、実装はやや複雑といえます。 複雑な上に資料も少ないとなれば、利用する人が少なくなるのも無理はありません。そこで本書では、BeagleBone Blackをモノ作りのために利用する上で、最低でも知っておきたい情報を中心にまとめました。 利用する機会が多いGPIOとPWMを中心に利用法を紹介するとともに、BeagleBone Blackの大きな特徴であるJavaScirptによるハードウェア制御を取り上げています。また、より高速にI/Oを駆動したい人のために、ネイティブコード(C言語)によるGPIOとPWMの利用法をまとめています。 また、BaegleBone BlackもLinux機ですから、Linux機として使う上で知っておきたいカスタマイズ方法や起動プロセスについても解説を加えました。 BeagleBone Blackは非常に多機能で、本書には取り上げきれなかった機能も多いですが、本書を手がかりにすれば、BeagleBone Blackの多数の機能のアクセスできるはずです。ぜひBeagleBone BlackでMakerへの第一歩を踏み出してみてください。
2013年11月 著者記す
■本書を読むために 本書では、プログラミング言語としてJavaScriptとC言語を用いています。双方の言語の知識があると、より楽に読み通せるでしょう。電子工作の知識は必ずしも必要ありません。
【参考資料】 BeagleBone Blackを活用する上で、次の2点は必ずネットからダウンロードして手元においてください。
System Reference Manualhttps://github.com/CircuitCo/BeagleBone-Black/からダウンロードできるBBB_SRM.pdf
AM335x ARM Cortex-A8 Microprocessors (MPUs) Technical Reference Manualhttp://www.ti.com/product/am3359にある同名のマニュアル
【本書で作成したリストの入手先】 本書で作成した各種リストは、本書のサポートページからダウンロードできます。必要に応じてご利用ください。http://www.rutles.net/download/393/index.html
5
CONTENTS
Chapter1 BeagleBone Blackの基本
1-1 BeagleBoardから進化したBeagleBone Black 12BeagleBone Blackとは 12
◆TIとDigi-KeyがスタートさせたBeagleBoardプロジェクト/13
BeagleBone Blackを手に入れよう 14◆Digi-Key/14◆秋月電子通商/16
1-2 BeagleBone Blackで何ができるのか 17小型のLinux機として活用する 17BeagleBone Blackの豊富な入出力を生かす 18
1-3 BeagleBone Blackを眺めてみよう 19BeagleBone Blackを見る 19
1-4 BeagleBone Blackを使うために必要なもの 23◆USBハブ(セルフパワー式)/23◆MicroSDカード(4GB以上)/24◆ACアダプタ(5V1A以上)/24◆マウス&キーボード/25◆マイクロHDMI-HDMI変換ケーブル/25◆FTDI USB・シリアル変換ケーブル(3.3V版:TTL-232R-3V3)/26◆Linuxが動作しているPC/27
1-5 BeagleBone Blackの電源を入れてみよう~動作するか確かめる 28外部機器の接続と電源の投入 28起動しなかった場合のチェック 30
◆MicroSDカードは入っていないか?/30
6
Contents
◆USBハブを抜いて起動を試みる/30◆eMMCのアップデートを実行/30◆初期不良/30
1-6 BealgeBone Blackで最初にやっておきたい初期設定 31Angstrom Distributionのアップデート 31
◆①MicroSDカードの作成/32◆②アップデートの実行/35
Angstrom Distributionの初期設定 36◆Angstrom Distributionとは?/36◆Angstrom Distributionのアップデートを行う/37
ネットワークの設定方法~Connection Managerの使い方 39◆現在の設定内容を得る/40◆固定IPアドレスで使用する/41
systemdを使った起動設定~SSHサーバーを起動しておく 43◆dropbearのインストール/44
日本で使うための設定を行う 47◆タイムゾーンを設定する/47◆日本語表示を可能にする/49◆キーボードを日本語に切り替える/52
Chapter2 BeagleBone BlackでBoneScriptを試そう
2-1 BeagleBone Black用プログラミング環境「BoneScript」 54Node.jsとBoneScript 54Node.jsの開発環境Cloud9 IDE 55
2-2 BoneScriptを利用するための準備 56LAN接続を使う方法 56USB接続で使う方法 57
◆Windowsの場合/58◆Linuxの場合/59
7
◆スタンドアロンの場合/59
ブラウザはGoogle Chromeを推奨 59
2-3 BoneScriptでオンボードのLEDを点滅させよう 60GPIOの概略 60BoneScriptを試そう 61
◆BoneScriptはじめの一歩/64
2-4 LEDを外付けして点灯させてみよう 67LEDの使い方 67
コラム P-N接合/68
コラム BeagleBone Blackをバッテリ駆動?/69
トランジスタを使ってLEDを点灯させる 70 コラム 東芝25C1815(GR)/72
外付けLEDを制御してみよう~ブレッドボードを使う 74 コラム 抵抗の値/74
2-5 GPIOの入力を受け取る 80GPIOにスイッチをつなぐ 80スイッチの動作をBoneScriptで利用する 83
2-6 PWMを試してみよう 87PWMとは 87PWMでLEDの明るさを変えてみよう 89アナログ入力を試してみよう 92
◆BeagleBone BlackのADCの仕様/92
温度センサーを使って温度を測ってみよう 93◆温度を測ってみよう/96
2-7 Webアプリケーションへの応用 99温度をWebブラウザに表示するクライアント・サーバーアプリケーション 99サーバーサイドアプリケーションの作成 101クライアント側のアプリケーション 103
8
Contents
動作テストからサーバーの自動実行まで 105クライアント・サーバーアプリケーションを作成するには 106
Chapter3 ネイティブコードでBeagleBone Blackを制御しよう
3-1 BoneScriptの限界とネイティブコード 108BoneScriptの問題点 108
3-2 電波時計を合わせる「宅内標準電波システム」を作ってみよう 109標準電波の仕組み 109PWMで40kHzや60kHzの信号を発生させる方法 112
◆①端子をPWMに初期化する/112◆②PWMを制御する/114
PWMを出力するC言語のライブラリを作成する 115◆①ライブラリの仕様/116◆②ライブラリのソースコードを見る/117◆③libBBBのビルドとインストール/126
電波時計を合わせるプログラムを作成しよう 127電波時計を合わせる方法 138
コラム 測定器を利用する/142
Chapter4 グラフィック液晶をBeagleBone Blackで制御しよう
4-1 GPIOをネイティブコードで制御する 144ユーザーランドにおけるGPIOの制御方法 144libBBBにGPIO制御を追加しよう 147GPIOのテストプログラムを実行してみよう~動作しない端子を確認 155Device Tree Overlayを利用して端子のモードを変える 156
◆①現在のモードを確認する/158◆②Device Tree Overlayの作成/159◆③P9コネクタの17番でGPIOを使ってみる/162
9
◆④Device Tree Overlayを取り除く/163
4-2 秋月グラフィック液晶を制御する 166安価に手に入るグラフィックLCDディスプレイ 166TG12864の制御方法 167BeagleBone BlackのGPIOをまとめて同時に制御する 170TG12864BをBeagleBone Blackに接続しよう 174
◆TG12864B用のDevice Tree Overlay/177
LCDに表示を行うプログラム 181◆TG12864Bの動作を試してみよう/189
ビットマップグラフィックを表示させよう 191◆PBM形式の概要/191◆LCDにPBM形式を表示する/191◆PBM形式の画像を用意しよう/194◆表示させよう/195
コラム 起動時にDevice Tree Overlayを有効化/無効化する/196
Chapter5 BeagleBone Blackの起動のカスタマイズ
5-1 カーネルの再構築 198カーネルの再構築が必須のワケ 198カーネルの再構築に必要なもの 199カーネルソースを入手する 199カーネルのビルドを行う 201カーネルの動作テストを行う 205
◆シリアル端末のインストール/205◆Windowsの場合/208
TFTPDのインストール 209BeagleBone Blackを起動する 210
◆LANにDHCPサーバーがある場合/211◆LANにDHCPサーバーがない場合/213
BeagleBone Blackのカーネルを入れ替える 215
10
Contents
5-2 BeagleBone Blackの起動の仕組み~最新のu-bootとx-loaderを起動させる 218x-loaderとu-bootをビルドする 219最新u-boot+MLOで起動させるmicroSDカードの作成 219microSDカードから起動する 222
5-3 u-bootでいろいろな起動を試してみよう 224内蔵フラッシュメモリからの起動 225USBから起動する 227自動起動の仕組みとカスタマイズ 228
Appendix◆ADCをネイティブコードで使うには/230◆Angstrom Linux以外のディストリビューションを使う/231◆P8ヘッダのピンアサイン/232◆P9ヘッダのピンアサイン/234
索引 236
BeagleBone Blackの基本
Chapter 1
1. BeagleBoardから進化したBeagleBone Black
2. BeagleBone Blackで何ができるのか
3. BeagleBone Blackを眺めてみよう
4. BeagleBone Blackを使うために必要なもの
5. BeagleBone Blackの電源を入れてみよう ~動作するか確かめる
6. BealgeBone Blackで最初にやっておきたい 初期設定
この章では、BeagleBone Blackの機能などを概観すると同時に、Beagle Bone Blackが採用しているAngstrom Distributionの概要と、知っておきたい設定を取り上げます。Angstrom DistributionはPC上のLinuxとしてはポピュラーではないので、Linuxをよく知っているという場合も目を通しておいてください。
12
Chapter 1
──BeagleBone Blackの
基本
BeagleBone Blackとは
BeagleBone Blackは、BeagleBoardプロジェクト(http://beagleboard.org)が手がけているARMベースのSoC(System-on-a-Chip)を用いた開発用のボードコンピュータです。詳しい仕様な後ほどまとめますが、名刺大の小型なボードにCPUコア1GHz動作の高性能なSoCを載せているのが特徴です。
BeagleBone Black。SSDより一回り小さい
1-1BeagleBoardから進化したBeagleBone Black昨今、自作派に人気の手のひらサイズPC。2012年に話題になったRaspberry piに続いて登場したのが、より進化したBeagleBone Blackです。
13
Chapter 1
Chapter 2
Chapter 3
Chapter 4
Chapter 5
1-1 BeagleBoard から進化した BeagleBone Black
Raspberry財団が手がけている開発ボードRaspberry Piのヒットによって、ARMベースのSoCを用いた小型のボードコンピュータはポピュラーな存在になっています。しかし、一般の人にも入手しやすい価格で、小型開発ボードの提供を最初に行ったのはBeagleBoardプロジェクトです。
TIとDigi-KeyがスタートさせたBeagleBoardプロジェクト
この種の開発用のボードは、これまでSoCを手がける半導体メーカーが開発者向けに販売しているものが主でした。一般向けではないことから、価格も高め、個人が趣味で購入するのは、少し難しいものでした。もちろん、従来の半導体メーカーの開発ボードの価格が高く設定されているのには理由があります。半導体メーカーが販売しているボードは、充実したソフトウェア開発キットが付属していたり、また技術サポートが約束されているといった特徴があるからです。 老舗のアメリカ大手半導体メーカーであるTexas Instruments(以降、TI)はARMベースのSoC「OMAP」シリーズを手がけていましたが、ARMベースSoCの分野では後発といってよく、OMAPは他社製品に比べていまひとつ採用が進んでいませんでした。そこでTIは、OMAPの普及を促進するため、ワールドワイドで電子部品販売を手がけているアメリカのDigi-key(日本語サイト:http://www.digikey.jp/)と共同でBeagleBoardプロジェクトをスタートさせます。 BeagleBoardプロジェクトの特徴は、Webサイトやフォーラムを主体にしたオープンプロジェクトの体裁をとることで、従来の開発ボードでは標準的だった手厚い技術サポートや充実した開発キットの提供を省いている点です。その上で、販売をDigi-keyに委託することで一般の人にも買いやすくし、従来の開発ボードに比べて生産量を増やしています。 おもにこの2つの方法によってボードのコストを抑えた「BeagleBoard」が2008年に発売されまし た。BeagleBoardは、当時の日本円の価格で12,000円前後(為替レートによって変動)。非常に安価なRaspberry Piが、言わば価格破壊を起こしたために、現在の感覚ではやや高価に思えるかもしれませんが、当時、この種のボードとしては破格といっていい手頃な価格で、マニアの間ではちょっとしたブームになりました。 以降、BeagleBoardプロジェクトではTIが設計を行い、Digi-Keyが販売を手がけるという役割分担で、いくつかのボードを販売しています。
14
Chapter 1
──BeagleBone Blackの
基本
◎BeagleBoardプロジェクトが手がけるおもなボード
ボード名 搭載SoC 発売時期
BeagleBoard OMAP3530 2008年
BeagleBoard rev.C OMAP3530(高クロック動作) 2009年
BeagleBoard-xM DM3730 2010年
BeagleBone AM3359ZC272 2011年
BeagleBone Black AM3359AZCZ100 2013年
表に示す通り、本書で取り上げるBeagleBone Blackは、2011年に発売されたBeagleBoneの直接の後継に当たる製品です。BeagleBoneとはかなりの部分で互換性を維持しながら、性能や機能を向上させ、なおかつBeagleBoneに比べて価格を抑えたのがBeagleBone Blackです。 実は、BeagleBone(無印)もいちおう現行商品(といっても恐らく在庫のみと考えられます)として販売が継続されています。しかし、BeagleBone(無印)はBeagleBone Blackに比べ性能が低く、機能もやや劣る部分があります*1。そのため、今さらBeagleBone(無印)を手に入れる意味は余りありません。これから購入しようという場合は、誤ってBeagleBone(無印)の方をオーダーしないよう注意してください。
BeagleBone Blackを手に入れよう
BeagleBone Blackはおもに通信販売で入手できますが、店舗で販売してるケースもあります。おもな入手先を紹介しておきます。
Digi-Key
すでに述べたように、BeagleBoardプロジェクトはTIとDigi-Keyの共同プロジェクトで、BeagleBone BlackもDigi-Keyが販売しています。Digi-Keyはアメリカの電子部品販売大手ですが、グローバルに販売活動を展開しています。日本向けには日本語サイトを用意し、日本円の決済も可能です。
*1 BeagleBone(無印)は、デバッグに便利な JTAGポートをサポートしている、使えるI/Oが多いというところが、BeagleBone Blackより優れている点といえます。しかし、それ以外にBeagleBone(無印)がBlackを上回る点はありません。
15
Chapter 1
Chapter 2
Chapter 3
Chapter 4
Chapter 5
1-1 BeagleBoard から進化した BeagleBone Black
◎Digi-Key
http://www.digikey.jp
Digi-Keyにアクセスし、Digi-Key品番「BB-BBLK-000-ND」を検索してオーダーしてください。支払いはカードのほか、国内の銀行振込みにも対応しています。なお、価格は、為替レートに左右される時価になっています。
◎Digi-KeyのBeagleBone Black販売ページ
送付はアメリカからのUPSまたはFedexを用いた国際宅配便が利用されます。数日で到着するはずです。 なお、あまり該当する人はいないと思いますが、法人名義で購入する場合、BeagleBone Blackはアメリカの安全保障上の輸出規制対象に該当するため、最終使用地などを記した書類の提出が求められます。書類が必要な利用者にはDigi-keyの日本の代理店から必要書類と記入方法の連絡があるので、指示に従って書類を作成し、Digi-keyに返信してください。 個人名義で購入する場合には、書類は必要ありません。
16
Chapter 1
──BeagleBone Blackの
基本
秋月電子通商
国内では、秋月電子通商が店舗や通販でBeagleBone Blackを取り扱っています。通販コードはM-06867です。価格はDigi-keyと大差ないようなので、秋月電子通商からACアダプタなどと同時に購入すると便利かもしれません。
◎秋月電子通商
http://akizukidenshi.com/
◎秋月電子通商のBeagleBone Black販売ページ
なお、Digi-keyや秋月電子通商以外にも、BeagleBone Blackを取り扱っている店舗がいくつかあります。在庫がある店なら確実に手に入るでしょうから、検索などでいろいろと探してみてください。BeagleBone Blackは比較的、入手しやすい開発ボードなので、簡単に見つかるはずです。
BeagleBone BlackでBoneScriptを試そう
Chapter 2
1. BeagleBone Black用 プ ロ グ ラ ミ ン グ 環 境「BoneScript」
2. BoneScriptを利用するための準備
3. BoneScriptでオンボードのLEDの点滅させよう
4. LEDを外付けして点灯させてみよう
5. GPIOの入力を受け取る
6. PWMを試してみよう
7. Webアプリケーションへの応用Chapter01で も 述 べ た よ う に、BeagleBone Black向 け のAngstrom DistributionにはCloud 9 IDEがインストールされており、BoneScriptというJavaScriptの拡張を使って周辺インターフェースの制御が行えるようになっています。そこで、本章ではBoneScriptを使って、BeagleBone Blackをいろいろと制御してみましょう。
54
Chapter 2
──BeagleBone Blackで
BoneScriptを試そう
BeagleBone Blackには、基板の両サイドにあるピンヘッダにGPIOやADCなど多数の拡張I/Oが用意されています。これらを制御する方法にはいろいろありますが、そのひとつにBoneScriptがあります。BoneScriptの特徴は、JavaScriptを用いる点です。
Node.jsとBoneScript
ご存知のように、JavaScriptは、もともとはブラウザ上で動作するWebクライアントのためのプログラミング言語として作られました。現在でも、Webで多用されていることは言うまでもありません。Webクライアントのみならず、サーバー上で動作するアプリケーションまでJavaScriptで記述する方法が生み出され、利用されるようになっています。Webクライアントとサーバーの両方で同じ言語を使ってアプリケーションが作成できることから、徐々に人気が出てきています。 その鍵になっている技術が、Node.jsというサーバーサイドで動作するJavaScriptインタープリタです。Node.jsは、I/O待ちを行わない高速なJavaScriptインタープリタとして設計されており、サーバー上で高速に動作するアプリケーションが記述できることが特徴とされます。 BoneScriptは、Node.jsのプラグインで、BeagleBone Black上で動作するNode.jsの上でBeagleBone Blackを制御するアプリケーションを動かすことができる環境と考えればいいでしょう。Angstrom Distributionには、Node.js+BoneScript実行環境があらかじめプリインストールされているため、すぐに使いはじめることができます。
2-1BeagleBone Black用プログラミング環境「BoneScript」BeagleBone Blackを制御する方法のひとつがBoneScriptです。BoneScriptの特徴を紹介します。
55
Chapter 3
Chapter 4
Chapter 5
Chapter 1
Chapter 2
2-1 BeagleBone Black 用プログラミング環境「BoneScript」
Node.jsの開発環境Cloud9 IDE
さ ら に、BeagleBone BlackのAngstrom Distributionに は、Cloud9 IDE(https://c9.io/)というJavaScriptで記述された統合開発環境(IDE)がインストールされています。Cloud9 IDEは、おもにNode.jsの開発環境としてオープンソースで開発が進められているIDEで、ブラウザ上でNode.jsのアプリケーションを作成し、デバッグすることができます。
◎Cloud9 IDE
したがって、ユーザーはBeagleBone Blackにブラウザでアクセスし、Cloud9 IDEでプログラムを作成し、最終的なアプリケーションを完成させ、BeagleBone Blackに設置するという工程が極めて簡単にできるようになっています。
56
Chapter 2
──BeagleBone Blackで
BoneScriptを試そう
Cloud9 IDEを使ってBoneScriptを利用するには、他のPCからブラウザでBeagleBone Blackに接続しなければなりません。なお、BeagleBone Black上からスタンドアロンで利用することもできますが、とても重いのでお奨めしません(後述)。
LAN接続を使う方法
41ページで紹介したように、Angstrom Distributionを固定IPアドレスでLANに接続すれば、そのIPアドレスをブラウザで開くだけでBeagleBone Black上のWebページを開けます。
◎BeagleBone Black上のWebページ
2-2BoneScriptを利用するための準備BoneScriptを利用するには、他のPCからBeagleBone Blackに接続する必要があります。
57
Chapter 3
Chapter 4
Chapter 5
Chapter 1
Chapter 2
このWebページは、Node.js上で動作する簡易なWebサーバープラグインを使って表示されており、BoneScriptのサンプルプログラムをこの場で実行し、動作を確認するといったことができるように作成されています。 また、Cloud9 IDEも開くことができますが、それについてはあとで触れることにします。
USB接続で使う方法
BeagleBone Black上のUSBクライアント(USB Mini-Bコネクタ)は、Angstrom DistributionではデフォルトでUSB-Netドライバ(USB接続でネットワーク接続を行うドライバ)が設定されています。したがって、ホスト機がLinuxなら特別なドライバなしに、Windows機でもドライバをインストールすればUSB接続だけ(LANケーブルの接続なし)でホスト機からBeagleBone Blackに接続できます。 この方法を使うと、BeagleBone BlackはUSBポートからの給電を受けることが可能です。ただし、BoneScriptを使う場合でも必ずACアダプタを接続してください。USB給電だけでは電流容量が不足するため、BoneScriptの動作に制限が生じるからです。また、ACアダプタのない状態ではP9ヘッダのSYS_5Vピンに電源が供給されない制限もあります。 以降、USB接続時のホスト機の設定を説明していきます。Windows、Linuxの双方の設定を紹介しますが、いずれの場合でもBeagleBone BlackのUSB Mini-Bコネクタを本体付属のケーブルでPCのUSBポートに接続します。しばらくすると、USBストレージがPC上で認識されます。
BeagleBone BlackをPCとUSB接続
58
Chapter 2
──BeagleBone Blackで
BoneScriptを試そう
Windowsの場合
BeagleBone BlackをUSB接 続 し たPCがWindowsの 場 合、「BeagleBone Getting Started」というUSBドライブが認識されます。なお、ドライブの名前は、Angstrom Distributionのバージョンや時期によって異なるかもしれません。
◎BeagleBone Getting StartedというUSB接続ドライブが認識される
ドライブを開き、さらにDriversフォルダの下にあるWindowsフォルダを開いてください。
◎Windowsフォルダの中を表示
BONE_D64.exeが64ビット版Windows用ドライバ、BONE_DRV.exeが32ビット版Windows用のドライバです。該当する実行ファイルを実行し、ウィザードを進めてドライバをインストールします。
59
Chapter 3
Chapter 4
Chapter 5
Chapter 1
Chapter 2
2-2 BoneScript を利用するための準備
インストールが終わったら、いったんBeagleBone BlackをPCのUSBハブから抜いてください。そして接続し直し、少し待ってからブラウザでhttp://192.168.7.2を開いてみます。56ページに示したWebページが開けば接続は成功です。
Linuxの場合
BeagleBone Blackを接続したPC上でLinuxを利用しており、Gnomeのオートマウンタが機能していれば、接続後に/media/BEAGLEBONE/以下にBeagleBone BlackがUSBストレ ー ジ と し て マ ウ ン ト さ れ ま す。/media/BEAGLEBONE/Drivers/Linux/FTDI/mkudevrule.shというシェルスクリプトをroot権限で実行してください。
$ sudo /media/BEAGLEBONE/Drivers/Linux/FTDI/mkudevrule.sh Enter
これでudevに必要なエントリが追加され、BeagleBone Black接続時にUSB-Netドライバが192.168.7.1にセットされるようになります。いったんBeagleBone BlackをUSBハブから取り外し、付け直しましょう。しばらく待ってからブラウザでhttp://192.168.7.2を開くと56ページに示したWebページが見えるはずです。
スタンドアロンの場合
BeagleBone Blackにマウスとキーボード、ディスプレイを接続し、電源を入れて起動します。ブラウザ(Google Chromeがインストールされています)でhttp://localhostに接続すると、同じように開発することができます。ただし、極めて動作が遅いのでお奨めできません。
ブラウザはGoogle Chromeを推奨
以上で準備は完了ですが、利用するブラウザに注意してください。Cloud9 IDEやBoneScriptの実行にはクライアントサイドのJavaScriptエンジンも利用するため、ブラウザの互換性の問題が生じます。公式には、FirefoxまたはGoogle Chromeに対応するとされていますが、筆者が試した限りではFirefoxでは問題が生じることがあるため、Google Chromeを使用するのが安全です。 PC側にGoogle Chromeをインストールしていない場合は、Googleの公式ページ(http://www.google.co.jp/intl/ja/chrome/)に他のブラウザでアクセスし「無料のダウンロード」をクリックしてインストールしておいてください。Google ChromeはWindows、Linux、MacOSなどに対応しています。
ネイティブコードでBeagleBone Blackを制御しよう
Chapter 3
1. BoneScriptの限界とネイティブコード
2. 電波時計を合わせる「宅内標準電波システム」を作ってみよう
Chapter2では、BeagleBone Blackの大きな特徴であるNode.js上で動作するBoneScriptを取り上げました。ブラウザで動作するCloud9 IDEでJavaScriptというポピュラーな言語が使えることや、Web技術を用いたクライアント・サーバーアプリケーションを容易に作成できるといった特徴がある反面、できることに限界があるのも確かなことです。そこで、本稿ではBeagleBone Blackの入出力をネイティブコードで制御する例を紹介していきます。
108
Chapter 3
──ネイティブコードでBeagleBone Blackを
制御しよう
BoneScriptの問題点
BoneScriptは、手軽かつ最新のWeb技術を用いた面白さがありますが、限界もあります。実際に使っていく上で問題になるのは、次のような点でしょう。
動作が重い Node.jsは非常に高速なJavaScriptエンジンですが、ネイティブコードに比べれば低速度です。メモリ消費量もメインメモリが512MBしかないBeagleBone Blackにとっては大きく、複雑な処理を記述しようとすると限界に突き当たります。
実行時間が読みにくい JavaScriptはインタープリタ言語です。逐次実行型のインタープリタ言語は実行時間が読みにくいということがあります。少し厳密にいうと、Node.jsはJIT(Just In Time compiler)を使って実行時に動的にネイティブコードに変換するV8エンジンを元にしているため、典型的なインタープリタではありませんが、JITであっても実行時間が読みにくい点は変わりません。
きめ細かい時間制御ができない 2つ目の動作の重さにも関連しますが、GPIOなどをマイクロ秒、あるいはナノ秒オーダーで制御したい場合があります。JavaScriptではマイクロ秒、ナノ秒といった時間の制御は難しいという不自由さもあります。
以上のような難しい点もあるので、ネイティブコードによる入出力の制御を知っておくと、より活用の幅が広がるわけです。いくつかの例を、以降で見ていくことにします。
3-1BoneScriptの限界とネイティブコードまずは、BoneScriptの問題点をまとめておきましょう。
109
Chapter 4
Chapter 5
Chapter 1
Chapter 3
3-2 電波時計を合わせる「宅内標準電波システム」を作ってみよう
Chapter 2
多くの家庭で利用されている電波時計は、日本に2箇所ある送信所から送られている標準電波を使って時刻を自動で合わせてくれるため、時刻が狂うことがないという便利さがあります。ただ、使用しているのが電波ということもあり、地下や鉄筋コンクリート建ての奥まった部屋では受信状態があまり良くなく、標準電波による時刻合わせができないこともあります。 市販の電波時計が受信している標準電波は「タイムコード」と呼ばれる方式で、コード化された現在時刻で変調されています。タイムコードは比較的シンプルなので、BeagleBone Blackで作成することができ、簡単な外付け回路を使って電波……といっても電波法の制限内に収めるため、ごく近距離にしか届きませんが……を出すことができ、標準電波が届かないところでも電波時計の時刻を合わせることができます。
標準電波の仕組み
電波時計は、日本に二箇所ある「標準周波数局」と呼ばれる送信所の電波を受信して時刻を合わせています。送信所は福島県大鷹鳥谷山(東日本)と佐賀県羽金山(西日本)にあります。 余談ですが、福島県大鷹鳥谷山の標準周波数局は、東日本大震災で事故を起こした福島第一原発の避難区域内だったことから、震災直後から数ヶ月にわたって標準電波の送信が停止し、東日本では電波時計の時刻合わせができない状態になりました。復旧後はメンテナンスなどによる一時停止をのぞいて、ほぼ正常に標準電波の送信が行われているようです。 電波の周波数は東日本が40kHz、西日本が60kHzになっています。電波のことを少しご存知なら、この周波数が極めて低いということに気付くでしょう。中波ラジオが500kHz台~ですから、電波時計の電波は長波に分類できる電波です。長波は波長が非常に長いため、建物や地形に邪魔されることが少なく、到達距離が長いという特徴があります。 そんな電波に時刻の情報を載せているわけですが、時刻のデータは40kHzまたは60kHzをオン、オフすることによるデジタルデータになっています。図1を見てください。
3-2電波時計を合わせる「宅内標準電波システム」を作ってみようここでは、ネイティブコードで制御する例として、電波時計を合わせるためのシステムを作成します。
110
Chapter 3
──ネイティブコードでBeagleBone Blackを
制御しよう
◎タイムコード(図1)
M 40 20 20 3010 40 20 1010 200 1000 0 0 0 08 4 2 1 8 4 2 1P1 0 0P2 P3
P0
0秒 10秒 20秒 30秒
40秒 50秒30秒 0秒
3 4 2 1 0 0 80 40 20 10 8 4 2 0 0 0 01 4 2 1PA1 PA2 SU1 P4 P5 LS1 LS2SU2 2
②
㉖
④
⑯ ㉓ ㉔ ㉘
① ③ ⑨⑧ ⑭⑬⑤
⑱ ⑲ ⑳ ㉑ ㉒ ㉕ ㉙
⑥ ⑩ ⑮⑪ ⑫⑦
20 10⑰ ㉗
分 時
パリティ うるう秒
1月1日からの通算日
予備セット
年(西暦下2桁) 曜日
図1が標準周波数局が送信しているタイムコードのフォーマットです。四角い箱が電波がオン、箱がない部分がオフ(または出力10%以下の送信)で、1秒に60個の情報を1分かけて送っています。少しわかりにくいかもしませんので、先頭から内容を記しておきます。
◎タイムコードの種類
種類 電波の幅+空白時間
マーカー 200ms+800ms
0 800ms+200ms
1 500ms+500ms
◎先頭から60ビット分のデータの意味
数字 意味
① マーカー(1ビット)
② 分の10の位(3ビット)
③ 0(1ビット)
④ 分の1の位(4ビット)
⑤ ポジションマーカー(1ビット)
数字 意味
⑥ 0×2(2ビット)
⑦ 時の10の位(2ビット)
⑧ 0(1ビット)
⑨ 時の1の位(4ビット)
⑩ ポジションマーカー(1ビット)
グラフィック液晶をBeagleBone Blackで制御しよう
Chapter 4
1. GPIOをネイティブコードで制御する
2. 秋月グラフィック液晶を制御する
前章では、PWMをネイティブコードで制御する例を紹介しました。本章では、GPIOをネイティブコードで制御してみましょう。
144
Chapter 4
──グラフィック液晶をBeagleBone Blackで
制御しよう
PWMは、カーネルドライバが整備されているため、/sys以下の特殊ファイルを通じて制御することができます。それで十分に利用できる程度の制御速度は得られます。 GPIOの場合も、/sys以下のファイルで簡単に制御できるようにはなっていますが、いくつかの問題があります。 ひとつは速度的な問題で、GPIOでは/sys以下のファイルをオープンし値を書き込みクローズするというオーバーヘッドが無視できない場合があります。モーター制御等で利用されるPWMでは、そこまでシビアな制御が求められるのはレアケース(前節の電波時計もレアケースかもしれません)ですが、GPIOは接続する外部機器の仕様に合わせて、シビアに制御しなければならない可能性があります。 また、複数のGPIOを制御しづらいということも挙げておくべきかもしれません。あとで説明しますが、GPIOの制御は個々のGPIOに対して特殊ファイルが用意されるため、同時に複数のGPIOのオン・オフを変えるということはできません。 そのため本稿では、まず特殊ファイルを通じてGPIOを制御する方法を紹介し、さらに秋月電子通商のLCDを例に低レベルなプログラムでGPIOを制御する方法を取り上げます。そのためには、前節で軽く触れたDevice Tree(Cape Manager)を利用する必要も出てきます。
ユーザーランドにおけるGPIOの制御方法
まずは、ごく簡単にGPIOを制御できるLinuxカーネルの機能を見ていくことにします。 BeagleBone Blackのカーネルでは、GPIOナンバーを使ってGPIOを制御しています。そのためGPIOナンバーを得る方法をまず知っておく必要があります。 すでにChapter2で説明していますが、BeagleBone Blackが採用しているSoCは、内部に4つのGPIOコントローラを持っています。1つのコントローラでGPIO×32本の出力を持ち、4つのコントローラで合計128本のGPIOを持つことができる仕様です。つまりGPIOは4
4-1GPIOをネイティブコードで制御するまず、BeagleBone BlackのGPIOをカーネルドライバを通じて制御してみます。Linuxカーネルで標準化されているGPIOドライバをサポートしているため、簡単に制御できます。
145
Chapter 5
Chapter 1
Chapter 2
Chapter 3
Chapter 4
つのチャンネルがあり、1チャンネルあたり32本ということです。 公式サイトからダウンロードできるBeagleBone Black System Reference Manual(Rev.5.6)のP.80とP.82には、P8コネクタとP9コネクタのピンアサインが掲載されています。ほぼ同等の表を本書のAppendixにも載せているので参照してください。 たとえば、P9コネクタの11番のMODE7の欄にgpio0[30]と記されています。これはGPIOチャンネル0の30ビット目という意味です。 カーネル内部で使うGPIOナンバーはGPIOチャンネル0からチャンネル3までの通し番号です。つまり、GPIOチャンネル0の30ビット目のGPIOナンバーは30になります。仮にGPIOチャンネル1の10ビット目であれば、GPIOナンバーはチャンネル番号×32+ビット数なので、42になるわけです。 以降は、P9コネクタの11番(つまりGPIOナンバー30)を例に話を進めていきます。BeagleBone Blackにログインし、端末を開いて/sys/class/gpioの下を見てください。
# ls -F /sys/class/gpio/ Enter
export gpiochip0@ gpiochip32@ gpiochip64@ gpiochip96@ unexport
4つのシンボリックリンクとexport、unexportという2つの特殊ファイルがあります。gpiochip0、gpiochip32、gpiochip64、gpiochip96という4つのシンボリックリンクは、ぞれぞれGPIOチャンネル0~3に対応するシンボリックリンクですが、通常はこれらを操作する必要はありません。必要なのは、exportとunexportだけです。 まず、exportに利用したいGPIOナンバーを書き込みます。
# echo 30 >/sys/class/gpio/export Enter
するとGPIO_30が文字通りエクスポートされ、/sys/class/gpio/gpio30/というディレクトリが作成されます。
# ls -F /sys/class/gpio/gpio30/ Enter
active_low direction edge power/ subsystem@ uevent value
146
Chapter 4
──グラフィック液晶をBeagleBone Blackで
制御しよう
いくつかのファイルがあります。それぞれの機能は、次のとおりです。
active_low 入力使用時の割り込みに関する設定で、ローをアクティブにするのなら1を書き込みます。
edge これも入力使用時の割り込みの設定で、rising(LowからHighへ)、falling(HighからLowへ)、both(両方)、none(なし)という4種類の文字列を書き込んで設定します。
direction 入出力の設定です。GPIOを入力で使うならinを、出力で使うならoutを書き込みます。
value 現在のGPIOの値です。出力モードなら、このvalueに書き込んだ値が出力されます。
したがって、P9コネクタの11番を出力として用いるには、次のようにコマンドを実行すればいいわけです。
# echo "out" >/sys/class/gpio/gpio30/direction Enter ← P9-11を出力に設定# echo 1 > /sys/class/gpio/gpio30/value Enter ← P9-11に1(High)を出力
73ページで取り上げたLEDの点灯回路をP9コネクタの11番に接続し、valueに1や0を書き込んでLEDが点灯、消灯することを確認してください。 GPIOからの入力も簡単です。次のようにコマンドを実行すれば値としてGPIOの状態を取り出せます。
# echo "in" >/sys/class/gpio/gpio30/direction Enter ← P9-11を入力に設定# cat /sys/class/gpio/gpio30/value Enter ← P9-11の値を読み出す
82ページで取り上げたスイッチ回路を、P9コネクタの11番に接続してvalueを読み出してみてください。スイッチの状態に応じて、valueの値が0、1と変わることが確認できるはずです。 GPIOを使用し終わり、特殊ディレクトリとそれ以下のファイルが不要になったら、exportを解除できます。
198
Chapter 5
──BeagleBone Blackの
起動のカスタマイズ
カーネルの再構築が必須のワケ
Chapter1で説明しているように、BeagleBone Blackはオンボードのフラッシュメモリ(2GB)に加えて、MicroSDカードからの起動もサポートしています。ブートローダーも公開されており、Linuxとして利用するのにも便利なボードです。 BaegleBone BlackでLinuxを活用していく上で必要に迫られることがあるのは、カーネルの再構築でしょう。新たなカーネルドライバを必要とするような際に、カーネルの再構築が必要になるからです。 PC上のUbuntuやDebian、Fedoraなどでは、バイナリのカーネルとともに、ドライバモジュールを作成するためのビルドツリー、ヘッダファイルなどがリポジトリ経由で提供されています。しかし、ARM系では、その点があまり整備されていないのが現状です。 というのは、x86プロセッサは90%以上がPCアーキテクチャのプラットフォームで、アーキテクチャにバリエーションがありません。一方、ARM系のCPUコアは数多くのメーカーが独自にSoCを設計、製造している関係でCPUとしての互換性はあっても、プラットフォームとしては千差万別です。そのため、プラットフォーム固有のバイナリをディストリビューションとして提供することが難しい状況にあります。 実際、ARM系固有のカーネルのソースコードは、千差万別のプラットフォームがある関係で膨れ上がっていて、Linuxカーネル開発の指揮を取っているLinus Torvalds氏はその混乱ぶりに苦言を呈したことがあるほどです。 ちなみに、前章で紹介したDevice Treeの仕組みは、現在おもにARMのプラットフォームで利用されており、ハードウェアの情報をLinuxカーネルに通知するために作られた仕組みです。もともとはOpen Firmwareプロジェクトが提案した仕組みですが、Linus氏の苦言を受けて、ARMのプラットフォーム固有部を整理するために、このDevice Treeの取り入みを急いだという背景も(どうやら)あるようです。
5-1カーネルの再構築BaegleBone BlackでLinuxを活用する際、キモになるのがカーネルの再構築です。
199
Chapter 4
Chapter 1
5-1 カーネルの再構築
Chapter 2
Chapter 5
Chapter 3
いずれにしても、あとから必要なドライバをビルドする際には、カーネルのビルドツリーが必要です。そのような環境を構築するために、カーネルの再構築の方法を説明していくことにします。
カーネルの再構築に必要なもの
カーネルの再構築にあたり、まずLinuxが動作しているPCを用意してください。BeagleBone Black上でカーネルの構築は不可能ではないのですが、容量の関係でMicroSDカード上で行わなければならないため、おそらく構築に丸一日はかかってしまうでしょう。PCならば10分か20分程度で終わるので、ずっと楽です。 PC上のLinuxはUbuntu 13.04を前提にしますが、Debian wheezyでもほぼ同じように作業が可能です。Fedoraなど他のディストリビューションをお使いの場合は、自力で必要なツールを手に入れてください。 もうひとつ、動作チェックのためにUSB-シリアル変換ケーブル(25ページ参照)を利用します。これも用意しておいたほうがいいでしょう。
カーネルソースを入手する
BeagleBone Blackのカーネルソースなど一式は、githubで公開されています(https://github.com/beagleboard/kernel)。したがって、入手にはPC上のLinuxでgitを使って手に入れます。以降の作業は、すべてPC上で行うので注意してください。 まず、次のようにgitをインストールします。
$ sudo apt-get update Enter
$ apt-get install -y git-core Enter
gitを利用する前に、ユーザー名とメールアドレスを設定しておきます。これを設定しておかないとBeagleBone Black用のパッチの一部があてられないので注意してください。
$ git config --global user.name "Satoshi Yoneda" Enter
$ git config --global user.email "[email protected]" Enter
200
Chapter 5
──BeagleBone Blackの
起動のカスタマイズ
ホームディレクトリの下にBBBというディレクトリを作り、その下で作業を行うことにします。
$ mkdir ~/BBB Enter
$ cd ~/BBB
カーネルのソースをgithubから手に入れます。
$ git clone https://github.com/beagleboard/kernel.git Enter
リポジトリからダウンロードが行われます。次のようにして、最新のカーネルバージョン3.8に切り替え、patch.shを実行してください。
$ cd kernel Enter
$ git checkout 3.8 Enter
$ ./patch.sh Enter
シェルスクリプトに従って、バニラカーネルのソースのダウンロード、パッチのダウンロード、パッチの実行の順でカーネルソースが作成されます。 パッチの実行が終了したら、その中に含まれていないファームウェアを入手します。ファームウェアは、下記のサイト(arago-project.org)で公開されています。
http://arago-project.org/git/projects/?p=am33x-cm3.git
236
IND
EX
■記号
/etc/default/locale ……………………… 50
/etc/default/ntpdate …………………… 48
/etc/opkg/locales-ja.conf …………… 49
■A
ACアダプタ端子 ……………………………21
ADC ……………………………………… 92
AM3359AZCZ100 ……………………… 20
Angstrom Distribution ………………31,36
Arduino …………………………………… 99
ARM Cortex-A8 ……………………………17
■B
BCD ……………………………………… 111
BeagleBoard-xM …………………………14
BeagleBoard rev.C ………………………14
BeagleBoard ………………………………13
BeagleBoardプロジェクト …………………12
BeagleBone …………………………………14
BONE_D64.exe ………………………… 58
BONE_DRV.exe ………………………… 58
BoneScript …………………………… 18,54
bootmコマンド …………………………… 212
■C
Cape Manager ………………………… 112
catコマンド ……………………………… 66
Cloud9 IDE …………………………… 18,55
Connection Manager ……………… 37,39
connman ………………………………… 39
■D
dateコマンド …………………………………47
Device Tree ……………………………… 144
Device Tree Overlay …………………… 156
dhcpコマンド …………………………… 212
dropbear ………………………………… 44
■E/F/G
eMMC …………………………………… 20
fatloadコマンド …………………………… 226
git ………………………………………… 199
Google Chrome ………………………… 59
索 引
237
IND
EX
GPIO ………………………………… 60,80
GPIOナンバー …………………………… 144
■H/I/J
HDMIトランスミッタ ……………………… 20
ImageMagick …………………………… 194
initデーモン ……………………………… 43
JavaScript ……………………………… 54
■L/M/N
LCDディスプレイ ………………………… 166
MicroSDカードスロット ………………… 22
minicom ………………………………… 205
Node.js ………………………………… 18,54
ntpd ……………………………………… 140
NTPサーバー ……………………………… 38
N型半導体 ………………………………… 68
■O/P
opkg …………………………………… 37,39
P-N接合 …………………………………… 68
PWM ……………………………………… 87
P型半導体 ………………………………… 68
■R/S
rootパスワード …………………………… 38
RTC ……………………………………… 38
saveenvコマンド ………………………… 228
Sazanami Gothic ……………………… 50
Sazanami Mincho ……………………… 50
SoC …………………………………………12
SSHサーバー ……………………………… 43
systemctlコマンド ……………………… 44
systemd ………………………………… 43
■T
TeraTerm Pro …………………………… 208
TFTPD …………………………………… 209
tftpコマンド ……………………………… 214
trigger …………………………………… 66
238
IND
EX
■U
u-boot …………………………………… 211
Ubuntu …………………………………… 199
USB-Netドライバ ………………………… 57
USB2.0ホストポート ………………………21
USBクライアントポート ………………… 22
USER LED ……………………………… 60
■W/X
WebSocket ……………………………… 100
x-loader …………………………………… 218
X Window System ……………………… 36
■あ行
アナログ出力 ……………………………… 93
アナログ入力 ……………………………… 92
アノード …………………………………… 67
うるう秒 …………………………………… 111
オームの法則 …………………………………81
オシロスコープ …………………………… 142
■か行
カーネル …………………………………… 198
カソード …………………………………… 67
キーボード設定 …………………………… 52
強制時刻合わせ …………………………… 140
強制受信 ………………………………… 140
クランプダイオード ……………………… 95
固定IPアドレス ………………………………41
■さ行
システム時計 ……………………………… 38
正孔 ………………………………………… 68
積分回路 …………………………………… 82
センターコレクタ ………………………… 76
測定器 ……………………………………… 142
■た行
タイムコード ……………………………… 109
タイムゾーン …………………………………47
チャタリング …………………………………81
デジタル―アナログ変換 ………………… 88
テスター …………………………………… 142
239
IND
EX
デューティー比 …………………………… 88
電波時計…………………………………… 109
統合開発環境 …………………………… 55
トランジスタ ……………………………… 70
■な行
日本語フォント …………………………… 50
ネームサーバー …………………………… 37
■は行
バイポーラトランジスタ ……………………71
標準周波数局 …………………………… 109
ブートROM ……………………………… 218
ブレッドボード ………………………………74
■ま行
マーカー …………………………………… 111
マイクロHDMI端子 ……………………… 22
■ら行
ローパスフィルタ ………………………… 82
■わ行
割り込みイベント ………………………… 86
BeagleBone Black で遊ぼう!2013年 11月 30日 初版第1刷発行
著 者 米田 聡装 丁 TEAM(矢部竜二)編 集 ゲイザーD T P 株式会社アクティブ発 行 者 黒田庸夫発 行 所 株式会社ラトルズ
〒102-0083 東京都千代田区麹町1-8-14 麹町 YKビル3階TEL 03-3511-2785 FAX 03-3511-2786http://www.rutles.net
印刷・製本 株式会社ルナテック
ISBN978-4-89977-393-1 Copyright © 2013 Satoshi Yoneda
【お断り】◦本書の一部または全部を無断で複写複製することは、法律で認められた場合を除き、著作権の侵害となります。
◦本書に関してご不明な点は、当社Webサイトの「ご質問・ご意見」ページ (http://www.rutles/contact/index.php)をご利用ください。 電話、ファックス、電子メールでのお問い合わせには応じておりません。◦当社への一般的なお問い合わせは、[email protected] または上記の電話、ファックス番号までお願いいたします。
◦本書内容については、間違いがないよう最善の努力を払って検証していますが、著者および発行者は、本書の利用によって生じたいかなる障害に対してもその責を負いませんので、あらかじめご了承ください。
◦乱丁、落丁の本が万一ありましたら、小社営業宛てにお送りください。送料小社負担にてお取り替えします。