https://www.raspberrypi.org/software/
パソコンにmicro SDカードを挿入します。
そして、Raspberry Pi Imagerを起動し、“CHOOSE OS”をクリックします。
Raspberry Pi OSを選択します。
“CHOOSE SD CARD”で、Raspberry Piで使うmicroSD cardを選択します。
“WRITE”をクリックし、“YES”をクリックします。
書き込みが始まるのでしばらくお待ち下さい。
書き込みが終わるとチェックが始まりますので、これが終わるまでしばらくお待ち下さい。
下の画面になったらインストール終了です。
初期設定
Raspberry Pi OSがインストールされたmicroSD cardをRaspberry Pi 4 Model Bに入れ、電源を入れます。
下の画面が現れるので“Next”をクリックして下さい。
Countryで「Japan」を選択して下さい。Raspberry Piはイギリスの財団が作っているのでデフォルト設定はイギリスになっています。
下のようになったら、“Next”をクリックして下さい。
パスワードの設定です。お好きなパスワードを入れていただいて構いません。下の画面では、デフォルトのパスワードである“raspberry”を入れています。
上下の欄に同じパスワードを入れたら“Next”をクリックして下さい。
ディスプレイをよく見て下さい。画面外周に黒色のスペースがある場合はチェックを入れて下さい。ディスプレイ一杯に画像が映っている場合は、チェックは入れません。
“Next”をクリックして下さい。
Wi-Fiを使えるようにします。ご自分のWi-Fiを選んで下さい。
選んだら、“Next”をクリックして下さい。
Wi-Fiのパスワードを入力して下さい。
入力したら、“Next”をクリックして下さい。
OSを最新の状態にします。“Next”をクリックして下さい。
下のような画面になるのでしばらくお待ち下さい。
ダウンロード中です。
インストール中です。
OSのアップデートが終了したので、“OK”をクリックして下さい。
最後に再起動します。“Restart”をクリックして下さい。
これで、Raspberry Piが使えるようになりました。
次は、ソフトウェアのインストールです。
uhubctlのインストール
この温熱治療の冷却システムは、上にある温かい空気を下に送り、あるいは下の冷たい空気を上に送り温度が上がりすぎないようにする仕組みです。この空気の移動は冷却ファンが行っています。冷却ファンはUSBから電気を得ているので、USBへの給電を任意に止めたり入れたりできる必要があります。
そのUSBへの通電の制御を行うことができるのが、"uhubctl"です。
"uhubctl"とは、Vadim MikhailovがGNU General Public License version 2で公開しているUSBの電源管理ツールです。これをビルドすればよいのです。
そうするにあたり、ターミナルを開き、以下のコマンドを順に入力します。
----
$ sudo apt install libusb-dev
$ sudo git clone https://github.com/mvp/uhubctl
$ sudo apt install libusb-1.0
$ cd uhubctl
$ sudo make
$ sudo make install
----
画面左上をよく見て下さい。黒色長方形で「>_」と書かれたアイコンがあります。これがターミナルというアプリです。
そのアイコンをクリックすると下の画面が現れます。これがターミナルです。
sudo apt install libusb-dev
と入力しエンターキーを押して下さい。
すると、ドライバがインストールされて下の画面のようになるはずです。
次に
sudo git clone https://github.com/mvp/uhubctl
と入力しエンターキーを押して下さい。
githubというリポジトリーから“uhubctl”というUSBの電気を操作できるアプリがダウンロードされます。
さらに
sudo apt install libusb-1.0
と入力しエンターキーを押して下さい。“uhubctl”に必要なドライバがインストールされます。
まず、
cd uhubctl
と入力しエンターキーを押して下さい。
現在のディレクトリがuhubctlに移動します。
次に、
sudo make
と入力しエンターキーを押して下さい。
さらに、
sudo make install
と入力しエンターキーを押して下さい。
“uhubctl”がビルドされます。
以上で、USBの電気がコントロールできるようになります。
少し先取りすると、
sudo uhubctl -l 1-1 -a off
で、USBの給電を落とすことができるようになります。
sudo uhubctl -l 1-1 -a on
で給電が再開するようになります。
Raspberry Pi で温度を把握する方法としては、GPIOピン(生け花の剣山のようになっている端子)に温湿度センサーをつなげるのがオーソドックスですが、抜けやすい問題があるため、現代農業の画像とは異なり、Switchbot社の温湿度計を使用します。その温湿度計は温度などの値をBluetoothで拾えるよう放送(ブロードキャスト)しているので、それを拾えるようにします。
そのためにbluepyというアプリをインストールする必要があります。
ターミナルを開き、以下の順で入力します。
--
$ sudo apt install python3-pip
$ sudo apt install git
$ sudo apt install python-pexpect
$ sudo apt install libusb-dev libdbus-1-dev libglib2.0-dev
$ sudo apt install libudev-dev libical-dev libreadline-dev
$ sudo pip3 install bluepy
$ cd /usr/local/lib/python3.7/dist-packages/bluepy
$ sudo setcap'cap_net_raw,cap_net_admin + eip 'bluepy-helper
--
まず、
sudo apt install python3-pip
sudo apt install git
sudo apt install python-pexpect
と入力しエンターキーを押して下さい。
以下のようになるはずです。
次に、
sudo apt install libusb-dev libdbus-1-dev libglib2.0-dev
sudo apt install libudev-dev libical-dev libreadline-dev
と入力しエンターキーを押して下さい。
以下のようになるはずです。
上はbluepyに必要なドライバのインストールでしたが、いよいよbluepyのインストールと権限賦与です。
sudo pip3 install bluepy
cd /usr/local/lib/python3.7/dist-packages/bluepy
sudo setcap'cap_net_raw,cap_net_admin + eip 'bluepy-helper
と入力しエンターキーを押して下さい。
以上で、Switchbotの温湿度計が発する温度をRaspberry Pi で拾えるようになりました。
Thonnyを使いPythonで書いたスクリプトの作成
温室の温度が分かり、USBの給電を制御できるようになってもまだ用をなしません。プログラムを書く必要があります。
プログラムはパイソンで書きます。パイソンは非常に簡単なインタープリタ式のスクリプト言語です。簡単ですし情報も豊富にあるので応用が効きます。しかし今回は得にそれを習得する必要はありません。コード(プログラム)をコピーして貼り付けて保存するだけです。
まず、Thonnyというパイソンの開発プログラムを起動します。
画面左上のラズベリーのアイコンをクリックしプルダウンメニューを出し、「プログラミング」から「Thonny」を選択します。

以下のプログラムをコピーし貼り付けます。
--
from bluepy import btle
import struct
class SwitchDelegate(btle.DefaultDelegate):
def __init__(self, macaddr):
btle.DefaultDelegate.__init__(self)
self.sensorValue = None
self.macaddr = macaddr
def handleDiscovery(self, dev, isNewDev, isNewData):
if dev.addr == self.macaddr:
for (adtype, desc, value) in dev.getScanData():
if desc == '16b Service Data':
self._decodeSensorData(value)
def _decodeSensorData(self, valueStr):
valueBinary = bytes.fromhex(valueStr[4:])
isTemperatureAboveFreezing = valueBinary[4] & 0b10000000
temp = ( valueBinary[3] & 0b00001111 ) / 10 + ( valueBinary[4] & 0b01111111 )
if not isTemperatureAboveFreezing:
temp = -temp
self.sensorValue = temp
--
「Save」を押して、名前を“switch”として「OK」を押し、“switch.py”というファイルを作ります。
次に、
新規作成(New)し、以下のプログラムをコピーして貼り付けて下さい。
--
from bluepy import btle
from switch import SwitchDelegate
import time
import subprocess
while True:
scanner = btle.Scanner().withDelegate(SwitchDelegate('e4:07:6d:a3:3d:a0'))
scanner.scan(5.0)
tmp = scanner.delegate.sensorValue
print(tmp)
if tmp is not None:
if tmp >= 43.2:
subprocess.call("sudo uhubctl -l 1-1 -a on", shell=True)
else:
subprocess.call("sudo uhubctl -l 1-1 -a off", shell=True)
time.sleep(1)
--
なお、プログラム中の'e4:07:6d:a3:3d:a0'は、Switchbotの温湿度計の識別情報です。ひとつずつ異なっているので、ご自分の温湿度計の識別情報を入れて下さい。調べ方は、後述します。
“43.2”というのは、冷却ファンが回転を始める温度です。これは自由に変更することができます。
また、温度判定に入る前に、“tmp”が“not none”であることを調べていますが、これは時々温度情報が取れないことがあるからです。これを挟まずに温度判定を行うと、温度情報がない場合はエラーが出て止まってしまいます。
「Save」を押して、「名前」を“bot”とし、“bot.py”というファイルを作ります。
SwitchBotの温湿度計を使うには、以下からアプリをインストールして下さい。
メールアドレスとパスワードを設定すると使えるようになります。
通常は以上の手続きで十分ですが、Raspberry Piで使えるようにするためには、個体の識別情報を調べる必要があります。
まず、温湿度計をタップして下さい。通常ひとつしか表示されません。わたしは、ふたつ持っているので2個並んでいます。
次に、右上の歯車のアイコンをタップして下さい。
さらに、右上の三点リーダー(・・・)をタップして下さい。
赤色で囲まれたアドレスが識別情報です。
プログラムの該当箇所に入れて下さい。
以上で、プログラムを走らせれば43.2℃以上でファンが回り、未満ならファンが止まるようになります。
しかし、野外で使う場合はモニターがありませんから、モバイルバッテリーをつないだら自動でプログラムが動くようにする必要があります。
以下、自動起動の設定です。
まず、ターミナルを起動し
sudo vi /etc/rc.local
と入力します。
“exit”の上に
sleep 10
sudo python3 /home/pi/bot.py &
の2文追加します。
上の"sleep 10"は必ずしも要りませんが、rc.localの読み込みが早過ぎて他の準備が間に合わずに自動実行されない場合には有効です。
:w
と押して保存します。変な保存方法ですが、まず「:」を押して、次に「w」を押し、エンターキーを押します。
以上で完成です。
お疲れさまでした。
運用に先立って正常に動作するか、必ずテストするようにしてください。