Jetson TX2 NX GPIO实战:用Python点亮第一个LED灯(附完整代码与接线图)
当你第一次拿到Jetson TX2 NX开发板时,最令人兴奋的莫过于让硬件真正"活"起来。而点亮一个LED灯,就像是嵌入式开发世界的"Hello World",简单却充满仪式感。本文将带你从零开始,用Python代码控制GPIO引脚,完成这个经典入门实验。
1. 硬件准备与接线指南
在开始编程之前,我们需要准备好必要的硬件组件并正确连接它们。对于这个基础实验,你只需要以下材料:
- Jetson TX2 NX开发板(含40针GPIO扩展接头)
- 1个LED灯(建议使用5mm直径的普通发光二极管)
- 1个220Ω电阻(用于限流保护LED)
- 面包板和跳线若干
关键接线步骤:
识别GPIO引脚:找到Jetson TX2 NX的40针GPIO接头(通常标记为J21),我们将使用物理引脚编号12(对应BCM编号18)作为输出引脚。
LED正负极判断:LED长脚为正极(阳极),短脚为负极(阴极)。如果引脚被剪齐,可以通过内部金属片大小判断(小片为正极)。
实际接线方案:
- 将LED正极通过220Ω电阻连接到GPIO12引脚
- 将LED负极连接到开发板的GND(接地)引脚
- 建议使用面包板作为中间连接平台
注意:务必串联限流电阻,直接连接LED到GPIO可能烧毁LED或损坏开发板引脚。
下表列出了本实验所需的主要引脚定义:
| 引脚功能 | 物理引脚编号 | BCM编号 | 备注 |
|---|---|---|---|
| GPIO输出 | 12 | 18 | 用于控制LED亮灭 |
| 地线 | 14 | - | 多个GND引脚可选其一 |
2. 软件环境配置
Jetson TX2 NX默认搭载了Ubuntu操作系统,我们需要确保Python环境和必要的库已正确安装。
2.1 安装Python与GPIO库
打开终端,执行以下命令更新系统并安装所需软件包:
sudo apt-get update sudo apt-get install python3-pip sudo pip3 install Jetson.GPIO2.2 设置用户权限
为了避免每次都需要sudo权限运行GPIO程序,我们需要将当前用户加入gpio组:
sudo groupadd -f gpio sudo usermod -a -G gpio $USER完成后需要重新登录使权限生效。可以通过以下命令验证是否添加成功:
groups | grep gpio如果看到"gpio"出现在输出中,说明设置成功。
3. Python控制LED完整代码
现在我们可以编写Python脚本控制LED了。创建一个名为led_blink.py的文件,输入以下内容:
import Jetson.GPIO as GPIO import time # 设置GPIO模式为BOARD(物理引脚编号) GPIO.setmode(GPIO.BOARD) # 定义使用的引脚 led_pin = 12 try: # 设置引脚为输出模式 GPIO.setup(led_pin, GPIO.OUT) print("LED开始闪烁,按Ctrl+C停止...") while True: # LED亮 GPIO.output(led_pin, GPIO.HIGH) time.sleep(1) # 保持1秒 # LED灭 GPIO.output(led_pin, GPIO.LOW) time.sleep(1) # 保持1秒 except KeyboardInterrupt: print("程序被用户中断") finally: # 清理GPIO设置 GPIO.cleanup()3.1 代码解析
让我们分解这段代码的关键部分:
GPIO模式设置:
GPIO.setmode(GPIO.BOARD):使用物理引脚编号(推荐新手使用)- 也可以使用
GPIO.BCM模式,但需要记住BCM编号
引脚配置:
GPIO.setup(led_pin, GPIO.OUT):将引脚设置为输出模式- 如果是读取输入信号,则使用
GPIO.IN
控制输出:
GPIO.output(led_pin, GPIO.HIGH):输出高电平(3.3V),点亮LEDGPIO.output(led_pin, GPIO.LOW):输出低电平(0V),熄灭LED
异常处理:
- 捕获
KeyboardInterrupt让程序可以优雅退出 finally块确保无论程序如何结束都会执行GPIO清理
- 捕获
4. 运行与调试技巧
保存代码后,在终端运行:
python3 led_blink.py如果一切正常,你应该能看到LED开始以1秒间隔规律闪烁。按Ctrl+C可以停止程序。
常见问题排查:
LED不亮:
- 检查接线是否正确,特别是LED极性
- 用万用表测量GPIO引脚是否有电压输出
- 确认电阻值合适(通常220Ω-1kΩ)
权限错误:
- 确认用户已加入gpio组
- 尝试
sudo python3 led_blink.py临时测试
GPIO编号混淆:
- 确认代码中使用的是BOARD还是BCM编号
- 参考官方引脚图核对物理位置
5. 进阶实验与扩展思路
成功完成基础LED控制后,你可以尝试以下扩展实验:
5.1 改变闪烁模式
修改代码实现不同的闪烁效果,例如:
# 快速闪烁两次然后暂停 for _ in range(2): GPIO.output(led_pin, GPIO.HIGH) time.sleep(0.2) GPIO.output(led_pin, GPIO.LOW) time.sleep(0.2) time.sleep(1)5.2 使用PWM实现呼吸灯效果
PWM(脉冲宽度调制)可以平滑调节LED亮度:
# 创建PWM实例,频率为100Hz pwm = GPIO.PWM(led_pin, 100) 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()5.3 添加物理按钮控制
结合输入引脚,实现按钮控制LED:
button_pin = 16 # 假设按钮接在引脚16 GPIO.setup(button_pin, GPIO.IN, pull_up_down=GPIO.PUD_UP) try: while True: if GPIO.input(button_pin) == GPIO.LOW: GPIO.output(led_pin, GPIO.HIGH) else: GPIO.output(led_pin, GPIO.LOW) time.sleep(0.1)6. 项目实战:简易交通灯系统
将所学知识综合应用,我们可以用三个LED(红、黄、绿)模拟交通灯系统:
# 定义引脚 red_pin = 12 yellow_pin = 16 green_pin = 18 # 设置各引脚为输出 GPIO.setup(red_pin, GPIO.OUT) GPIO.setup(yellow_pin, GPIO.OUT) GPIO.setup(green_pin, GPIO.OUT) try: while True: # 红灯亮10秒 GPIO.output(red_pin, GPIO.HIGH) time.sleep(10) # 绿灯亮10秒 GPIO.output(red_pin, GPIO.LOW) GPIO.output(green_pin, GPIO.HIGH) time.sleep(10) # 黄灯闪烁3秒 GPIO.output(green_pin, GPIO.LOW) for _ in range(6): GPIO.output(yellow_pin, GPIO.HIGH) time.sleep(0.25) GPIO.output(yellow_pin, GPIO.LOW) time.sleep(0.25)这个项目可以进一步扩展,比如添加行人按钮控制、使用LCD显示倒计时等。