Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
PHPでもRaspberry Piがしたい! @ PHPerKaigi 2019
Search
Satoshi Itatani
March 29, 2019
Programming
2.3k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
PHPでもRaspberry Piがしたい! @ PHPerKaigi 2019
PHPでもRaspberry Piを使って電子回路と連携した開発がしたい!Webから回路を操作したい!という方のための(?)初心者向けセッションでした
Satoshi Itatani
March 29, 2019
More Decks by Satoshi Itatani
See All by Satoshi Itatani
Raspberry Pi 互換機を<s>つ</s>かってみた ~Tinker Board編~
shinonome
0
1.1k
色の話
shinonome
0
160
SDカード今昔
shinonome
0
140
Other Decks in Programming
See All in Programming
Rでドレミ/Do-Re-Mi_with_R
florets1
0
130
PumaからFalconに移行したRailsアプリケーションでの実践
falcon8823
0
190
SalesForceを内製化!? ~ HR事業を支える顧客管理基盤のインフラを大公開 ~
oku053
0
190
JAWS-UG 東京支部が始める、JAWS-UG支部コラボ / JAWS-UG lunchtime LT Collaboration
y0hgi
0
300
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
350
作って学ぶSpring BootのAuto Configuration / JJUG Night Seminar 2026-10-19
rshindo
0
200
AWSに止められる覚悟してますか?
morizo_1984
2
540
AI主導のプログラミング学習アプリを作ってみた
econanringo
0
180
エージェントを使い続けるためのメタワーク / Meta-work for keeping using the agent
rkaga
6
1.7k
AIで開発が速くなった先で、開発チームは何を目指すか
shihochan
1
1.7k
気持ちぃ〜角丸 Squircle
ryu1013
0
330
ActionController meets Protocol Buffers
sorah
0
670
Featured
See All Featured
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
59k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
Claude Code のすすめ
schroneko
67
230k
Git: the NoSQL Database
bkeepers
PRO
433
67k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
570
Accessibility Awareness
sabderemane
1
250
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
490
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.5k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
A Modern Web Designer's Workflow
chriscoyier
699
190k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Transcript
None
Raspberry Pi とは • 英国ラズベリーパイ財団によって開発されているシングルボードコン ピュータ • ARMプロセッサを搭載し、USB電源で動作する • Model
A / B / Zero / Compute Module といったホームファクターがある • $5 ~ $35という低価格 • GPIO(General Purpose Input/Output)を搭載し、外部電子回路との連携が容易 • 初代は2012年発売 今年で7周年 • 全世界出荷台数は累計2000万台を突破
https://www.raspberrypi.org/blog/raspberry-jam-big-birthday-weekend-2019/
https://www.raspi.jp/2019/01/raspberry-jam-big-birthday-weekend-2019-in-tokyo/
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
GPIO(General Purpose Input/Output) 各GPIOは3.3V 16mA程度の電流を出力する(全GPIO合計50mA程度まで) OR 各GPIOに0Vまたは3.3Vにそれぞれ近い電圧を入力する 0V : Low信号(0)
/ 3.3V : High信号(1) としてデジタル信号を扱うことができる
受動素子 • 抵抗 • コンデンサ • コイル 供給された電力を 消費・蓄積・放出する •
電子管 • 真空管 • 半導体 • ダイオード • トランジスタ 供給された電力で 調整(増幅)・整流を行う 能動素子 電子部品
いろいろと試すにあたり あったほうがいいもの • ブレッドボード • ジャンパワイヤ • オスーオス • オスーメス
• 各種抵抗 • LED • スイッチ 合計1,500円くらい
Raspberry Piから電子部品を制御する • いわゆるLチカ • 任意のGPIO(例として21番) • 抵抗 • LED(+と-があるので注意)
• Ground の順番に部品をつなぐ
オームの法則 V(電圧)=I(電流・A)×R(抵抗・Ω) • 今回使っている赤色LEDスペック • 準電圧 2.0V • 消費電流 13mA
• GPIOの出力は3.3V • 抵抗 = (3.3V-2.0V)÷0.013A = 100Ω 16mAを超えてはいけない
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
PHPからGPIOを制御する • 先ほどのShellでのコマンドをPHPに置き換えてみる <?php // 初期化 file_put_contents('/sys/class/gpio/export','21’); file_put_contents('/sys/class/gpio/gpio21/direction','out’); // 出力High
file_put_contents('/sys/class/gpio/gpio21/value','1’); // 出力Low file_put_contents('/sys/class/gpio/gpio21/value','0’); // 終了処理 file_put_contents('/sys/class/gpio/unexport','21’); ?>
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
php-gpioを使ってみる • 公式インストールガイドに沿ってcomposerでインストール • PHP内でクラスを呼び出し <?php // ライブラリ読み込み require 'vendor/autoload.php’;
// クラス呼び出しと初期化 use PhpGpio¥Gpio; $gpio = new GPIO(); $gpio->setup(21, "out"); // 出力High $gpio->output(21, 1); // 出力Low $gpio->output(21, 0); // 終了処理 $gpio->unexportAll(); ?>
php-gpioを使ってWEBから操作してみる <html> <head>(略)</head> <body> <h1> <?php require 'vendor/autoload.php'; use PhpGpio¥Gpio;
$gpio = new GPIO(); if (isset($_POST["Initialize_Pin"])) { echo "Initialize GPIO pin 21"; $gpio->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"; } ?> </h1> <form method="POST" action=""> <input type="submit" value="Initialize_Pin" name="Initialize_Pin" id="submit_button"><br /> <input type="submit" value="LED_ON" name="LED_ON" id="submit_button"><br /> <input type="submit" value="LED_OFF" name="LED_OFF" id="submit_button"><br /> <input type="submit" value="Finalize_Pin" name="Finalize_Pin" id="submit_button"> </form> </body> </html>
php-gpioを使ってWEBから操作してみる <html> <head>(略)</head> <body> <h1> <?php require 'vendor/autoload.php'; use PhpGpio¥Gpio;
$gpio = new GPIO(); if (isset($_POST["Initialize_Pin"])) { echo "Initialize GPIO pin 21"; $gpio->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"; } ?> </h1> <form method="POST" action=""> <input type="submit" value="Initialize_Pin" name="Initialize_Pin" id="submit_button"><br /> <input type="submit" value="LED_ON" name="LED_ON" id="submit_button"><br /> <input type="submit" value="LED_OFF" name="LED_OFF" id="submit_button"><br /> <input type="submit" value="Finalize_Pin" name="Finalize_Pin" id="submit_button"> </form> </body> </html> 残念ながら動きません
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
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” を追加する
デモ
参考文献、リソース等 • 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/
ところで誰? • 東雲翡陽(しののめひよう) • Twitter @H_Shinonome • Facebook hiyou.shinonome •
本名 板谷郷司 • 現在はインフラエンジニア • PHP開発歴 • PHP3 ~ PHP5.0 • PHPカンファレンス2019 実行委員長 ©Hideki Sakamoto
None
12/01(日)大田区産業プラザPiOで開催します