2021年6月20日日曜日

HX711をOrange Pi PCで試してみた

 HX711をOrange Pi PCのGPIO経由で使えるかどうか試してみた。ラズパイだと結構動作報告があるんだけど、Orange Piにも簡単に移植できないかなということでPythonのRPi.GPIOを使って書かれているやつを単純にOPi.GPIOに置き換えてテストしてみた。

今回はhx711pyというやつを使わせてもらった。

このライブラリはRPi.GPIOというPythonライブラリを使っていて、これをOPi.GPIOに変更するだけで行けるはず…

まずはOPi.GPIOをインストール

python3 -m pip install OPi.GPIO

あとはhx711pyをgit cloneして、hx711.pyとexample.pyのRPi.GPIOをOPi.GPIOに変更し、その前の行に

import orangepi.pc

を追加する。これを追加することによってOrange Pi PCのピン配置設定ができるようになる。
GPIO.setmode(GPIO.BCM)のところをGPIO.setmode(orangepi.pc.BOARD)に変更するとOrange Pi PCのBCMの方のピン配置を使用できる。

ピンアサインはOPi.GPIOのソースコードでorangepiのなかのpc.pyを見るとOrange Pi PCのピンアサインがわかるとおもう。(例えばBCMだとライブラリ内で26と入れるとPA20)

とりあえずPA10(DATA)とPA20(CLK)にHX711を繋いでexample.pyのピン設定をhx = HX711(19, 26)みたいに変更してpython3 example.pyを実行してみる。ちなみに今回はI2C用のレベルコンバータを使ってみた。

するとアクセス拒否…

どうやらGPIOはrootでしかアクセスできないみたい。

というわけでgpioグループを作成してユーザーをgpioグループに追加して使用できるようにする。

sudo nano /etc/udev/rules.d/99-gpio.rules

SUBSYSTEM=="gpio", KERNEL=="gpiochip*", ACTION=="add", PROGRAM="/bin/sh -c 'chown root:gpio /sys/class/gpio/export /sys/class/gpio/unexport ; chmod 220 /sys/class/gpio/export /sys/class/gpio/unexport'"
SUBSYSTEM=="gpio", KERNEL=="gpio*", ACTION=="add", PROGRAM="/bin/sh -c 'chown root:gpio /sys%p/active_low /sys%p/direction /sys%p/edge /sys%p/value ; chmod 660 /sys%p/active_low /sys%p/direction /sys%p/edge /sys%p/value'"

これをコピペして保存。

あとはgpioグループを作って、自分のidをそのグループに追加して再起動。

これでGPIOがroot以外でも使えるようになった。

この状態でまたpython3 example.pyを実行してみると今度は処理をしているのか、なかなか反応が帰ってこない。試しにHX711の電源を抜いてみると0が返ってくるので処理はしている感じ?しかしちゃんとした値が帰ってこない…

ためしにラズパイで実行してみるとちゃんと値が表示されるのでレベルコンバータとHX711は問題なさそう。もしかしたらAllwinner H3のGPIOの仕様がラズパイと違うのかもしれない。

まぁHX711をこういったSBCで使う場合はDFRobotのGravityみたいにHX711をI2Cで使えるようにマイコンを介してやったほうがいいのかもしれないな。

追記:
結局GPIOは諦めて、Attiny202を使った変換アダプタを作ってI2Cで接続することにしました。

0 件のコメント:

コメントを投稿