前回作成したUIとGNSSデータ取得のpythonコードをNanoPiNEOの電源投入後自動起動できるようにする。
pythonプログラム自動実行の設定
Unit定義ファイルの作成
$ cd /etc/systemd/system/
$ sudo vi autognssctrl.service
[Unit]
Description=Auto GNSS Control program
[Service]
ExecStart=/usr/bin/python3 /home/yuji/python_work/work_gnsslogger_003.py
[Install]
WantedBy=multi-user.target
定義ファイルの動作確認
$ sudo systemctl start autognssctrl.service
pythonプログラムが動作し、スイッチを押すと共有フォルダに受信データが記録開始することを確認
NanoPiNEO起動時に自動実行されるように設定
$ sudo systemctl enable autognssctrl.service
自動実行の確認
LANケーブルを外したNanoPiNEOの電源再投入後、pythonプログラム起動後状態を示すLED点滅を確認。
その後、スイッチを押してLED点滅変化を確認。
その後、LANケーブルを挿し、SSH接続し、GNSS受信データが記録されていることを確認。
問題発生
LANケーブルを繋がずスタンドアローンでNanoPiNEOを起動すると時刻がLinuxビルド時のものに戻ってしまう模様。
GNSS受信データファイルのファイル名はタイムスタンプから生成し、区別できるようにしているため、不正確だと問題。
時刻情報をプログラムで保持できる仕組みが必要。
後日実装予定。
プログラムの微修正
LED制御について使いずらい点があるため少し修正
Linux起動後、pythonプログラム実行前のLED状態は点灯状態。
Python実行開始後、スイッチ押し待ち状態は消灯とすることで状態を認識しやすくする。
$ vi work_gnsslogger_005.py
#!/usr/bin/env python3
import RPi.GPIO as GPIO
import time
import subprocess
PIN_NUM_LED = 11 #PA0
PIN_NUM_SWITCH = 15 #PA3
GPIO.setmode(GPIO.BOARD)
GPIO.setup(PIN_NUM_LED, GPIO.OUT)
GPIO.setup(PIN_NUM_SWITCH, GPIO.IN, pull_up_down=GPIO.PUD_UP)
pwm = GPIO.PWM (PIN_NUM_LED,1)
pwm.start(0)
cmd=”str2str -in serial://ttyACM0:115200#ubx -out /home/share/`date +%Y%m%d%H%M%S`.ubx”
state=0
try:
while True:
if GPIO.input(PIN_NUM_SWITCH)==0:
time.sleep(1) #0.1s wait
if state==0:
subrun=subprocess.Popen(“exec ” + cmd, shell=True)
pwm.ChangeDutyCycle(20)
state=1
elif state==1:
subrun.kill()
pwm.ChangeDutyCycle(0)
state=0
except KeyboardInterrupt:
pass
pwm.stop()
GPIO.cleanup()
Linux起動後LED点灯->消灯(pythonプログラム起動) を確認
記録中 LED点滅
待機中 LED消灯