解决python通过串口发送消息给Arduino无法返回数据的问题

在Python中通过串口与Arduino进行通信时遇到问题,发送数据后无法接收到回应。经过排查,发现原因是串口连接建立需要时间。在发送数据前加入`time.sleep(3)`等待连接稳定,解决了收发数据不畅的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目中需要用python通过串口给Arduino发送指令。还是面向百度编程,查询到以下方案

Arduino代码

#define adapterPort 3

void setup() {
  Serial.begin(9600);
  pinMode(adapterPort,OUTPUT);
}

void loop() {
  if (Serial.available()>0){
    char serialData=Serial.read();
    
    if(serialData=='H'){
      digitalWrite(adapterPort,HIGH);
      Serial.print(serialData);
      delay(800);
    }
    
    if(serialData=='L'){
      digitalWrite(adapterPort,LOW);
      Serial.print(serialData);
      delay(800);
    }
    
  }
}

通过Arduino的串口监视器发送指令,可以成功执行并返回数据

接下来通过python编写串口通信代码实现和Arduino的数据通信

Python代码

import serial
import time

arduino_serial = serial.Serial("COM4", 9600, timeout=0.5)
arduino_high=b'H'
arduino_low=b'L'

arduino_serial.write(arduino_high)
print(arduino_serial.readline())

# arduino_serial.write(arduino_low)
# print(arduino_serial.readline())

arduino_serial.close()

奇怪的事情发生了,在发送完数据之后python端就是接收不到数据

 试了各种方法,甚至都去看串口的底层原理了,还是不行,真不知道网上那些人是怎么通过那千篇一律的代码跑成的。

1000 years later......发现仅仅是需要加一行time.sleep()代码

import serial
import time

arduino_serial = serial.Serial("COM4", 9600, timeout=0.5)
arduino_high=b'H'
arduino_low=b'L'

time.sleep(3)
arduino_serial.write(arduino_high)
print(arduino_serial.readline())

time.sleep(3)
arduino_serial.write(arduino_low)
print(arduino_serial.readline())


arduino_serial.close()

接着就能正常收发数据了,原因很简单,串口连接的建立是需要时间的,网上的代码,在串口建立代码后直接发消息,这时候连接都还没建立完成呢,发过去的消息当然没回应。所以在建立连接之后sleep(3)等连接建立完成之后再发送消息,这样就可以了。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

机器人迈克猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值