Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

Raspberry Pi とは • 英国ラズベリーパイ財団によって開発されているシングルボードコン ピュータ • ARMプロセッサを搭載し、USB電源で動作する • Model A / B / Zero / Compute Module といったホームファクターがある • $5 ~ $35という低価格 • GPIO(General Purpose Input/Output)を搭載し、外部電子回路との連携が容易 • 初代は2012年発売 今年で7周年 • 全世界出荷台数は累計2000万台を突破

Slide 3

Slide 3 text

https://www.raspberrypi.org/blog/raspberry-jam-big-birthday-weekend-2019/

Slide 4

Slide 4 text

https://www.raspi.jp/2019/01/raspberry-jam-big-birthday-weekend-2019-in-tokyo/

Slide 5

Slide 5 text

GPIO(General Purpose Input/Output) • SoC(System on Chip)から直接配線さ れているピンヘッダ • Model Aが26pin / Model B & Zeroが 40pin Purpose Pin No Purpose 3.3V Power 1 2 5V Power GPIO 2 – I2C SDA 3 4 5V Power GPIO 3 – I2C SCL 5 6 Ground GPIO 4 7 8 GPIO 14 – UART TX Ground 9 10 GPIO 15 – UART RX GPIO 17 11 12 GPIO 18 GPIO 27 13 14 Ground GPIO 22 15 16 GPIO 23 3.3V Power 17 18 GPIO 24 GPIO 10 – SPI0 MOSI 19 20 Ground GPIO 9 – SPI0 MISO 21 22 GPIO 25 GPIO 11 – SPI0 SCLK 23 24 GPIO 8 – SPI0 CS0 Ground 25 26 GPIO 7 – SPI0 CS1 SDA0 I2C ID EEPROM 27 28 SLC0 I2C ID EEPROM GPIO 5 29 30 Ground GPIO 6 31 32 GPIO 12 GPIO 13 33 34 Ground GPIO 19 – SPI1 MISO 35 36 GPIO 16 – SPI1 CS0 GPIO 26 37 38 GPIO 20 – SPI1 MOSI Ground 39 40 GPIO 21 – SPI1 SCLK

Slide 6

Slide 6 text

GPIO(General Purpose Input/Output) 各GPIOは3.3V 16mA程度の電流を出力する(全GPIO合計50mA程度まで) OR 各GPIOに0Vまたは3.3Vにそれぞれ近い電圧を入力する 0V : Low信号(0) / 3.3V : High信号(1) としてデジタル信号を扱うことができる

Slide 7

Slide 7 text

受動素子 • 抵抗 • コンデンサ • コイル 供給された電力を 消費・蓄積・放出する • 電子管 • 真空管 • 半導体 • ダイオード • トランジスタ 供給された電力で 調整(増幅)・整流を行う 能動素子 電子部品

Slide 8

Slide 8 text

いろいろと試すにあたり あったほうがいいもの • ブレッドボード • ジャンパワイヤ • オスーオス • オスーメス • 各種抵抗 • LED • スイッチ 合計1,500円くらい

Slide 9

Slide 9 text

Raspberry Piから電子部品を制御する • いわゆるLチカ • 任意のGPIO(例として21番) • 抵抗 • LED(+と-があるので注意) • Ground の順番に部品をつなぐ

Slide 10

Slide 10 text

オームの法則 V(電圧)=I(電流・A)×R(抵抗・Ω) • 今回使っている赤色LEDスペック • 準電圧 2.0V • 消費電流 13mA • GPIOの出力は3.3V • 抵抗 = (3.3V-2.0V)÷0.013A = 100Ω 16mAを超えてはいけない

Slide 11

Slide 11 text

ShellからGPIOを制御する • microSDカードにRaspbian最新版をインストール • Raspberry Pi にログインして、ターミナル/SSHを使える状態にする • 下にあるコマンドを打っていく • GPIOは使った番号に変える • echo 0 / echo 1 で出力を変更できる $ #初期化 $ echo 21 > /sys/class/gpio/export $ echo out > /sys/class/gpio/gpio21/direction $ #出力High $ echo 1 > /sys/class/gpio/gpio21/value $ #出力Low $ echo 0 > /sys/class/gpio/gpio21/value $ #終了処理 $ echo 21 > /sys/class/gpio/unexport

Slide 12

Slide 12 text

PHPからGPIOを制御する • 先ほどのShellでのコマンドをPHPに置き換えてみる

Slide 13

Slide 13 text

PHPからGPIOを制御するライブラリ • WiringPi gpioコマンド (exec) • execなので厳密にはライブラリではない • http://wiringpi.com/ • WiringPi-PHP • 上記WiringPiのPHP用ラッパー • https://github.com/WiringPi/WiringPi-PHP • php-gpio • ファイルシステム書き込みベースのcomposerライブラリ • https://github.com/ronanguilloux/php-gpio

Slide 14

Slide 14 text

php-gpioを使ってみる • 公式インストールガイドに沿ってcomposerでインストール • PHP内でクラスを呼び出し setup(21, "out"); // 出力High $gpio->output(21, 1); // 出力Low $gpio->output(21, 0); // 終了処理 $gpio->unexportAll(); ?>

Slide 15

Slide 15 text

php-gpioを使ってWEBから操作してみる (略)

setup(21, "out"); } else if(isset($_POST["LED_ON"])) { echo "LED ON"; $gpio->output(21, 1); } else if(isset($_POST["LED_OFF"])) { echo "LED OFF"; $gpio->output(21, 0); } else if(isset($_POST["Finalize_Pin"])) { echo "Finalize GPIO pin 21"; $gpio->unexportAll(); } else { echo "Press Initialize_Pin button first"; } ?>




Slide 16

Slide 16 text

php-gpioを使ってWEBから操作してみる (略)

setup(21, "out"); } else if(isset($_POST["LED_ON"])) { echo "LED ON"; $gpio->output(21, 1); } else if(isset($_POST["LED_OFF"])) { echo "LED OFF"; $gpio->output(21, 0); } else if(isset($_POST["Finalize_Pin"])) { echo "Finalize GPIO pin 21"; $gpio->unexportAll(); } else { echo "Press Initialize_Pin button first"; } ?>




残念ながら動きません

Slide 17

Slide 17 text

php-gpioを使ってWEBから操作してみる [Thu Mar 14 00:39:00.764008 2019] [:error] [pid 935] [client ***.***.***.***] PHP Warning: file_put_contents(/sys/class/gpio/gpio21/direction): failed to open stream: Permission denied in /var/www/html/lib/src/PhpGpio/Gpio.php on line 103, referer: http://raspi3p-01.local/gpio-php-gpio.php

Slide 18

Slide 18 text

Apacheの権限にGPIOの操作許可を与える $ sudo id www-data uid=33(www-data) gid=33(www-data) groups=33(www-data) $ sudo usermod –aG gpio www-data $ sudo id www-data uid=33(www-data) gid=33(www-data) groups=33(www- data),997(gpio) • GPIO操作が可能な ”gpio” グループにApache実行ユーザである ”www-data” を追加する

Slide 19

Slide 19 text

デモ

Slide 20

Slide 20 text

参考文献、リソース等 • Raspberry Pi Foundation • https://www.raspberrypi.org/ • Documentation of GPIO • https://www.raspberrypi.org/documentation/hardware/raspberrypi/gpio/README.md • php-gpio • https://github.com/ronanguilloux/php-gpio/ • Raspberry Piと電気のキホン • https://www.nic.ad.jp/ja/materials/iw/2018/proceedings/h1/ • とりあえず動かすためのリソース • https://github.com/shinonome/phperkaigi2019/

Slide 21

Slide 21 text

ところで誰? • 東雲翡陽(しののめひよう) • Twitter @H_Shinonome • Facebook hiyou.shinonome • 本名 板谷郷司 • 現在はインフラエンジニア • PHP開発歴 • PHP3 ~ PHP5.0 • PHPカンファレンス2019 実行委員長 ©Hideki Sakamoto

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

12/01(日)大田区産業プラザPiOで開催します