TOPに戻る

ラズパイ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]
Description=SHT45 Temperature & Humidity Sensors

[Service]
ExecStart=/home/yoshi/env/bin/python3 /home/yoshi/boot/sht45c_7segLEDr_SYSTEM.py

[Install]
WantedBy=multi-user.target

 有効にします。現時点でプログラムをスタートさせます。

(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への表示データの送信です。

-