Linuxアプリもリアルタイム制御もおまかせ! PocketBeagleの使い方

Beagle Boneというシリーズがあります。

TIのARMマイコンに周辺機能を加えたものを、一つのICの様にパッケージ化した統合型マイコンです。
長年実績を重ねており、新製品を発表し続けています。

プロの現場でも、このシリーズで試作を開始し、最終的に機能の付け外しを経て、
これらのマイコンを搭載した自社製品を作る、という流れが見られます。

そして、少し前に小型版がリリースされました。PocketBeagle(ポケット ビーグル)。

大きさや仕様を見ると、Raspberry PI Zeroに似ています。
パフォーマンスや容量が高かったり、HDMIが無かったり違いはもちろんありますが、一見、実力にそれほど差は見られません。

PocketBeagleの価格は3800円くらいです。

大きな差もなく、価格でも負けるとなれば、話題に上がらないのも納得です。
TIマイコンユーザーとしてはちょっと面白くない、そんな感じで横目で見ていました。

PocketBeagleの隠れた実力

そんなある日。

あるプロジェクトで、容易に高度プログラミングができて、なおかつリアルタイム性を追求できるハードウェアが必要になり、いろいろ探していた中にPcketBeagleもありました。

そして知った、隠れた実力の数々。

まずは、I/Oが多い。実用的なレベルで。
UART ×3、I2C ×2、SPI ×2、PWM ×4、アナログ入力×8、USBホスト×1、USBクライアント×1、GPIO多数。

1つのピンをどんなI/Fに使うか、選択できるようになっているマルチプレクスという機能は、最近は当たり前になりました。
しかし、ありがちなトラブルとして「こっちのI/Fをフルに使おうとすると、あちらのI/Fがほとんど使えなくなる」などの制約に阻まれることもしばしば。
PocketBeagleは1ピン毎に機能を選択できるので、この制約に引っ掛かりにくい。
これは地味にありがたい。

そして、PRU(プログラマブル リアルタイム ユニット)×2の存在。

これは、誤解を恐れず表現するならば、「超高性能なアルディーノを2つ内蔵したラズパイ」。

メインOSとしてLinuxを稼働させて複雑なアプリやGUIを実行。
そして、リアルタイム処理をPRUに任せる、ということが可能なのです。

PRU(200MHz)は、メインCPU(ARM Cortex-A8 1GHz)の陰に隠れる存在ではありません。
メインのCPUやアプリを介さず、直接、ピンの入出力が可能です。

それが、2つも。ちょっと手に余るくらいです。

今回は、これに決まりました。

お前もか!

本当にピンを自由に使えるか、などを試さなければなりません。

秋月マルツDigiKeyAmazonでも通販してますね。大体どこでもある。
(話題に上がってない割には、どこにでもありますね。実は売れてる?)

早速、使ってみましょう。

使い始めて最初に思ったことは

「お前もか」

SDカードにデータを書き込んで、パソコンとUSBで繋ぐだけのお手軽さ。

最近は多いですね、この感じ。

ありがたいことです。

さて、具体的にレポートしてみましょう。

PocketBeagleの始め方

公式サイトのManualを見ながら進めると、以下の様に、全くトラブルなく終わりました。

公式サイトから、SDカードに入れるイメージをダウンロードして、SDカードに書き込む。

最新版imageを見ると、PocketBeagleに対応したIoT向けimgとGUI向けimgがありました。

前者の方が余計なものが入っていないので500MBくらいで済みます。

リモートデスクトップなどを使う場合は後者を使うのでしょうが、今回はまずIoTの方を使います。

GettingStartedにも書かれていますが Etcher(https://etcher.io/)のソフトでSDカードに書き込みができます。

単純にSDカードにimgファイルをコピーするだけではないので、Windowsを使用している場合はこういったソフトを使う必要があります。

imgを書き込んだSDカードは、Windows標準のフォーマットとは異なるので、専用ソフトなどが入っていない限り、Windowsでは読めません。
間違えてWindowsパソコンに入れると、「(読めません)フォーマットしますか?」と聞かれるので、フォーマットせずに、直ぐに取り外しましょう。

ハードウェアの取り外しアイコンをクリックして、SDカードをPCから取り外します。

ボードにSDカードを差し、USBでPC(WindowsでOK)と接続。

SDカードの厚さはモノによってわずかに異なるのですが…今回使用したSDカードは、ボードに差すときに少々きつい感じでした。

入れるときは多少きつくてもカチッと鳴るところまで押し込めれば安心できるのですが、
抜くときは、押して→カチッ→シュッと飛び出…ないんですよねぇ。
ちょっと引っ張って助けてあげる、というイメージ。

まあ、簡単に外れてしまうボードよりは、ずっと良いですが。

USB給電で起動。しばらくすると、PCにシリアルポートとドライブ、LANが認識される。

約1分くらいでボードの起動とポートの接続が完了し、アクセスできる様になります。

このドライブは読み取り専用で、最初に必要な説明が書かれたhtmlファイルやドライバが入っています。
PCがWindowsでCD-ROMの自動起動が有効になっている場合、START.htmが自動的に開きます。
そうでない場合は、自動ではないので START.htm をダブルクリックして開きます。

シリアルはTeraTermなどで、LANはpingコマンドなどで接続されているか確認しましょう。

最新版のPCは概ねドライバが入っているようですが、認識されない場合は README.htm の USB Drivers(CDCドライバ)をインストールしましょう。

LANはPC側が192.168.7.1(3)、192.168.7.2(1対1なので、おそらく毎回同じ)。

USBケーブルの電源が細いと正常起動しないので注意(再起動/再認識を繰り返したりする)。

フルスペックで動かす場合はPCのUSBバスパワーでは厳しいので、ACアダプタ付きUSBハブ(2A以上)を使用すると安心です。

でも最初は外部に何も接続していないので、消費電力が小さいため、PCのUSBコネクタだけでも、大丈夫な様です。

認識されたシリアルポートを開くと…

認識されたシリアルポートを開いて(TeraTerm使用。115200bps)、Enterを押すと
ログインを促すメッセージが。

root(パスワードもroot)でログインできた。

そう。Linuxに。

手軽すぎて戸惑うくらいです。
メーカの皆さんも頑張ってます。

後は自由にLinuxとプログラミングを楽しむだけですが…

いくつか覚えておいた方が良いことがありますので、書いておきましょう。

電源を切る場合は、halt/shutdownコマンドかRESETボタンを長押しします。

長押しは7秒~10秒くらいですね。

halt や shutdownコマンドの場合、シャットダウン処理が実行され、LEDの点滅が止まり、
シャットダウンされますが、電源LEDは消えません。

sudo shutdown -h now
halt

長押しの場合、(おそらくシャットダウン処理をしてから)電源OFFされるようです。

短く押した場合はhalt/shutdownコマンドの時と同じです。

電源OFFした後、もう一度押すと、起動します。

シャットダウンまたは電源OFFされた後は、USBや電源ケーブルを抜いてOKです。

私見ですが、長押しの場合、シャットダウン処理が終わる前に電源が落とされることがあるかもしれません。
私は、可能な限りhaltコマンドを入力してLEDが止まるのを見届けてから、長押しまたはケーブルを抜くようにしています。

再起動させたいときは reboot コマンドを入力します。

尚、一度電源を切ったり、再起動したときは、シリアルなどは全て切れるので、ターミナルソフトなどは一度閉じてから再接続しましょう。

Cloud9

ボードの下記アドレスをブラウザで開くと、ブラウザ上でプログラミングができます。
最近はやりのやつですか。

http://192.168.7.2:3000

ssh

シリアル以外にも、LAN(仮想LAN)で接続できます。
ファイル転送(scp)が使えるので、こちらがお勧めです。

TeraTerなどの接続画面で、192.168.7.2:22 /ssh と入力し、

ユーザ名/パスワード=debian/temppwd で接続/ログインできます。

gcc

gccが入っているので、即、プログラミングできます。

さて、あなたは何を作りますか?

私も今、面白いものを準備中です。お楽しみに。