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
すこし踏み込む CancellationToken
htkym
2
1.5k
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
360
パズルゲームの作り方 / how to make puzzle games
kaityo256
PRO
2
250
iOSDC Japan 2026 - Swiftで作って学ぼう!データベース自作入門
kaseken
2
410
MVNOの申込からeSIM開通までをiOSアプリでつなぐ- 本人確認・MNP・通信事業者基盤をまたぐ実装
satotakeshi
0
510
20260914 AIエージェント時代のPlatform Engineering LLM基盤とプロダクトの責務境界線
kanfab1
7
2.3k
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
610
Workers Cache を知る
syumai
0
310
速く作れる。その次は、速く確かめられる開発へ 〜AIネイティブ開発を支える、Shift Down〜 / Can build fast. Next, moving to development where we can verify fast.
rkaga
8
5.2k
Embedded Swiftで作る自作USBデバイス によるiOSデバイスの自動テスト / iOSDC Japan 2026 glassfiber
glassfiber
0
170
SREの越境 / SRE Collaboration
y0hgi
2
290
setup-vp GitLab対応の裏側
naokihaba
0
140
Featured
See All Featured
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
42k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.8k
Skip the Path - Find Your Career Trail
mkilby
1
240
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.3k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
620
The Language of Interfaces
destraynor
162
27k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
Automating Front-end Workflow
addyosmani
1369
210k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
560
Building Applications with DynamoDB
mza
96
7.2k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.9k
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で開催します