树莓派接口
GPIO接口
编号方式
3.3V、5V(VCC):电源正极
GND:接地用,负极负极负极
SDA.0、SDA.1:这个是 I2C(I方C)总线数据传输口
SCL.0、SCL.1:I2C总线的时钟信号
GPIO.x(x = 0,1,2,3,4,5,6,7;21,22,23,24,25,26,27,28,29):通用输入输出接口,GPIO端口,可通过软件分别配置成输入或输出
TXD:用来发送数据
RXD:用来接收数据(一般用于单片机与计算机或者芯片通信,单片机与计算机进行串口通信时,单片机的RXD接计算机的TXD,单片机的TXD接计算机的RXD。详解:https://blog.csdn.net/sdwuyulunbi/article/details/6632382)
MOSI:主输出 从输入
MISO:主输入 从输出
SCLK:系统时钟,指晶振频率
CE0、CE1:片选信号(芯片有效)-表示低电平有效
在实际使用中,许多项目还需要一些不同的功能。因此树莓派的一些GPIO引脚具有I2C、SPI和UART接口等双重功能,与树莓派3B+相比,树莓派4 支持这些功能的接口增加了,使许多引脚的功能得到了扩展。下面是对每种功能做一下简要的描述。
I2C接口
I2C是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。树莓派通过I2C接口可控制多个传感器和组件。它们的通信是通过SDA(数据引脚)和SCL(时钟速度引脚)来完成的。每个从设备都有一个唯一的地址,允许与许多设备间快速通信。ID_EEPROM引脚也是I2C协议,它用于与HATs通信。
SPI接口
SPI是串行外设接口,用于控制具有主从关系的组件,采用从进主出和主进从出的方式工作,树莓派上SPI由SCLK、MOSI、MISO接口组成,SCLK用于控制数据速度,MOSI将数据从树莓派发送到所连接的设备,而MISO则相反。
UART接口
有使用Arduino的朋友一定听说过UART或Serial,通用异步收/发器接口用于将Arduino连接到为其编程的计算机上,也用于其他设备与 RX 和 TX 引脚之间的通信。如果树莓派在 raspi-config 中启用了串口终端,则可以使用这些引脚通过电脑来控制树莓派,也可以直接用于控制Arduino。
PWM接口
在树莓派上,所有的引脚都可以实现软件PWM,而GPIO12、GPIO13、GPIO18、GPIO19可以实现硬件脉宽调制。关于PWM可阅读 什么是PWM 这篇文章。
python下使用GPIO
导入模块
import RPi.GPIO as GPIO
设置引脚引用模式
GPIO.setmode(GPIO.BOARD)
#or
GPIO.setmode(GPIO.BCM)
检测使用的哪种模式可以使用
mode=GPIO.getmode()
#mode的取值有GPIO.BOARD, GPIO.BCM, None
以下代码如无特殊说明,均使用GPIO.BOARD引脚映射模式。
设置引脚方向(输入,输出)
如 设置40号引脚为输入方向
pin = 40
GPIO.setup(pin,GPIO.IN)
输出同理
GPIO.setup(pin,GPIO.OUT)
#输出还可以加初始电平:
GPIO.setup(pin,GPIO.OUT,initial=GPIO.HIGH)
如果要同时设置多个引脚:
list=[11,12]
GPIO.setup(list,GPIO.OUT)
如果要同时设置多个引脚
list=[11,12]
GPIO.setup(list,GPIO.OUT)
释放
一般来说,程序到达最后都需要释放资源,这个好习惯可以避免偶然损坏树莓派。释放脚本中的使用的引脚:
GPIO.cleanup()
警告
如果RPi.GRIO检测到一个引脚已经被设置成了非默认值,那么你将看到一个警告信息。你可以通过下列代码禁用警告:
GPIO.setwarnings(False)
注意,GPIO.cleanup()只会释放掉脚本中使用的GPIO引脚,并会清除设置的引脚编号规则。
读取
我们也常常需要读取引脚的输入状态,获取引脚输入状态如下代码:
GPIO.input(channel)
#低电平返回0 / GPIO.LOW / False,高电平返回1 / GPIO.HIGH / True。
如果输入引脚处于悬空状态,引脚的值将是漂动的。
换句话说,读取到的值是未知的,因为它并没有被连接到任何的信号上,直到按下一个按钮或开关。
由于干扰的影响,输入的值可能会反复的变化。
使用如下代码可以解决问题:
GPIO.setup(channel, GPIO.IN, pull_up_down=GPIO.PUD_UP)
# or
GPIO.setup(channel, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
#需要注意的是,上面的读取代码只是获取当前一瞬间的引脚输入信号。
如果需要实时监控引脚的状态变化,可以有两种办法。
最简单原始的方式是每隔一段时间检查输入的信号值,这种方式被称为轮询。
如果你的程序读取的时机错误,则很可能会丢失输入信号。
轮询是在循环中执行的,这种方式比较占用处理器资源。
轮询方式
while GPIO.input(channel) == GPIO.LOW:
time.sleep(0.01) # wait 10 ms to give CPU chance to do other things
另一种响应GPIO输入的方式是使用中断(边缘检测),这里的边缘是指信号从高到低的变换(下降沿)或从低到高的变换(上升沿)。
边缘检测
边缘是指信号状态的改变,从低到高(上升沿)或从高到低(下降沿)。通常情况下,我们更关心于输入状态的该边而不是输入信号的值。这种状态的该边被称为事件。
wait_for_edge() 函数
wait_for_edge()被用于阻止程序的继续执行,直到检测到一个边缘。
channel = GPIO.wait_for_edge(channel, GPIO_RISING, timeout=5000)
add_event_detect() 函数
该函数对一个引脚进行监听,一旦引脚输入状态发生了改变,调用event_detected()函数会返回true
GPIO.add_event_detect(channel, GPIO.RISING)
if GPIO.event_detected(channel):
print('Button pressed')
RPI.GPIO 模块的脉宽调制(PWM)功能
脉宽调制(PWM)是指用微处理器的数字输出来对模拟电路进行控制,是一种对模拟信号电平进行数字编码的方法。在树莓派上,可以通过对GPIO的编程来实现PWM。
创建一个 PWM 实例:
p = GPIO.PWM(channel, frequency)
启用 PWM:
p.start(dc) # dc 代表占空比(范围:0.0 <= dc <= 100.0)
更改频率:
p.ChangeFrequency(freq) # freq 为设置的新频率,单位为 Hz
更改占空比:
p.ChangeDutyCycle(dc) # 范围:0.0 <= dc >= 100.0
停止 PWM:
p.stop()
#注意,如果实例中的变量“p”超出范围,也会导致 PWM 停止。
DSI显示端口
DSI显示端口允许树莓派连接到类似于平板电脑的触摸显示器,这种显示器可以支持触摸控制功能,常见尺寸为7英寸、5英寸等。
CSI摄像头接口
CSI摄像头接口是一个专用的连接器,它允许树莓派连接到树莓派的摄像头模块。一般的网络摄像头是不能在这个接口使用的,因为它们只有一个USB接口。
HDMI / USB / Network接口
这些插槽用于将树莓派连接到HDMI显示器、鼠标和键盘等USB设备,以及用于internet访问的以太网连接。不过,树莓派3B内置Wi-Fi功能,所以一般情况下以太网接口不是很常用。
如果要用到usb串口连接其他设备的话,可以通过 python 的serial库来进行操作:
import serial
ser=serial.Serial('/dev/ttyUSB0',9600)#如果是1就写1
ser.write('12345'.encode())#这里发的时候要有encode(),不然系统会报错格式不对
其他serial库的使用方法自行了解即可。
Micro USB 电源接口 / 3.5mm音频输出接口
树莓派的电源可以通过Micro USB数据线连接到USB 5V充电器直接输入,GPIO引脚的电源也通过它提供。刚安装上树莓派操作系统时,音频默认是通过HDMI输出,可以通过设置从3.5mm音频接口输出。