Vol.750 20.Jul.2018

PHP(7)〜PHPでラズパイのGPIO制御 ラズパイ(14)〜ラズパイカメラ windows7がアップデートできない

P PHPプログラミング(7) 〜PHPでラズパイのGPIO制御〜

by fjk

PHPでラズベリーパイのGPIO制御を行う。PHPにはGPIOを制御する関数が準備されていないので、シェルで使えるGPIOコマンドを利用する。PHPでシェルコマンドを実行する方法には幾つか方法があるが、shell_exec()関数(実行結果出力がテキスト)を利用する。shell_exe関数はシェルコマンドをバッククオート「`」(jisキーボードではshift+@)で囲む方法でも実行可能。なお、コマンド実行の終了コード等を得たいときは、実行結果($ret)を配列で返すexec()を利用すると良い。

1.shell_exec()の使い方
$result = shell_exec('ls -l');  または $result = `ls -l`;
2.exec()の使い方例
$command = 'ls -l';
$output = array();
$ret = null;
exec($command, $output, $ret);  ・・・exec('コマンド' , 結果配列 , 戻り値)
print_r($output );
3.LED表示
@GPIOの端子設定(出力)
  `gpio -g mode $gpio_num out`
AGPIO端子出力を1(LED=On)
  `gpio -g write $current_led 1`;
B1秒後にGPIO端子出力を0(LED=Off)
  `gpio -g write $current_led 0`;
Cプログラムの実行(ユーザレベルでOK)
  php ctl_test.php

※「GPIO仮想ファイル」を使う方法

@仮想ファイルを宣言(GPIO17の場合)
sudo echo 17 > /sys/class/gpio/export
AGPIOのモードを指定する
sudo echo out > /sys/class/gpio/gpio17/direction
BGPIOに1を出力する
sudo echo 1 > /sys/class/gpio/gpio17/value
C終了時には仮想ファイルを閉じる
sudo echo 17 > /sys/class/gpio/unexport

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制御中


R ラズベリーパイ(14) 〜ラズパイカメラ〜

by fjk

専用ラズパイカメラモジュール(V2)を準備し、静止画または動画を撮影する。

1.カメラモジュールを接続
ラズパイのカメラコネクタにフラットケーブルを差し込む(端子面がSDカード方向)
2.カメラモジュールの有効化
「メニュー/設定/RaspberryPiの設定」でカメラのラジオボタンを「有効」にする
再起動するとカメラが使えるようになる
3.カメラで撮影(photo.jpgは格納ファイル)
$ raspistill -o photo.jpg
4.撮影した写真を確認
$ gpicview photo.jpg
5.動画を撮影する(10秒間の場合)
$ raspivid -o video.h264 -t 10000
6.動画を再生し確認
$ omxplayer video.h264
 
(VNC画面にはプレビュー画像・動画が表示されないのでモニタを接続しておくと良い)

<pythonでカメラを使う>
1.python でカメラを使えるようにする
$ sudo apt-get install python-picamera
2.Pythonでカメラを使う
import picamera
camera = picamera.PiCamera()
camera.capture('image.jpg')
3.ファイルに保存する場合、カメラキャプチャー時点ではファイルとしては保存されないので、必ずfile.close()を実行すること

黒いツメ付きコネクタを持上げ
ケーブルを奥まで差込
コネクタを押込みケーブルを固定
(青がLANコネクタ側に向く)
ラズパイカメラ 静止画の撮影例

【カメラコマンドのオプション】

@rsapistill
-?, --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:撮影する写真とモニターに映るプレビュー画面を同じサイズ
Araspivid
-?, --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)
Bpreview
-p, --preview :プレビューウィンドウの設定 <'x,y,w,h'>
-f, --fullscreen :フルスクリーン
-op, --opacity :プレビューウィンドウの不透明度 (0-255)
Cparameter
-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 :垂直反転


W windows7がアップデートできない

by fjk

しばらく使っていなかったwindows7(x86)マシンの電源を入れて、WindowsUpdateを行おうと、「更新プログラムの確認」をクリックしたところ、「現在サービスが実行されていないため、WindowsUpdateで更新プログラムを確保できません。・・」とエラー(80248015)が出る。
 何か対策が出来ないかとマイクロソフトのサポートページで調べてみると、「2017年12月5日以前において、次の2点の条件を満たす環境で、0x80248015エラーが発生し、・・」があり、この記事に問題を解決するためのバッチファイル(WU-Clear.bat)が準備されており、このバッチファイルを説明を見ながら実行すると解決できるらしい。

@windows7/WindowsServer2008R2以前(特にX86で注意)
A古いバグがある更新ファイルが残っている(2017/12/4に配信されたファイルが悪いらしい)

WU-Clear.batファイルをダウンロードし、管理者として実行後、再びWindowsUdateを試みるが、今度は”8007E000エラー”が出る。このエラーは以下の条件の時に発生するらしい。

@搭載メモリ不足(64ビットで4Gb以上、32ビットで2Gb以上必要)

そこで、コマンドプロンプトで”msconfig”を実行し(この時の状態をメモっておくこと!)、サービスで「Microsoftのサービスを全て隠す」をチェック。「全て無効」とし「適用」。再起動(クリーンブート)後にWindwsUpdateを実行すると、今度は、0x8024815エラーが出ることなく、最新のWindowsUpdateプログラムのみがインストールされたが、今度はエラー8007000Eが出る。
 そこで、さらにセキュリティソフト(ウィルスセキュリティ)を停止すると、今度はupdateファイルのダウンロードとインストールと進み、1回目は「一部update失敗」と表示されたが、2回目のUpdateを行うと、今度は全て正常にUpdateできた。
 最後に、起動時の設定をmsconfigで元に戻して、updateを終了した。
 なお、windows7は2020年1月でサポートが切れます(windows10はサポート期限制限が無い)。

windowsのシステム構成・サービス


PHP(7)〜PHPでラズパイのGPIO制御 ラズパイ(14)〜ラズパイカメラ windows7がアップデートできない