osc tokyo 2013 spring jrpug

23
OSC 2013 Tokyo/Spring 超小型 & 超安価 ARM コンピュータ Raspberry Pi でできること ~応用編~ Raspberry Pi で温度計を作ってみる ( GPIO の初歩として ) Japanese Raspberry Pi Users Group あおしま ひでき( @azarashi55 )

Upload: hideki-aoshima

Post on 05-Dec-2014

2.813 views

Category:

Technology


0 download

DESCRIPTION

OSC Tokyo/Spring 2013 のJapanese Raspberry Pi Users Group セミナー後半の資料です

TRANSCRIPT

Page 1: OSC Tokyo 2013 Spring JRPUG

OSC 2013 Tokyo/Spring

超小型 & 超安価 ARM コンピュータ

Raspberry Piでできること ~応用編~

Raspberry Pi で温度計を作ってみる( GPIO の初歩として )

Japanese Raspberry Pi Users Group

あおしま ひでき( @azarashi55 )

Page 2: OSC Tokyo 2013 Spring JRPUG

2

自己紹介● あおしま ひでき 

– 某中小企業のシステムエンジニア(と言う名の何でも屋)

– Twitter: @azarashi55 – こういうアイコンを見つけたら要注意

– Japanese Raspberry PI Users Group– 汎用制御装置 GVC の開発にも携わる

Page 3: OSC Tokyo 2013 Spring JRPUG

今日の内容

● GPIO (汎用入出力)端子の初歩

● Arduino との違いについて

● 今回使う I2C プロトコルの簡単な説明● 今回作る温度計に使うデバイスと配線● Raspbian の準備と実際の温度計スクリプト

Page 4: OSC Tokyo 2013 Spring JRPUG

4

Raspberry Pi の魅力 -1-● CPU が(そこそこ)速い

– GPU 性能は抜群

● 安い(上位モデルの Model B で 35 米ドル)● 美味しい  ・・・かどうかは知りません  (´ ・ ω ・ `)

– まじめに言うといろいろいじり甲斐がある– 応用がききます

→ARM 系ボード界の牛丼!?

Page 5: OSC Tokyo 2013 Spring JRPUG

5

Raspberry Pi の魅力 -2-● GPIO (汎用入出力)ヘッダーがついている

– 普通の PC と異なり GPIO 端子がついていることにより、多種多様な外部デバイスを接続可能

● I2C 、 SPI 、 UART 、 etc...

– もちろん USB などの端子もあります

→ 普通の PC ではできないことができる!

Page 6: OSC Tokyo 2013 Spring JRPUG

6

GPIO ヘッダーを見てみよう● GPIO ヘッダー

これです

Page 7: OSC Tokyo 2013 Spring JRPUG

7

GPIO の応用例● よくある使い方

– USB- シリアル変換( Model A で便利)

– LCD キャラクターディスプレイ

– GPS センサー

– モーター制御   etc...● ワイルドな使い方

– FM 送信機(個人的にこういうバカっぽいネタは大好き)

Page 8: OSC Tokyo 2013 Spring JRPUG

8

Arduino との違い● Arduino は入出力電圧が 5V 、 Raspberry Pi は 3.3V

→ 接続したいデバイスの動作電圧に注意しましょう● Arduino と異なり Raspberry Pi は A/D 変換機能がない

→ アナログデータはデジタルで入出力しなければいけない

→ 場合によっては Arduino の併用が楽かもしれません

● ピンヘッダーが Arduino ではメス、Raspberry Pi ではオス

Page 9: OSC Tokyo 2013 Spring JRPUG

9

温度計を作ろう● なぜ温度計か?

– 使用するデバイス( TMP102 )が比較的安価( 600円ぐらい)で入手しやすい( SWITCHSCIENCEなど)

– Raspberry Pi の GPIO ヘッダーに I2C (あとで触れます)の端子がある

– I2C 接続なのでデジタル入力で、かつ結線数が少ない→お手軽にできる 

→GPIO 入門にはいいかと

– I2C 接続以外では DS18B20の利用例もあります

Page 10: OSC Tokyo 2013 Spring JRPUG

10

I2C ってなんだろう● I2C とは

– もともとは 1980年代初期に開発されたもの→その後改訂を経て今に至る

– シリアルデータ (SDA) とシリアルクロック (SCL) の2本の信号線のみで通信できる→実際にはこの他に電源ラインが必要→それでも電源ラインを含めて4本の結線で使える

– すでに特許が失効しているので自由に使える– 1つのマスターと1つ以上のスレーブから構成される

– Raspbian のデフォルトのカーネルで I2C が使える

Page 11: OSC Tokyo 2013 Spring JRPUG

11

実際に配線してみよう

● Fritzing で大体の見た目と配線図確認

回路図

TMP102

Page 12: OSC Tokyo 2013 Spring JRPUG

12

実際にはこんな感じ● ブレッドボードのほんの一部しか使いません

Page 13: OSC Tokyo 2013 Spring JRPUG

13

配線時の注意点● Raspberry Pi の電源を外しておく

● 念のため LAN ケーブル等も外しておく

● GPIO のピンヘッダーを扱う際には静電気に要注意(空気の乾燥、衣服の種類などに気を使い、事前に家具などの金属部に触れるといいでしょう)→ GPIO ピンヘッダーは CPU 直結なので注意しましょう

Page 14: OSC Tokyo 2013 Spring JRPUG

14

Raspbian の準備 -1-● Raspbian ではイメージを SD カードに書き込んだままの状態では

I2C モジュールが有効になっていません

$ sudo nano /etc/modprobe.d/raspi-blacklist.conf(nano でなくてもいいですが最初から nano が入っているため )

● 右のスクリーンショットのようにblacklist i2c-bcm2708の一行をコメントアウト– 行頭に#をつける

Page 15: OSC Tokyo 2013 Spring JRPUG

15

Raspbian の準備 -2-● 次に I2C デバイスを使えるようにカーネルモジュ

ールを起動時に読み込むように設定します

$ sudo nano /etc/modules● 右のスクリーンショットの

ようにi2c-dev の一行を追加し

$ sudo reboot で再起動します

Page 16: OSC Tokyo 2013 Spring JRPUG

16

Raspbian の準備 -3-● 一旦Raspberry Pi を再起動したら、

$ dmesg | grep i2c   ( $ dmesg | more でも OK)

で以下の 3行が出力されていることを確認します。

[ 4.686775] bcm2708_i2c bcm2708_i2c.0: BSC0      Controller at 0x20205000 (irq 79) (baudrate 100k)

[ 4.897084] bcm2708_i2c bcm2708_i2c.1: BSC1      Controller at 0x20804000 (irq 79) (baudrate 100k)

[ 14.220329] i2c /dev entries driver

Page 17: OSC Tokyo 2013 Spring JRPUG

17

TMP102 の動作確認準備● I2C デバイスを操作するのに必要なパッケージをイ

ンストールします

$ sudo apt-get install i2c-tools python-smbus● 今回使用している温度センサー TMP102 は前記の

ように配線すると、 I2C アドレスが 0x49となります

Page 18: OSC Tokyo 2013 Spring JRPUG

18

TMP102 の動作確認● 実際に i2cdetect というコマンドで確認してみます

● 上記のように 0x49の箇所に 49が表示されれば正常に通信できています→ I2C のチャンネルが Rev.1 では 0ですが、現在のRev.2 では 1 に変更されていますのでご注意下さい

● 具体的には、 i2cdetect コマンドの引数が異なります

Page 19: OSC Tokyo 2013 Spring JRPUG

19

Python のスクリプト● 今回は先ほどインストールした Python の SMBus モジ

ュールを使いました。→ 極端にドキュメントが少ないです

→ google先生にいくら尋ねても本当にドキュメントがなくて泣けます

(私は情弱なのかしら)● 本当はクラスとか使ってきちっと書くのですが、スラ

イドなので簡略版

Page 20: OSC Tokyo 2013 Spring JRPUG

20

というわけでスクリプト#!/usr/bin/env python

import smbus

# TMP102のI2Cアドレスは0x49

addr = 0x49

# SMBusの引数はRev.1の場合0、Rev.2の場合1

# 何度もハードコーディングしてスイマセン、スイマセン、スイマセン

i2c = smbus.SMBus(0)

# TMP102から2バイト読み込みます

temp = i2c.read_i2c_block_data( addr, 0 ,2)

# 最後に、TMP102のデータシート通りに温度を計算して、画面表示します

print temp[0] + (temp[1] >> 4) * 0.0625

Page 21: OSC Tokyo 2013 Spring JRPUG

21

スクリプト動作結果

● I2C デバイスを操作するには root 権限が必要なので sudo コマンドを使って実行します

Page 22: OSC Tokyo 2013 Spring JRPUG

22

温度計はほんの一例● 今回ご紹介した Raspberry Pi で温度計は、

あくまでほんの一例に過ぎません● GPIO のみではなく、有線 LAN 、無線

LAN 、 USB などとの組み合わせで応用範囲は無限大です

● ぜひ” Raspberry Pi で楽しみましょう”

Page 23: OSC Tokyo 2013 Spring JRPUG

23

ご清聴ありがとうございました● 展示ブースにて、同じ回路で、きちんとソー

スコードを書いて、さらに Open JTalk を使った”しゃべる温度計”のほか、当 Users Group 有志の展示がありますので、ぜひお越しください