土地形状スキャン023 [FriendlyCore編]pythonプログラムの自動実行

造成

前回作成した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消灯

タイトルとURLをコピーしました