• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
OSC Tokyo 2013 Spring JRPUG
 

OSC Tokyo 2013 Spring JRPUG

on

  • 2,402 views

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

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

Statistics

Views

Total Views
2,402
Views on SlideShare
2,394
Embed Views
8

Actions

Likes
6
Downloads
46
Comments
0

2 Embeds 8

http://diablo.sakura.ne.jp 5
https://twitter.com 3

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-ShareAlike LicenseCC Attribution-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel

OSC Tokyo 2013 Spring JRPUG OSC Tokyo 2013 Spring JRPUG Presentation Transcript

  • OSC 2013 Tokyo/Spring 超小型 & 超安価 ARM コンピュータ Raspberry Pi でできること ~応用編~ Raspberry Pi で温度計を作ってみる ( GPIO の初歩として ) Japanese Raspberry Pi Users Group あおしま ひでき( @azarashi55 )
  • 自己紹介● あおしま ひでき  – 某中小企業のシステムエンジニア (と言う名の何でも屋) – Twitter: @azarashi55 – こういうアイコンを見つけたら要注意 – Japanese Raspberry PI Users Group – 汎用制御装置 GVC の開発にも携わる 2
  • 今日の内容● GPIO (汎用入出力)端子の初歩● Arduino との違いについて● 今回使う I C プロトコルの簡単な説明 2● 今回作る温度計に使うデバイスと配線● Raspbian の準備と実際の温度計スクリプト
  • Raspberry Pi の魅力 -1-● CPU が(そこそこ)速い – GPU 性能は抜群● 安い(上位モデルの Model B で 35 米ドル)● 美味しい  ・・・かどうかは知りません  (´ ・ ω ・ `) – まじめに言うといろいろいじり甲斐がある – 応用がききます →ARM 系ボード界の牛丼!? 4
  • Raspberry Pi の魅力 -2-● GPIO (汎用入出力)ヘッダーがついている – 普通の PC と異なり GPIO 端子がついていること により、多種多様な外部デバイスを接続可能 ● I2C 、 SPI 、 UART 、 etc... – もちろん USB などの端子もあります → 普通の PC ではできないことができる! 5
  • GPIO ヘッダーを見てみよう● GPIO ヘッダー これです 6
  • GPIO の応用例● よくある使い方 – USB- シリアル変換( Model A で便利) – LCD キャラクターディスプレイ – GPS センサー – モーター制御   etc...● ワイルドな使い方 – FM 送信機(個人的にこういうバカっぽいネタは大好き) 7
  • Arduino との違い● Arduino は入出力電圧が 5V 、 Raspberry Pi は 3.3V → 接続したいデバイスの動作電圧に注意しましょう● Arduino と異なり Raspberry Pi は A/D 変換機能がない → アナログデータはデジタルで入出力しなければいけない → 場合によっては Arduino の併用が楽かもしれません● ピンヘッダーが Arduino ではメス、 Raspberry Pi ではオス 8
  • 温度計を作ろう● なぜ温度計か? – 使用するデバイス( TMP102 )が比較的安価( 600 円ぐら い)で入手しやすい( SWITCHSCIENCEなど) – Raspberry Pi の GPIO ヘッダーに I2C (あとで触れます) の端子がある – I2C 接続なのでデジタル入力で、かつ結線数が少ない →お手軽にできる  →GPIO 入門にはいいかと – I2C 接続以外では DS18B20 の利用例もあります 9
  • I C ってなんだろう 2● I2C とは – もともとは 1980 年代初期に開発されたもの →その後改訂を経て今に至る – シリアルデータ (SDA) とシリアルクロック (SCL) の2 本の信号線のみで通信できる →実際にはこの他に電源ラインが必要 →それでも電源ラインを含めて4本の結線で使える – すでに特許が失効しているので自由に使える – 1つのマスターと1つ以上のスレーブから構成される – Raspbian のデフォルトのカーネルで I2C が使える 10
  • 実際に配線してみよう● Fritzing で大体の見た目と配線図確認 TMP102 回路図 11
  • 実際にはこんな感じ● ブレッドボードのほんの一部しか使いません 12
  • 配線時の注意点● Raspberry Pi の電源を外しておく● 念のため LAN ケーブル等も外しておく● GPIO のピンヘッダーを扱う際には静電気に 要注意(空気の乾燥、衣服の種類などに気を 使い、事前に家具などの金属部に触れるとい いでしょう) → GPIO ピンヘッダーは CPU 直結なので注 意しましょう 13
  • Raspbian の準備 -1-● Raspbian ではイメージを SD カードに書き込んだままの状態では I2C モジュールが有効になっていません $ sudo nano /etc/modprobe.d/raspi-blacklist.conf (nano でなくてもいいですが最初から nano が入っているため )● 右のスクリーンショットのように blacklist i2c-bcm2708 の一行を コメントアウト – 行頭に#をつける 14
  • Raspbian の準備 -2-● 次に I C デバイスを使えるようにカーネルモジュ 2 ールを起動時に読み込むように設定します $ sudo nano /etc/modules● 右のスクリーンショットの ように i2c-dev の一行を追加し $ sudo reboot で再起動します 15
  • 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 16
  • TMP102 の動作確認準備● I C デバイスを操作するのに必要なパッケージをイ 2 ンストールします $ sudo apt-get install i2c-tools python-smbus● 今回使用している温度センサー TMP102 は前記の ように配線すると、 I2C アドレスが 0x49 となり ます 17
  • TMP102 の動作確認● 実際に i2cdetect というコマンドで確認してみます● 上記のように 0x49 の箇所に 49 が表示されれば正常に 通信できています → I2C のチャンネルが Rev.1 では 0 ですが、現在の Rev.2 では 1 に変更されていますのでご注意下さい● 具体的には、 i2cdetect コマンドの引数が異なります 18
  • Python のスクリプト● 今回は先ほどインストールした Python の SMBus モジ ュールを使いました。 → 極端にドキュメントが少ないです → google 先生にいくら尋ねても本当にドキュメントが なくて泣けます (私は情弱なのかしら)● 本当はクラスとか使ってきちっと書くのですが、スラ イドなので簡略版 19
  • というわけでスクリプト#!/usr/bin/env pythonimport smbus# TMP102 の I2C アドレスは 0x49addr = 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 20
  • スクリプト動作結果● I C デバイスを操作するには root 権限が必要 2 なので sudo コマンドを使って実行します 21
  • 温度計はほんの一例● 今回ご紹介した Raspberry Pi で温度計は、 あくまでほんの一例に過ぎません● GPIO のみではなく、有線 LAN 、無線 LAN 、 USB などとの組み合わせで応用範囲 は無限大です● ぜひ” Raspberry Pi で楽しみましょう” 22
  • ご清聴ありがとうございました● 展示ブースにて、同じ回路で、きちんとソー スコードを書いて、さらに Open JTalk を使 った ”しゃべる温度計” のほか、当 Users Group 有志の展示があり ますので、ぜひお越しください 23