Raspberry Pi で Hello World (ソフトウェア/ハードウェア) (QR784)

QR784

QR784

4. 開発環境構築

4-1. apt-get の利用

ここからは、開発に必要なパッケージのインストールを行う。
まず好みのエディタをインストールする。

$ sudo apt-get install emacs
$ sudo apt-get install vim

Git と Ruby、Python 関連のパッケージをインストールする。

$ sudo apt-get install git
$ sudo apt-get install ruby
$ sudo apt-get install ruby-dev
$ sudo gem install bundler
$ sudo apt-get install python-dev
$ sudo apt-get install python-rpi.gpio
$ sudo apt-get install python-smbus

I2C 関連のパッケージをインストールする。

$ sudo apt-get install i2c-tools

オーディオ関連のパッケージをインストールする。

$ sudo apt-get install alsa-utils
$ sudo apt-get install mpg321

以上で、今後本連載で取り上げる内容に対応した最低限の環境を構築できた。

その他のおすすめパッケージ

最後の仕上げに Tukubai のインストールする。ここではオープンソース版 Open usp Tukubai をインストールした。

$ wget https://uec.usp-lab. com/TUKUBAI/DOWNLOAD/open-usp-tukubai-20120802.tar. bz2 –no-check-certificate
$ tar jxvf open-usp-tukubai-20120802.tar.bz2
$ cd open-usp-tukubai-20120802
$ sudo make install

join0 コマンドで動作確認をおこなった。

$ join0
Usage : join0 [+ng<fd>] key=<n> <master> <tran> Version : Fri Oct 21 11:26:06 JST 2011
Open usp Tukubai (LINUX+FREEBSD/PYTHON2.4/U
TF-8)

4-2. まずは、Hello, World

4-2-1. ソフトウェア技術者の Hello, World

Debian ベースの Raspbian を OS に使っているのでシェルスクリプトや gcc はもちろん、標準のブラウザ`最初からインストールされている。ここでは、いろいろな言語で Hello World を行う。

ソフトウェア技術者のHello World

ここでのサンプルは GitHub にアップされているので、すぐに試したい人は以下のレポジトリを clone して試してほしい。もちろんこれ以外の Hello World の pull request も受付中 ;-)

https://github.com/e-ark/RPi-HelloWorldSuite

まず最初にシェルスクリプトで Hello World を行う。

$ echo hello, world
hello, world

次に、C で Hello World を行う。まずは以下のような helloworld.c というファイルを作成する。
ファイルができたらコンパイルして実行する。

#include <stdio.h>

int main(void) {
printf(“Hello, World!\n”);

return 0;
}

$ gcc helloworld.c
$ ./a.out
hello, world

さらに HTML で Hello World を行う。まずは以下のような内容の helloworld.html を作成する。作成したファイルを標準のWebブラウザ( Midori )で表示する。

<!DOCTYPE HTML>
<html>
<head>
<title>Hello World!</title>
</head>
<body>
<h1>Hello World!</h1>
</body>
</html>

最後にターミナルで使う Twitter クライアントの tw (http://shokai.github.com/tw/) を使ってRaspberry Pi から Hello, World とツイートする。tw は「橋本商会」さん(http://shokai.org/blog/)が作成したTwitter クライアントでターミナルからのツイート以外にリストを表示したり、タイムラインをStream 出力できるので音声読み上げもできる。

tw は Ruby Gem になっているのでインストールするには次のコマンドでインストールできる。
インストールができたらアカウントの設定を行う。
設定が終わったら以下のコマンドで Hello World とツイートする。

$ sudo gem install tw
$ tw
$ tw hellow, world

Raspberry Pi の CUI から tw でツイートする

4-2-2. ハードウェア技術者のHello, World

Raspberry Pi の部品面にある P1 ピンヘッダは、電源線(+3.3V、+5V、0V=GND)と信号線から構成されていて、I2C や SPI、UART といったシリアル通信や汎用入出力(GPIO)機能が割り当てられている。GPIO を使えば「Lチカ」(LED の点滅)が行え、UART ピンにロジックレベル変換回路を接続すれば RS-232C 準拠の機器にも接続できる。

Raspberry Pi では、シェルスクリプト、C、Ruby、Python といった使い慣れた言語でこれらの機能を活用できる。そこで、Raspberry Pi で Lチカを行う。

Lチカを行う場合、ブレッドボードに部品を取り付けるのが一般的だが、今回は SEEED STUDIO 社の GROVE 用機能モジュールを用いる。GROVE は、はんだ付けせずにセンサやスイッチをつないでプロトタイプを作成できる SEEED STUDIO 社の機能モジュール群である。本来は GROVE ベースシールドと「GROVE 4 ピンケーブル アルドゥイーノ
20cm(5 本セット )」を使って Arduino などに接続して使うが、今回はやや強引に Raspberry Pi で利用する。

重要な注意
GROVE は、電源電圧が 5V であることを前提として設計されているため、電源電圧が 3.3V の Raspberry Pi での利用は本来は不適切であるが作りやすさを優先して採用した。実際、電源電圧 3.3V では正しく動作しない機能モジュールもあるが、本稿で取り上げた機能モジュールについては動作する。電源電圧 3.3V の CPU ボードは Arduino などにも見られるので、3.3V 対応の GROVE の登場が待たれる。。

必要な部品

必要な部品が準備できたら、以下の写真を参考に Raspbery Pi とLED機能モジュールを接続する。

Lチカ

今回は GPIO を “H” にすると LED が光る回路なので、次のコマンドを実行するとLチカできる。

$ sudo su
# echo “4” > /sys/class/gpio/export
# echo “out” > /sys/class/gpio/gpio4/direction
# echo 1 > /sys/class/gpio/gpio4/value
# echo 0 > /sys/class/gpio/gpio4/value

GPIOをシェルスクリプトで制御する

 

Lチカができたら、この回路にボタンを追加してボタンを押したときだけ LED が光るようにする。ボタンには「GROVE-ボタン」を利用する。

GROVE – ボタン

ここでは、再び図2と写真を参考に GPIO17 にボタンを接続し、GPIO17 の値に応じて LED が光るようにシェルスクリプトを作成した。

図2.GROVE-LED と GROVE- ボタン を用いた実験回路

図2.GROVE-LED と GROVE- ボタン を用いた実験回路

LED + ボタン

GROVE-LED と GROVE- ボタン を用いた実験の様子

#!/bin/sh
# for LED
echo “4” > /sys/class/gpio/export
echo “out” > /sys/class/gpio/gpio4/direction

# for Button
echo “17” > /sys/class/gpio/export
echo “in” > /sys/class/gpio/gpio17/direction

while true; do
if [ `cat /sys/class/gpio/gpio17/value` -eq 1 ]; then
echo DEBGU: LED ON
echo 1 > /sys/class/gpio/gpio4/value
sleep 0.1
else
echo DEBGU: LED OFF
echo 0 > /sys/class/gpio/gpio4/value
sleep 0.1
fi done

最後に、Lチカの点滅でモールス信号のHello Worldを表現する。
モールス信号はツー、トントン…のように「トン」(短点)と「ツー」(長点)の組み合わせだけで構成されている。Hello World をモールス信号を表現するには以下のような組み合わせになる。「・」は短点を、「-」は長点を表している。たとえば、HELLO, WORLD のモールス符号による表現は以下のようになる。

・・・・(H) ・(E) ・-・・(L) ・-・・(L) ---(O) --・・--(,)
・--(W) ---(O) ・-・(R) ・-・・(L) -・・(D)

モールス符号は、長点の長さは短点3個分の長さ、各点の間は短点1個分の長さ、文字と文字の間は短点3個分の長さ、単語と単語の間は短点7個分の長さと決められている。

この決まりにしたがって LED の点滅を制御するとリスト4のようなシェルスクリプトになる。なお、使用する GPIO ポートは、最初の Lチカと同じく GPIO4 であるものとした。したがって、このシェルスクリプトを動かす前に、同じく LED を GPIO4 に接続した回路を予め準備しておく。

#!/bin/sh
# ‘.'(dit) / ‘-‘(dah)
# ‘ ‘(between letters) / ‘_'(between words)

# HELLO,WORLD
str_m=’…. . .-.. .-.. — –..–_.– — .-. .-. . -..’

# for LED
echo “4” > /sys/class/gpio/export
echo “out” > /sys/class/gpio/gpio4/direction

echo -n “$str_m” | sed ‘s/\./=./g’ |
sed ‘s/-/===./g’ | sed ‘s/\. / /g’ |
sed ‘s/ /…/g’ | sed ‘s/\._/_/g’ |
sed ‘s/_/……./g’| sed ‘s/./&\n/g’ |
while read state; do
if [ “$state” = ‘=’ ]; then
echo -n =
echo 1 > /sys/class/gpio/gpio4/value; sleep 0.05
else
echo -n .
echo 0 > /sys/class/gpio/gpio4/value; sleep 0.05
fi
done

Lチカとモールス信号通信

以上で、Lチカの点滅でモールス信号の HELLO, WORLD を表現できた。
さらに、「GROVE LED」を「GROVE ブザー」に変更すると実際に音が鳴らすこともできる。GROVE は各機能モジュール(SEEED 社はエレメントと呼んでいる)の設計方針が明確なので、接続する機能モジュール部品を変えるだけで出力を LED からブザーに変更できる。

GROVE-ブザー

次に、電球で Lチカを行う。一般家庭でも使われている電球を点滅させるには商用電源(交流 100V)を扱うことになる。そこでソリッドステート・リレー(SSR)を使って電気的絶縁を確保した上で Raspberry Pi 側から制御する。電子工作に不慣れだと難しそうに感じるかもしれないが、SSR の一次側は電気的にはただの LED である。よってオリジナルの Lチカと同じ回路構成とソフトウェアで電球の点滅ができる。SSR の扱いは次の機会に詳しく取り上げる。

電球Lチカ

 

5. ネットワーク環境の活用

Raspberry Pi の所有者が、SSH アクセス可能なサーバを持っている場合、あらかじめ SSH の公開鍵設定を Raspberry Pi 上で実行しておけば、以下のようなコマンドを Raspberry Pi で実行するだけで、Raspberry Pi はイ ンターネット上のサーバと連携できる。

$ ./my_command | ssh his_server.e-ark.jp | head -10 > /tmp/output.dat

さらに、Raspberry Pi 用の Dropbox バイナリが公開されていない現状でも、SSH アクセス可能なサーバで Dropbox が利用できれば、sshfs というツールでサーバ上の Dropbox フォルダを Raspberry Pi がリモートマウントし、上記の1行スクリプトの結果を /tmp ではなく Drobox に書き出すこともできる。このようにインターネットと自由自在に連携できるのも Raspberry Pi の魅力である。

ネットワーク環境の改善

その他

おすすめ参考書籍