UMEHOSHI ITA TOP PAGE

[Raspberry Pi 3 Model A+]と[UMEHOSHI ITA]を乗せたモータ付き台車の利用例

このページで示した[Raspberry Pi]のインストールと[UMEHOSHI ITA]を制御できた後のページです。
Raspberry Pi 3 Model A+]に接続した[UMEHOSHI ITA]基板を乗せるモータ付き台車の制作

[Raspberry Pi 3 Model A+]と[UMEHOSHI ITA]を乗せたモータ付き台車のモータを遠隔操作する。

前述のDIP スイッチ判定付き Python 全体例を、/usr/local/bin/network-select.pyとした場合、 /etc/systemd/system/network-select.serviceのサービスで実行させることが、できるのですか? つまりユニットの中で、他のユニットの制御ができるのですか? /usr/local/bin/network-select.pyで、/etc/wpa_supplicant/wpa_supplicant.confの切り替えも同時にしたいのですが、可能ですか?

起動Unitで実行するDIPスイッチでネット設定を切り替えるスクリプト

DIPスイッチの設定で、次のように使うと決めた。
4ビットDIPスイッチの設定
(2進表現で ?のビットは任意)
起動状態の設定と
目標
0b??00 自宅のWifiに接続する。ステーションモード (STA接続)
/etc/dhcpcd.confに、/etc/dhcpcd.d/dhcp.confをコピー)
/etc/wpa_supplicant/wpa_supplicant.confに、/etc/wpa_supplicant/home.confをコピー
0b??01 Raspberry Pi自身をWifiの親機。アクセスポイントモード (APモード))
/etc/dhcpcd.confに、/etc/dhcpcd.d/ap.confをコピー)
0b??10職場AのWifiに接続する。ステーションモード (STA接続)
0b??11職場BのWifiに接続する。ステーションモード (STA接続)

AP モードに必要なその他の設定(重要)
dhcpcd の設定だけでは AP になりません。次の2つが追加で必要です。
1) hostapd の設定
/etc/hostapd/hostapd.conf
2) dnsmasq(DHCP)設定
/etc/dnsmasq.d/ap.conf
切り替え用のコード(/usr/local/bin/network-select.py)を以下の内容で作成
#!/usr/bin/python3
import RPi.GPIO as GPIO
import subprocess

#import time

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.cleanup()

GPIO.setup(21, GPIO.OUT)  # GPIO21を出力に設定
GPIO.output(21, GPIO.HIGH)  # ON(3.3V)
GPIO.setwarnings(True)

for no in [6, 16, 17, 22, 23, 24, 25]:
    GPIO.setup(no, GPIO.IN, pull_up_down=GPIO.PUD_UP)  # プルアップ付き入力

sw1 = "OFF" if GPIO.input(22) == GPIO.HIGH else "ON"
sw2 = "OFF" if GPIO.input(23) == GPIO.HIGH else "ON"
sw3 = "OFF" if GPIO.input(24) == GPIO.HIGH else "ON"
sw4 = "OFF" if GPIO.input(25) == GPIO.HIGH else "ON"

dip = 0b0001 if sw1=="ON" else 0
dip += 0b0010 if sw2=="ON" else 0
dip += 0b0100 if sw3=="ON" else 0
dip += 0b1000 if sw4=="ON" else 0

if dip == 0:
    subprocess.run(["cp", "/etc/dhcpcd.d/dhcp.conf", "/etc/dhcpcd.conf"])
elif dip == 1:
    subprocess.run(["cp", "/etc/dhcpcd.d/ap.conf", "/etc/dhcpcd.conf"])
elif dip == 2:
    subprocess.run(["cp", "/etc/dhcpcd.d/static1.conf", "/etc/dhcpcd.conf"])
elif dip == 3:
    subprocess.run(["cp", "/etc/dhcpcd.d/dhcp.conf", "/etc/dhcpcd.conf"])

# GPIO.output(21, GPIO.LOW)  # OFF

ネットワークをDIP SWで切り替えるスクリプト起動サービスのUnit

切り替え用のサービスコード(/etc/systemd/system/network-select.service)を以下の内容で作成
[Unit]
Description=Network mode selector based on DIP switch
DefaultDependencies=no
After=local-fs.target
Before=network.target dhcpcd.service hostapd.service dnsmasq.service

[Service]
Type=oneshot
ExecStart=/usr/bin/python3 /usr/local/bin/network-select.py
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

上記の起動確認と停止は、『systemctl start network-select.service』と『systemctl stop network-select.service』です。
サービス自動起動有効の設定は、『systemctl enable network-select.service』です。


/etc/dhcpcd.dのディレクトリを作成し、ここに/etc/dhcpcd.confに設定するコピーとなるファイル群を配置しておいて、 起動時にDIP SW設定によって対応するコピー元を、/etc/dhcpcd.confへ上書きコピーさせる。 -------------------------------------------------- network-select.serviceを作って起動したら、次のようなメッセージで起動できなくなりました。 [ OK ] Started target Bluetooth. Starting Hostname Service... [ ] A satrt job is running for Network mode selector based on DIP switch [ OK ] Finished Cleanup of Temporary Directories . Cannot open access to console, the root account is lockes. まだ、起動できません。 Cannot open access to console, the root account is lockes.が、変更前と同じように出ました。 なお、「Starting default target」まで表示して止まっています。 quiet と splash を削除しただけでも起動しないが、起動のログが多くでるようになった。 しかし、最後はCannot open access to console, the root account is lockes.が出て、 Starting default targetで止まります。 次に、plymouth.ignore-serial-consoles も削除した。 ですが、Starting default targetで止まります。 そして、次にcmdline.txtを次のようにしました。 『console=serial0,115200 console=tty1 root=PARTUUID=093fa4f7-02 rootfstype=ext4 fsck.repair=yes rootwait modules-load=dwc2,g_serial』 次に、次にcmdline.txtを次のようにしました。 「console=serial0,115200 console=tty1 root=PARTUUID=093fa4f7-02 rootfstype=ext4 fsck.repair=yes rootwait modules-load=dwc2,g_serial systemd.unit=multi-user.target」 その結果は、 [ ] A satrt job is running for Network mode selector based on DIP switch の表示で止まりました。 ---------------------------------------------------------- /etc/dhcpcd.d/ap.confの内容
# --- WiFi AP mode static IP settings ---
interface wlan0
static ip_address=192.168.4.1/24
nohook wpa_supplicant

ステーションモードで使われる『/etc/wpa_supplicant/wpa_supplicant.conf』の内容は次の通りで、 これは、『/etc/wpa_supplicant/home.conf』に記憶している。
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
        ssid="000740E60153"
        psk=3b648a0a819f13f67b5bafd6366a00726fb364aae5415a76fd099bbef8596ad0
}