活動中の『農業×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=[…]
絶賛配信中!
メルマガ詳細はこちら >>>
広告を含むご案内のメールをお送りする場合があります。
以下も、ぜひご活用ください^^
![Anauto [電子ペーパーモジュール] ラズベリーパイ/A-rduino用 2.7インチ電子ペーパー 264x176解像度 HAT](https://m.media-amazon.com/images/I/51IYmQmkpnL._SL160_.jpg)





