You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HC-05蓝牙模块连接Arduino时串口监视器输出乱码问题咨询

解决HC-05蓝牙模块与Arduino连接后的串口乱码问题

嘿,我来帮你搞定这个HC-05和Arduino连接后串口输出乱码的问题!从你提供的代码和现象来看,乱码大概率是波特率不匹配或者串口选择不当导致的,咱们一步步来排查:

1. 优先检查波特率匹配问题

HC-05蓝牙模块的默认波特率通常是9600(部分模块可能标注为38400,但9600是更普遍的出厂设置)。你代码里给BTserial设置的是38400,但如果模块实际波特率是9600,就会直接导致通信乱码。

  • 先尝试把BTserial.begin(38400)改成BTserial.begin(9600),重新上传代码后看看串口监视器是否正常显示。
  • 同时要确保电脑串口监视器的波特率设置为9600(和你代码里Serial.begin(9600)一致),这是Arduino与电脑通信的波特率,别和蓝牙模块的波特率搞混了。

2. 别用SoftwareSerial浪费硬件串口!

你用到的引脚19和18,在大多数Arduino Mega板上是硬件串口Serial1的专用引脚(19对应Serial1的TX,18对应Serial1的RX)。硬件串口的稳定性比SoftwareSerial高太多,尤其是在蓝牙通信这种需要稳定传输的场景,SoftwareSerial很容易因为波特率稍高就出现数据丢包或乱码。

修改后的代码可以直接用硬件串口,稳定性拉满:

void setup() {
  Serial.begin(9600); // 电脑与Arduino的通信波特率
  Serial.println("Arduino is ready");
  Serial.println("Remember to select Both NL & CR in the serial monitor");
  
  Serial1.begin(9600); // 用硬件串口Serial1和HC-05通信,波特率要和模块一致
  pinMode(13, OUTPUT); // 别忘了初始化LED引脚!你之前的代码漏掉了这一步
}

void loop() {
  // 从电脑串口接收数据,控制LED同时转发给蓝牙模块
  if(Serial.available() > 0) {
    char data = Serial.read();
    Serial.print(data);
    Serial.print("\n");
    
    if(data == '1') {
      digitalWrite(13, HIGH);
    } else if(data == '0') {
      digitalWrite(13, LOW);
    }
    // 可选:把电脑发来的数据同步发给蓝牙模块,支持双向通信
    Serial1.write(data);
  }

  // 可选:接收蓝牙模块发来的数据,显示在电脑串口
  if(Serial1.available() > 0) {
    char btData = Serial1.read();
    Serial.print("Received from HC-05: ");
    Serial.println(btData);
  }
}

接线注意事项:HC-05的TX接Arduino的18(Serial1的RX),HC-05的RX接Arduino的19(Serial1的TX);给HC-05接3.3V电源(别接5V,容易烧坏模块)和GND。

3. 其他可能的小问题

  • 电平转换:HC-05是3.3V电平,Arduino是5V电平,虽然很多HC-05能兼容5V输入,但长期使用可能导致通信不稳定,最好加个简单的电阻分压(比如用1k和2k电阻把Arduino的TX信号降到3.3V)。
  • 串口监视器换行设置:你代码里提示要选Both NL & CR,一定要确认这个设置,否则可能出现数据接收不完整的情况。

按照上面的步骤调整后,应该就能解决乱码问题,正常控制LED啦!

内容的提问来源于stack exchange,提问作者user7346355

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:43:22