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

【 動作確認手順 】
TeraTerm でRasPi にSSH でログイン後次ことを実施する。($: user で #: root になって)

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

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

     

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


リロード   新規 下位ページ作成 凍結解除 差分 コピー 名前変更   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS