Top > calendar - 日記

2025年 05月 の 日記

<< 2025.5 >>
[日記]
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

01
May, 2025Edit

Dmonitor に強制UNLINKボタンを追加

【 目的 】
Dmonitor v1.82(最終バージョン)でD-Star レピーターに接続して受信していると、2局間の送信に途切れがなく、RFからのunlinkが送信できない
(当然ノードが送信中は子機からは送信できず)、RFからの切断ができない。その様な場合に、手早く内部から強制的に切断を行ないたい。
そこでRasPi GPIO ピンを使って切断コマンド(resrpt.sh)を起動させ、初期RFコマンド待ちの状態にするというもの。
※注記1:初めに下記、動作確認手順で動作するかを確認し、理解してから作成してください。

【 準備 】

  1. 以下サイトを参考にDVNODEが動く状態(dmonitorのみ動作すればOK)にしておいて下さい。
     👉ここ
  2. 今回使用したRasPi はRaspberry pi 2。 機種やOSによりGPIOにや本体LEDに関する仕様が異なるので、
    作る前に要確認。特にLED点灯が不要な場合はその行を省いてかまいません。
  3. 今回使用したRF Module はDVAP。
  4. Nextion Display (2.4 inc)を使用したが、使用しない状態でも今回の目的には適う。
  5. ボタンまたはトグルSW(on/off のみに使用)

【 プログラム 】 (2つのshell scripts を作成する)

  1. /usr/local/bin/resrpt.sh
     root 権限で

    #!/bin/bash

    killall -s 2 dmonitor
    sleep 5
    systemctl stop auto_repmon
    sleep 1
    systemctl restart auto_repmon_light
    sleep 1
    systemctl restart rpt_conn

  2. /home/pi/unlink2.sh
     user のままで

    #!/bin/sh
    GPIO=22 #使用するGPIOポート
    PUSHTIME=2 #切断&リフレッシュを実行する秒数

    ## 初期設定
    gpio -g mode $GPIO in
    gpio -g mode $GPIO down
    while true;
    do

    ## ACT LEDの制御準備
    echo timer | sudo tee /sys/class/leds/ACT/trigger
    echo 100 | sudo tee /sys/class/leds/ACT/delay_off
    echo 100 | sudo tee /sys/class/leds/ACT/delay_on
    echo none | sudo tee /sys/class/leds/ACT/trigger

    ## 2秒間押されるまで待つ
    cnt=0
     while [ $cnt -lt $PUSHTIME ] ; do
     echo "$cnt ";
    if [ `gpio -g read $GPIO` -eq "1" ] ; then
    cnt=`expr $cnt + 1`
    [ $cnt -eq 1 ] && echo timer | sudo tee /sys/class/leds/ACT/trigger
    else
    [ $cnt -gt 0 ] && echo none | sudo tee /sys/class/leds/ACT/trigger
    cnt=0
    fi
    sleep 1
    done

    ## unlink/refreshの実行
    sudo /usr/local/bin/resrpt.sh &
    echo none | sudo tee /sys/class/leds/ACT/trigger
    sleep 5
    done

     LED点灯が不要な場合は

    #!/bin/sh
    GPIO=22 #使用するGPIOポート
    PUSHTIME=2 #切断&リフレッシュを実行する秒数

    ## 初期設定
    gpio -g mode $GPIO in
    gpio -g mode $GPIO down
    while true;
    do

    ## 2秒間押されるまで待つ
    cnt=0
     while [ $cnt -lt $PUSHTIME ] ; do
     echo "$cnt ";
    if [ `gpio -g read $GPIO` -eq "1" ] ; then
    cnt=`expr $cnt + 1`
    [ $cnt -eq 1 ]
    else
    [ $cnt -gt 0 ]
    cnt=0
    fi
    sleep 1
    done

    ## unlink/refreshの実行
    sudo /usr/local/bin/resrpt.sh &
    sleep 5
    done

  3. それぞれ実行権を与える

    $ chmod 755 home/pi/unlink2.sh

    $ sudo -s ←root になって

    # chmod 755 /usr/local/bin/resrpt.sh
     
  4. unlink2/shは、下記SWの動作確認を行った後、boot 時に自動起動するように/etc/rc.local に設定しておく。
    nano /etc/rc.local で以下の通り追加する。

    /etc/rc.local
    中略

    Print the IP address

    _IP=$(hostname -I) || true
    if [ "$_IP" ]; then
    printf "My IP address is %s\n" "$_IP"
    fi
    /home/pi/unlink2.sh &  <-- 追加
    exit 0

【 ボタンSW の配線】
物理的ピン番号15(GPIO22) と、物理的ピン番号1(3.3v) を下記のように接続する。

60

【 動作確認手順 】 LED点灯無しの場合
TeraTerm でRasPi にSSH でログイン後次ことを実施する。($: user で)

  1. 最初、unrink2.sh の機能を確認する。

    $ /home/pi/unlink2.sh リターン
    none
    0
    0
    0
    0
    1   ← SWをONになると数字がアップ(1,2が表示される場合もある)
    none ← ここから元に戻る
    0

  2. 上記確認出来たら、resrpt.sh の echo “$cnt “; をコメントアウトして

    echo “$cnt “;
       ⇊

    #echo “$cnt “;
  3. /etc/rc.local に登録したらリブート

    # reboot

【参考】
ボタン長押しでシャットダウンする電源ボタンを作ろう_2
dmonitor & 専用Nextionディスプレイ


URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White



    ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS