活動中の『農業×IoT』新プロジェクト。
そのうち、ラズパイを使ったデータ収集機を準備しておりますので、そちらをご紹介いたします。
※プロジェクトレポート Vol.1 でご紹介した「構築物4:ラズパイで動体検知」です。
弊社にて活動を開始した『農業 × IoT』新プロジェクト。 まだまだ案件立ち上げにも満たない状況であり、この先どうなるかも分かりません。 しかし、いざ実現性・実効性が見えてきた時に、多くの方のご協力が必要になることは間違いありません[…]
おことわり
当記事は、現時点で公開できる情報のみの掲載となります。
機密情報等もございますので、行間がなくてやや「?」かもしれませんが、その点はご了承ください。
また、当記事のご利用によって不都合・不具合などが発生した場合においても、弊社においては何の責も負いません。
全体概況
現在『準備#1』(2022.06)
構築物:ラズパイ+Motion
データ収集のための機器の一つとして準備しているラズパイ。
(他にも様々なパターンを準備中)
今回、ラズパイ自体の使い方も様々なパターンがありますが、そのうちの1つをご紹介いたします。
ラズパイ+Motion を使った動体検知(+e-Paperの活用)(+3Dプリント専用ケース)です。
e-Paperの搭載は正直不要ですが(笑)、手元に余っていたので活用してみました。
ラズパイのキッティング
旧OS「Raspbian」から比べると、新世代の「Raspberry Pi OS」は圧倒的にキッティングが楽になりました。
公式に「Raspberry Pi Imager」がありますので、WindowsやMacにインストール。
MicroSDを挿入して、「Raspberry Pi Imager」に従って書き込めばOKです。
書き込み前の設定で「SSHの開放」「WiFi設定」なども行えます。
最初からラズパイをSSH接続するハードルが随分と下がりました。
(以前も、少し細工すれば可能でしたが)
ラズパイが起動しましたらSSH接続し、必要な準備をしていきましょう。
Raspberry Piのセットアップから、よく使うコマンドをまとめたページです。(ラズパイに限らず、一般的なLinuxコマンドも含みます。) ラズパイは安いので(^^;; 何台も作ることになると思います。何度も同じ事を調べなくてよいよう[…]
Motionのインストール
今回の用途となる、「動体検知」に使うための「Motion」。
監視カメラが簡単に作れます。
これで無償ソフトウェアなので、恐るべし・・・です。。。
(感謝しかありません・・・)
インストールも簡単です。
下記の記事などをご参考ください。
前回から間があいてしまいましたが、今回はRaspberry Piを使って動体検知で動画を記録する監視カメラを作ります。 …
Motionは、設定値をどうするか、が肝です。
設定に関しては、やはり公式が一番です。
…
Motionは、ブラウザでストリーミング画像を確認することもできます。
すごいですね・・・!
e-Paperの活用
「waveshare」のe-Paper(4ボタン搭載)があり、何かと便利かも・・・?と思い、活用してみました。
GPIO接続のe-Paperです。
自身が購入した当時よりも値上がり&品薄状態です・・・
この「waveshare」のパーツは結構気に入っていて、ライブラリやサンプルがしっかりと提供されています。
手順に従ってインストールを行い、サンプルに沿ってコードを改変していけば、大抵のことは実現できるかと思います。
以前、メールサポート(無料)を利用したこともあるのですが、丁寧な印象があります。
(英語での応対です)
※操作用のスクリプトは以下にて。
独自運用スクリプトの構築
以下に記載するe-Paperのボタンや、運用を考え、スクリプトをいくつか作成します。
MotionデータをFTP&ローカル削除
Motionで撮影した写真・動画は、とりあえずラズパイ内に保存しています。
ただ、放置していると容量溢れでご臨終となるので、別途、データ格納場所を用意しています。
そちらへのFTP&Motionデータの削除を行うスクリプトを作成しておきました。
- FTPアカウントのパスワードはベタ書きです。ご注意ください
- FTP PUT時に重複しないように、タイムスタンプ付きのフォルダを作成しています
- Motionのデータを削除していますのでご注意ください
#!/bin/sh # Motionデータの移動 sudo mv -f /home/pi/motion/* /home/pi/xxx/ # FTP FOLDER=`date '+%Y%m%d-%H%M%S'` ftp -p -n -i <<END open connectname user user password binary mkdir $FOLDER cd $FOLDER lcd /home/pi/xxx mput * bye END # Motionデータの削除 sudo rm -f /home/pi/xxx/*
ボタン反応用のPythonプログラム
ボタンを押す -> 必要な処理を起動させる
Pythonプログラムです。
- Pythonファイル名は任意です
- e-Paper表示用のフォントの配置が必要です(フォントはe-Paperのサンプルに含まれていました)
- IPアドレスをe-Paperに表示していますが、”wlan0″を個別に指定しています(任意のものに変更してください)
- エラーハンドリングはザルですのでご注意ください
- 必要なライブラリ(import)が不足している場合は、「sudo pip3 install xxx」で追加してください
- 表示デザインは何も考えていません(笑)
#!/usr/bin/env python3 import RPi.GPIO as GPIO # RPi.GPIOモジュールを使用 import time import subprocess # Pythonからコマンドを発行 # e-Paper from waveshare_epd import epd2in7 from PIL import Image,ImageDraw,ImageFont import sys import os picdir = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), 'pic') # /home/pi/pic font24 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 24) font18 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 18) font35 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 35) # Utility import ipget # スイッチのGPIO番号(HWによる) gpio_sw1 = 5 gpio_sw2 = 6 gpio_sw3 = 13 gpio_sw4 = 19 # GPIO番号指定の準備 GPIO.setmode(GPIO.BCM) # ボタンのセットアップ GPIO.setup(gpio_sw1, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(gpio_sw2, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(gpio_sw3, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(gpio_sw4, GPIO.IN, pull_up_down=GPIO.PUD_UP) # スイッチの状態を取得 sw1 = GPIO.input(gpio_sw1) sw2 = GPIO.input(gpio_sw2) sw3 = GPIO.input(gpio_sw3) sw4 = GPIO.input(gpio_sw4) ######################################### ###### e-Paper デフォルト画面 ######################################### def e_paper_default(): epd = epd2in7.EPD() epd.init() epd.Clear(0xFF) Himage = Image.new('1', (epd.height, epd.width), 255) # 255: clear the frame draw = ImageDraw.Draw(Himage) draw.text((10, 0), 'KEY1: reboot', font = font24, fill = 0) draw.text((10, 20), 'KEY2: FTP and Cleaning', font = font24, fill = 0) draw.text((10, 40), 'KEY3: Motion Start', font = font24, fill = 0) draw.text((10, 60), 'KEY4: Motion Stop', font = font24, fill = 0) draw.text((10, 100), ipget.ipget().ipaddr("wlan0"), font = font24, fill = 0) epd.display(epd.getbuffer(Himage)) ######################################### ###### メイン処理 ######################################### # デフォルト画面表示 e_paper_default() # スイッチの状態を永続監視、押されたら(==0)割り当てた処理を実行 try: while True: if sw1 == 0: epd = epd2in7.EPD() epd.init() epd.Clear(0xFF) Himage = Image.new('1', (epd.height, epd.width), 255) # 255: clear the frame draw = ImageDraw.Draw(Himage) draw.text((10, 0), 'EXEC KEY1', font = font24, fill = 0) draw.text((10, 50), 'rebooting...', font = font24, fill = 0) epd.display(epd.getbuffer(Himage)) subprocess.run("sudo reboot", shell=True, text=True) e_paper_default() sw1 = 1 time.sleep(1) elif sw2 == 0: epd = epd2in7.EPD() epd.init() epd.Clear(0xFF) Himage = Image.new('1', (epd.height, epd.width), 255) # 255: clear the frame draw = ImageDraw.Draw(Himage) draw.text((10, 0), 'EXEC KEY2', font = font24, fill = 0) draw.text((10, 50), 'FTP and Cleaning...', font = font24, fill = 0) epd.display(epd.getbuffer(Himage)) subprocess.run("xxx", shell=True, text=True) # 任意のコマンドに変更 e_paper_default() sw2 = 1 time.sleep(1) elif sw3 == 0: epd = epd2in7.EPD() epd.init() epd.Clear(0xFF) Himage = Image.new('1', (epd.height, epd.width), 255) # 255: clear the frame draw = ImageDraw.Draw(Himage) draw.text((10, 0), 'EXEC KEY3', font = font24, fill = 0) draw.text((10, 50), 'Motion Starting...', font = font24, fill = 0) epd.display(epd.getbuffer(Himage)) subprocess.run("sudo service motion start", shell=True, text=True) e_paper_default() sw3 = 1 time.sleep(1) elif sw4 == 0: epd = epd2in7.EPD() epd.init() epd.Clear(0xFF) Himage = Image.new('1', (epd.height, epd.width), 255) # 255: clear the frame draw = ImageDraw.Draw(Himage) draw.text((10, 0), 'EXEC KEY4', font = font24, fill = 0) draw.text((10, 50), 'Motion Stopping...', font = font24, fill = 0) epd.display(epd.getbuffer(Himage)) subprocess.run("sudo service motion stop", shell=True, text=True) e_paper_default() sw4 = 1 time.sleep(1) # 再度読み込む sw1 = GPIO.input(gpio_sw1) sw2 = GPIO.input(gpio_sw2) sw3 = GPIO.input(gpio_sw3) sw4 = GPIO.input(gpio_sw4) # ctrl + c で終了 except KeyboardInterrupt: # 後処理 GPIOを解放 GPIO.cleanup(gpio_sw1) GPIO.cleanup(gpio_sw2) GPIO.cleanup(gpio_sw3) GPIO.cleanup(gpio_sw4) epd = epd2in7.EPD() epd.Clear(0xFF) epd.sleep()
ボタン反応のためにPythonプログラムをデーモン化
ラズパイ起動とともに常駐しておいてほしいので、デーモン化します。
上記のPythonプログラムをデーモン化すればOKです。
以下の記事で全て解決できますので、ご参照くださいませ。
(記事ありがとうございます!)
Raspberry Pi(ラズパイ)でPythonのプログラムをデーモン化(常駐ソフト化)する方法の覚書。…
これらの準備で、SSHを接続することなく、最低限の操作が行えるようになりました。
※現地でのネットワーク環境への適合や、リブートではなくシャットダウンがよいか・・・?など、まだまだ色々とありますが。
3Dプリンターによる専用ケース作成
専用ケースとなる3Dモデルを作成し、3Dプリンタで印刷です。
要件に完全にマッチしたサイズで作れますので、3Dプリンタって素晴らしいですね。
使っているのはXYZ Printingの「ダヴィンチ Jr. Pro X+」という機種です。
(なお、当件の内容程度でしたらエントリーモデルで十分です)
印刷中は、うまく出来るかいつもドキドキです・・・!
要件
- カメラを(ケースで)ある程度固定したい
- ラズパイ本体もある程度固定したい
- できるだけ防水・防塵ケースにしたい
- 電源供給は外部から(モバイルバッテリーは使わない)
- カメラレンズがケラれないようにする必要あり
- ラズパイの回収が簡単にできること
- 出来れば、複数のラズパイ(の形)に対応
出来上がり
これらを考えつつ、以下のようなケースを作りました。
ラズパイ3B+、ラズパイZERO WH、ラズパイ4でも使えます。
固定する足の場所を、どちらにも対応するように作りました。
]
ラズパイ本体を「六角真鍮」などで浮かせる必要があります。
USBケーブルで給電しながら使えるように、穴を開けています。
ちなみに、小さなモバイルバッテリーや、写真のようなUPS HATを装着することで、ケーブルレスで稼働させることができます。
所感
正直、豪雨に対応できるとは思えませんが、、、
どうなることやら、も今回の検証です。
できるだけ防水・防塵にするために、排熱を諦めています。
この点もどうなることやら・・・です。
ラズパイ4は危ないかもしれません。
※防水・防塵が必要のないケースでは、フタをしない運用でOKです。
3Dプリントデータご提供
弊社サービス「デジタル活用塾360」にて、3Dプリントデータを無償公開しております。
御入り用の方は、そちらから入手ください。
※完全な防水・防塵ケースではありません。
取り扱いは自己責任でお願いいたします。
MicroSDのバックアップ
同じことを何度もキッティングするのは無駄ですので、バックアップしておきましょう。
Raspberry Piは手軽に使えるのはよいのですが、壊してしまったり、(ライブラリなどが)汚くなってしまった時に再インストールするのは面倒なもの。 時間もかかりますしね。 そういった時は、バックアップを取得し、リストアするのが([…]
同志募集中^^
まだまだ企画立ち上げの段階ではありますが、この先、多くの方のご協力が必要になることは間違いありません。
少しでもご興味があります方は、ぜひ、お声がけいただけますと嬉しいです!
雑談、情報交換会、入れ知恵(笑)など、楽しくコミュニケーションできますと嬉しいです。
(Zoom等も可能です)
また、上述でご紹介したアプリ等に関するご質問・ご相談も可能です。
(カスタマイズ等も含めて)ご提供することも可能です。
まだまだ出だしでしかありませんが、日本の農業の課題を解決すべく、弊社の力も注いでいきたいと思います!
次のレポート
活動中の『農業×IoT』新プロジェクト。 できる限りの機材準備を行い、現地にて設置を行ってきました。 今回は、そうした様子をご紹介いたします。 ※過去レポートは以下を参照ください。 [sitecard subtitle=[…]
プロジェクトレポート INDEX
弊社にて活動を開始した『農業 × IoT』新プロジェクト。 まだまだ案件立ち上げにも満たない状況であり、この先どうなるかも分かりません。 しかし、いざ実現性・実効性が見えてきた時に、多くの方のご協力が必要になることは間違いありません[…]
活動中の『農業×IoT』新プロジェクト。 そのうち、ラズパイを使ったデータ収集機を準備しておりますので、そちらをご紹介いたします。 ※プロジェクトレポート Vol.1 でご紹介した「構築物4:ラズパイで動体検知」です。 [[…]
活動中の『農業×IoT』新プロジェクト。 できる限りの機材準備を行い、現地にて設置を行ってきました。 今回は、そうした様子をご紹介いたします。 ※過去レポートは以下を参照ください。 [sitecard subtitle=[…]
絶賛配信中!
メルマガ詳細はこちら >>>
広告を含むご案内のメールをお送りする場合があります。
以下も、ぜひご活用ください^^