Python通过pyserial控制Arduino UNO串口通信

需积分: 9 2 下载量 79 浏览量 更新于2024-08-05 收藏 2KB TXT 举报
该资源是一个关于使用Python的pyserial库与Arduino UNO进行串口通信的示例。通过这段代码,用户可以控制Arduino UNO板上13号引脚的LED灯,根据输入的指令(1代表开启,2代表关闭,e代表退出)来开关LED。同时,代码还包含了Python和Arduino两端的实现。 ### Python部分知识点: 1. pyserial库:pyserial是Python中用于串行通信的库,它可以用来读写串口数据,非常适合与硬件设备如Arduino进行通信。 2. serial.Serial对象:在Python中,`serial.Serial()`用于创建一个串口连接对象,参数`COM_PORT`指定串口名称(这里是'COM3'),`BAUD_RATES`指定了波特率(这里是9600)。 3. 用户输入处理:使用`input()`函数获取用户输入,并通过`lower()`将输入转换为小写,便于后续判断。 4. 数据传输:通过`ser.write()`方法向串口发送二进制数据(在这里是包含指令的字节类型字符串,如b'LED_ON\n')。 5. 睡眠函数:使用`time.sleep()`函数暂停程序执行,等待响应,确保数据传输完成。 6. 串口读取:使用`ser.in_waiting`检查串口缓冲区是否有未读取的数据,然后通过`ser.readline().decode()`读取并解码串口接收到的反馈信息。 7. 异常处理:使用`try-except`结构捕获键盘中断异常,确保程序在用户按下Ctrl+C时能够正常关闭串口。 ### Arduino部分知识点: 1. 定义常量:`#define LED 13`定义了LED灯的引脚号。 2. 串口初始化:在`setup()`函数中,`Serial.begin(9600)`设置了串口波特率为9600,与Python端保持一致。 3. 串口监听:在`loop()`函数中,`if(Serial.available())`检查是否有新数据到达,`Serial.readStringUntil('\n')`读取直到遇到换行符`\n`的字符串。 4. 条件判断:根据接收到的字符串(`str`)进行条件判断,执行相应的LED操作,例如开启或关闭LED,并通过`Serial.println()`向Python端发送反馈信息。 5. 数字输出:`digitalWrite(LED, HIGH)`和`digitalWrite(LED, LOW)`分别用于打开和关闭LED灯。 通过这个示例,开发者可以学习到如何使用Python和Arduino进行基本的串口通信,以及如何处理命令输入和设备响应。这只是一个基础的起点,实际应用中可以根据需求扩展功能,实现更复杂的交互操作。