ラズパイ5 pythonの仮想環境 ⑦ 温湿度センサSHT45<その4>起動時に自動実行
●システム立ち上げ時にプログラムを実行
ここでは、前回のSHT45の測定結果を7セグメントLEDに表示するプログラムを、システムが起動したときに動かします。
参考にした解説Webページです。
Python Virtual Environment Usage on Raspberry Pi 「Automatically Running at Boot」
今回利用した仮想環境用のディレクトリはenvです。
仮想環境に入ります。
$ source env/bin/activate
前回の最後の、SHT45の測定値を7segLED表示器に表示するプログラムを、/bootディレクトリに入れます。ファイル名は、sht45c_7segLEDr_SYSTEM.pyで、標準出力のprint文はコメントアウトしました。
インストールされているpythonモジュールを確認します。
(env) yoshi@ras05:~ $ pip list
Package Version
------------------------------ -------
intelhex 2.3.0
pip 23.0.1
pyserial 3.5
sensirion-driver-adapters 2.1.9
sensirion-driver-support-types 0.2.0
sensirion-i2c-driver 1.0.0
sensirion-i2c-sht4x 1.0.0
sensirion-shdlc-driver 0.1.5
sensirion-shdlc-sensorbridge 0.1.1
setuptools 66.1.1
smbus2 0.4.3
次のように、実行を確認します。pythonは、システムのではなく、利用している仮想環境のpythonを絶対パスで指定します。
(env) yoshi@ras05:~ $ sudo /home/yoshi/env/bin/python3 /home/yoshi/boot/sht45c_7segLEDr_SYSTEM.py
●システム立ち上げ時に実行する設定
システムが起動したときに動かすために、systemd unitファイルを作ります。
(env) yoshi@ras05:~ $ sudo nano /lib/systemd/system/sht45.service
[Unit] [Service] [Install] |
有効にします。現時点でプログラムをスタートさせます。
(env) yoshi@ras05:~ $ sudo systemctl enable sht45
Created symlink /etc/systemd/system/multi-user.target.wants/sht45.service 竊・/lib/systemd/system/sht45.service.
(env) yoshi@ras05:~ $ sudo systemctl start sht45
(env) yoshi@ras05:~ $
確認です。
(env) yoshi@ras05:~ $ sudo systemctl status sht45
笳・sht45.service - SHT45 Temperature & Humidity Sensors
Loaded: loaded (/lib/systemd/system/sht45.service; enabled; preset: enabled)
Active: active (running) since Wed 2024-03-20 15:35:16 JST; 7min ago
Main PID: 2342 (python3)
Tasks: 1 (limit: 4439)
CPU: 177ms
CGroup: /system.slice/sht45.service
笏披楳2342 /home/yoshi/env/bin/python3 /home/yoshi/boot/sht45c_7segLEDr_SYSTEM.py
Mar 20 15:35:16 ras05 systemd[1]: Started sht45.service - SHT45 Temperature & Humidity Se>
lines 1-10/10 (END)
確認できたので、rebootします。
プログラムの実行を止めるのは、
yoshi@ras05:~ $ sudo systemctl stop sht45
無効にするのは、次のコマンドを打ち、shutdwonします。
yoshi@ras05:~ $ sudo systemctl disable sht45
Removed "/etc/systemd/system/multi-user.target.wants/sht45.service".
電源を入れますが、7セグメントLEDは消えたままです。仮想環境ではない状態で、システム管理機能systemdを有効にします。
yoshi@ras05:~ $ sudo systemctl enable sht45
Created symlink /etc/systemd/system/multi-user.target.wants/sht45.service 竊・/lib/systemd/system/sht45.service.
yoshi@ras05:~ $ sudo systemctl start sht45
7セグメントLEDの表示が始まりました。rebootします。
プログラムは動作を始め、温度と湿度の表示は随時更新されています。
●I2Cバスの様子
最初のブロックは、二つの7セグメントLEDに'0'を書き込んでクリアし、0x44、0x94は、SHT45にソフト・リセットをかけています。
二番目のブロックの最初の0x44、0xe0は「lowest precision」の測定要求コマンドです。
0x44から始まる6バイトが測定データとCRC、0x71と0x71のアドレスのデータは7セグメントLEDへの表示データの送信です。