サーボモーターを使う為に、少し精度の高いPWM波を出力すべく「pigpio」というライブラリを用いたプログラムを書いているのですが、プログラムを実行する前に
sudo pigpiod
と一度だけターミナルでコマンドを叩いてやる必要があるらしく、常駐させるべくsystemdを弄っていましたが、うまく起動してくれません。
systemctl enable pigpiod
までは受け付けるものの、再起動してプログラムを実行するとエラーが出てしまいます。
エラー
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Can't connect to pigpio at localhost(8888)Did you start the pigpio daemon? E.g. sudo pigpiod
Did you specify the correct Pi host/port in the environment
variables PIGPIO_ADDR/PIGPIO_PORT?
E.g. export PIGPIO_ADDR=soft, export PIGPIO_PORT=8888Did you specify the correct Pi host/port in the
pigpio.pi() function? E.g. pigpio.pi('soft', 8888)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
なぜだーorz
とりあえず
sudo pigpiod
と叩いてくれということだそうです。
原因は・・・RPi.GPIOと競合なのか、あるいは個体差なのか・・・、
結局調べてもよくわかりませんでしたので起動時にpigpiodコマンドを実行することにしました。
方法は簡単
/etc/rc.local
にpigpiodと記述するだけです。
rc.localの最終に「exit 0」とあるので、その前にでも書きましょう。
pigpiod
exit 0
ここで実行されるコマンドはroot権限で実行されるのでsudoは不要です。
これで狙い通りプログラムが実行されるようになりました。
pigpioは、RPi.GPIOとWringPiの良いとこ取りをしたようなライブラリです。
僕は昔ながらのRPi.GPIOで慣れているのでPWMの精度の必要な部分だけこれを利用するという使い方をしています。(だからエラーが出たのかもしれません)
<参考>
Raspberry PiのGPIO制御の決定版 pigpio を試す - karaage. [からあげ]
※WringPiは昔に赤外線リモコンを作った時に使ったことがあります。
<参考 プログラムを自動起動させる方法>
Raspberry Piでプログラムを自動起動する5種類の方法を比較・解説 - Qiita
こちらの記事とても参考になります。