Open3

ラズパイTIPS

akspectakspect

ネットワーク

IPの固定

sudo nano /etc/dhcpcd.conf
# 有線インターフェース
interface eth0
static ip_address=192.168.10.100/24
static routers=192.168.100.1
static domain_name_servers=192.168.100.1

# Wi-Fiインターフェースの設定
profile wifi_home
static ip_address=192.168.10.100/24
static routers=192.168.100.1
static domain_name_servers=192.168.100.1

profile wifi_company
static ip_address=192.168.1.10/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1

interface wlan0
ssid ssid-name
profile wifi_home

interface wlan0
ssid ssid-name
profile wifi_company

ssidによってipアドレスを変える場合はprofileを記述する

SSIDの固定

sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
network={
        ssid="wifi-ssid1"
        key_mgmt=WPA-PSK
        psk="password"
}

network={
        ssid="wifi-ssid2"
        key_mgmt=WPA-PSK
        psk="password"
}

sudo ifconfig wlan0 down
sudo ifconfig wlan0 up
がないと設定の変更ができない?(ssh接続していると、接続が切れてしまうので注意)

akspectakspect

serviceの作成

ラズパイ起動時にpythonを実行したい場合は以下のようにする

test.service
[Unit]
Description = water

[Service]
ExecStart = /usr/bin/python3 /home/pi/Documents/water.py
Type = simple

[Install]
WantedBy = multi-user.target

timerの作成

serviceと同じ名前にすると自動的に連携する。
timerを使用する場合はserviceではなくtimerを有効にする。 'sudo systemctl enable test.timer'
ROM化して電源を入り切りするとラズパイの時間が過去に戻り、実時間とserviceを実行するタイミングがずれてしまう。ROM可とOnCalendarを併用して使う際は注意する。

test.timer
[Unit]
Description=Run my_service at specified time

[Timer]
OnCalendar=*-*-* 09:00:00 #毎日AM9:00に実行
Persistent=true
OnBootSec=5min #ラズパイが起動して5分後に実行

[Install]
WantedBy=timers.target

serviceのコマンド

起動

sudo systemctl start test.service

ステータス確認

sudo systemctl status test.service

停止 pythonの実行中に止めても途中で止まったりはしない

sudo systemctl stop test.timer

有効

sudo systemctl enable test.service

無効

sudo systemctl disable test.service

再読み込み serviceやtimerを編集したら実行する

sudo systemctl daemon-reload

サービスの起動確認

systemctl list-units -t service

タイマーの起動確認 既に実行した時間や次に実行する時間が確認できる

systemctl list-timers
akspectakspect

USBポートの名称を固定

デバイスの情報を調べる

USBポートにttyとして読み込めるもの(xaioとか)を繋げて名称を調べる。
ちなみにキーボードを繋げてもttyに表示されなかった。(lsusb -v だと認識されている)

ls /dev/tty*

判明した名称でデバイスの情報を見る。
ttyACM0を適切な値に変える。

udevadm info -q all -n /dev/ttyACM0

ルールファイルの作成

DEVPATHに書かれていることをメモし、ルールファイルを作る。
ルールファイルはファイル名の頭の数字が若い順番に読み込まれる。

sudo nano /etc/udev/rules.d/90-usb-serial.rules

以下を記載。
DEVPATHには先ほど調べた値を入れる。

ACTION=="add", DEVPATH=="*/usb1/1-1/1-1.1/1-1.1.2/1-1.1.2:1.0/*", SYMLINK+="ttyUSB"

一致キー

ACTION=="add" -> イベントを発生させるアクションの名前 addはUSBデバイス挿入時
DEVPATH=="..." -> USBのどのポートに挿入されているか
SYMLINK+="ttyUSB" -> 任意のUSBデバイスの固定名

演算子

+= : キーの現在の値リストに値を追加して、値を割り当て
== : キーの現在の値が指定した値と等しいかどうか

sudo udevadm trigger

または

sudo /etc/init.d/udev reload

または再起動で更新して、ls /dev/tty*で確認。

参考

https://www.raspberrypirulo.net/entry/usbname-fix-port
https://qiita.com/kiyonaga/items/182db6b8fc9afb33751c
https://docs.oracle.com/cd/E39368_01/admin/about-udev-rules.html