2017/03/29

【16番】Raspberry Pi 3でJMRI(シャットダウンスイッチの追加)

Raspberry Pi 3にシャットダウンスイッチが付いたので、メモしておきます。


シャットダウンスイッチは、小型のタクトスイッチをケースの外側から取付け。


GPIOは40番ピン(GPIO21)と39番ピン(GND)を使用。接続コードは、TOMYTEC電飾キットのLEDのコネクター付き配線を流用。

先人の知恵をお借りして、Pythonのスクリプトを準備。
(参考)RaspberryPiにshutdownボタンを付けよう

$ cd ~
$ touch ./shutdown.py
$ sudo chmod 755 ./shutdown.py
$ nano ./shutdown.py
---この下の行から---
#!/usr/bin/env python
# coding:utf-8

import RPi.GPIO as GPIO
import os, time

GPIO.setmode(GPIO.BCM)

# GPIO21 : shutdown button
pin = 21
GPIO.setup(pin, GPIO.IN, pull_up_down = GPIO.PUD_UP)

L_timer = 120

while True:
  GPIO.wait_for_edge(pin, GPIO.FALLING)
  sw_counter = 0

  while True:
    if GPIO.input(pin) == 0:
      sw_counter = sw_counter + 1
      if sw_counter >= L_timer:
        os.system("echo heartbeat > /sys/class/leds/led0/trigger")
        os.system("sudo shutdown -h now")
        break
    time.sleep(0.01)

#  print(sw_counter)

GPIO.cleanup()
---この上の行まで---
行頭のスペースの数でwhile文やif文の動作が異なるので注意。参考記事の様に、print文で動作を確認しながら進めるのが、オススメ。

root権限でスクリプトの動作テスト。ファイルはフルパスで指定。
$ sudo ${HOME}/shutdown.py

シャットダウンボタンを長押しして、緑色のLEDが点滅の後に消えたら、シャットダウン完了。

くれぐれも動作を確認後、自動起動の設定。
スクリプトファイルを/usr/local/bin/にコピー。
$ sudo cp ./shutdown.py /usr/local/bin/

システム起動時に実行されるように、/etc/rc.local(Ubuntu Mateの場合)に登録。
$ sudo nano /etc/rc.local
("exit 0"の前に追加)
/usr/local/bin/shutdown.py &
exit 0

システムを再起動すれば、設定が反映される。
$ sudo reboot

Raspberry Pi 3だけでシャットダウンが出来るようになりました。

続く。。

【16番】Raspberry Pi 3でJMRI(再インストール)

久し振りにRaspberry Pi 3の電源を入れたら、動作しない。色々とジタバタしてみた結果、USB電源の容量不足だとmicroSDの書き込みに失敗して起動途中で進まなくなることが分かった。(振り出しに戻る。。。)

Ubuntu Mateのバージョンが上がっていることもあり、初めからシステムを入れ直し。
(参考)https://ubuntu-mate.org/raspberry-pi/

初期起動時にmicroSDの容量に合わせてパーティションが自動変更されるようになったが、upgradeの際にBOOT領域が不足するので、結局、他のPC上のgpartedでFAT16のパーティションを400Mbyte程度に拡張して再起動。


セキュリティ対策のため初期設定のままではsshで接続できなくなったので、raspi-configでsshd使用に変更。
$ sudu raspi-config
"3 Interfacing Options"-->"P2 SSH"-->"<はい>"

OpenOfficeやThunderbirdは不要なので、upgrade前に削除。
$ sudo apt-get remove --purge libreoffice*
$ sudo apt-get remove --purge thunderbird*
$ sudo apt-get clean
$ sudo apt-get autoclean

以下(ry

続く。。

2017/01/22

【16番】Raspberry Pi 3でJMRI

ノートPCでもよいのですが場所を取るので、無線LANに対応しているRaspberry Pi 3を使って、ディスプレイ、マウス、キーボードなしの"フェイスレス"でJMRIを動作させたので、備忘録としてメモしておきます。



OSはUbuntuベースのUbuntu Mateにしました。2017年1月の時点で16.04LTSとなっています。インストール手順は、ネット上の情報を参考にしながら進めます。

Installing operating system images on Linux

Ubuntu Mateのディスクイメージを入手し、linux上でmicroSD(ここでは/dev/sdb/。システムによって違うので、細心の注意を!)に書き込みます。
$ sudo dd bs=4M if=ubuntu-mate-16.04-desktop-armhf-raspberry-pi.img of=/dev/sdb

使用したmicroSDが8GBで少し容量が足りず、ddコマンドでエラーとなったので、以下のコマンドでファイルシステムの整合性をチェックして修復します。
$ sudo e2fsck -f /dev/sdb2
$ sudo resize2fs /dev/sdb2
$ sudo fsck.ext4 -f /dev/sdb2

逆に、使用するmicroSDの容量がディスクイメージより大きい場合は、dpartedなどで/dev/sdb2のパーティションを拡げておきます。

Raspberry Pi 3に、準備したmicroSD、ディスプレイ、キーボード、マウスをつなぎ、最後に電源をつなぐと、起動後にUbuntu Mateの初期設定画面になるので、フェイスレスで使う時のユーザーIDとパスワードを設定し、併せて自動ログインにしておきます。

Raspberry Pi 3上のUbuntu Mateは、パソコンに比べると動作が重く、プログラムのアップデートは、特に遅いです。初期設定のままでは知らぬ間にプログラムのアップデートが始まってしまうので、無線LANにつなぐ前に設定を変更しておきます。

パネルから"ソフトウェアとアップデート"を起動し、アップデート"タブで"セキュリティアップデートがあるとき"を"すぐに表示"に変更した後、無線LANに接続します。

必要に応じてレポジトリの参照先を国内サーバーに変更します。

•Ubuntu Weekly Recipe
 第450回 Raspberry Pi 3にUbuntu 16.04 LTSをインストールする(Ubuntuカーネル編)

時間がある時に、最初のプログラムのアップデートをしておきます。(1時間半位かかった思います。。)
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo reboot

Raspberry Pi自身のファームウェアの更新をする場合には、以下のコマンドを実施します。(無理に更新する必要はありません。)
$ sudo rpi-update
$ sudo reboot

ネットワーク経由でログインできるように、xrdpをインストールしておきます。
$ sudo apt-get install xrdp

日本語入力の設定を整えます。パネルから"言語サポート"を起動して、追加のファイルをインストールします。

PR3が使えるように、自分のユーザーIDをdialoutグループに追加します。
$ sudo adduser ${USER} dialout

JMRIをダウンロードして、ホームディレクトリ配下の"JMRI"にインストールします。
$ cd ~
$ wget https:(ダウンロードファイルのurl)
$ tar xzfv ./download

Javaは1.8なので追加の作業はありません。PR3、コマンドステーション(DCS51K)をつなぎ、PanelProを起動して動作を確認します。
$ cd ~/JMRI
$ ./PanelPro

動作が確認できたら、システム起動時の自動起動にJmriFacelessを登録します。
$ crontab -u ${USER} -e
自動起動コマンドファイルの編集画面になるので、最後の行に以下を追加します。
@reboot /home/ユーザーID/JMRI/JmriFaceless

再起動させて自動起動を確認します。
$ sudo reboot

システムを終了させる時にはいきなり電源は切らず、終了コマンドを入力します。
$ sudo poweroff

microSDカードのアクセスが終わった頃合で、電源を外します。

ディスプレイ、キーボード、マウスを外せば、フェイスレスとなりますが、電源を切る際には、他のPCから端末を立ち上げ、ログインしてシステムを終了させる必要があります。
$ ssh -X ユーザーID@Raspberry PiのIPアドレス
$ sudo poweroff

このままでは電源OFFにパソコンが必要なので、リセットボタンの追加を検討しています。

続く。。


PS.Ubuntu Mate 16.04 LTS on Raspbery Pi3 が 重いからといって、"brltty"を強制的にアンインストールすると、パッケージの整合性が取れなくなって「振り出しに戻る」となりますのでご注意下さい。(経験者談)
Ubuntu Mate 16.04 LTS on Raspberry Pi3 が 重い件 の 対処

【16番】HOユニトラック手動ポイント6番(その3:DCC ポイントマシン)

テーブルトップレイアウトでも、手の届きづらいところのポイントに限って、DCC対応で電動化する計画です。






取り付けは簡単で、アドレスはデフォルトで"1"となってます。

続く。。

2017/01/01

【16番】Digitrax PR3とJMRI


先人の方々のWebを参考に、JMRI version 4.2とPR3とDCS51Kで、iPhone 5sのWiThrottleliteからコントロールできるようになりました。無線LANは普段使っているものです。

Ubuntu 14.04LTSが認識したPR3は、そのままではJMRI/Preferences Pane/Connectionsから見えないので、ターミナル画面から次のコマンドで、自分のユーザーIDをdialoutグループに追加しました。

$ sudo adduser ${USER} dialout

パソコンにPR3にDCS51Kに電源アダプターと結構場所を取るので、置き場所に工夫が必要です。

続く。。

2016/12/04

【16番】ED71(モーター交換&DCC)

ED71の整備を進めています。缶モーターに交換した上で、DCC対応としました。


先づは缶モーターを準備します。4年以上前に購入していたものです。


軸を切断する時は、軸受に不要な力がかからないように、軸側をペンチでくわえています。気休めですが、ネオジオ磁石で少しでも鉄粉が飛び散らないようにしました。


インサイドギアを調整します。スムーズに回転するように、シリコングリスを塗っておきます。


配線はラグ板で繋げるようにしました。
絶縁側の車輪が台車に触れてショートしていましたので、台車の裏側を少しだけ削りました。


DCC対応とするため、KATOの電車型動力用デコーダEM13を使います。プリント基盤にリード線を付けて、熱収縮チューブで絶縁しておきます。モーターにつながるオレンジとグレーの代わりに、手持ちの黄色と白を使っています。


仮接続して、DCCの動作を確認します。デコーダの初期アドレス値は03です。


それぞれの配線をつなげて、マスキングテープで絶縁します。


カプラーは、天賞堂KDカプラーNo16に交換します。若干高いですが、スカートに当たってこれ以上は下げられませんので、良しとしました。


残念ながら、低速時にフログのところで止まります。台車枠が固定で自由度がないため、レールに追従せず、集電が上手くいかないようです。解決策の検討が必要です。

続く。。