python控制硬件入门:设置GPIO模式为BCM编号
Python控制硬件入门:轻松上手硬件编程的实战指南
引言:为什么用Python控制硬件?
Python以其简洁易读的语法和强大的库支持,成为了初学者和专业开发者喜爱的编程语言之一,而随着物联网(IoT)、智能家居、自动化控制等领域的兴起,越来越多的人开始关注如何用代码控制物理硬件,Python凭借其丰富的第三方库和跨平台特性,成为控制硬件设备的热门选择。
本文将带你从零开始,了解如何使用Python控制硬件设备,包括GPIO控制、传感器读取、执行器驱动等基础操作,并通过实际案例帮助你快速入门。
准备工作:环境搭建与工具选择
在开始编写代码之前,我们需要准备以下工具和环境:
硬件平台:
- 树莓派(Raspberry Pi):适合初学者,功能强大,支持GPIO扩展。
 - Arduino:可通过Python的
pySerial库与串口通信,控制简单外设。 - Jetson Nano/树莓派Pico:适合更复杂的嵌入式项目。
 
软件环境:
- 操作系统:Linux、Windows或macOS均可。
 - Python版本:建议使用Python 3.6或更高版本。
 - 开发工具:推荐使用Thonny IDE或VS Code(安装Python扩展)。
 
必要的库:

RPi.GPIO:用于树莓派的GPIO控制。smbus或smbus2:用于I2C/SPI通信。pySerial:用于与Arduino等设备的串口通信。pigpio:高性能GPIO库,适用于树莓派。
安装库:
pip install RPi.GPIO smbus2 pyserial pigpio
基础操作:GPIO控制
GPIO(General Purpose Input/Output)是硬件设备上通用的输入输出引脚,通过编程可以控制这些引脚的电平状态,从而实现对外部设备的控制。
示例:控制LED灯亮灭(树莓派)
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
# 定义LED连接的引脚
led_pin = 17
# 设置引脚为输出模式
GPIO.setup(led_pin, GPIO.OUT)
try:
    while True:
        # 点亮LED
        GPIO.output(led_pin, GPIO.HIGH)
        print("LED ON")
        time.sleep(1)
        # 熄灭LED
        GPIO.output(edge_pin, GPIO.LOW)
        print("LED OFF")
        time.sleep(1)
except KeyboardInterrupt:
    # 清理GPIO设置
    GPIO.cleanup() 注意:在实际连接硬件时,记得在LED两端串联一个电阻(通常为220Ω-1kΩ),以保护LED和GPIO引脚。
传感器数据读取
除了控制输出设备,Python还可以读取传感器数据,如温度、湿度、光线强度等。

示例:读取DHT11温湿度传感器数据
import Adafruit_DHT
# DHT11传感器连接到GPIO4
sensor = Adafruit_DHT.DHT11
pin = 4
# 读取数据
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
if humidity is not None and temperature is not None:
    print(f"温度: {temperature}°C, 湿度: {humidity}%")
else:
    print("读取失败,请检查传感器连接。") 注意:需要先安装Adafruit_DHT库:
pip install Adafruit_DHT
与Arduino通信
通过串口通信,Python可以与Arduino进行双向数据交换,实现更复杂的控制逻辑。
示例:通过串口控制Arduino上的LED
Arduino端代码(led_control.ino):

int led = 13;
void setup() {
  Serial.begin(9600);
  pinMode(led, OUTPUT);
}
void loop() {
  if (Serial.available() > 0) {
    char command = Serial.read();
    if (command == '1') {
      digitalWrite(led, HIGH);
    } else if (command == '0') {
      digitalWrite(led, LOW);
    }
  }
} Python端代码:
import serial
import time
# 打开串口(根据实际情况修改端口和波特率)
ser = serial.Serial('COM3', 9600)
try:
    while True:
        user_input = input("输入 '1' 亮灯, '0' 灭灯:")
        ser.write(user_input.encode())
        time.sleep(0.1)
except KeyboardInterrupt:
    ser.close()
    print("程序结束") 进阶:I2C/SPI通信
对于更复杂的硬件设备(如显示屏、电机驱动模块等),通常使用I2C或SPI协议进行通信。
示例:使用I2C读取MPU6050加速度传感器数据
import smbus
import time
# MPU6050的I2C地址
MPU6050_ADDR = 0x68
# I2C总线编号(树莓派通常为1)
bus = smbus.SMBus(1)
# 读取加速度数据
def read_accelerometer():
    # 读取原始数据
    x_out = bus.read_word_data(MPU6050_ADDR, 0x3B)
    y_out = bus.read_word_data(MPU6050_ADDR, 0x3D)
    z_out = bus.read_word_data(MPU6050_ADDR, 0x3F)
    # 将数据转换为可读格式
    x = x_out / 16384.0
    y = y_out / 16384.0
    z = z_out / 16384.0
    return x, y, z
try:
    while True:
        accel = read_accelerometer()
        print(f"加速度: X={accel[0]}, Y={accel[1]}, Z={accel[2]}")
        time.sleep(0.1)
except KeyboardInterrupt:
    print("程序结束") 总结与学习建议
Python控制硬件是一个充满乐趣且实用的技能,通过本文,你应该已经掌握了以下内容:
- 如何使用GPIO控制LED等简单设备;
 - 如何读取传感器数据;
 - 如何与Arduino进行串口通信;
 - 如何使用I2C/SPI协议与复杂设备通信。
 
下一步建议:
- 尝试搭建一个简单的智能家居系统;
 - 学习使用更高级的库,如
wiringpi、machine(MicroPython); - 探索更多硬件平台,如树莓派Pico、ESP32等。
 
如果你对硬件编程感兴趣,不妨从一个小项目开始,比如控制一个智能小车、制作一个温湿度监测器,或者设计一个自动浇花系统,编程控制硬件的世界,远比想象中更有趣!
附录:
希望这篇文章能帮助你顺利入门Python控制硬件的世界!
相关文章:
文章已关闭评论!










