Raspberry Piに何かつないで遊ぼう
2013年7月13日オープンハードセミナー(仮称)2013 3QYasuhiro ISHII
イチから始めるRaspberry Pi
13年7月13日土曜日
自己紹介•石井 康寛
•組み込み業界でソフト開発してます
•出身 : 三重県度会郡度会町
•趣味 : 電子工作、旅行、などなど
• Twitter : yishii• Facebook : • http://facebook.com/ishiiyasu
•ブログ : 日曜エレクトロニクス(日エレ)
• http://projectc3.seesaa.net/13年7月13日土曜日
Raspberry Pi(RPi)とは?ARM11 700MHz(Max1GHz)
メモリ 512MバイトHDMI、オーディオ、ビデオ出力(コンポジット)、LAN、USB(2ports)、SDカードスロットを搭載したマイコンボード2012年2月29日発売US$35(日本のショップで4~5000円?)と安価
英国生まれの安価な組み込みLinuxマイコンボード
13年7月13日土曜日
Raspberry PiのOS・OSが用意されています。主に、LinuxベースやBSD等。・Linuxは複数ディストリビューション用意されている。(Debianベース、ArchLinux、Fedoraベース等)
・オススメ(かつ一般的)は、Raspbian "wheezy"
http://www.raspberrypi.org/downloads13年7月13日土曜日
Raspbian "wheezy"• 公式オススメ
• Debianのカスタマイズ版
• デスクトップ環境はLXDE(マイコンボードというより、殆どパソコン感覚)
• 開発ツールも搭載(クロス環境はもちろん、RPi自身でも ビルド可能(=セルフビルド))
• (当然)パッケージマネージャapt-get等入っているので、簡単にモジュール追加出来る。ex) $ sudo apt-get install ruby
• POSIX環境用のオープンソースのコードを利用したプロジェクトの作
13年7月13日土曜日
RPi用ソフト開発環境の例
コード作成ビルド
ダウンロード
実行
HDMIでテレビと接続
USBでキーボードと接続
コード作成ビルド実行
クロス開発 セルフ開発
13年7月13日土曜日
RPiことはじめ
13年7月13日土曜日
準備•テレビやPCモニター
•コンポジットビデオ入力またはHDMI、DVI-D(I)を搭載したもの
• USBキーボード・マウス
• 2GB以上のSDカード
• USB電源
13年7月13日土曜日
起動用SDカードの作成Raspbian "wheezy"を使って起動する1. 公式サイトよりイメージファイルをダウンロード
http://www.raspberrypi.org/downloads
zipを展開すると、イメージファイルが出てくる13年7月13日土曜日
2. イメージファイルをSDカード(>2GB)に書き込むLinux・MacOSX
Windows
$ sudo dd if=XXXX.img of=デバイス名 bs=1m
起動用SDカードの作成
Win32 Disk Imagerを使う
13年7月13日土曜日
簡単な方法-NOOBS1.SDカードをFATでフォーマット2.NOOBSのzipファイルを展開して4GB以上のSDカードにコピー3.RPiに挿入し電源ON
13年7月13日土曜日
簡単な方法-NOOBS使いたいOSをクリック
13年7月13日土曜日
簡単な方法-NOOBS
13年7月13日土曜日
簡単な方法-NOOBS
13年7月13日土曜日
ボードの立ち上げ方2. 起動後、初期設定する
HDMIまたはCVBSでテレビと接続
Raspberry Piの電源が入っていないことを確認し、SDカードを挿入する。
次にMicroUSB端子(電源給電用端子)に電源を接続する
13年7月13日土曜日
ログインDebian GNU/Linux 7.0 raspberrypi tty1
raspberrypi login :
と出たら、ユーザー名 : piパスワード : raspberryでログイン出来ます
13年7月13日土曜日
RPiと外部機器を繋ぐ
• USBポートがついていて、手軽に接続可能
•ピンヘッダに各種組み込み機器で使われる一般的なインターフェース搭載
お手軽な方法は、以下の2つがあります
13年7月13日土曜日
USBでの機器接続・USB-WiFiアダプタでネット接続・USB-BTアダプタでBT機器接続・USB WebCamでライブ配信・USB 3Gドングルで3G通信・USB センサー機器でセンシング等、既製or自作USB機器との接続はサクッと出来ちゃいます。
13年7月13日土曜日
ピンヘッダでの接続ピンヘッダとは?
13年7月13日土曜日
RPiのピンヘッダ
R2.0のみ13年7月13日土曜日
ピンヘッダ詳細(R2.0)
I2C-1
I2C-0SPI
UARTGPIO_GENxはGPIO。赤枠部もGPIOとして使用可。
PWM
I2S
13年7月13日土曜日
GPIO• GPIO = General Purpose Input/Output(汎用入出力)
• LEDの点灯をしたり、スイッチの入力を読み取ったり出来る
13年7月13日土曜日
UART• Universal Asynchronous Receiver Transmitter
• 通常1対1で使用
• RS-232C通信出来る。以下は使用例
• USBシリアル変換チップ経由でPCからコンソール操作
• Arduinoと接続して連携
• UART接続タイプのGPSモジュールを接続
• シリアルサーボを接続
13年7月13日土曜日
SPI• Serial Peripheral Interface
• MISO、MOSI、SCLK、SS(その他の名称の場合もあり)の4本で接続
• 1対多で通信可能(通信相手数分、SS信号が必要)
RPi
有機EL
EEPROM
NFCデバイス
接続例
13年7月13日土曜日
I2C• Inter-Integrated Circuit
• 2本の信号線で複数の機器と接続可能
• 1対多接続可能(I2Cバス上で、個々のデバイス毎がユニークな番号(スレーブアドレス)を持つ。
RPiモータードライバモジュール電流・電圧測定
モジュール
LCD
RTC EEPROM
13年7月13日土曜日
RPiでラジコンを作ってみる
I2Cモータードライバ×2
13年7月13日土曜日
モータードライバDRV8830(TI)I2C制御電源 2.75~6.8V連続1A出力
秋月 170円ストロベリーリナックス567円
13年7月13日土曜日
接続する
RPiモータドライバ
モータドライバ
I2C1-SCL
I2C1-SDA
13年7月13日土曜日
ソフトLinux inputsubsystem
(/dev/input/event0等)
ラジコンメインプログラム
キーイベント
I2Cデバドラ(/dev/i2c-1等)
モータードライバ制御コマンド
13年7月13日土曜日
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日土曜日
キーイベント取得#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日土曜日
モータードライバ制御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日土曜日
実演
https://github.com/yishii/RaspberryPi_Radicon/
ソースコード(github)
RPiでのビルド方法
$ g++ drv8840.cpp radicon.cpp -o radicon
13年7月13日土曜日
太陽電池の充電状態をネットにアップする装置
I2C
USB3Gドングル
その他製作例1
13年7月13日土曜日
その他製作例2現在地のGoogleMapsやStreetViewを表示する装置
UART
地図データ
13年7月13日土曜日
ソフトウェア作成便利なライブラリの使用
• bcm2835ライブラリを使用する
• http://www.airspayce.com/mikem/bcm2835/
• Cや各種スクリプト言語(Ruby等)から呼び出しが容易
13年7月13日土曜日
• 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日土曜日
•詳細は以下のページに説明あります。• http://elinux.org/RPi_Low-level_peripherals
ソフトウェア作成便利なライブラリの使用
13年7月13日土曜日
さらにI/Oを使いたいRPiのI/O数・種類は多いとは言えません。足りない場合、ポートエキスパンダを使う方法があります。ADしたければI2CのADCなど。
お手軽にやるなら、RPiにArdiunoを繋いで外部機器接続はArduino側にやらせる手が簡単です。
13年7月13日土曜日
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日土曜日
ありがとうございました
13年7月13日土曜日