PyMonzo 库和使用 Raspberry Pi 3 的 Adafruit_Neopixel 库之间的冲突
Posted
技术标签:
【中文标题】PyMonzo 库和使用 Raspberry Pi 3 的 Adafruit_Neopixel 库之间的冲突【英文标题】:Conflict between PyMonzo library and Adafruit_Neopixel library using Raspberry Pi 3 【发布时间】:2018-11-06 12:49:52 【问题描述】:我目前在 Raspberry Pi 上的 python 中同时使用 PyMonzo 库和 Adafruit_Neopixel 库。简而言之,如果我以普通用户身份运行,我可以运行 PyMonzo 代码,但我需要以 root 身份运行 Neopixel 代码。但是,当我以 root 身份运行时,PyMonzo 代码会给我错误,而当我不以 root 身份运行时,Neopixel 代码会给我错误。
我使用 PyMonzo 库访问 Monzo API,获取我的帐户信息,并将其输出到屏幕上。图书馆可以在这里找到:https://github.com/pawelad/pymonzo 我已设法按照自述文件中的所有说明设置 API 访问权限,将客户端 ID、客户端密码和身份验证代码保存在 auth.py 文件中。这些代码在我正常运行的情况下,即python3 filename.py,我可以毫无问题地获取我的交易数据、余额等。
不过,我同时也在使用 Adafruit Neopixel 库来控制一些 LED 灯。该库可以在这里找到:https://github.com/adafruit/Adafruit_NeoPixel 使用这个库显然有两个限制:它必须在 Python 3 中运行,并且必须以 root 身份运行。该文档解释说“要让 NeoPixels 在 Raspberry Pi 上运行,您必须以 root 身份运行代码!访问 RPi 外围设备需要 root 访问权限。”更多文档可以在此处找到:https://cdn-learn.adafruit.com/downloads/pdf/neopixels-on-raspberry-pi.pdf
当我运行 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
有谁知道是否有办法消除这两个操作之间的冲突,也许是一种可以让 pyMonzo 以 root 身份运行的方法?
我尝试过运行 sudo chmod 666 /dev/mem,并在不使用 sudo 的情况下运行它。
非常感谢。
【问题讨论】:
【参考方案1】:我不知道如何以 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,那么它会带来这个漂亮的小好处:
如果您想控制您的 没有根的 LED。
因此,将您的用户添加到 gpio 组,然后,您好,无需 root 即可运行。
【讨论】:
以上是关于PyMonzo 库和使用 Raspberry Pi 3 的 Adafruit_Neopixel 库之间的冲突的主要内容,如果未能解决你的问题,请参考以下文章
树莓派(Raspberry Pi)4B无界面安装 Raspberry Pi 系统篇