我是靠谱客的博主 大方手链,这篇文章主要介绍树莓派ubuntu系统RPi引脚库权限问题 不使用sudo操控RPi库方法前言一 、ubuntuRPi引脚库权限问题二、解决方法总结,现在分享给大家,希望可以做个参考。

树莓派ubuntu系统RPi引脚库权限问题 不使用sudo操控RPi库方法

  • 前言
  • 一 、ubuntuRPi引脚库权限问题
  • 二、解决方法
  • 总结


前言

在使用树莓派进行人脸识别云台追踪时遇见RPI库和opencv不兼容问题,于是提供一种不适应管理员权限操控rpi库的方法

树莓派云台追踪博客:树莓派云台追踪


一 、ubuntuRPi引脚库权限问题

因为笔者也是第一次在树莓派上使用ubuntu镜像 还是最新版,所以在编写代码时先对不同功能进行分块测试。
1矫正舵机
这里需要下载RPi.GPIO库并使用pwm控制舵机。
下载完毕后在运行文件时如果使用命令

复制代码
1
2
pyrhon3 filename

会出现RPi.GPIO权限不够问题 如果使用

复制代码
1
2
sudo pyrhon3 filename

则可正常使用

2使用opencv测试摄像头功能(仅仅打开摄像头并显示)

如果运行文件时使用命令

复制代码
1
2
sudo pyrhon3 filename

会出现找不到视频的问题
如果使用

复制代码
1
2
pyrhon3 filename

则可正常使用

问题来了 当代码融合后 这就无法使用,不管采用哪个命令都会报错,于是在查阅资料后找到了一种不使用管理员权限操控RPi.GPIO库的方法。

二、解决方法

实际上 Raspbian上的Rpi.GPIO库是可以在普通用户下控制树莓派的GPIO的,然而在ArchlinuxARM下,却需要root用户才行这就引起了冲突。
好在RPi.GPIO提供了一个获取权限的脚本:create_gpio_user_permissions.py
然而这个脚本是没法在ArchlinuxARM上直接运行的,因为Archlinux缺少adduser命令。
脚本如下

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import grp import subprocess def ensure_gpiogroup(): try: grp.getgrnam('gpio') except KeyError: print('GPIO group does not exist - creating...') subprocess.call(['groupadd', '-f', '-r', 'gpio']) subprocess.call(['adduser', 'pi', 'gpio']) # in future, also for groups: # spi # i2c add_udev_rules() def add_udev_rules(): with open('/etc/udev/rules.d/99-gpio.rules','w') as f: f.write("""SUBSYSTEM=="bcm2835-gpiomem", KERNEL=="gpiomem", GROUP="gpio", MODE="0660" SUBSYSTEM=="gpio", KERNEL=="gpiochip*", ACTION=="add", PROGRAM="/bin/sh -c 'chown root:gpio /sys/class/gpio/export /sys/class/gpio/unexport ; chmod 220 /sys/class/gpio/export /sys/class/gpio/unexport'" SUBSYSTEM=="gpio", KERNEL=="gpio*", ACTION=="add", PROGRAM="/bin/sh -c 'chown root:gpio /sys%p/active_low /sys%p/direction /sys%p/edge /sys%p/value ; chmod 660 /sys%p/active_low /sys%p/direction /sys%p/edge /sys%p/value'" """) if __name__ == '__main__': ensure_gpiogroup()

那么我们手动执行脚本就行。
(以下命令请在终端操作)

1
首先建一个gpio组:

复制代码
1
2
groupadd -f -r gpio

2
然后把当前用户加入到gpio组
(如果你没有新建过用户,username就是pi)

复制代码
1
2
gpasswd -a username gpio

然后建立udev的规则文件:/etc/udev/rules.d/99-gpio.rules
进入目录下

复制代码
1
2
cd /etc/udev/rules.d/

然后新建一个名为99-gpio.rules的文件

复制代码
1
2
touch 99-gpio.rules

记得给它权限

复制代码
1
2
sudo chmod +777 99-gpio.rules

然后将以下内容复制到文件内并保存。

复制代码
1
2
3
4
SUBSYSTEM=="bcm2835-gpiomem", KERNEL=="gpiomem", GROUP="gpio", MODE="0660" SUBSYSTEM=="gpio", KERNEL=="gpiochip*", ACTION=="add", PROGRAM="/bin/sh -c 'chown root:gpio /sys/class/gpio/export /sys/class/gpio/unexport ; chmod 220 /sys/class/gpio/export /sys/class/gpio/unexport'" SUBSYSTEM=="gpio", KERNEL=="gpio*", ACTION=="add", PROGRAM="/bin/sh -c 'chown root:gpio /sys%p/active_low /sys%p/direction /sys%p/edge /sys%p/value ; chmod 660 /sys%p/active_low /sys%p/direction /sys%p/edge /sys%p/value'"

然后重启,就可以直接在普通用户下操作GPIO了,经测试,不光Rpi.GPIO库,wiringpi等其他库也可以了。


总结

文章部分参考博客园文章
https://www.cnblogs.com/yafengabc/p/8873397.html
在此感谢。

最后

以上就是大方手链最近收集整理的关于树莓派ubuntu系统RPi引脚库权限问题 不使用sudo操控RPi库方法前言一 、ubuntuRPi引脚库权限问题二、解决方法总结的全部内容,更多相关树莓派ubuntu系统RPi引脚库权限问题内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(128)

评论列表共有 0 条评论

立即
投稿
返回
顶部