5

Debian の Adafruit Python IO ライブラリの GPIO に問題があります (armhf.org から)。rootとして機能しますが、通常のユーザーとしては機能しません。

udev ルールを追加しました。

KERNEL=="gpio*", SUBSYSTEM=="gpio", ACTION=="add", PROGRAM="/bin/sh -c 'chown -R debian:gpio /sys/class/gpio'"
KERNEL=="gpio*", SUBSYSTEM=="gpio", ACTION=="add", PROGRAM="/bin/sh -c 'chown -R debian:gpio /sys/devices/virtual/gpio/'"

私のユーザー「debian」はグループ「gpio」に属しています。これで、ユーザーのシェルで echo... > /sys... を使用して gpio を制御できるようになりました。しかし、Pythonではそうではありません。エラーなしでは機能しません。

ただし、手動で「echo 45 > /sys/class/gpio/export」を実行してから、この gpio で python を起動すると動作します。

Python スクリプトを開始した後、/sys/class/gpio に gpio45 が表示されますが、機能しません。手動でエクスポートした後にのみ機能します。関数 gpio_export() をソース コードからコンパイルして、手動で開始しようとしました。実際に動作します。しかし、実際のスクリプトでは、gpio ファイルを作成するだけで機能しません。

ここに私のテストスクリプトがあります:

import Adafruit_BBIO.GPIO as GPIO                                                                    
import time                                                                                          

P = "P8_11"                                                                                          

GPIO.setup(P, GPIO.OUT)                                                                              
for i in xrange(100):                                                                                
        if i % 2 == 0:                                                                               
                GPIO.output(P, GPIO.HIGH)                                                            
        else:                                                                                        
                GPIO.output(P, GPIO.LOW)                                                             
        time.sleep(0.5)                                                                              
GPIO.cleanup() 

ありがとう

-=UPDATED=- バグです。私の問題を解決する残忍なパッチと一緒にプロジェクトのgithubページに投稿しましたhttps://github.com/adafruit/adafruit-beaglebone-io-python/issues/36

--- adafruit-beaglebone-io-python/source/py_gpio.c  2013-09-17 20:10:08.000000000 +0300
+++ adafruit-beaglebone-io-python/source/py_gpio.c  2013-09-21 02:54:43.000000000 +0300
@@ -105,10 +105,26 @@

    if (get_gpio_number(channel, &gpio))
        return NULL;
-
-   gpio_export(gpio);
-   gpio_set_direction(gpio, direction);
-   gpio_set_value(gpio, pud);
+   
+   unsigned int count = 1000000;
+   int res = -1;
+   do {
+       res = gpio_export(gpio);
+   } while(res != 0 && count-- > 0);
+   if(count == 0)
+      return NULL;
+   count = 1000000;
+   do {
+       res = gpio_set_direction(gpio, direction);
+   } while(res != 0 && count-- > 0);
+   if(count == 0)
+      return NULL;
+   count = 1000000;
+   do {
+   res = gpio_set_value(gpio, pud);
+   } while(res != 0 && count-- > 0);
+   if(count == 0)
+      return NULL;

    gpio_direction[gpio] = direction;

基本的に、戻り値を確認する必要があります。私の場合、ファイルシステムにまだ表示されていないため、gpio ファイルをエクスポートして新しく作成された open() を開くことができません。

4

2 に答える 2

1

解決済み このパッチはすでに受け入れられています

于 2014-07-14T16:34:10.230 に答える
-2

ビーグルボーン ブラック Rev c を使用しています。GPIO 用の Debian および Adafruit ライブラリが付属しています。4つの内蔵LEDを点滅させる簡単なプログラムを試しました。プログラムは LED を点滅させません。ボーンスクリプトで試してみましたが、うまくいきました。root ユーザーとしてログインしています。

于 2014-12-31T05:55:21.143 に答える