这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 【树莓派5试用】3、GPIO操作

共3条 1/1 1 跳转至

【树莓派5试用】3、GPIO操作

高工
2025-06-08 13:44:53     打赏

        树莓派可以认为是一个小主机,不过也不能简单的认为是个小主机,他也有和MCU评估板测试时的一样的便利性,也就是它的经典的40 PIN针脚。

        以下是在官网找到的树莓派5的40 PIN针脚定义:

    

image.png

        当然我们也可以通过命令行的方法查看:
pinout
        可以看到输出的引脚定义:

image.png

        接下来就是硬件的连接,我们找到了一个STM32的板子,其上面就带有这些测试所需的按键和LED:

image.png

image.png

        我们在连接的时候需要注意,为了让开发板不工作,需要断开单片机的供电,但是要保留3V3和VDD的供电,这一部分由树莓派来供电;选择合适的硬件进行控制,一共连接了4根线:

image.png

        基本上和官网的介绍是一样的,接下来我们就看看这些具体的操作,软件方面的控制基本上是通过python进行的,首先我们需要先安装一下python,之前先更新一下系统:
sudo apt update
sudo apt upgrade
注意这个建议经常更新一下,有妙用;更新完成后就可以进行python环境的安装了:
sudo apt install python3 python3-pip
        通过以下命令查询一下:
python
        注意这样会直接进入python环境:

image.png

        输入命令“quit()”推出环境,我们确认安装成功就可以了,后面我们需要编辑器进行python文件的编写。

        我们这里先主要进行的是GPIO的输入和输出操作,实际上也是平常测试最喜欢的环节点灯,我们首先用到的是python编程,咱们打开VNC可以在界面中发现自带的编辑器:

image.png

        用哪个都可以,这里我们选用Thonny进行调试,这里我们用到的是RPI.GPIO库,本身树莓派系统就带有这个库,我们直接调用就可以,咱们先简单的联动一下,按键按下LED亮:

import RPi.GPIO as GPIO
import time

LED_PIN = 3 #LED
KEY_PIN = 37 #KEY

GPIO.setmode(GPIO.BOARD) 
GPIO.setup(LED_PIN, GPIO.OUT)
GPIO.setup(KEY_PIN, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

while True:
    key_status = GPIO.input(KEY_PIN)
    if key_status == GPIO.HIGH:
        GPIO.output(LED_PIN, True)
        print("LED ON")
    else:
        GPIO.output(LED_PIN, False)
        print("LED OFF")
    time.sleep(0.1)#delay 0.1s
        在测试的过程中就出现了引脚选择的问题,一开始我选的5脚作为按键的输入,注意这里:

image.png

        3脚和5脚都作为了SPI通信的复用功能,内部硬件已经上拉了电阻,作为输出引脚不影响,可是输入对上面的按键电路就由影响了,后来我换到了37脚,就正常了。

        当然了也可以通过中断的方式实现,就和MCU的中断一样,事件发生只响应一次,实现中断和边缘的响应,中断和边缘检测边缘是电信号从LOW到HIGH(上升沿)或从HIGH到LOW(下降沿)的状态变化。通常,我们更关心输入状态的变化,而不是它的值。这种状态的变化是一个事件。为了避免在程序忙于做其他事情时错过按下按钮,有两种方法可以解决这个问题:wait_for_edge()函数、event_detected()函数和在检测到边缘时运行的线程回调函数,代码如下:

import RPi.GPIO as GPIO
import time

LED_PIN = 3 #LED
KEY_PIN = 37 #KEY

def key_callback(channel):
    print("Button pressed!"
    KEY_state = GPIO.input(LED_PIN)

    GPIO.output(LED_PIN, not KEY_state)
  
GPIO.setmode(GPIO.BOARD) 
GPIO.setup(LED_PIN, GPIO.OUT)
GPIO.setup(KEY_PIN, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.add_event_detect(KEY_PIN, GPIO.FALLING, callback = key_callback, bouncetime = 120

while True:

    time.sleep(0.1)#delay 0.1s


        打印效果如下:

image.png







专家
2025-06-08 22:03:44     打赏
2楼

感谢分享


专家
2025-06-08 22:05:06     打赏
3楼

感谢分享


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]