Конфликт между библиотекой PyMonzo и библиотекой Adafruit_Neopixel с использованием Raspberry Pi 3 - PullRequest
0 голосов
/ 06 ноября 2018

В настоящее время я использую библиотеку PyMonzo и библиотеку Adafruit_Neopixel в моем питоне на Raspberry Pi. Короче говоря, я могу запускать коды PyMonzo, если я работаю как обычный пользователь, но мне нужно запускать коды Neopixel как root. Однако коды PyMonzo выдают мне ошибки при запуске от имени пользователя root, а коды Neopixel выдают ошибки, когда я не выполняю от имени пользователя root. Я использую библиотеку PyMonzo для доступа к API Monzo, получения информации об учетной записи и вывода ее на экран. Библиотеку можно найти здесь: https://github.com/pawelad/pymonzo Мне удалось настроить доступ к API, следуя всем инструкциям в файле readme, сохранив идентификатор клиента, секрет клиента и код авторизации в файле auth.py. Коды работают, когда я их запускаю нормально, то есть python3 filename.py, и я могу без проблем получить данные о транзакции, баланс и т. Д.

Однако я также использую библиотеку Adafruit Neopixel для одновременного управления некоторыми светодиодами. Библиотека может быть найдена здесь: https://github.com/adafruit/Adafruit_NeoPixel Использование этой библиотеки, по-видимому, имеет два ограничения: она должна быть запущена в Python 3, и она должна быть запущена от имени пользователя root. В документации объясняется, что « Чтобы NeoPixels работал на Raspberry Pi, вы должны запустить код как root! Для доступа к периферийным устройствам RPi требуется root-доступ. » Дополнительную документацию можно найти здесь: https://cdn -learn.adafruit.com / загрузки / PDF / neopixels-на-малиново-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 Ответ

0 голосов
/ 31 января 2019

Я не знаю, как вы можете запустить pyMonzo от имени root, но я знаю, как вы можете запустить ваш код Python3 Neopixel от имени пользователя root.

Я столкнулся с подобной проблемой и не нашел радости в документации Adafruit. Но если вы перейдете к документации самой библиотеки rpi_ws281x , то получите больше информации:

GPIO, которые можно использовать, ограничены аппаратным обеспечением Pi и будет зависеть от метода, используемого для их управления (PWM, PCM или SPI).

Мне показалось выгодным управлять ими с помощью SPI, поскольку я использовал звук на плате, и вам нужно отключить его, чтобы использовать PWM или PCM.

Тогда обнаружилось, что если вы запускаете свои Neopixels со штыря GPIO 10 и используете SPI вместо PWM или PCM, то это дает небольшое преимущество:

SPI требует, чтобы вы были в группе gpio, если вы хотите контролировать свои Светодиоды без рута.

Так что добавьте своего пользователя в группу gpio и эй presto, вы можете работать без рута.

...