树莓派--GPIO(python)

  1. 准备

  • 硬件:CM4(4GB DDR+32GB EMMC 板载WIFI和蓝牙)

CM4-to-Pi4-Adapter

  1. 安装 python GPIO 库

  • 创建python GPIO库下载的工程路径

gh@ubuntu:~$ mkdir -p ~/project/raspberry_pi_hardware/gpio
  • 下载python GPIO库

  • 然后使用文件服务器(winscp,filezilla,mobaxterm等等),将下载的文件传到树莓派。或者其他方式,这取决于树莓派有没有桌面。

  • 切换路径,并解压GPIO库。

gh@ubuntu:~$ cd ~/project/raspberry_pi_hardware/gpio/
gh@ubuntu:~/project/raspberry_pi_hardware/gpio$ ls
RPi.GPIO-0.7.0.tar.gz
gh@ubuntu:~/project/raspberry_pi_hardware/gpio$ tar -vxf RPi.GPIO-0.7.0.tar.gz
  • 安装GPIO库

gh@ubuntu:~/project/raspberry_pi_hardware/gpio$ cd RPi.GPIO-0.7.0/
gh@ubuntu:~/project/raspberry_pi_hardware/gpio/RPi.GPIO-0.7.0$ ls
CHANGELOG.txt  INSTALL.txt  LICENCE.txt  PKG-INFO  README.txt  RPi  create_gpio_user_permissions.py  setup.py  source  test
gh@ubuntu:~/project/raspberry_pi_hardware/gpio/RPi.GPIO-0.7.0$ sudo  python3  setup.py  install

以上步骤也可以直接用以下指令

pip install RPi.GPIO
pip install spidev
  • 修改GPIO操作权限

gh@ubuntu:~$  ls  -l  /dev/gpiomem
crw------- 1 root root 239, 0 Sep  8 09:58 /dev/gpiomem
gh@ubuntu:~$  sudo  chmod  a+rw  /dev/gpiomem
gh@ubuntu:~$  ls  -l  /dev/gpiomem
crw-rw-rw- 1 root root 239, 0 Sep  8 09:58 /dev/gpiomem
  1. 测试 python GPIO 库

gh@ubuntu:~/project/raspberry_pi_hardware/gpio$ mkdir gpio_control
gh@ubuntu:~/project/raspberry_pi_hardware/gpio$ cd gpio_control/
gh@ubuntu:~/project/raspberry_pi_hardware/gpio/gpio_control$ touch gpio_test1.py
gh@ubuntu:~/project/raspberry_pi_hardware/gpio/gpio_control$

gpio_test1.py文件输入内容如下:

注意:因为普通用户没有GPIO操作权限,因此需要使用sudo 命令执行脚本

import time
try:
    import RPi.GPIO as GPIO
except RuntimeError:
    print("Error importing RPi.GPIO!  This is probably because you need superuser privileges.  You can achieve this by using 'sudo' to run your script")
GPIO.setmode(GPIO.BOARD)  # BOARD编号方式,基于插座引脚编号
GPIO.setup(38, GPIO.OUT)  # 输出模式
GPIO.setwarnings(False)   # 禁止警告
# GPIO.setmode(GPIO.BCM)  # 若使用BCM编号方式,上两行代码应这样写
# GPIO.setup(17, GPIO.OUT)  # 对应为17号脚
 
try:
    while True:
        GPIO.output(38, GPIO.HIGH)
        time.sleep(0.001)
        GPIO.output(38, GPIO.LOW)
        time.sleep(0.001)
except KeyboardInterrupt:
    pass
GPIO.cleanup()

添加.py文件的可执行权限

gh@ubuntu:~/project/raspberry_pi_hardware/gpio/gpio_control$ ls -l
total 4
-rw-rw-r-- 1 gh gh 408 Feb 26 08:47 gpio_test1.py
gh@ubuntu:~/project/raspberry_pi_hardware/gpio/gpio_control$ chmod +x *.py
gh@ubuntu:~/project/raspberry_pi_hardware/gpio/gpio_control$ ls -l
total 4
-rwxrwxr-x 1 gh gh 408 Feb 26 08:47 gpio_test1.py
%% 执行
gh@ubuntu:python3 gpio_test1.py

实验现象分析:我们设置的矩形波频率为500Hz,但是示波器测出该矩形波频率为456Hz,也就是说python库的时时性比较差。

关于添加GPIO可执行权限的方法

参考:https://www.guyuehome.com/37647

  • 首先,创建一个gpio组

groupadd -f -r gpio
  • 然后把当前用户加入到gpio组

gpasswd -a username gpio
  • 然后建立udev的规则文件:/etc/udev/rules.d/99-gpio.rules

cd /etc/udev/rules.d/
touch 99-gpio.rules
sudo chmod +777 99-gpio.rules

99-gpio.rules文件中输入:

SUBSYSTEM=="bcm2835-gpiomem", KERNEL=="gpiomem", GROUP="gpio", MODE="0666"
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定义的指令

gh@ubuntu:~/project/raspberry_pi_hardware/gpio/gpio_control$ gpio readall
 +-----+-----+---------+------+---+---Pi ?---+---+------+---------+-----+-----+
 | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 |     |     |    3.3v |      |   |  1 || 2  |   |      | 5v      |     |     |
 |   2 |   8 |   SDA.1 | ALT0 | 1 |  3 || 4  |   |      | 5v      |     |     |
 |   3 |   9 |   SCL.1 | ALT0 | 1 |  5 || 6  |   |      | 0v      |     |     |
 |   4 |   7 | GPIO. 7 |   IN | 1 |  7 || 8  | 1 | ALT5 | TxD     | 15  | 14  |
 |     |     |      0v |      |   |  9 || 10 | 1 | ALT5 | RxD     | 16  | 15  |
 |  17 |   0 | GPIO. 0 |  OUT | 0 | 11 || 12 | 1 | IN   | GPIO. 1 | 1   | 18  |
 |  27 |   2 | GPIO. 2 |   IN | 0 | 13 || 14 |   |      | 0v      |     |     |
 |  22 |   3 | GPIO. 3 |   IN | 0 | 15 || 16 | 0 | IN   | GPIO. 4 | 4   | 23  |
 |     |     |    3.3v |      |   | 17 || 18 | 0 | IN   | GPIO. 5 | 5   | 24  |
 |  10 |  12 |    MOSI | ALT0 | 0 | 19 || 20 |   |      | 0v      |     |     |
 |   9 |  13 |    MISO | ALT0 | 0 | 21 || 22 | 0 | IN   | GPIO. 6 | 6   | 25  |
 |  11 |  14 |    SCLK | ALT0 | 0 | 23 || 24 | 1 | OUT  | CE0     | 10  | 8   |
 |     |     |      0v |      |   | 25 || 26 | 1 | OUT  | CE1     | 11  | 7   |
 |   0 |  30 |   SDA.0 |   IN | 1 | 27 || 28 | 1 | IN   | SCL.0   | 31  | 1   |
 |   5 |  21 | GPIO.21 |   IN | 1 | 29 || 30 |   |      | 0v      |     |     |
 |   6 |  22 | GPIO.22 |   IN | 1 | 31 || 32 | 0 | IN   | GPIO.26 | 26  | 12  |
 |  13 |  23 | GPIO.23 |   IN | 0 | 33 || 34 |   |      | 0v      |     |     |
 |  19 |  24 | GPIO.24 |   IN | 0 | 35 || 36 | 0 | IN   | GPIO.27 | 27  | 16  |
 |  26 |  25 | GPIO.25 |   IN | 1 | 37 || 38 | 1 | IN   | GPIO.28 | 28  | 20  |
 |     |     |      0v |      |   | 39 || 40 | 0 | IN   | GPIO.29 | 29  | 21  |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
 +-----+-----+---------+------+---+---Pi ?---+---+------+---------+-----+-----+

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值