掌握了单个外设的连接后,最有意思的其实是 “组合应用”—— 比如用按键控制摄像头拍照,再在 LCD 上显示照片;或是用传感器采集数据,用 LED 提示状态。今天就带大家做 3 个简单又实用的组合项目,同时补充 3 个能大幅提升效率的基础技能,新手也能跟着一步步实现!
一、3 个外设组合小项目:从 “单设备” 到 “小装置”
这 3 个项目都用之前讲过的外设(LED、按键、LCD、USB 摄像头),再加一个常用的 DHT11 温湿度传感器(性价比高,十几块钱就能买到),组合起来解决实际问题。
项目 1:一键拍照 + LCD 预览(按键 + 摄像头 + LCD)
用途:按下按键就能拍照,照片直接在 LCD 屏幕上显示,不用连电脑也能看(比如户外拍风景、记录实验画面)。
需要的外设:USB 摄像头、1.8 寸 SPI LCD(ST7735S 芯片)、按键模块、杜邦线。
1. 连接步骤(重点看 “多设备引脚分配”)
2. 代码实现(核心逻辑:按键触发拍照→保存照片→LCD 显示)
先安装依赖库(若没装过):
新建代码文件 key_cam_lcd.py:
3. 测试与问题排查
- 运行代码 python3 key_cam_lcd.py,按下按键,若 LCD 显示照片,说明成功;
- 若拍照失败:检查 USB 摄像头是否插好,或运行 ls /dev/video0 看是否识别(有 video0 说明正常);
- 若 LCD 不显示:检查 SPI 功能是否开启(参考上一篇的 SPI 开启步骤),或杜邦线是否接错。
项目 2:温湿度监测 + LED 报警(DHT11+LED+LCD)
用途:实时监测环境温湿度,在 LCD 上显示;当温度超过 30℃时,LED 闪烁报警(比如监测鱼缸、温室温度)。
需要的外设:DHT11 温湿度传感器、LED 模块、1.8 寸 LCD、杜邦线。
1. 连接步骤
2. 代码实现(核心逻辑:读取温湿度→LCD 显示→判断温度触发 LED)
安装 DHT11 库:
新建代码文件 dht11_led_lcd.py:
3. 测试与问题排查
- 运行后若 LCD 显示温湿度,温度超 30℃时 LED 闪烁,说明成功;
- 若读不到数据:检查 DHT11 的 DATA 引脚是否接对,或传感器是否插反(VCC 和 GND 别接反);
- 若 LCD 文字模糊:调整字体路径(可通过 find / -name "*.ttf" 找系统自带字体)。
项目 3:按键控制 LED 模式(按键 + LED+LCD)
用途:按一次按键切换一种 LED 模式(常亮→慢闪→快闪→熄灭),LCD 显示当前模式(适合新手练手 “状态切换” 逻辑)。
需要的外设:按键模块、LED 模块、1.8 寸 LCD、杜邦线(连接参考前两个项目,引脚可复用)。
代码核心逻辑
用变量 mode 记录当前模式(0 = 熄灭,1 = 常亮,2 = 慢闪,3 = 快闪),每次按键按下时 mode+1 并循环,LCD 显示对应模式名称,LED 执行对应动作。代码可参考前两个项目的结构,重点练习 “状态切换” 和 “LCD 文字更新”,这里就不贴完整代码了,大家可以自己尝试写~
二、3 个实用基础技能:提升效率,避免踩坑
做组合项目时,这 3 个技能能帮你少走很多弯路,比反复重装系统、手动传文件高效多了:
1. 图形化文件传输:不用记 scp 命令
之前用 scp 传文件需要输命令,新手容易出错,用图形化工具 FileZilla 更简单:
- 电脑端安装 FileZilla(免费,官网可下);
- 打开后点击 “文件 - 站点管理器”,选择 “SFTP” 协议,输入香橙派的 IP、用户名(orangepi)、密码,点击 “连接”;
- 连接成功后,左边是电脑文件,右边是香橙派文件,直接拖放就能传文件,还能在线编辑代码(比如修改 Python 文件)。
✅ 小技巧:连接后把常用文件夹(比如 /home/orangepi/projects)添加到 “书签”,下次不用再输 IP。
2. 系统备份:配置好的系统不怕丢
花几小时调好软件源、装完驱动,万一 SD 卡坏了就白忙了,提前备份很重要:
- 把香橙派的 SD 卡插回电脑,用 Win32 Disk Imager(Windows)或 BalenaEtcher(Mac/Linux)备份:
- 打开软件,选择 “读取”(Read);
- 选择 SD 卡对应的磁盘(别选错,会覆盖文件);
- 选择备份文件保存路径(比如 orange_pi_backup.img),点击 “读取”,等待 10-20 分钟(看 SD 卡大小)。
- 恢复时选择 “写入”(Write),选择备份的 .img 文件,就能还原到新 SD 卡上。
3. GPIO 引脚复用:一个引脚多种用途
香橙派的 GPIO 引脚支持 “复用功能”(比如同一引脚既可以当普通 GPIO,也能当 I2C、UART 接口),比如想用 I2C 传感器(如 OLED 屏幕),需要先配置引脚复用:
- 运行 sudo orangepi-config,进入 “System”→“Hardware”;
- 找到 “I2C” 选项,设为 “Enable”(比如 I2C1 对应引脚 3 和 5);
- 重启后,运行 i2cdetect -y 1,若能看到传感器的地址(比如 48),说明复用成功。
✅ 注意:复用后,该引脚就不能再当普通 GPIO 用了,若要改回,需在 orangepi-config 中设为 “Disable”。
三、组合项目避坑总结
- 供电优先:多个外设同时工作时,一定要用官方 12V/2A 电源,或外接 5V 电源模块,否则会因供电不足导致 LCD 花屏、摄像头拍不了照;
- 引脚规划:先列一张 “引脚分配表”(像项目 1 那样),避免不同外设的引脚冲突(比如别让两个外设都用 GPIO11);
- 代码分步测:组合项目别直接跑完整代码,先分步测试:比如先测按键是否能触发拍照,再测照片能否显示在 LCD,最后整合;
- 传感器防干扰:DHT11 这类模拟传感器,尽量远离 LED、电机等强干扰设备,杜邦线别太长(建议用 10cm 以内的)。
这 3 个组合项目虽然简单,但能帮你理解 “硬件联动” 的逻辑 —— 比如按键是 “输入”,LED 和 LCD 是 “输出”,传感器是 “数据采集”。接下来你可以尝试扩展:比如给温湿度项目加个蜂鸣器,温度超限时同时报警;或给拍照项目加个 SD 卡,存更多照片。如果在扩展时遇到问题,比如某个外设不兼容,欢迎在评论区分享,咱们一起解决!
掌握了单个外设的连接后,最有意思的其实是 “组合应用”—— 比如用按键控制摄像头拍照,再在 LCD 上显示照片;或是用传感器采集数据,用 LED 提示状态。今天就带大家做 3 个简单又实用的组合项目,同时补充 3 个能大幅提升效率的基础技能,新手也能跟着一步步实现!
一、3 个外设组合小项目:从 “单设备” 到 “小装置”
这 3 个项目都用之前讲过的外设(LED、按键、LCD、USB 摄像头),再加一个常用的 DHT11 温湿度传感器(性价比高,十几块钱就能买到),组合起来解决实际问题。
项目 1:一键拍照 + LCD 预览(按键 + 摄像头 + LCD)
用途:按下按键就能拍照,照片直接在 LCD 屏幕上显示,不用连电脑也能看(比如户外拍风景、记录实验画面)。
需要的外设:USB 摄像头、1.8 寸 SPI LCD(ST7735S 芯片)、按键模块、杜邦线。
1. 连接步骤(重点看 “多设备引脚分配”)
2. 代码实现(核心逻辑:按键触发拍照→保存照片→LCD 显示)
先安装依赖库(若没装过):
新建代码文件 key_cam_lcd.py:
import RPi.GPIO as GPIO import time import os from PIL import Image # 处理图片 from waveshare_epd import epd1in8 # 1.8寸LCD驱动 # 引脚定义 KEY_PIN = 13 # 按键引脚 epd = epd1in8.EPD() # 初始化LCD def init(): GPIO.setmode(GPIO.BOARD) GPIO.setup(KEY_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP) # 按键上拉输入 epd.init(epd.lut_full_update) # LCD初始化 epd.Clear(0xFF) # LCD清屏(白色) def take_photo(): # 拍照并保存(文件名用时间,避免重复) photo_name = f"photo_{time.strftime('%Y%m%d%H%M%S')}.jpg" os.system(f"fswebcam -r 1280x720 -q {photo_name}") # 静默拍照 print(f"照片已保存:{photo_name}") return photo_name def show_on_lcd(photo_path): # 调整图片尺寸(适配1.8寸LCD:128x160像素) image = Image.open(photo_path) image = image.resize((128, 160), Image.ANTIALIAS) # 转为LCD支持的格式 image = image.convert('L') # 灰度图 epd.display(epd.getbuffer(image)) # 显示图片 time.sleep(2) # 显示2秒 if __name__ == "__main__": init() try: print("按下按键拍照,按Ctrl+C退出...") while True: if GPIO.input(KEY_PIN) == GPIO.LOW: # 按键按下 photo = take_photo() show_on_lcd(photo) time.sleep(0.5) # 防抖,避免连续拍照 except KeyboardInterrupt: epd.Clear(0xFF) # 清屏 epd.sleep() # LCD休眠 GPIO.cleanup() print("程序退出")3. 测试与问题排查
项目 2:温湿度监测 + LED 报警(DHT11+LED+LCD)
用途:实时监测环境温湿度,在 LCD 上显示;当温度超过 30℃时,LED 闪烁报警(比如监测鱼缸、温室温度)。
需要的外设:DHT11 温湿度传感器、LED 模块、1.8 寸 LCD、杜邦线。
1. 连接步骤
2. 代码实现(核心逻辑:读取温湿度→LCD 显示→判断温度触发 LED)
安装 DHT11 库:
新建代码文件 dht11_led_lcd.py:
import RPi.GPIO as GPIO import time import Adafruit_DHT from waveshare_epd import epd1in8 # 引脚定义 DHT11_PIN = 7 # DHT11数据引脚 LED_PIN = 11 # LED引脚 epd = epd1in8.EPD() def init(): GPIO.setmode(GPIO.BOARD) GPIO.setup(LED_PIN, GPIO.OUT) epd.init(epd.lut_full_update) epd.Clear(0xFF) def read_dht11(): # 读取温湿度(DHT11有时会读错,重试3次) humidity, temperature = Adafruit_DHT.read_retry(Adafruit_DHT.DHT11, DHT11_PIN) if humidity is not None and temperature is not None: return round(temperature, 1), round(humidity, 1) else: print("读取温湿度失败,重试...") return None, None def show_temp_humid(t, h): # 在LCD上显示温湿度(用文字绘制) from PIL import ImageDraw, ImageFont image = Image.new('1', (epd.width, epd.height), 255) # 白色背景 draw = ImageDraw.Draw(image) font = ImageFont.truetype('/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf', 16) draw.text((10, 30), f"Temp: {t}℃", font=font, fill=0) # 温度 draw.text((10, 80), f"Humid: {h}%", font=font, fill=0) # 湿度 epd.display(epd.getbuffer(image)) def led_alert(trigger): # 温度超过30℃时LED闪烁,否则熄灭 if trigger: GPIO.output(LED_PIN, GPIO.HIGH) time.sleep(0.5) GPIO.output(LED_PIN, GPIO.LOW) time.sleep(0.5) else: GPIO.output(LED_PIN, GPIO.LOW) if __name__ == "__main__": init() try: while True: temp, humid = read_dht11() if temp and humid: print(f"温度:{temp}℃,湿度:{humid}%") show_temp_humid(temp, humid) led_alert(temp > 30) # 温度>30℃触发报警 time.sleep(2) # 每2秒读一次 except KeyboardInterrupt: epd.Clear(0xFF) epd.sleep() GPIO.cleanup() print("程序退出")3. 测试与问题排查
项目 3:按键控制 LED 模式(按键 + LED+LCD)
用途:按一次按键切换一种 LED 模式(常亮→慢闪→快闪→熄灭),LCD 显示当前模式(适合新手练手 “状态切换” 逻辑)。
需要的外设:按键模块、LED 模块、1.8 寸 LCD、杜邦线(连接参考前两个项目,引脚可复用)。
代码核心逻辑
用变量 mode 记录当前模式(0 = 熄灭,1 = 常亮,2 = 慢闪,3 = 快闪),每次按键按下时 mode+1 并循环,LCD 显示对应模式名称,LED 执行对应动作。代码可参考前两个项目的结构,重点练习 “状态切换” 和 “LCD 文字更新”,这里就不贴完整代码了,大家可以自己尝试写~
二、3 个实用基础技能:提升效率,避免踩坑
做组合项目时,这 3 个技能能帮你少走很多弯路,比反复重装系统、手动传文件高效多了:
1. 图形化文件传输:不用记 scp 命令
之前用 scp 传文件需要输命令,新手容易出错,用图形化工具 FileZilla 更简单:
✅ 小技巧:连接后把常用文件夹(比如 /home/orangepi/projects)添加到 “书签”,下次不用再输 IP。
2. 系统备份:配置好的系统不怕丢
花几小时调好软件源、装完驱动,万一 SD 卡坏了就白忙了,提前备份很重要:
3. GPIO 引脚复用:一个引脚多种用途
香橙派的 GPIO 引脚支持 “复用功能”(比如同一引脚既可以当普通 GPIO,也能当 I2C、UART 接口),比如想用 I2C 传感器(如 OLED 屏幕),需要先配置引脚复用:
✅ 注意:复用后,该引脚就不能再当普通 GPIO 用了,若要改回,需在 orangepi-config 中设为 “Disable”。
三、组合项目避坑总结
这 3 个组合项目虽然简单,但能帮你理解 “硬件联动” 的逻辑 —— 比如按键是 “输入”,LED 和 LCD 是 “输出”,传感器是 “数据采集”。接下来你可以尝试扩展:比如给温湿度项目加个蜂鸣器,温度超限时同时报警;或给拍照项目加个 SD 卡,存更多照片。如果在扩展时遇到问题,比如某个外设不兼容,欢迎在评论区分享,咱们一起解决!