はじめてのraspberry pi ハンズオン@東北it物産展2015 in 青森
TRANSCRIPT
初めての
Raspberry Pi
ハンズオントライポッドワークス 阿部直樹 菊池崇仁
サーバーワークス 赤塚誠二
東北IT物産展2015青森
本日の内容 Raspberry Piの紹介
Raspberry Piを使うまで
Raspberry PiでLチカ
シェルスクリプトでLチカ
PythonでLチカ
Raspberry PiにUSBカメラを使う
USBカメラから画像を撮影する
USBカメラを使ってストリーミングサーバを作る
2015/08/29 東北IT物産展2015青森 2
諸注意 本ハンズオン内容は最新版のRaspbian(2015-05-05-raspbian-
wheezy)に合わせて作成しております
これより古いバージョンのRaspbianをお使いの方は異なる部分が
あるかもしれないので、その場合はスタッフにお申し付けください
数量に限りがありますが、貸し出し用Raspberry Piを用意して
います
申込時に「貸し出し希望」と書いた方に優先してお貸し出しします
相当数足りなくなった場合は参加者同士で共有する形式に変更する
ので、ご了承ください
2015/08/29 東北IT物産展2015青森 3
2015/08/29 東北IT物産展2015青森 4
Raspberry Piの紹介
Raspberry Pi ってなに? 英国ラズベリーパイ財団が開発したワンボードコンピュータ
パソコンの基本的な動作の理解と、軽量言語を用いたプログラミング
スキルの習得を促進することが目的
英国はラズパイのような教育用コンピュータの開発が盛ん
標準OSはLinuxを採用
最近、microsoftもラズパイ用Windows(Windows 10 IoT)を出しました
モデルによって差があるが、$20 ~ $35という安価な値段で購入可能
標準のLinuxが動作するパソコンとしては破格の値段
2015/08/29 東北IT物産展2015青森 5
各モデル紹介(現行品)
2015/08/29 東北IT物産展2015青森 6
Raspberry Pi 2(Model B)
Raspberry Pi(Model B+)
Raspberry Pi(Model A+)
各モデル紹介(旧製品)
2015/08/29 東北IT物産展2015青森 7
Raspberry Pi(Model B)
Raspberry Pi(Model A)
各部紹介
2015/08/29 東北IT物産展2015青森 8
CPUGPU
(兼メモリ)
LAN
HDMI オーディオ電源
GPIO
USB
USB
SDカードスロット
Raspberry Pi と Arduino の違い一言で説明すると、パソコンとマイコンの違い
2015/08/29 東北IT物産展2015青森 9
Raspberry Pi Arduino
高 ハードウェアスペック 低
あり OSの有無 なし
USB, LAN, HDMI, オーディオほか
搭載インタフェース GPIOのみ
高 消費電力 低
低 リアルタイム性 高
パソコン
マイコン
Raspberry Piの入手方法各種電子部品・半導体パーツ取扱店で買うことができます
以下講師おすすめのお店
アールエスコンポーネンツ
http://jp.rs-online.com/web/generalDisplay.html?id=raspberrypi
スイッチサイエンス
https://www.switch-science.com/catalog/list/280/
マルツパーツ
http://www.marutsu.co.jp/GoodsListNavi.jsp?q=raspberry+pi
2015/08/29 東北IT物産展2015青森 10
2015/08/29 東北IT物産展2015青森 11
Raspberry Piを使うまで
Raspberry Piを使うのに必要な周辺機器 USBキーボード
USBマウス
LANケーブル
ディスプレイ(HDMI入力対応)
SDカード(4GB以上)
スマートフォン用ACアダプタ(microUSB出力のもの)
1.2A以上の出力に対応したものを推奨
2015/08/29 東北IT物産展2015青森 12
Raspberry Piを動かすまで OSイメージファイルをダウンロード
OSイメージファイルをSDカードに書き込む
SDカードをRaspberry Piに挿入
キーボード・マウス・ディスプレイ・ACアダプタをRaspberry Piに装着
ACアダプタをコンセントに差し込む
(Raspberry Piの電源が自動で入ります)
Raspberry Pi 本体のLEDが点灯していること、Raspberry Piから
ディスプレイにブートシーケンスの表示がされていることを確認
画面に従って初期設定を行う
2015/08/29 東北IT物産展2015青森 13
Raspberry Piをネットワークにつなぐ(有線LANの場合) LANケーブルを用意する
LANケーブルをRaspberry PiのLANポートに差し込む
LANケーブルの反対側をハブもしくはルータの
空きポートに差し込む
LANポートもしくはRaspberry Pi本体のアクセスランプが
点灯することを確認
GUIもしくはコマンドでIPアドレスが割り振られていることを確認
コマンドで行う場合は ifconfig コマンドより確認する
2015/08/29 東北IT物産展2015青森 14
Raspberry Piをネットワークにつなぐ(無線LANの場合) 接続するアクセスポイントの名前とパスワードをメモしておく
USB接続の無線LANアダプタを用意する
製品によっては対応していないものもあるので注意!
無線LANアダプタをRaspberry PiのUSBポートに差し込む
無線LANアダプタがRaspberry Piに認識されたかどうかを確かめる
CUI: lsusb コマンドを実行する
→ 一番最後の行にそれっぽいのが表示されるはず
2015/08/29 東北IT物産展2015青森 15
Raspberry Piをネットワークにつなぐ(無線LANの場合) 無線LANアダプタが認識された状態の例
(一番下の行が無線LANアダプタ)
2015/08/29 東北IT物産展2015青森 16
pi@raspberrypi ~ $ lsusb Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. Bus 001 Device 004: ID 2019:ab2a PLANEX GW-USNano2 802.11n Wireless Adapter [Realtek RTL8188CUS]
Raspberry Piをネットワークにつなぐ(無線LANの場合) 無線LANの設定を行う
→ CUIで行う場合は設定ファイルを編集することで設定を行う
(/etc/wpa_supplicant/wpa_supplicant.conf)
2015/08/29 東北IT物産展2015青森 17
% sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
設定ファイルにアクセスポイントのパスワードを直接書き込みたくない場合は、wpa_passphase コマンドを実行し、暗号化したパスワードを出力しておくと○
% wpa_passphase <アクセスポイント名> <パスワード>
Raspberry Piをネットワークにつなぐ(無線LANの場合) 無線LAN設定例
2015/08/29 東北IT物産展2015青森 18
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 network={ ssid=(アクセスポイント名) proto=WPA2 key_mgmt=WPA-PSK psk=(パスワード)
}
Raspberry Piをネットワークにつなぐ(無線LANの場合) 無線インタフェースを一度終了させる
無線インタフェースを再度起動させる
→ このタイミングで設定の再読込が行われる
GUIもしくはコマンドでIPアドレスが割り振られていることを確認
コマンドで行う場合は ifconfig コマンドより確認する
2015/08/29 東北IT物産展2015青森 19
sudo ifdown wlan0
sudo ifup wlan0
Raspberry PiにおすすめのUSB無線LANアダプタいずれもRaspberry Piでの動作実績が豊富で、1000円前後で購入可能
WLI-UC-GNME(バッファロー、左下)
http://buffalo.jp/product/wireless-lan/client/wli-uc-gnm/
GW-USNANO2(プラネックス、右下)
https://www.planex.co.jp/product/wireless/gw-usnano2/
2015/08/29 東北IT物産展2015青森 20
余談 Raspberry Pi公式の無線LANアダプタが発売されたそうです
https://www.raspberrypi.org/products/usb-wifi-dongle/
https://www.adafruit.com/products/2638
2015/08/29 東北IT物産展2015青森 21
※ 技適を通過していないので、日本国内では使えません
Raspberry Piに他のパソコンからSSHで接続する Raspberry Piがネットワークに接続されていることを確認する
SSHコマンドもしくはSSHクライアントでRaspberry Piに接続する
※ 以下、初期設定時のログイン設定
IPアドレス: 自身のRaspberry Piのアドレス
ポート番号: 22
ログインID: pi
パスワード: raspberry
2015/08/29 東北IT物産展2015青森 22
2015/08/29 東北IT物産展2015青森 23
Raspberry PiでLチカ
”Lチカ” ってなに?
2015/08/29 東北IT物産展2015青森 24
“Lチカとは、LEDチカチカの略である。
Arduino等のマイコン工作を始めるとき、最初にLEDを点滅(チカチカ)させるプログラムで試すことが多いことから「LEDチカチカ」→「Lチカ」と省略して呼ばれるようになった。
PC上でプログラミング言語を使う場合であれば最初に「Hello World」を表示させるプログラムの例が示されることが多いが、ディスプレイがなければ Hello World という文字を表示することすらできないので、代わりにLEDをつないでチカチカと点滅させて動作確認することが多い。”
引用: ニコニコ大百科http://dic.nicovideo.jp/a/l%E3%83%81%E3%82%AB
Raspberry PiでLチカをするには
2015/08/29 東北IT物産展2015青森 25
GPIOに各部品を取り付けて、プログラムからLEDを点滅(チカチカ)させます
Lチカをするために必要なもの ブレッドボード: 1個
ジャンパーワイヤ(オス-オス): 1個
ジャンパーワイヤ(オス-メス): 2個
LED(赤色): 1個
抵抗: 1個
2015/08/29 東北IT物産展2015青森 26
“GPIO” とは “General Purpose Input Output” の略
“1” もしくは “0” のデジタル信号のやりとりを直接行う
インタフェース
ここでいう“1”と“0”は電圧の高低のこと
プログラムからはピン1本単位で入力・出力のコントロールを行う
ピンから出力される電圧ないし入力可能電圧はハードによって異なる
GPIOで入力可能な電圧以上の電圧を加えた場合、
最悪Raspberry Piが破損する可能性があるので注意!
2015/08/29 東北IT物産展2015青森 27
Raspberry PiのGPIO現行品と旧モデルでピン配置が多少異なるので注意!
2015/08/29 東北IT物産展2015青森 28
現行品
旧モデル
Raspberry Piに部品を配置しよう出力に18番ピン、グランドにその右隣を使用します
2015/08/29 東北IT物産展2015青森 29
ブレッドボードの使い方
2015/08/29 東北IT物産展2015青森 30
A B C D左図のブレッドボードはAからDの
四つの区画に区切られる。
AとDは赤いラインの列と青いライ
ンの列の方向に従って導通している。
BとCの場所に多数の部品を置くこ
とから、AとDは電源もしくはグラ
ンドに直接繋ぐことがほとんど。
ブレッドボードの使い方
2015/08/29 東北IT物産展2015青森 31
A B C DBとCは行番号ごとにA~E列(F~J
列)が導通している。
行と行の間は絶縁されているので、
接続する場合はジャンパーワイヤで
繋ぐ必要がある。
部品設置の際の注意 部品のプラスとマイナス(極性)を間違えないこと
LEDにもアノードとカソードという極性があるので注意
(足が長い方がアノード、足が短い方がカソード)
抵抗はLEDに過度な電流が流れないように、LEDの手前に設置する
LEDが許容できる電流(定格電流といいます)以上の電流を流した場合、
部品が破損する可能性があります
2015/08/29 東北IT物産展2015青森 32
シェルスクリプトでLチカを行う18番ピンを出力として使用することを宣言
2015/08/29 東北IT物産展2015青森 33
% echo 18 > /sys/class/gpio/export
上記コマンドを実行することにより、/sys/class/gpio/ ディレクトリ以下に指定したピン番号のデバイスフォルダが生成されます
シェルスクリプトでLチカを行う18番ピンを出力に設定
2015/08/29 東北IT物産展2015青森 34
% echo out > /sys/class/gpio/gpio18/direction
上記コマンドを実行することにより、入出力の方向を決定します。上記のコマンドの例では “out” を書き込んで出力ピンにしていますが、“in” を書き込むと入力ピンになります。
シェルスクリプトでLチカを行う18番ピンに “1” を出力( = LED点灯)
2015/08/29 東北IT物産展2015青森 35
% echo 1 > /sys/class/gpio/gpio18/value
上記コマンドを実行することにより、指定したGPIOの電圧レベルを高くします。事前に “0” を出力していた場合は上書きされます。
シェルスクリプトでLチカを行う18番ピンに “0” を出力( = LED消灯)
2015/08/29 東北IT物産展2015青森 36
% echo 0 > /sys/class/gpio/gpio18/value
上記コマンドを実行することにより、指定したGPIOの電圧レベルを低くします。事前に “1” を出力していた場合は上書きされます。
Python でLチカを行うエディタを起動し、プログラムの作成を開始する
2015/08/29 東北IT物産展2015青森 37
$ vi ./led_sample.py
今回作成するプログラムの名前は “led_sample.py” とします。Pythonで作成する理由は、Raspberry Piに標準でインストールされているプログラミング言語の一つだからです。(他にはScratchやJavaなどがあらかじめインストールされています)
Python でLチカを行う使用するモジュールの読み込み
2015/08/29 東北IT物産展2015青森 38
#!/bin/python
import RPi.GPIO as GPIOimport time
はじめに使用する各種モジュールの読み込みを行います。GPIOを使うためRaspberry Piに標準で用意されているRPiモジュールからGPIOパッケージと、sleep文を使用するのに必要なtimeモジュールの二つを読み込みます。
Python でLチカを行うおまじないの二行を加える
2015/08/29 東北IT物産展2015青森 39
GPIO.setmode(GPIO.BCM)GPIO.setwarning(False)
次にGPIOを使うためのおまじないとして上の二行をプログラムに書き加えます。GPIO.setmode() では引数に指定したGPIOのピンアサインを読み込み、GPIO.setwarning() では引数にfalseを与えることでGPIOを使う上での警告を無効化しています。
Python でLチカを行う使用するGPIOのピンの状態を決定する
2015/08/29 東北IT物産展2015青森 40
port = 18GPIO.setup(port, GPIO.OUT)
GPIO.setup() では引数にポート番号と入出力の方法を与えて、シェルスクリプトで行ったようなポートの使用と入出力の方向の定義を行います。ポート番号は変数にしていますが、直値でもOKです。複数本のピンに対して設定を行う場合は、ピンの本数ぶんの定義を書く必要があります。
Python でLチカを行うLEDを点灯・消灯させるループを作成する
2015/08/29 東北IT物産展2015青森 41
while True:GPIO.output(port, 1)time.sleep(1)GPIO.output(port, 0)time.sleep(1)
GPIO.output() では引数にポート番号と出力する値を与えて、ポートの状態を変更することができます。出力に1を指定すると電圧が高くなり、0を指定すると電圧が低くなります。time.sleep() では引数に指定した秒数ぶん、プログラムが休止します。
Python でLチカを行う Pythonプログラム記載例
2015/08/29 東北IT物産展2015青森 42
#!/bin/pythonimport RPi.GPIO as GPIOimport time
GPIO.setmode(BCM)GPIO.setwarning(False)
port = 18GPIO.setup(port, GPIO.OUT)
while True:GPIO.output(port, 1)time.sleep(1)GPIO.output(port, 0)time.sleep(1)
Python でLチカを行うプログラムへの実行権限の付与
2015/08/29 東北IT物産展2015青森 43
$ chmod +x led_sample.py
作成したPythonファイルは実行権限を持っていないため、chmodコマンドで実行権限を与えてやります。
Python でLチカを行うプログラムを実行する
2015/08/29 東北IT物産展2015青森 44
$ python ./led_sample.py
実行権限を与えたプログラムを実行します。作成したプログラムは任意の終了手段を持たないため、Pythonのプロセスを Ctrl+C で強制的に終了させる必要があります。
2015/08/29 東北IT物産展2015青森 45
Raspberry PiにUSBカメラを繋ぐ
Raspberry PiにUSBカメラを繋ぐ USBカメラを用意する
USBカメラをRaspberry Piの空いているUSBポートに繋ぐ
USBカメラがRaspberry Piに認識されたかどうかを確かめる
CUI: lsusb コマンドを実行する
2015/08/29 東北IT物産展2015青森 46
※ 認識しないカメラも中にはあるので注意
Raspberry PiにUSBカメラを繋ぐ USBカメラが認識された状態の例
(一番下の行がUSBカメラ)
2015/08/29 東北IT物産展2015青森 47
pi@raspberrypi ~ $ lsusbBus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hubBus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.Bus 001 Device 004: ID 045e:076d Microsoft Corp. LifeCam HD-5000
Raspberry PiにUSBカメラを繋ぐ 認識されたカメラがRaspberry Piから使用できる場合のログ
(USB Video Classのドライバが読み込まれたときのログ)
2015/08/29 東北IT物産展2015青森 48
pi@raspberrypi ~ $ sudo cat /var/log/message | grep uvcvideo(省略)Aug 28 10:45:35 raspberrypi kernel: [ 1085.793369] uvcvideo: Found UVC 1.00 device MicrosoftR LifeCam HD-5000 (045e:076d)
手を動かす前にRaspberry Piのパッケージリストを更新する
2015/08/29 東北IT物産展2015青森 49
$ sudo apt-get update
今回使用しているRaspbian OSはDenian Linuxの派生なので、Debian LinuxやUbuntuなどと同じく、aptやdpkgによるパッケージ管理が可能です。
USBカメラから画像を撮影する fswebcamコマンドをインストールする
2015/08/29 東北IT物産展2015青森 50
$ sudo apt-get install fswebcam
Raspberry Piに標準でインストールされているraspistillやraspiyuvコマンドは純正カメラモジュールでしか動かないので、別途コマンドをインストールする必要がある。
USBカメラから画像を撮影する fswebcamコマンドから静止画を撮影する
2015/08/29 東北IT物産展2015青森 51
$ fswebcam ./photo.jpg
上記のコマンドを実行すると、カレントディレクトリに384×288のバナー付きJPEGファイルが生成されます。生成したJPEGファイルはRaspberry PiのGUIで表示したり、FTPクライアント経由で自身のパソコンにダウンロードして確認してください。
USBカメラから画像を撮影する 撮影した静止画の例
2015/08/29 東北IT物産展2015青森 52
USBカメラから画像を撮影する撮影する静止画の解像度を上げてみる
2015/08/29 東北IT物産展2015青森 53
$ fswebcam –r 1280x720 ./photo2.jpg
“-r”(もしくは “--resolution”)オプションをつけてコマンドを実行すると、指定した解像度の静止画を撮影することができます。撮影可能な解像度はUSBカメラによって異なるので注意が必要です。
USBカメラから画像を撮影するバナーを消してみる
2015/08/29 東北IT物産展2015青森 54
$ fswebcam –no-banner ./photo3.jpg
fswebcamコマンドを実行した際に標準で付いてくるバナーは“--no-banner” オプションで消すことができます。
USBカメラから画像を撮影する回転した画像を取得する
2015/08/29 東北IT物産展2015青森 55
$ fswebcam –rotate 90 ./photo4.jpg
“-rotate” オプションをつけてコマンドを実行すると、指定した角度に回転した静止画を撮影することができます。指定可能な角度は0、90、180、270の4種類です。
USBカメラを使ってストリーミングサーバを作るmotionコマンドをインストールする
2015/08/29 東北IT物産展2015青森 56
$ sudo apt-get install motion
Raspberry Piに標準でインストールされているraspividコマンドは純正カメラモジュールでしか動かないので、別途コマンドをインストールする必要がある。
USBカメラを使ってストリーミングサーバを作る設定ファイルを編集する
2015/08/29 東北IT物産展2015青森 57
$ sudo vi /etc/motion/motion.conf
設定ファイルは一般ユーザ権限では編集ができないので、管理者権限で編集を行う。
USBカメラを使ってストリーミングサーバを作るストリーミング映像の幅を変更する(70行目)
ストリーミング映像の高さを変更する(73行目)
2015/08/29 東北IT物産展2015青森 58
width 640
height 480
USBカメラを使ってストリーミングサーバを作る動体検知による撮影をオフ (227行目)
→ 常時撮影をオン
ffmpegによるエンコードをオフ(247行目)
2015/08/29 東北IT物産展2015青森 59
output_normal off
ffmpeg_cap_new off
USBカメラを使ってストリーミングサーバを作るUSBカメラの画質を最高にする(403行目)
ローカルホスト以外のホストにもストリーミング配信を許可(413行目)
2015/08/29 東北IT物産展2015青森 60
webcam_quality 100
webcam_localhost off
USBカメラを使ってストリーミングサーバを作るローカルホスト以外からのコントロールページの
アクセスを許可(429行目)
2015/08/29 東北IT物産展2015青森 61
control_localhost off
USBカメラを使ってストリーミングサーバを作るmotionコマンドを実行する
2015/08/29 東北IT物産展2015青森 62
$ sudo motion
もし起動時に “pidファイルが作れない” といった主旨のメッセージが表示されたら、以下のコマンドを実行してから再度motionコマンドを実行します。
$ sudo mkdir /var/run/motion
(設定ファイルを読み込むために管理者権限で実行します)
USBカメラを使ってストリーミングサーバを作るストリーミングの模様を確認する
http://(Raspberry PiのURL):8081
ストリーミングサーバの設定を変更する
http://(Raspberry PiのURL):8080
2015/08/29 東北IT物産展2015青森 63
USBカメラから画像を撮影する ストリーミング配信中の例
2015/08/29 東北IT物産展2015青森 64
本日の資料
2015/08/29 東北IT物産展2015青森 65
https://github.com/takagerbera/Raspberry_Pi_HandsOn_Sendai_02
本日の内容は以下のリポジトリにアップロードしてあります
(このスライドも終了後、Slideshareにアップロード予定です)