随時更新中。
本記事執筆開始時のビジョンはこちら https://note.mu/happyocean/n/n5f322b181706 ぜひ読んでください。
筆者は職業ソフトウェアエンジニアではありませんので、間違いやこうやったほうがいいよ、というのはお知らせください。
****現在は、下記ではなく、Node.jsベースのコードをRaspberry Pi(クライアント)とMac(サーバー)に使用しています。*****
=============================================
●写真を撮る。
picture.py
import time
import picamera
with picamera.PiCamera() as camera:
camera.resolution = (3280, 2464)
camera.rotation = 90 #カメラの向きによります。基本的には、縦使いが、より多くのピクセルで人物をカバーできるので良い。
camera.sharpness = 100
camera.start_preview()
# Camera warm-up time
time.sleep(7)
camera.capture('1.jpg')
●複数のRaspberry Pi に同時接続・写真撮影プログラムの実行は 現状 fabric を 利用。但しvesion2系と1系で違うので適用注意。
fabfile.py
from fabric.api import run
from fabric.api import env
from fabric.api import parallel
from fabric.api import get
env.hosts = ["192.168.1.1", "192.168.1.2","192.168.1.3", #・・・・・
"192.168.1.96"]
env.user = "xxxxx" #Raspberry Pi ユーザー名
env.password = "yyyyy" #パスワード ファイル内にパスワードをそのまま書くのは推奨しません。回避は別途
@parallel #同時に走らせます。これが無いと、IPアドレスの順番に一つづつ実行されていきます。
def go_fab():
run("python picture.py")
実行は、fabfileのあるディレクトリへ移動して
fab go_fab
fabfile.py の時は上記で実施できる。
ファイルが別の名称の時は下記で実行。
fab -f xxxx.py yyyy()
●Raspberry Piから写真をコントロールサーバーへ移動
goget.py
from fabric.api import run
from fabric.api import env
from fabric.api import parallel
from fabric.api import get
env.hosts = ["192.168.1.1", "192.168.1.2","192.168.1.3", #・・・・・
"192.168.1.96"]
env.user = "xxxxx" #Raspberry Pi ユーザー名
env.password = "yyyyy" #パスワード ファイル内にパスワードをそのまま書くのは推奨しません。回避は別途
#@parallel をするとネットワークの輻輳でかえって遅くなる場合があります。
#ルーターを複数分けるなどすることで対応もできますが、コストパフォーマンスの優れた方法を模索中です。有線LANで組むともちろん早いです。
def go_get():
host_string=env.host
get('/home/pi/1.jpg', host_string + '-1.jpg') #仮にファイル名称にIPアドレスを付与してますが、この辺りはお好みで。