2019年2月9日土曜日



RaspberryPi 起動したらプログラムが動いてほしい


RaspberryPiを買って、ずっとHDMIとかでディスプレイにつなげて使ってる人は稀ですよね。最初の設定でちょっと使うけれど、ネットワークの設定とかが済んだらパソコンからssh接続したほうが楽ですからね。

そうやってRaspberryPiを使ってて不安なのは、起動はしてるだろうけど、どこまで起動したかわからない。ssh接続したいけど、もう起動したかな・・もうちょっとかな・・。っていうのを毎回考えてしまいます。

それとはまた別で、自律ロボットのためにRaspberryPiを使っている人は分かるとおもうのですが、毎回電源入れてネットワークで接続してプログラムを起動するというのは手間です。それに、ネットワークがない場所(屋外とか)で動かすときや万が一ネットワークがダメなときに、電源を入れ直したら動作するようになっていて欲しいのです。

少なくとも「GPIOピンに繋げたスイッチを押すとプログラムが動き出す」っていうプログラムが起動して欲しいわけです。(ややこしいけどわかるかな?)

最初に書いた起動してるか分からない問題も、起動したらLEDを点滅させるとかネットワークでなんかするとかいうプログラムを書けば解決ですよね。

起動したらプログラムが動く方法その1

Linuxが起動するときに実行させる

LinuxのOSが起動するときに、最初から入ってるプログラムがばーっと動いて実行されます。RaspberryPiをディスプレイに繋げて起動したときに見える大量の文字列は、初期設定とかネットワーク接続とかいろんな作業をしてくれているわけです。

そのうちの1つとして実行する方法があります。
/etc/rc.local
というファイルの exit 0 の前に書き込む方法です。
このファイルで実行するのは初期設定の変更関係にしましょう。
ネットワークのIPアドレスだとかの設定に使えます。

起動したらプログラムが動く方法その2

ログインしたときに実行させる

もう1つの方法はログインしたときに実行する方法です。
ログインしたときにプログラムを起動するのはMacやWindowsでもある機能ですよね。
/etc/profile
にrc.localと同様に書き込むとログイン時に動作します。
あとは起動したときに自動ログインをするようにすればよいですね。
/etc/inittab  の
1:2345:respawn:/sbin/getty 38400 tty1
をコメントアウトしてその下に
1:2345:respawn:/bin/login -f ユーザー名 tty1 </dev/tty1>/dev/tty1 2>&1
って書いて保存っと。

これで起動→ログイン→プログラムが起動という流れになります。
ちなみにsshでログインするともう1つ余分にプログラムが回るので注意。

ちょっとしたメモ

Pythonのプログラムを起動するとき普通は、
$    Python ./program.py
見たいなコマンドにしますが、GPIOとかファイル操作をするときは実行権限がないとプログラムが途中で止まってしまいます。なので自動実行させる時はsudoで実行しましょう。
$   sudo python ./program.py
それと、バックグラウンド処理(背後でプログラムを動かして他の処理をする) をしたい場合はアンパサンドをつけましょう。
$   sudo python ./program.py &
sudoで実行することのもう一つの利点は、sudoのプロセスを止めるとプログラムが止まってくれることです。 killallってコマンドで一斉停止ができます。
$   sudo killall sudo
なんかプログラムが暴走してるときとかに便利です。 



動かない!!!

まず,ターミナルで,
$ nano ~/.config/lxsession/LXDE-pi/autostart
と打ちます.nanoの部分はお好きなテキストエディタで.
 

@から始まる文がいくつか出てくるかと思います.自分の場合は,
@lxpanel --profile LXDE-pi
@pcmanfm --desktop --profile LXDE-pi
@xscreensaver -no-splash
となっていました.これに,プログラムの実行コマンドの先頭に@をつけて追記します.
@python /home/pi/hogehoge.py
という感じで.
自分の場合はapt-getでインストールしたopenCVだったため,(記事執筆時点では)python3ではなく,python2を使う必要がありました.
そのため自分は
@python2 /home/pi/DevelopPi/Python/OpenCV/cvsignal.py
となりました.
/home〜のディレクトリは自分の環境に合わせればいいです.DevelopPiから先は自分で作った適当なフォルダです.
入力が終わったら,nanoの場合,Ctrl+O(保存),Enter,Ctrl+X(終了)とすると,元のコマンド待機状態に戻るはずです.
あとは再起動すれば,pythonプログラムが開始するでしょう.

2018/10/11追記:
autostartによる方法で動かないことがあったので,cronで動かす方法というのも試してみました.

0 件のコメント:

コメントを投稿