从零开始学树莓派GPIO控制:第三课实战技巧与案例分析

2026-10-29 0 阅读

一、引言

树莓派作为一款入门级的单板计算机,因其丰富的扩展性和较低的门槛,受到了广大爱好者的喜爱。在第二课中,我们学习了树莓派GPIO的基础知识,了解了GPIO的概念、引脚配置以及基本的操作方法。本课我们将通过实战技巧与案例分析,帮助你将GPIO知识应用到实际项目中。

二、实战技巧

2.1 使用GPIO读取按钮状态

2.1.1 硬件准备

  1. 树莓派
  2. 按钮
  3. 电阻
  4. 连接线

2.1.2 软件准备

  1. 树莓派操作系统
  2. Raspbian系统
  3. Python编程环境

2.1.3 代码实现

import RPi.GPIO as GPIO
import time

button_pin = 17
GPIO.setmode(GPIO.BCM)
GPIO.setup(button_pin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

try:
    while True:
        if GPIO.input(button_pin) == GPIO.LOW:
            print("按钮按下")
        time.sleep(0.1)
except KeyboardInterrupt:
    pass
finally:
    GPIO.cleanup()

2.1.4 分析

在这个例子中,我们通过读取GPIO引脚17的电平状态来判断按钮是否被按下。当按钮按下时,引脚17的电平由高变低,程序会输出“按钮按下”的信息。

2.2 使用GPIO控制LED灯

2.2.1 硬件准备

  1. 树莓派
  2. LED灯
  3. 电阻
  4. 连接线

2.2.2 软件准备

  1. 树莓派操作系统
  2. Raspbian系统
  3. Python编程环境

2.2.3 代码实现

import RPi.GPIO as GPIO
import time

led_pin = 27
GPIO.setmode(GPIO.BCM)
GPIO.setup(led_pin, GPIO.OUT)

try:
    while True:
        GPIO.output(led_pin, GPIO.HIGH)
        time.sleep(1)
        GPIO.output(led_pin, GPIO.LOW)
        time.sleep(1)
except KeyboardInterrupt:
    pass
finally:
    GPIO.cleanup()

2.2.4 分析

在这个例子中,我们通过控制GPIO引脚27的电平状态来控制LED灯的亮灭。当引脚27的电平为高时,LED灯亮;当引脚27的电平为低时,LED灯灭。

2.3 使用GPIO读取串口数据

2.3.1 硬件准备

  1. 树莓派
  2. 串口模块(如USB转串口模块)
  3. 连接线

2.3.2 软件准备

  1. 树莓派操作系统
  2. Raspbian系统
  3. Python编程环境

2.3.3 代码实现

import serial
import time

ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=1)

while True:
    if ser.in_waiting:
        line = ser.readline()
        print(line.decode('utf-8').strip())

2.3.4 分析

在这个例子中,我们通过读取USB转串口模块的数据来获取外部设备发送的数据。当串口模块接收到数据时,程序会输出接收到的数据。

三、案例分析

3.1 自动门控制

3.1.1 硬件准备

  1. 树莓派
  2. 磁感应开关
  3. 电机驱动模块
  4. 电机
  5. 连接线

3.1.2 软件准备

  1. 树莓派操作系统
  2. Raspbian系统
  3. Python编程环境

3.1.3 代码实现

import RPi.GPIO as GPIO
import time

door_open_pin = 27
motor_pin = 17
GPIO.setmode(GPIO.BCM)
GPIO.setup(door_open_pin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(motor_pin, GPIO.OUT)

try:
    while True:
        if GPIO.input(door_open_pin) == GPIO.LOW:
            GPIO.output(motor_pin, GPIO.HIGH)
            time.sleep(1)
            GPIO.output(motor_pin, GPIO.LOW)
except KeyboardInterrupt:
    pass
finally:
    GPIO.cleanup()

3.1.4 分析

在这个例子中,我们通过检测磁感应开关的状态来控制电机的运行。当磁感应开关检测到有物体经过时,电机启动,自动门打开;当物体离开时,电机停止,自动门关闭。

3.2 温湿度传感器数据采集

3.2.1 硬件准备

  1. 树莓派
  2. 温湿度传感器(如DHT11)
  3. 连接线

3.2.2 软件准备

  1. 树莓派操作系统
  2. Raspbian系统
  3. Python编程环境

3.2.3 代码实现

import RPi.GPIO as GPIO
import dht

dht_sensor = dht.DHT11(4)

try:
    while True:
        dht_sensor.measure()
        temperature = dht_sensor.temperature()
        humidity = dht_sensor.humidity()
        print(f"温度:{temperature}℃,湿度:{humidity}%")
        time.sleep(1)
except KeyboardInterrupt:
    pass
finally:
    GPIO.cleanup()

3.2.4 分析

在这个例子中,我们通过温湿度传感器采集环境数据,并实时打印出来。当程序运行时,传感器会每隔1秒采集一次温湿度数据,并将其打印到屏幕上。

四、总结

通过本课的学习,你掌握了树莓派GPIO控制的实战技巧和案例分析。这些技巧和案例可以帮助你将GPIO知识应用到实际项目中,实现各种创意功能。希望你在今后的学习中,能够不断探索,将树莓派应用到更多有趣的项目中。

分享到: