Raspberry Pi」カテゴリーアーカイブ

Raspberry Pi (RPi) に関連することをブログ形式で書き連ねようと思います。

Raspberry Pi 対応のディストリビューションたち (QR586)

QR586

QR586

いろいろな OS があるが以下のページに Raspberry Pi 用のディストリビューションがまとまっている。
「Raspbian “wheezy”」、「FreeBSD」、「NetBSD」、「Gentoo Linux」など。

 

 

Raspberry Pi 対応のLinux ディストリビューション一覧
RPi Distributions – eLinux.org

 

Linuxディストリビューション他に Raspberry Pi に「Firefox OS」をインストールすることもできる。
インストール方法は以下のURLが参考になる。

https://github.com/dynamis/firefoxos/wiki/raspberrypi

 

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 の魅力である。

ネットワーク環境の改善

その他

おすすめ参考書籍

 

Raspberry Pi のインストール〜各種ログインまで (QR780)

QR780

QR780

 

1. Raspberry Pi とは

1-1. Raspberry Pi の概要

Raspberry Pi は、英国のラズベリー・パイ財団(Raspberry Pi Foundation)が教育用に開発した 32bit ARM プロセッサを用いたクレジットカードサイズ のシングルボードコンピュータで、2006 年頃からプロ トタイプの開発が始まり、2012年2月に市販が始まっ た。2013年3月現在、オンラインショップでは Model A が 25 ドル相当で、Model B が 35 ドル相当で購入でき る。

1-2. Raspberry Pi の仕様

Raspberry Pi には、標準構成の Model B とそこからいくつかのインタフェースを削った Model A がある。
Model B の主な特徴は以下のとおり。

システムチップ: Broadcom BCM2835 Embedded Multimedia Applications Processor
CPU: 700 MHz ARM1176JZF-S
GPU: Broadcom VideoCore IV
メモリ: 512MB SDRAM(初期型は256MB)
Ethernet: 10/100BASE-T Ethernet
USB: USB 2.0 (2ポート)
ビデオ: コンポジットビデオ出力(RCAピンジャック), HDMI出力
オーディオ: ステレオライン出力(3.5mmφ), HDMI出力
ストレージ: SD/MMC/SDIOカードスロット
低レベル周辺機器: GPIO, SPI, I2C, UART
定格電源: 700mA
電源電圧: 5V (マイクロUSBポートから給電。ただし内部では 3.3Vで動作)
サイズ: 8.6cm x 5.4cm x 1.7cm

Raspberry Pi の詳細仕様(QR478)

1-3. Raspberry Pi でできることできないこと

できること:

  • Debian Linux をもとにした Raspbian をインストールした場合、Debian Linux が実行できることの多くをそのまま実行できる。
  • GPIOポートを利用すれば、ユーザが製作した電子回路との連携が容易。
  • HDMI接続によって、地上デジタル放送対応テレビをビデオサーバにできる。

できないこと:

  • ADC(A/Dコンバータ)を搭載していないので、単体ではアナログ値の計測ができない。
  • リアルタイムクロックを搭載していないので、NTPサーバ等を利用しなければ正確な時刻を保持できない。
  • 単体では音声入力ができない。

注意すべき点:

  • 二次記憶装置がSDメモリカードなので、同じ領域に頻繁に読み書きを繰り返すとSDメモリカードの障害を早期に誘発する可能性がある。
    コラム:Raspberry Jam Session #2 お手軽シャットダウンフリー化
  • ケースに入れなくても稼働できるが、本体表面の電子部品やコネクタ類に手を直接触れると、システムが停止したり再起動する可能性が高い。
  • メインメモリが 512MB しかなく、拡張できない。

 

2. 購入から初ログインまで

2-1. 購入方法

2013年2月現在、Raspberry Pi は以下のサイトから購入できる。

Raspberry Pi は世界中で人気が沸騰しており、一時は入手に半年以上かかった。今は改善してはいるが、それでも注文した翌日に配送というわけにはゆかない。ネットでこまめに検索するなどして、すばやく入手する方法を検討してほしい。

2-2. Raspberry Pi 以外に必要なもの

Raspberry Pi を動かす前に Raspberry Pi Model B 本体以外に必要な機材を準備する。
Raspberry Pi 以外に必要なもののより詳しい説明

SDカード(8GB程度)
4GB でも 16GB でも問題はないが本稿では 8GB を想定している。
書き込み速度は速いにこしたことはない。
デジカメ等に比べると読み書きの回数が圧倒的に多いので、実績のある製品を選ぶのがよい。

電源アダプタ
Raspberry Pi は少なくとも単体で 5V 400mA 程度は消費し、公式には 700mA 消費するとしているので、余裕をもって 5V 1A 程度の電源アダプタを用意すること。コネクタ形状はマイクロUSB。
電源、ケーブル、ケースなどについて

HDMIディスプレイ
Raspberry Pi のビデオインタフェースはコンポジットビデオと HDMI のみであり、VGA はサポートしていない。地上デジタル放送対応テレビならば、HDMI イ ンタフェースを持っているので問題なく利用できる。
パソコン用液晶モニタが、VGA だけでなく DVI 入力に対応しているなら、HDMI/DVI 変換ケーブル(1000 円前後から購入可能)を介して接続できる。
Raspberry Pi の HDMI 出力を VGA モニタで 表示するためのコンバータも販売されている。
Raspberry Pi と HDMI について

HDMIケーブル
特に指定はないが、Raspberry Pi が小さいので細いケーブルの方が取り回しはしやすい。

USBマウス/キーボード
特に指定はないが Raspberry Pi が小さいのでケーブルの細い小型のものが使いやすい。
また、消費電力が大きいものだと動作が不安定になる。その場合は、セルフパワーのUSBハブが必要になる。
Bluetoothドングルを用意して設定すれば、Bluetoothマウス/キーボードも利用できる。キーボードは英語配列/日本語配列どちらも利用できる。
キーボードとマウスの詳細

DHCPでアドレスが取得できるネットワーク
Raspberry Pi は固定IPアドレスを設定することもできるが、今回は DHCP でIPアドレスと DNS の設定をしている。

2-3. 初起動前の下準備

今回は、Debian Linux をもとに、Raspberry Pi のために新たに作られた Raspbian wheezy(以下、Raspbian)をとりあげる。
Raspbian 以外にも、FreeBSD, NetBSD といった BSD 系 UNIX でも稼働実績がある。
コラム “Raspberry Jam Session” #1″

Raspberry Pi で Raspbian を使えるようにする作業は、2GB SDメモリカード用のイメージファイルをイ ンターネットからダウンロードするところから始まる。 今 回は、http://www.raspberrypi.org/downloads から 2012-12-16-wheezy-raspbian (執筆当時の最新版)をダウンロードした。

Rasbian の最新バージョンについて

次に、ダウンロードした OSイメージを SDカードに書き込む。この作業は使用する OS によって対応が異 なるので、以下では Mac OS X の場合の例を示す。この作業は、RPi Easy SD Card Setup (http://elinux.org/RPi_ Easy_SD_Card_Setup) を参考にした。

$ cd ~/Download
$ shasum 2012-12-16-wheezy-raspbian.zip
$ unzip 2012-12-16-wheezy-raspbian.zip
$ sudo diskutil unmount /dev/ディスク名
$ sudo dd bs=1m if=2012-12-16-wheezy-raspbian.img of=/dev/ RAWデバイス名
$ sudo diskutil eject /dev/ディスク名

上記作業では、まずダウンロードしたファイルのハッシュ値を確認してからファイルを展開し、次に SD カードに上書きをするために、いったん SD カードのパーティションをアンマウントし、その後、展開した OS のイメージを SD カードの RAW デバイスに書き込んでいる。書き込みが完了したら SD カードを取り出す。Mac 以外のパソコン(Linux, Windows)からの SD カードに書き込む方法は、以下を参照のこと。

SD カードに書き込む方法

2-4. Raspbian をインストールしてみよう!

SD カードの準備ができたらいよいよ Raspberry Pi を開封する。まず本体に SD カードを挿し、LAN ケーブル、HDMI ケーブルとディスプレイを接続する。次に、USB キーボード、マウスを接続する。このとき、USB の電源供給が不足ぎみになり動作が不安定になることがあるのでバスパワーでの実績がない限り、セルフパワーの USB ハブを用意することをお勧めする。最後に、電源ケーブルを接続すると Raspberry Pi がたくさんのメッセージを表示しながら起動する。

初回起動時には設定画面が表示される。ここで各種設定を行う。この設定画面の実体は /usr/bin/raspi-config であり、初回起動時以外でも sudo raspi-config で随時起動できる。以下では、raspi-config のメインメニューでメニュー項目を選択し、必要な操作を実施した後にメインメニューに戻ることを繰り返している。

(1)メニュー項目 “expand_rootfs” で、ファイルシステムを拡張する。
初期状態だと 2GB 以上の容量の SD カードを利用していても、2GB のパーティションしか生成されない。この項目を選択すれば、それだけで SD カードの最大容量までパーティションが拡張される。この設定は再起動後に反映される。

(2)メニュー項目 “configure_keyboard” で現在利用しているキーボードに合致した設定に変更する。
国と言語によって微妙に配列が異なるキーボードが多数存在する。USB キーボードには、自分がどのような配列なのかをコンピュータ側に通知する機能がないので、利用者自身が現在利用しているキーボードの配列をコンピュータに伝えなければならない。本メニュー項目ではそのための設定を行う。ここでは、代表的な配列として米国式の英語配列キーボードと、日本語配列キーボードの設定を取り上げる。

  • 英語配列(米国配列)の場合
    この項目を選択後、以下のようにたどる。
    [Generic 101-key PC] → [English(US)] → [The default for the keyboard layout] → [No compose key]
    Raspberry Pi は英国製であるため、英語配列のキーボードを使おうとして Generic 101-key PC を選んだだけでは、米国配列ではなく英国配列となってしまう。英国配列は米国配列と異なるので、米国配列にしたい場合には、English(UK) ではなく English(US) を選択しなければならない。
  • 日本語キーボードの場合
    この項目を選択後、以下のようにたどる。
    [Generic 105-key (Intel) PC] → [Other] → [Japanese] → [Japanese – Japanese (OADG 109A)] → [The default for the keyboard layout] → [No compose key]

(3)メニュー項目 “change_timezone” でタイムゾーンを変更する。
この項目を選択後、[Asia] → [Tokyo] と設定を行う。

(4)メニュー項目 “ssh” で起動時にSSHサービスが立ち上がる設定にする。
Linux、Mac OS X、Windows が稼働するパソコン、Android タブレット、iOS デバイスなどから Raspberry Pi にリモートログインする際に SSH サービスは必須なので、[Enable] に設定したままにしておく。

(5)メニュー項目 “boot_behaviour” で起動時に X window system を立ち上げる設定にする。
ここでは [Yes] を選択して次回起動時からは X window system が立ち上がるように設定する。なお、これだけだと起動時にパスワードなしでデスクトップが開いてしまうので注意が必要であるが、本稿では当面この設定を前提とする。

ログイン時のセキュリティについて

以上の設定が終わったら、最後に [Finish] を選択し、再起動を行う。再起動すると X window system が起動して Raspberry Pi のロゴのデスクトップが表示される。

これ以外にも、メニュー項目 “change_locale” で locale の変更が可能だが、この時点では日本語フォントの準備ができていないので、実行しない。

ここまでで初期設定は完了したので、次は起動と終了の操作方法を確認する。まずは “LXTerminal” を起動して shutdown コマンドを実行し終了する。

$ sudo shutdown -h now

shutdown が完了したかどうかは、Raspberry Pi 表面の LED の点滅状況を見ていれば把握できる。shutdown 完了後は電源ケーブルを抜いてよい。ふたたび Raspbrry Pi を起動するには電源ケーブルを micro USB ポートに挿すことで起動できる。

起動 と shutdown の詳細について

2-5. ネットワークと日本語環境の設定

起動と終了の方法が確認できたので、次はネットワークの動作確認を行う。

2-5-1. ネットワークの設定

Raspbian は、起動時に DHCP でIPアドレスと DNS の設定をしている。そのため、標準のWebブラウザ(Midori)を起動し、http://e-ark.jp/ のホームページが表示できれば問題ない。表示されない場合は、LANケーブルの接続、Raspberry Pi を接続したネットワークの DHCP 稼働状況などを確認する必要がある。
ネットワークの設定とトラブルシューティング

ネットワークの接続確認ができたら、ソフトウェアパッケージ管理コマンド “apt-get” を用いてパッケージのアップデートを行う。今後、apt-get コマンドの利用に際しては、必ず sudo することにする。

$ sudo apt-get update
$ sudo apt-get upgrade

Raspberry Pi を接続したネットワークの状況によっては、上記のコマンド実行にはそれぞれ数分から数10分を要する場合がある。

apt-get とソフトウエアパッケージ管理

2-5-2. 日本語環境の設定

まず日本語を表示するために、フリーの日本語 TrueType フォントである takao をインストールする。

$ sudo apt-get install ttf-takao-mincho ttf-takao

フォントがインストールできたら、raspi-config コマンドを起動し、前節では実施しなかった locale の変更を行う。

$ sudo raspi-config

メニュー項目 “change_locale” を選択して、locale 一覧からを ja_JP.UTF-8 UTF-8 を追加し、en_GB.UTF-8 UTF-8 を除外する。locale の設定画面で ja_JP.UTF-8 を選択する。

次にibus-anthyをインストールし、その後、日本語入力の設定を行う。

$ sudo apt-get install ibus-anthy

再起動後に、日本語入力の設定はデスクトップの左下のスタートアイコンを押して、以下のようにたどる。
スタートアイコン→[メニュー]→ [Preferences] → [IBusPreferences] → [Input Method] → [Select an input method]→[Japanese>Anthy]
再起動すれば [Ctl] + [Space] で日本語入力ができるようになる。

日本語環境の設定(補足)

 

3. さまざまなログイン形態

ここまでは、Raspberry Pi のUSBポートにUSBキーボードとUSBマウスを接続して Raspberry Pi にログインし、さまざまな操作を行ってきたが、Raspberry Pi にログインする方法はこれだけではない。ここでは、別マシンから Raspberry Pi に接続する3つの方法を紹介する。

3-1. SSH

標準設定では、SSHサービスは最初から起動しているので、Raspberry Pi のIPアドレスがわかればMac の場合、ターミナルからは以下のコマンドで接続できる。

$ ssh -v pi@IP アドレス

Mac だけでなく、Linux機やWindows機からのアクセスについても以下を参照のこと。

SSHアクセスの詳細

3-2. VNC

VNC はコンピュータを遠隔操作するためのフリーソフトウェアである。Raspberry Pi を VNC で遠隔操作接続するには、まず Raspberry Pi 上でVNCサーバを立ち上げる必要がある。
そこで、以下のコマンドで、VNCサーバをインストールし、起動する。

$ sudo apt-get install tightvncserver
$ vncserver :1 -geometry 1280×800 -depth 24

この状態になれば、Mac や Linux 機上の VNC クライアントから以下の URL にアクセスすると Raspberry Pi に接続でき Raspberry Pi のデスクトップをみながらマウスやキーボードを操作できる。クライアントが Mac OS X 10.5(Leopard) 以降の場合は「画面共有」(Finder で command+K)で以下の URL に接続するとよい。

vnc://pi@IPアドレス:5901

Raspberry Pi 側のVNCサーバは以下のコマンドで終了できる。

$ vncserver -kill :1

Mac だけでなく、Linux 機や Windows 機、Android タブレット、iOS デバイス(iPhone や iPad)からのアクセスは、以下を参照のこと。

VNCアクセスの詳細

3-3. シリアルコンソール

Raspberry Pi の部品面にある P1 ピンヘッダには UART 機能を持つピンがあるので、「FT232RL 搭載小型 USB-シリアルアダプタ 3.3V」(後述)のようなシリアル USB 変換アダプタを接続すれば Raspberry Pi のシリアルコンソールに PC や Mac などからログインできる。
具体的には、まず以下の必要な部品を準備して、図1 のように Raspberry Pi と USB-シリアルアダプタをジャンパワイヤで接続する。USB-シリアルアダプタと PC を USB で接続する。

必要な部品

次に、以下のページから FTDI のドライバをダウンロードして PC や Mac にインストールしておく。
http://www.ftdichip.com/FTDrivers.htm

FTDI 接続図

ドライバがインストールされていれば USB シリアルアダプタを接続した時点で /dev/ 以下に新しい TTY デバイスが見えるので、クライアントが Mac の場合はターミナルエミュレータソフトウエアを使ってシリアルコンソールにアクセスできる。たとえば screen コマンドがインストールされているなら、以下のコマンドを実行すればよい。

$ screen /dev/tty.usbXXXXXX 115200

Raspberry Pi に接続できると以下のように表示されるのでログイン名とパスワードを入力してログインする。ログインに成功すれば PC から Raspberry Pi を操作できる。

raspberrypi login:
Password:

Mac だけでなく、Linux 機や Windows 機からアクセスする場合は、以下を参照のこと。

シリアルコンソールアクセスの詳細

Raspberry Pi Hello World に続く

Rails on Raspberry Pi

QR320

QR320

Raspberry Pi で Ruby on Rails を動かしてみた。

今回は DB に sqlite を利用したが、もちろん Raspberry Pi 上で MySQL や PostgreSQL も動作する。また、RVM も利用することができる。

インストール

Ruby のインストール

ついでに bundler もインストールしておく。

$ sudo apt-get install ruby
$ sudo gem install bundler

バージョンの確認

$ ruby -v
ruby 1.9.3p194
$ gem -v
1.8.23

続きを読む

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

QR302

QR302

Ruby で書かれた CUI Twitter クライアントの tw を使って Raspberry Pi の CUI から tweet してみた。

Tw: Twitter client on Ruby.(http://shokai.github.com/tw/)

Tweet はもちろん。自分のTLの表示やリストの表示、DMの送信、複数アカウントも対応している。

インストール

  • tw のインストール

$ sudo gem install tw

  • 認証の設定(PIN番号認証)
    tw コマンドを実行するとtwitterの認証画面に移動する。
    表示されたPINをターミナルに入力する。

$ tw

PINが表示される

PINが表示される

ターミナルでPINを入力する

ターミナルでPINを入力する

 

  • Tweet する

$ tw hello world by tw on Raspberry Pi

  • 自分の Tweet を確認する

$ tw @taketo1113

tw-user

以下のようにパイプで tweet できるので RPi の GPIO からセンサーの値を読み出して自動でツイートするとかも簡単に実装できそう。

$ echo Hello World > tw –pipe

おまけ

Raspberry Pi から Crowy を使ってツイート

Crowy on Raspberry Pi

Crowy on Raspberry Pi

Raspberry Pi と Arduino をシリアル通信でつなぐ (のつづき)

QR234

QR234

Raspberry Pi は 3.3V 駆動。多くの Arduino は 5V駆動。

おまけに Raspberry Pi は過電圧耐性がありません。なので、入出力ピンに 3.3V以上の電圧をかけると壊れてしまうと考えることになります。正確に何点何ボルトまでが限界なのかは、データシートを読まないといけない(すいません、読んでないです)のですが、とにかく5.0Vに耐えられないのは確かです。

なお、こういう文脈で「耐えられない」といったことをやってしまっても、実際には動いてしまうことがありますが、こういう文脈での「耐えられない」とは、「何が起きてもあなたのせいよ」という意味です。ただちに火を噴くかもしないし、うんともすんとも言わなくなるだけかもしれないし、全然予期しない動作をするかもしれないし、一時的にせよ正常に動いちゃうかもしれない、ってことです。とにかく、定格を越えたことはやってはいけないのです。

というわけで、両者をつなぐには電圧を変換するコンバータが必要で、そうしない限り(すなわち直結は)ダメだよ、というのが、オリジナルの投稿でのやりとりでした。

なので、電圧を変換すればよいのですが、業務用機器(究極的には軍用機器)を作るのか、アマチュアのお楽しみでよいのかで、対応がまるで違ってきます。

ここでは、アマチュアのお楽しみで良い場合の対応を書きます。

今回の場合は、両者をつなぐ線は、GND線以外は、TxD と RxD しかなく、それぞれに流れる信号は単方向です。なので対応は実は意外に簡単です。

まず 3.3V系(RPi)から 5V系(Arduino)に向かう線は、多分何もしなくても大丈夫です。3.3V系の H レベルはほぼ 3.3V 出ると予想されます。これだけの電圧があれば、5V系でも H と認識されます。

逆方向の 5V系から 3.3V系に向かう線には一工夫必要です。速度がそれほど問題にならないので、抵抗2本で分圧してしまうのが簡単そうです。

というわけで、T君には、抵抗2本使って試してもらって、その結果を報告してもらいたいと思います。

抵抗2本?どうつなぐの?何Ω、なんて言ってるようじゃいけません。SparkFun のサイトにゆけばたくさんの回路図がロハで手に入ります。毎日少しずつでもこれらの回路図を読むととても勉強になりますよ。>> T君

 

Raspberry Pi と Arduino をシリアル通信でつなぐ

QR204

QR204

「Raspberry Pi と Arduino をシリアル通信でつなぐ」という記事を見つけた。
以下で紹介する Tweet のように、記事のタイトルどおり Raspberry Pi に純正の Arduino をつなげると Raspberry Pi が壊れてしまうので注意が必要だ。


続きを読む

さらに Raspberry Pi

QR51

QR51

昨日は、なぜ、いま、Raspberry Pi なのかについて、3つの視点から書きました。

が、まぁ、本音を言えば、ピンと来た、あるいは、一目惚れということになるかと。

 

昨日の投稿の「タイミング」にも書きましたが、

  • Arduino の 32bit 化がなかなか始まらなかった。
  • mbed は完全なオープンじゃなかった(その後、変化があった)
  • GR-SAKURA に大いに期待したし、実際、GR-SAKURA には魅力があるけれど、やっぱり 8bit 時代のライブラリがそのまま使えるだけじゃ限界があると感じていた。
  • やはり、OS用意しないとなぁと思っていた。ネットにつなぐのならセキュリティに対する配慮も必要で、どうしようか悩んでいた。

というタイミングでの RPi 登場だったのです。おまけにとても安かったし。

というわけで、出会うタイミングがすごくよかったと思います。

(3/23/2013 改定)

 

なぜ Raspberry Pi?

QR22

QR22

なぜ、今 Raspberry Pi なのか、という質問をいろいろな方から受けますので、明日の木いちごの会を前に、ツイートしてみたいと思います。

自分的には、現時点では以下の3つの視点から「今が旬なのだ」と言えると思っています。

視点1:価格、視点2:タイミング(時期)、視点3:新しいパラダイム

視点1:価格

CPUに加え、USB, 有線LAN, HDMI, GPIO などのI/Oを搭載して35ドルという価格は圧倒的。arduino, mbed, GR-SAKURA などでこの構成を組んだら35ドルには収まりません。

この価格なら、気軽に買えます。知人や学生さんにも気軽に勧められます。安いだけでなく、ものすごくお買い得感があり、それがこれをどんなふうに料理しようという創作意欲を刺激します。

もちろん、本体以外に、最低でもLANケーブルと電源アダプタが必要ですが、LANケーブルは持っている人が多いでしょうし、電源アダプタは携帯電話用のものとかを流用できるでしょう。

視点2:タイミング

RPi の積極的導入に対し、2つの真逆の見解があるようです。1つは、なぜLinuxにする必要があるのか今まのCPUで十分ではないのかといういわば「時期尚早」派。もう1つは、ずっと前からこんなことできるじゃんという「気づくの遅すぎ」派。

自分はどちらかといえば「気づくの遅すぎ」派に同意します。自分(たちのグループが)小型の組み込み用機材にUNIX系を入れてI/Oを最初に操作したのは、今から23年前の1991年のことです。

1991年7月の 第17回JUS(日本UNIXユーザ会) UNIXシンポジウムにて、Everything can be IP-reachable という論文を発表しています。

論文 Everything can be IP-reachable はここからたどれます。bit.ly/VuNJEt ただし、tiff 形式だったりするので、ビューアを選ばないと開けなかったり2ページ目以降が開けないかも。

組込機にUNIXを載せてI/Oを弄る試みは新しくはありません。自分も OpenBlocks, armadillo, chumby などを使ってきました。騒ぐんだったら、BeableBoard が出たタイミングだったのではといわれそう。

自分的には arduino 文化の成熟が大きく関わっています。arduino とそのシールド群が展開したフィジカルコンピューティングのインパクトは強烈でした。本来ハードウェア屋でない自分の電子工作スイッチが久しぶりにオンになりました。

そして、arduinoを使い込むにつれ、8bit CPUゆえの苦しさ、OSがないことの不便さを感じるようにも。特にネットワークまわりは大変で、IPv6 をしゃべる arduino を用た機材は、世界的に見ても未だにごく少数です。

電子工作が一過性ではないブームになり、ネットワーク業界では IoT (Internet of Things) が注目され、IPv6 の展開が引き続き行われているというのに、ここで電子工作人(びと)が IPv6 に進出しないのは悲しい。

arduino の限界を見極め、本家も32bit版を出し、国内でも GR-SAKURA が開発されましたが、これって、大昔に初代の PC-9801が出た直後と似ています。初代のPC-9801は、ROM BASICを使う設定でした。

当時の 8bit CPU とその周辺環境からするとOSの搭載は難しくCP/Mがありましたが、ROM BASICが全盛でした。16bitパソコンにもBASICを乗せ互換性を保つのは重要ですが、16bitパソコンには新OSが必要でした。

16bitパソコンがBASICやCP/M86でなく、MS-DOS を受け入れ発展したように、32bitの小型CPUボードも、従来のライブラリの互換品を延長するのではなく、新しい何かを受け入れるのだと思っています。

視点3:パラダイムシフト

UNIX系OSを搭載できる RPi の登場はまさにそうなるべきタイミングでそうなったように思います。32bitCPUボードはOSを必要としていました。UNIX系OSは実時間性が不安かもですが、最善の選択肢のひとつです。

マルチタスクであるUNIXでは、プロセス間通信を普通に考えますから、プログラムの作り方が従来とは変わります。LEDを動的駆動する場合、従来はタイマ割り込みで桁駆動しましたが、UNIXでなら違うスタイルが可能です。

LEDを動的駆動する単機能の daemon を用意し、LEDにデータを表示したいプロセスはこの daemon とプロセス間通信してデータ表示を依頼します。デバイスの駆動と情報の生成をプロセスレベルで分離できます。

時刻に応じて機能を変化させるといったことも UNIXであれば cron を使って無問題でできますが、こういうことは8bit組込ボードではそもそも不要か無意味でした。これからは盛んになるでしょう。

そもそも、これまではプログラムをクロス開発し、ターゲットに書き込むというのが当たり前でした。RPi では、自分自身で自分自身の開発ができます。定期的にレポジトリからソースをとってきて自動的に新しい環境を再構築するなんてワクワクです。

ある目的のためのソフトウェアをさまざまな方法で開発できる多様性も大きな変化。shell script, perl, ruby, pythonなどのスクリプト系、各種コンパイラ、開発言語も多様なら編集もデバッグも多様。多様性は重要!

ここから先は、単一のプログラム vs マルチタスクOS の比較論になっちゃうので、そろそろやめますが、UNIX系OSが動くCPUボードがとても安価に使えるようになったので、新しい発想で開発ができます〜と言いたかったわけです。

多様な考え方の存在は何より大切ですから、明日の木いちごの会で、みなさんの意見を聞かせてくださいね。