使用Raspberry Pi 3的PyMonzo库和Adafruit_Neopixel库之间的冲突

时间:2018-11-06 12:49:53

标签: python raspberry-pi root adafruit

我目前在Raspberry Pi上的python中同时使用PyMonzo库和Adafruit_Neopixel库。简而言之,如果我以普通用户身份运行,则可以运行PyMonzo代码,但是我需要以root用户身份运行Neopixel代码。但是,当我以root身份运行时, PyMonzo代码给我错误,而当我不是root身份运行时,Neopixel代码给我错误。

我使用PyMonzo库访问Monzo API,获取我的帐户信息,并将其输出到屏幕上。该库可以在这里找到:https://github.com/pawelad/pymonzo 我已成功按照自述文件中的所有说明设置了API访问权限,并将客户端ID,客户端密码和auth代码保存在auth.py文件中。当我正常运行这些代码(即python3 filename.py)时,这些代码就会起作用,并且我可以毫无问题地获取交易数据,余额等。

但是,我还使用Adafruit Neopixel库同时控制一些LED灯。该库可以在这里找到:https://github.com/adafruit/Adafruit_NeoPixel使用该库显然有两个约束:必须在Python 3中运行,并且必须以root身份运行。该文档解释说:“ 要使NeoPixels在Raspberry Pi上运行,您必须以root用户身份运行代码!需要root访问权限才能访问RPi外设。”可以在此处找到更多文档:{{3} }

当我运行sudo python3 filename.py时,错误消息:

Traceback (most recent call last):
File "filename.py", line 34, in 
monzo = MonzoAPI( )
File "/usr/local/lib/python3.5/dist-packages/pymonzo/monzo_api.py", line 106, in init
"To authenticate and use Monzo public API you need to pass "
ValueError: To authenticate and use Monzo public API you need to pass (or set as environment variables either the access token or all of client ID, client secret and authentication code. For more info see https://github.com/pawelad/pymonzo#authentication

如果我在不使用sudo的情况下正常运行代码,则出现的错误是:

Can't open /dev/mem: Operation not permitted
Traceback (most recent call last):
File "filename.py", line 66, in 
neopix.show( )
.....
RuntimeError: ws2811_init failed with code -5 (mmap( ) failed)
swig/python detected a memory leak of type 'ws2811_t *', no destructor found

有人知道这两种操作之间是否存在冲突的方法,也许是可以以root用户身份运行pyMonzo的方法?

我尝试运行sudo chmod 666 / dev / mem,并在没有sudo的情况下运行它。

非常感谢您。

1 个答案:

答案 0 :(得分:0)

我不知道如何以root用户身份运行pyMonzo,但我知道如何以非root用户身份运行python3 Neopixel代码。

我遇到了类似的问题,在Adafruit的文档中没有发现任何喜悦。但是,如果您转到documentation of the rpi_ws281x library itself,则有更多信息:

  

可以使用的GPIO受Pi和   会根据驱动它们的方法(PWM,PCM或SPI)而有所不同。

我发现使用SPI驱动它们非常有利,就像我在板上使用音频一样,您需要禁用它才能使用PWM或PCM。

然后发现,如果您从GPIO 10引脚运行Neopixels,并使用SPI而不是PWM或PCM,那么它带来的好处很小:

  

如果您想控制自己的SPI,则要求您属于gpio组   没有根的LED。

因此,将您的用户添加到gpio组中,嘿,presto,您无需root即可运行。