PHPでラズベリーパイのGPIO制御を行う。PHPにはGPIOを制御する関数が準備されていないので、シェルで使えるGPIOコマンドを利用する。PHPでシェルコマンドを実行する方法には幾つか方法があるが、shell_exec()関数(実行結果出力がテキスト)を利用する。shell_exe関数はシェルコマンドをバッククオート「`」(jisキーボードではshift+@)で囲む方法でも実行可能。なお、コマンド実行の終了コード等を得たいときは、実行結果($ret)を配列で返すexec()を利用すると良い。
※「GPIO仮想ファイル」を使う方法
| <ctl_test.php> | |
<?php
$gpio_led= [ 22, 27, 17 ];
foreach( $gpio_led as $gpio_num ){
`gpio -g mode $gpio_num out`;
}
$count = 1;
while($count <= 5){
$current_led=reset($gpio_led);
`gpio -g write $current_led 1`;
sleep(1);
while( $next_led=next($gpio_led) ){
`gpio -g write $current_led 0`;
`gpio -g write $next_led 1`;
$current_led=$next_led;
sleep(1);
}
`gpio -g write $current_led 0`;
$count++;
}
`gpio unexportall`;
`gpio reset`;
?>
|
PHPによる LED制御中 |
専用ラズパイカメラモジュール(V2)を準備し、静止画または動画を撮影する。
| <picture.py> | <video.py> | |
from time import sleep
from picamera import PiCamera
my_file = open('my_image.jpg', 'wb')
camera = PiCamera()
camera.start_preview()
sleep(2)
try:
camera.capture(my_file)
finally:
my_file.close()
|
import picamera
camera = picamera.PiCamera()
camera.resolution = (640, 480)
camera.start_recording('my_video.h264')
camera.wait_recording(60)
camera.stop_recording()
|
![]() |
![]() |
| 黒いツメ付きコネクタを持上げ ケーブルを奥まで差込 |
コネクタを押込みケーブルを固定 (青がLANコネクタ側に向く) |
![]() |
![]() |
| ラズパイカメラ | 静止画の撮影例 |
【カメラコマンドのオプション】
| -?, | --help | : ヘルプの表示 |
| -w, | --width | :画像の幅の指定 (サイズ) |
| -h, | --height | :画像の高さの指定 (サイズ) |
| -q, | --quality | :jpeg 品質を設定 (0 - 100) |
| -r, | --raw | :jpeg メタデータに Bayer 配列データを追加する |
| -o, | --output | :出力ファイル名 (標準出力の場合は '-o -'). 指定なければ何も保存されない |
| -v, | --verbose | :詳細情報の表示 |
| -t, | --timeout | :撮影までの時間をミリ秒単位で指定。指定しない場合は5秒。 |
| -th, | --thumb | :サムネイルパラメータを設定 (x:y:quality) |
| -d, | --demo | :デモモードを実行、撮影しない。 |
| -e, | --encoding | :出力ファイルのエンコード方法の指定 (jpg, bmp, gif, png) |
| -x, | --exif | :EXIFタグの指定 ('key=value'の形式) |
| -tl, | --timelapse | :こま撮りモード(ミリ秒で指定した間隔で連続撮影) |
| -fp, | --fullpreviewv | :撮影する写真とモニターに映るプレビュー画面を同じサイズ |
| -?, | --help | :ヘルプの表示 |
| -w, | --width | :画像の幅の指定 (サイズ、デフォルトは 1920) |
| -h, | --height | :画像の高さの指定 (サイズ、デフォルトは 1080) |
| -b, | --bitrate | :ビットレイトの設定 (例. 10MBits/s は -b 10000000) |
| -o, | --output | :出力ファイル名 (標準出力の場合は '-o -') |
| -v, | --verbose | :詳細情報の表示。 |
| -t, | --timeout | :撮影時間をミリ秒単位で指定。指定しない場合は5秒。0 は無効化。 |
| -d, | --demo | :デモモードを実行、撮影しない。 |
| -fps, | --framerate | :フレーム/秒を指定 |
| -e, | --penc | :エンコード後にプレビュー画像を表示(圧縮の効果を表示) |
| -g, | --intra | :内部リフレッシュ期間を指定 (key frame rate/GoP size) |
| -p, | --preview | :プレビューウィンドウの設定 <'x,y,w,h'> |
| -f, | --fullscreen | :フルスクリーン |
| -op, | --opacity | :プレビューウィンドウの不透明度 (0-255) |
| -sh, | --sharpness | :シャープネス (-100 to 100) |
| -co, | --contrast | :コントラスト (-100 to 100) |
| -br, | --brightness | :ブライトネス (0 to 100) |
| -sa, | --saturation | :サチュレーション (-100 to 100) |
| -ISO, | --ISO | :ISO の設定 |
| -vs, | --vstab | :Turn on video stablisation |
| -ev, | --ev | :露出補正 |
| -ex, | --exposure | :露出モードの設定 |
| -awb, | --awb | :ホワイトバランスの設定 |
| -ifx, | --imxfx | :画像効果の設定 |
| -cfx, | --colfx | :Set colour effect (U:V) |
| -mm, | --metering | :測光モードの設定 |
| -rot, | --rotation | :画像の回転 (0-359) |
| -hf, | --hflip | :水平反転 |
| -vf, | --vflipv | :垂直反転 |
しばらく使っていなかったwindows7(x86)マシンの電源を入れて、WindowsUpdateを行おうと、「更新プログラムの確認」をクリックしたところ、「現在サービスが実行されていないため、WindowsUpdateで更新プログラムを確保できません。・・」とエラー(80248015)が出る。
何か対策が出来ないかとマイクロソフトのサポートページで調べてみると、「2017年12月5日以前において、次の2点の条件を満たす環境で、0x80248015エラーが発生し、・・」があり、この記事に問題を解決するためのバッチファイル(WU-Clear.bat)が準備されており、このバッチファイルを説明を見ながら実行すると解決できるらしい。
WU-Clear.batファイルをダウンロードし、管理者として実行後、再びWindowsUdateを試みるが、今度は”8007E000エラー”が出る。このエラーは以下の条件の時に発生するらしい。
そこで、コマンドプロンプトで”msconfig”を実行し(この時の状態をメモっておくこと!)、サービスで「Microsoftのサービスを全て隠す」をチェック。「全て無効」とし「適用」。再起動(クリーンブート)後にWindwsUpdateを実行すると、今度は、0x8024815エラーが出ることなく、最新のWindowsUpdateプログラムのみがインストールされたが、今度はエラー8007000Eが出る。
そこで、さらにセキュリティソフト(ウィルスセキュリティ)を停止すると、今度はupdateファイルのダウンロードとインストールと進み、1回目は「一部update失敗」と表示されたが、2回目のUpdateを行うと、今度は全て正常にUpdateできた。
最後に、起動時の設定をmsconfigで元に戻して、updateを終了した。
なお、windows7は2020年1月でサポートが切れます(windows10はサポート期限制限が無い)。
![]() |
| windowsのシステム構成・サービス |
![]() |
![]() |
![]() |