树莓派小车常用的python代码
时间: 2025-07-10 17:04:58 浏览: 5
### 控制树莓派小车的常用 Python 代码示例
在树莓派上控制小车通常涉及到 GPIO(通用输入输出)引脚的操作,Python 提供了多个库来简化这一过程。其中 `gpiozero` 是一个非常流行的高级库,它为常见的硬件设备提供了简单的接口,使得开发者可以专注于逻辑实现而不是底层硬件操作。以下是一些常用的 Python 代码示例,涵盖了基本的运动控制、红外避障、语音唤醒以及循迹功能。
#### 基本运动控制
使用 `gpiozero` 库中的 `Robot` 类可以非常方便地控制双轮机器人。这个类已经封装了左右电机的控制逻辑,用户只需要调用简单的方法即可实现前进、后退、转弯等动作。
```python
from gpiozero import Robot
import time
# 定义左右电机连接的GPIO引脚
robot = Robot(left=(17, 18), right=(22, 23))
# 向前移动
robot.forward()
time.sleep(2) # 持续前进2秒
robot.stop()
# 向后移动
robot.backward()
time.sleep(2)
robot.stop()
# 左转
robot.left()
time.sleep(2)
robot.stop()
# 右转
robot.right()
time.sleep(2)
robot.stop()
```
这段代码演示了如何创建一个 `Robot` 实例并控制其进行基本的动作。通过指定不同的引脚,你可以根据实际硬件配置调整代码[^2]。
#### 红外避障
红外避障传感器是一种常见的用于检测障碍物的设备。当传感器检测到前方有障碍物时,它可以返回一个信号给树莓派,从而触发相应的避障行为。
```python
from gpiozero import DistanceSensor
import time
# 初始化超声波测距模块
sensor = DistanceSensor(echo=24, trigger=25)
while True:
distance = sensor.distance * 100 # 距离以厘米为单位
print("Distance: %.1f cm" % distance)
if distance < 10: # 如果距离小于10cm
robot.stop() # 停止
time.sleep(1)
robot.backward()
time.sleep(1)
robot.left()
time.sleep(1)
robot.forward()
else:
robot.forward()
time.sleep(0.1)
```
此段代码展示了如何结合 `DistanceSensor` 和 `Robot` 类来实现一个简单的避障机制。当检测到前方障碍物时,小车会停止、倒退、左转然后继续前进[^4]。
#### 语音唤醒
对于希望添加语音交互功能的小车项目来说,DuerOS 是一个不错的选择。下面是一个简化的例子,说明如何设置 DuerOS 并加载自定义唤醒词模型。
```bash
# 首先确保安装了必要的依赖项
pip install baidu-aip
```
```python
from aip import AipSpeech
import os
# 设置你的百度云API密钥
APP_ID = 'your_app_id'
API_KEY = 'your_api_key'
SECRET_KEY = 'your_secret_key'
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
def get_file_content(filePath):
with open(filePath, 'rb') as fp:
return fp.read()
# 上传训练好的唤醒模型
result = client.asr(get_file_content('path_to_your_model'), 'pmdl', 16000, {
'cuid': 'your_cuid',
})
print(result)
```
注意:以上代码仅作为概念性展示,实际部署需要按照官方文档完成详细的环境配置和权限申请流程[^3]。
#### 循迹
红外循迹是另一种常见的应用场景,特别是在教育领域或竞赛中使用的自动导航小车上更为常见。这里我们使用数字输出型传感器来进行黑白线检测。
```python
from gpiozero import LineSensor
from signal import pause
line_sensor = LineSensor(16) # 假设传感器连接到了GPIO16
def line_detected():
print("Line detected")
robot.stop() # 当检测到线条时停止
line_sensor.when_line = line_detected # 注册回调函数
pause() # 保持程序运行
```
这段代码设置了当红外传感器检测到地面颜色变化(例如从白色变为黑色)时触发特定的行为。这种情况下,小车会在遇到线条时立即停下来[^5]。
---
阅读全文
相关推荐


















