Jetson Nano实战指南:Python GPIO控制LED全流程解析
当你第一次拿到Jetson Nano开发板,面对那40针的GPIO接口时,是否感到既兴奋又迷茫?作为从树莓派转向NVIDIA边缘计算平台的开发者,我完全理解这种感受。本文将带你从硬件连接到代码实现,完整走通GPIO控制LED的流程,避开那些新手常踩的坑。
1. 认识Jetson Nano的GPIO接口
Jetson Nano的40针GPIO接口与树莓派兼容,这为开发者提供了便利,但也存在一些关键差异需要注意。首先让我们明确几个基本概念:
- 物理引脚(BOARD模式):按照板上实际的引脚编号,从1到40依次排列
- BCM模式:使用Broadcom SOC的通道编号,与树莓派保持一致
- TEGRA_SOC模式:NVIDIA特有的编号方式,一般不推荐新手使用
提示:建议初学者优先使用BOARD模式,因为物理编号不会变,而BCM编号可能因不同版本而变化
查看引脚定义的快速方法:
import RPi.GPIO as GPIO print(GPIO.RPI_INFO) # 查看板子信息 print(GPIO.JETSON_INFO) # Jetson特有信息2. 硬件连接与准备工作
2.1 所需材料清单
- Jetson Nano开发板
- LED灯(建议不同颜色各准备一个)
- 220Ω电阻
- 面包板和跳线
- 按键开关(可选)
2.2 安全连接指南
连接LED时最常见的错误就是忘记加限流电阻,这可能导致GPIO口或LED损坏。正确的连接方式:
Jetson Nano GPIO引脚 → 220Ω电阻 → LED正极 → LED负极 → GND实物连接参考:
- 将LED长脚(正极)通过电阻连接到GPIO12(BOARD编号)
- 将LED短脚(负极)连接到任意GND引脚
- 检查连接无误后再通电
3. 软件环境配置
3.1 安装必要库
Jetson Nano默认可能未安装GPIO库,执行以下命令:
sudo apt-get update sudo apt-get install python3-pip pip3 install Jetson.GPIO # 或使用RPi.GPIO3.2 解决权限问题
新手最常遇到的错误就是权限不足,解决方法:
sudo usermod -a -G gpio $(whoami) # 将当前用户加入gpio组 sudo reboot # 重启生效验证权限:
groups # 查看当前用户所在组,应包含gpio4. Python控制LED实战代码
4.1 基础点亮LED
import RPi.GPIO as GPIO import time # 使用BOARD编号模式 GPIO.setmode(GPIO.BOARD) LED_PIN = 12 # BOARD编号12,对应BCM 18 try: GPIO.setup(LED_PIN, GPIO.OUT) while True: GPIO.output(LED_PIN, GPIO.HIGH) # 点亮 time.sleep(1) GPIO.output(LED_PIN, GPIO.LOW) # 熄灭 time.sleep(1) finally: GPIO.cleanup() # 清理GPIO设置4.2 带警告处理的改进版
import RPi.GPIO as GPIO import time GPIO.setwarnings(False) # 禁用警告 GPIO.setmode(GPIO.BCM) LED_PIN = 18 def setup(): GPIO.setup(LED_PIN, GPIO.OUT, initial=GPIO.LOW) def loop(): while True: GPIO.output(LED_PIN, not GPIO.input(LED_PIN)) time.sleep(0.5) if __name__ == '__main__': setup() try: loop() except KeyboardInterrupt: GPIO.cleanup()4.3 按键控制LED
import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) LED_PIN = 18 BTN_PIN = 17 GPIO.setup(LED_PIN, GPIO.OUT) GPIO.setup(BTN_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP) try: while True: btn_state = GPIO.input(BTN_PIN) GPIO.output(LED_PIN, not btn_state) # 按键按下时点亮 finally: GPIO.cleanup()5. 常见问题与解决方案
5.1 导入模块报错
如果遇到ImportError: No module named RPi.GPIO,可能是:
- 未正确安装库 → 执行
pip3 install RPi.GPIO - 使用了虚拟环境但未激活 → 激活虚拟环境
- Python版本不匹配 → 确认使用python3
5.2 LED不亮排查步骤
- 检查电路连接是否正确
- 用万用表测量GPIO输出电压(应为3.3V)
- 尝试更换LED(可能极性接反或损坏)
- 确认代码中引脚编号模式与实际一致
5.3 性能优化技巧
当需要控制多个LED时,避免使用多个time.sleep(),改为:
led_states = [GPIO.HIGH, GPIO.LOW, GPIO.HIGH] pins = [18, 23, 24] while True: for pin, state in zip(pins, led_states): GPIO.output(pin, state) time.sleep(0.5) led_states = [not state for state in led_states]6. 进阶应用:PWM调光
利用PWM可以实现LED亮度调节:
import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) LED_PIN = 18 GPIO.setup(LED_PIN, GPIO.OUT) pwm = GPIO.PWM(LED_PIN, 100) # 100Hz频率 pwm.start(0) # 初始占空比0% try: while True: for dc in range(0, 101, 5): # 逐渐变亮 pwm.ChangeDutyCycle(dc) time.sleep(0.1) for dc in range(100, -1, -5): # 逐渐变暗 pwm.ChangeDutyCycle(dc) time.sleep(0.1) except KeyboardInterrupt: pwm.stop() GPIO.cleanup()7. 项目扩展思路
掌握了基础GPIO控制后,可以尝试:
- 制作交通信号灯模拟器
- 开发环境光控LED系统
- 结合传感器实现智能照明
- 构建物联网远程控制节点
实际项目中,我更喜欢使用GPIO Zero库简化代码:
from gpiozero import LED, Button from signal import pause led = LED(18) btn = Button(17) btn.when_pressed = led.on btn.when_released = led.off pause() # 保持程序运行记住,GPIO操作完成后务必调用cleanup()释放资源。遇到问题时,先检查硬件连接,再排查软件配置,这种分步排查法能解决90%的新手问题。