簡體   English   中英

BeagleBone Black Adafruit IO Python庫GPIO用戶權限

[英]BeagleBone Black Adafruit IO Python library GPIO user permissions

我在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”中。 現在我可以在用戶的​​shell中使用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;

基本上,您必須檢查返回值。 在我的情況下,open()無法通過導出gpio文件打開新創建,因為它尚未出現在文件系統上。

解決了這個補丁已被接受

我正在使用Beaglebone black Rev c。 它附帶了GPIO的Debian和Adafruit庫。 我嘗試了一個簡單的程序來閃爍4個內置LED。 該程序不會使LED閃爍。 我用bonescript嘗試了它,它的工作原理。 我以root用戶身份登錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM