20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう

41
Raspberry Pi何かつないで遊ぼう 2013713日オープンハードセミナー(仮称)2013 3Q Yasuhiro ISHII イチから始めるRaspberry Pi 13713日土曜日

Transcript of 20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう

Page 1: 20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう

Raspberry Piに何かつないで遊ぼう

2013年7月13日オープンハードセミナー(仮称)2013 3QYasuhiro ISHII

イチから始めるRaspberry Pi

13年7月13日土曜日

Page 2: 20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう

自己紹介•石井 康寛

•組み込み業界でソフト開発してます

•出身 : 三重県度会郡度会町

•趣味 : 電子工作、旅行、などなど

• Twitter : yishii• Facebook : • http://facebook.com/ishiiyasu

•ブログ : 日曜エレクトロニクス(日エレ)

• http://projectc3.seesaa.net/13年7月13日土曜日

Page 3: 20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう

Raspberry Pi(RPi)とは?ARM11 700MHz(Max1GHz)

メモリ 512MバイトHDMI、オーディオ、ビデオ出力(コンポジット)、LAN、USB(2ports)、SDカードスロットを搭載したマイコンボード2012年2月29日発売US$35(日本のショップで4~5000円?)と安価

英国生まれの安価な組み込みLinuxマイコンボード

13年7月13日土曜日

Page 4: 20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう

Raspberry PiのOS・OSが用意されています。主に、LinuxベースやBSD等。・Linuxは複数ディストリビューション用意されている。(Debianベース、ArchLinux、Fedoraベース等)

・オススメ(かつ一般的)は、Raspbian "wheezy"

http://www.raspberrypi.org/downloads13年7月13日土曜日

Page 5: 20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう

Raspbian "wheezy"• 公式オススメ

• Debianのカスタマイズ版

• デスクトップ環境はLXDE(マイコンボードというより、殆どパソコン感覚)

• 開発ツールも搭載(クロス環境はもちろん、RPi自身でも ビルド可能(=セルフビルド))

• (当然)パッケージマネージャapt-get等入っているので、簡単にモジュール追加出来る。ex) $ sudo apt-get install ruby

• POSIX環境用のオープンソースのコードを利用したプロジェクトの作

13年7月13日土曜日

Page 6: 20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう

RPi用ソフト開発環境の例

コード作成ビルド

ダウンロード

実行

HDMIでテレビと接続

USBでキーボードと接続

コード作成ビルド実行

クロス開発 セルフ開発

13年7月13日土曜日

Page 7: 20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう

RPiことはじめ

13年7月13日土曜日

Page 8: 20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう

準備•テレビやPCモニター

•コンポジットビデオ入力またはHDMI、DVI-D(I)を搭載したもの

• USBキーボード・マウス

• 2GB以上のSDカード

• USB電源

13年7月13日土曜日

Page 9: 20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう

起動用SDカードの作成Raspbian "wheezy"を使って起動する1. 公式サイトよりイメージファイルをダウンロード

http://www.raspberrypi.org/downloads

zipを展開すると、イメージファイルが出てくる13年7月13日土曜日

Page 10: 20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう

2. イメージファイルをSDカード(>2GB)に書き込むLinux・MacOSX

Windows

$ sudo dd if=XXXX.img of=デバイス名 bs=1m

起動用SDカードの作成

Win32 Disk Imagerを使う

13年7月13日土曜日

Page 11: 20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう

簡単な方法-NOOBS1.SDカードをFATでフォーマット2.NOOBSのzipファイルを展開して4GB以上のSDカードにコピー3.RPiに挿入し電源ON

13年7月13日土曜日

Page 12: 20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう

簡単な方法-NOOBS使いたいOSをクリック

13年7月13日土曜日

Page 13: 20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう

簡単な方法-NOOBS

13年7月13日土曜日

Page 14: 20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう

簡単な方法-NOOBS

13年7月13日土曜日

Page 15: 20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう

ボードの立ち上げ方2. 起動後、初期設定する

HDMIまたはCVBSでテレビと接続

Raspberry Piの電源が入っていないことを確認し、SDカードを挿入する。

次にMicroUSB端子(電源給電用端子)に電源を接続する

13年7月13日土曜日

Page 16: 20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう

ログインDebian GNU/Linux 7.0 raspberrypi tty1

raspberrypi login :

と出たら、ユーザー名 : piパスワード : raspberryでログイン出来ます

13年7月13日土曜日

Page 17: 20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう

RPiと外部機器を繋ぐ

• USBポートがついていて、手軽に接続可能

•ピンヘッダに各種組み込み機器で使われる一般的なインターフェース搭載

お手軽な方法は、以下の2つがあります

13年7月13日土曜日

Page 18: 20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう

USBでの機器接続・USB-WiFiアダプタでネット接続・USB-BTアダプタでBT機器接続・USB WebCamでライブ配信・USB 3Gドングルで3G通信・USB センサー機器でセンシング等、既製or自作USB機器との接続はサクッと出来ちゃいます。

13年7月13日土曜日

Page 19: 20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう

ピンヘッダでの接続ピンヘッダとは?

13年7月13日土曜日

Page 20: 20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう

RPiのピンヘッダ

R2.0のみ13年7月13日土曜日

Page 21: 20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう

ピンヘッダ詳細(R2.0)

I2C-1

I2C-0SPI

UARTGPIO_GENxはGPIO。赤枠部もGPIOとして使用可。

PWM

I2S

13年7月13日土曜日

Page 22: 20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう

GPIO• GPIO = General Purpose Input/Output(汎用入出力)

• LEDの点灯をしたり、スイッチの入力を読み取ったり出来る

13年7月13日土曜日

Page 23: 20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう

UART• Universal Asynchronous Receiver Transmitter

• 通常1対1で使用

• RS-232C通信出来る。以下は使用例

• USBシリアル変換チップ経由でPCからコンソール操作

• Arduinoと接続して連携

• UART接続タイプのGPSモジュールを接続

• シリアルサーボを接続

13年7月13日土曜日

Page 24: 20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう

SPI• Serial Peripheral Interface

• MISO、MOSI、SCLK、SS(その他の名称の場合もあり)の4本で接続

• 1対多で通信可能(通信相手数分、SS信号が必要)

RPi

有機EL

EEPROM

NFCデバイス

接続例

13年7月13日土曜日

Page 25: 20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう

I2C• Inter-Integrated Circuit

• 2本の信号線で複数の機器と接続可能

• 1対多接続可能(I2Cバス上で、個々のデバイス毎がユニークな番号(スレーブアドレス)を持つ。

RPiモータードライバモジュール電流・電圧測定

モジュール

LCD

RTC EEPROM

13年7月13日土曜日

Page 26: 20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう

RPiでラジコンを作ってみる

I2Cモータードライバ×2

13年7月13日土曜日

Page 27: 20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう

モータードライバDRV8830(TI)I2C制御電源 2.75~6.8V連続1A出力

秋月 170円ストロベリーリナックス567円

13年7月13日土曜日

Page 28: 20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう

接続する

RPiモータドライバ

モータドライバ

I2C1-SCL

I2C1-SDA

13年7月13日土曜日

Page 29: 20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう

ソフトLinux inputsubsystem

(/dev/input/event0等)

ラジコンメインプログラム

キーイベント

I2Cデバドラ(/dev/i2c-1等)

モータードライバ制御コマンド

13年7月13日土曜日

Page 30: 20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう

I2Cデバドラオープン    int  fd;

   printf("radicon  start\n");

   fd  =  open("/dev/i2c-­‐1",O_RDWR);  //  RPi  rev1.0は/dev/i2c-­‐0    if(fd  <  0){        printf("i2c  open  error\n");        return(-­‐1);    }

13年7月13日土曜日

Page 31: 20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう

キーイベント取得#include  <linux/input.h>

while(1){        read(0,&event,sizeof(event));

       if(event.type  ==  EV_KEY  &&  event.value  !=  0){            switch(event.code){            case  KEY_UP:              printf("UP  is  pressed\n");              motor_l.control(MOTOR_POWER,DRV8830::MOTOR_FORWARD);              motor_r.control(MOTOR_POWER,DRV8830::MOTOR_FORWARD);                break;            case  KEY_DOWN:                  printf("DOWN  is  pressed\n");                  motor_l.control(MOTOR_POWER,DRV8830::MOTOR_REVERSE);                  motor_r.control(MOTOR_POWER,DRV8830::MOTOR_REVERSE);                  break;

13年7月13日土曜日

Page 32: 20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう

モータードライバ制御int  DRV8830::control(int  power,int  type){    unsigned  char  buff[2];    int  result;

   if(type  !=  MOTOR_STANDBY  &&          type  !=  MOTOR_REVERSE  &&          type  !=  MOTOR_FORWARD  &&          type  !=  MOTOR_BRAKE)  {        printf("Err\n");        return  0;    }

   //  set  slave  address  to  i2c  driver    ioctl(i2c_fd,I2C_SLAVE,i2c_slaveaddr);

   //  create  data  to  send  to  DRV8830    buff[0]  =  0x00;    buff[1]  =  (unsigned  char)(power  <<  2)  |                        (unsigned  char)(type  &  0x03);

13年7月13日土曜日

Page 33: 20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう

実演

https://github.com/yishii/RaspberryPi_Radicon/

ソースコード(github)

RPiでのビルド方法

$ g++ drv8840.cpp radicon.cpp -o radicon

13年7月13日土曜日

Page 34: 20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう

太陽電池の充電状態をネットにアップする装置

I2C

USB3Gドングル

その他製作例1

13年7月13日土曜日

Page 35: 20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう

その他製作例2現在地のGoogleMapsやStreetViewを表示する装置

UART

地図データ

13年7月13日土曜日

Page 36: 20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう

ソフトウェア作成便利なライブラリの使用

• bcm2835ライブラリを使用する

• http://www.airspayce.com/mikem/bcm2835/

• Cや各種スクリプト言語(Ruby等)から呼び出しが容易

13年7月13日土曜日

Page 37: 20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう

• Arduino APIスタイルで制御する場合、WiringPiを使用する• https://projects.drogon.net/raspberry-pi/wiringpi/download-and-install/

pinMode (0, OUTPUT) ; // aka BCM_GPIO pin 17

for (;;) { digitalWrite (0, 1) ; // On delay (500) ; // mS digitalWrite (0, 0) ; // Off delay (500) ; }

ソフトウェア作成便利なライブラリの使用

13年7月13日土曜日

Page 38: 20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう

•詳細は以下のページに説明あります。• http://elinux.org/RPi_Low-level_peripherals

ソフトウェア作成便利なライブラリの使用

13年7月13日土曜日

Page 39: 20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう

さらにI/Oを使いたいRPiのI/O数・種類は多いとは言えません。足りない場合、ポートエキスパンダを使う方法があります。ADしたければI2CのADCなど。

お手軽にやるなら、RPiにArdiunoを繋いで外部機器接続はArduino側にやらせる手が簡単です。

13年7月13日土曜日

Page 40: 20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう

I/OにArduinoを使うFirmataはArduino IDEに標準で組み込まれているプログラム。Arduinoに書き込み、RPiとUSBやシリアル接続するだけで、Arduinoの端子がRPiの言いなりなって動いてくれる。

C/C++での操作https://github.com/anthonygclark/libarduino/

Rubyでの操作(日曜エレクトロニクス(日エレ))http://projectc3.seesaa.net/article/357559302.htmlhttp://www.youtube.com/watch?feature=player_embedded&v=kCBxGZ9DPo4

Firmataを書き込んでおく

Arduinoシールド

13年7月13日土曜日

Page 41: 20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう

ありがとうございました

13年7月13日土曜日