2023年3月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

カテゴリー

ブログパーツ

無料ブログはココログ

« ROSでラズパイのGPIOをちゃんと使うには | トップページ | raspberry Pi3でubuntu14.04のまとめ »

2016年8月25日 (木)

sudoなしで最新のWiringPi-Pythonを使うには

前回、インチキをしてpythonで書いたROSのノードからWiringPi-Pythonを使わずにGPIOにアクセスしてみました。「電子計算機の仕事としてはめちゃくちゃ遅い」という点を除けば、まあナントカなるという結論でした。でも、どうもモヤモヤします。以前はWiringPi-Pythonからちゃんとsudoなしでできてたのになんでだろ、ということですね。

不通だったWiringPiのHPが復活したので、WiringPi-Pythonでエラーになっているあたりをチェックしたところ、初期化関数にヒントがありました。このページでは初期化関数として、wiringPiSetup (void) ;wiringPiSetupGpio (void) ;wiringPiSetupPhys (void) ;wiringPiSetupSys (void) ;という4種類をあげています。先の3つはルート権限で実行する必要があると書いてありますが、wiringPiSetupSys (void) ;だけはルートでないユーザーが実行できるとあります。ただ、gpioコマンドも併用してシェルから使用するピンを設定する必要があるとのこと、これは今まで僕がやってきた方法と同じです。その他いろいろと制約もあるみたいですが、これをラップしているWiringPi-Pythonの関数を探せば良さそうです。

ということでWiringPi-PythonのGitHubを改めて読み直してみて、愁眉を開くことになりました。なるほど使い方が変わっています。インストール方法が変わっていることには気がついていたのですが、そっちはノーチェックでした。以前はこの投稿でやっているように、初期化関数にパラメータを与えて、インスタンスを生成するようになっていたのですが、ごくシンプルに関数を呼ぶだけになっています。これでは以前のコードが動くはずもありません。WiringPi-Pythonの仕様変更が今回のドタバタの原因だったみたいです。というわけで動作したROSでLチカのコードです。

#!/usr/bin/env python
import roslib
import rospy
import time
import subprocess
import wiringpi

#main
if __name__ == '__main__':
    ### init io port ###
    subprocess.check_call('gpio export 17 out',shell=True)
    ###
    rospy.init_node('iotest')
    wiringpi.wiringPiSetupSys()
    wiringpi.pinMode(17,1)  # Setup pin 17 to OUT

    while not rospy.is_shutdown():
        wiringpi.digitalWrite(17,1)
        time.sleep(0.5)
        wiringpi.digitalWrite(17,0)
        time.sleep(0.5)
    print('\rStopped')

GPIO 17につないだLEDを1秒周期で点滅させます。sudoの必要はありませんからROSで普通にノードとして実行できます。sleepをコメントアウトしてコマンドの実効速度をオシロで計測したところ、ポートの書き換えにはわずか3usほどしかかかっていません。古いバージョンをラズパイ2で実行させたときより早いです。ラズパイ3のせいでしょうか。

なおこれはROSで使うようになっているので、roscoreを起動しておくのを忘れないでください。ROSを使わないで試してみるには、roslibとrospyのimportをやめるのとrospy.init_node('iotest')を削除、while not rospy.is_shutdown():を普通のwhile(1):で無限ループさせればよいと思います。

« ROSでラズパイのGPIOをちゃんと使うには | トップページ | raspberry Pi3でubuntu14.04のまとめ »

ラズパイでROS」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: sudoなしで最新のWiringPi-Pythonを使うには:

« ROSでラズパイのGPIOをちゃんと使うには | トップページ | raspberry Pi3でubuntu14.04のまとめ »