DreamerDreamのブログ

夢想家の夢です。〜揚げたてのモヤっとしたものをラフレシアと共に〜

pigpiodがsystemdサービスで自動起動しない /etc/rc.localに登録して自動起動させる

サーボモーターを使う為に、少し精度の高い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=8888

Did 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は不要です。 

f:id:DreamerDream:20210713142357p:plain

 

これで狙い通りプログラムが実行されるようになりました。

 

pigpioは、RPi.GPIOとWringPiの良いとこ取りをしたようなライブラリです。

僕は昔ながらのRPi.GPIOで慣れているのでPWMの精度の必要な部分だけこれを利用するという使い方をしています。(だからエラーが出たのかもしれません)

<参考>

Raspberry PiのGPIO制御の決定版 pigpio を試す - karaage. [からあげ]

 

※WringPiは昔に赤外線リモコンを作った時に使ったことがあります。

dreamerdream.hateblo.jp

 

 

<参考 プログラムを自動起動させる方法>

Raspberry Piでプログラムを自動起動する5種類の方法を比較・解説 - Qiita

こちらの記事とても参考になります。

 

kampa.me