当前位置:   article > 正文

树莓派GPIO点灯_pi control gpio

pi control gpio

【准备工作】
首先准备一个能正常使用的树莓派,远程登录或者接屏幕都随意,这不是重要的。
(笔者使用的是树莓派3B+)
焊接一个电阻+小灯珠的简易电路,接到树莓派对应的GPIO,类似下图
在这里插入图片描述
【操作方法】
首先附上树莓派的引脚对照表:(注意,下图中每个GPIO对应了三种不同的编码)
在这里插入图片描述
附带介绍一种方法可以直接输入命令查询GPIO引脚编号:
此工具由GPIO Zero Python库提供,默认情况下,它安装在Raspbian桌面映像上,但不安装在Raspbian Lite上。
打开终端输入命令 pinout
在这里插入图片描述
看到引脚对照表中的3种编码,实际上也对应了3种控制GPIO的方式,树莓派内核中已经编译自带了 gpio 的驱动,我们只需通过一些第三方写好的库函数来完成具体的操作,即可控制相应外设,比较常见的操作库函数有

python GPIO

开发语言——python
简单介绍——树莓派官方资料中推荐且容易上手。python GPIO 是一个小型的 python 库,可以帮助用户完成 raspberry 相关 IO 口操作,但是 python GPIO 库还没有支持 SPI、I2C 或者 1-wire 等总线接口。
官方网站—— https://code.google.com/p/raspberry-gpio-python/

wiringPi

开发语言——C 语言
简单介绍——wiringPi 适合那些具有 C 语言基础,在接触树莓派之前已经接触过单片机或者嵌入式开发的人群。wiringPi 的 API 函数和 arduino 非常相似,这也使得它广受欢迎。作者给出了大量的说明和示例代码,这些示例代码也包括 UART 设备,I2C 设备和 SPI 设备等。
官方网站—— http://wiringpi.com/

BCM2835 C Library

开发语言——C 语言
简单介绍——BCM2835 C Library 可以理解为使用C语言实现的相关底层驱动,BCM2835 C Library 的驱动库包括 GPIO、SPI 和 UART 等,可以通过学习 BCM2835 C Library 熟悉 BCM2835 相关的寄存器操作。如果有机会开发树莓派上的 linux 驱动,或自主开发 python 或 PHP 扩展驱动,可以从 BCM2835 C Library 找到不少的“灵感”。
官方网站—— http://www.airspayce.com/mikem/bcm2835/

本文暂时只介绍使用Python控制GPIO,树莓派基本都预装好了Python的GPIO库。
1、安装Python RPI.GPIO库
带桌面的版本已经安装了Python RPI.GPIO库,测试有没有安装:
在终端打开 Python3
在这里插入图片描述
在shell中输入命令尝试导入库: import RPi.GPIO as GPIO 。如果没有出现error,就表示已经安装了,可以直接跳到下一步。
在这里插入图片描述

如果出现错误,则执行以下命令:

sudo apt-get update
sudo apt-get install python3-rpi.gpio
  • 1
  • 2

2、编写代码
在桌面新建文件led_test.py,名字和路径随意。新建完成后直接双击打开,也可以在SSH登录操作,用nano或vim编辑即可。
编写代码如下:

#!/usr/bin/python3
# -*- coding: utf-8 -*-                     #通过声明可以在程序中书写中文

import RPi.GPIO as GPIO  #引入RPi.GPIO库函数命名为GPIO
import time              #引入计时time函数

GPIO.setmode(GPIO.BCM)  #将GPIO编程方式设置为BCM模式
GPIO.setup(17, GPIO.OUT) #将GPIO引脚17设置为输出引脚
GPIO.output(17, GPIO.LOW) #拉低关灯
blinks = 0
print('开始闪烁')
while (blinks < 5): #闪烁5次
    GPIO.output(17, GPIO.HIGH)
    time.sleep(1.0)    #延时1秒
    GPIO.output(17, GPIO.LOW)
    time.sleep(1.0)
    blinks = blinks + 1
GPIO.output(18, GPIO.LOW) #拉低关灯
GPIO.cleanup() #重置 GPIO 接口
print('结束闪烁')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

注意:
GPIO.setmode() 有两种参数可以选择:可以使用 GPIO.BOARD 选项告诉库根据 GPIO 接口的引脚号引用信号,或者使用 Broadcom 芯片的信号编号( GPIO.setmode(GPIO.BCM) )。

GPIO.cleanup() 用于重置 GPIO 接口,它把所有的 GPIO 引脚设置为低电平状态,所以没有多余的信号出现在界面上。在不使用改函数的情况下,如果试图配置一个已分配信号值的 GPIO 信号引脚,那么 RPi.GPIO 模块会产生一条警告信息。

3、运行程序
依次输入命令

cd ~/Desktop
sudo python led_test.py
  • 1
  • 2

可以观察到LED1s闪一次,一共闪烁5次。

上面是直接输出高低电平的方法,下面还可以使用PWM完成LED闪烁:

#!/usr/bin/python3

import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.OUT)
blink = GPIO.PWM(17, 1)
try:
    blink.start(50)
    while True:
        pass
except KeyboardInterrupt:
    blink.stop()
GPIO.cleanup()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

start() 方法指定了占空比(从 1 到 100)。在开始 PWM 信号后,程序就可以解放出来做其他事情了。GPIO 17 会持续发送 PWM 信号,直到停止它。 blink = GPIO.PWM(17, 1) 指定了 PWM 信号以 1HZ 的频率发送,灯 1 秒闪烁一次。按 Control + C 中止闪烁退出。

【关于查询GPIO pin脚位】
除了上面的方法,还介绍一种方法,使用WiringPi:
上面已经提过了,WiringPi是一个树莓派使用的C语言编写的BCM2835通用输入输出控制库。以GNULGPLv3许可证发行,可用于C和C++以及很多其他语言(经过适当封装),和Arduino的”wiring system1“相似。
笔者的系统貌似已经从官网下载下来已经默认安装了WiringPi,命令gpio -v可以查询版本。命令gpio readall可以查看pin脚位编号。
在这里插入图片描述

参考:
https://www.cnblogs.com/zhenqichai/p/raspberry-pi-control-GPIO-with-python.html
https://jingyan.baidu.com/article/ad310e800ef7371848f49e4d.html
https://blog.csdn.net/K_AAbb/article/details/114951111
https://www.cnblogs.com/wirehome/p/10412337.html
https://www.jianshu.com/p/008339095fd6

https://www.cnblogs.com/isha2088/p/6282191.html
https://blog.csdn.net/qq_40657528/article/details/86515018
https://shumeipai.nxez.com/raspberry-pi-pins-version-40
https://wiki.jikexueyuan.com/project/raspberry-pi/gpio.html
https://blog.csdn.net/qq_36958104/article/details/83447224

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/673957
推荐阅读
相关标签
  

闽ICP备14008679号