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

求助:添加外设后Arduino Mega与ESP8266串口通信异常

ESP866 NodeMCU V3与Arduino Mega 2560串口通信故障排查

仅输出文本的代码可正常运行,但添加I2C LCD、电机及温度传感器相关代码后,系统完全无法执行对应逻辑。需求是通过ThingSpeak APP控制电机,NodeMCU向Arduino发送0、1、2指令。

可正常运行的代码

#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); //rx,tx
void setup(){
  mySerial.begin(115200);
  Serial.begin(115200);
}

void loop (){
  if(mySerial.available() >= 2) {
    int data = mySerial.read();
    data = (data << 8) + mySerial.read();
    if (data == 0){
      Serial.println("BREWING: Light COFFEE");
      Serial.println(data);
       mySerial.write("reset");
    } else if (data == 1) {
      Serial.println("BREWING: Normal COFFEE");
      Serial.println(data);
       mySerial.write("reset");
    }else if (data == 2) {
      Serial.println("BREWING: Strong COFFEE");
      Serial.println(data);
       mySerial.write("reset");
  }
}
}

无法运行的代码

#include <SoftwareSerial.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

#define ENA 5   // Enable Pin for Motor A
#define IN1 7   // Input Pin 1 for Motor A
#define IN2 6   // Input Pin 2 for Motor A

SoftwareSerial mySerial(10, 11); //rx,tx
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup(){
  mySerial.begin(115200);
  Serial.begin(115200);
  
  pinMode(ENA, OUTPUT);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);

  lcd.begin(20, 21);
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("Temp: ");

  sensors.begin();
}

void loop(){
  if(mySerial.available() >= 2){
    int data = mySerial.read();
    data = (data << 8) + mySerial.read();
    if (data == 0){
      Serial.println("BREWING: Light COFFEE");
      Serial.println(data);
      
      // Read temperature value from the DS18B20
      sensors.requestTemperatures();
      float temp = sensors.getTempCByIndex(0);

      // print the temperature on the LCD
      lcd.setCursor(0, 1);
      lcd.print(temp);

      // Control the L298N motor
      digitalWrite(IN1, HIGH);
      digitalWrite(IN2, LOW);
      delay(1000);
      digitalWrite(IN1, LOW);
      digitalWrite(IN2, LOW);
      analogWrite(ENA, 128);

      mySerial.write("reset");
    } else if (data == 1) {
      Serial.println("BREWING: Normal COFFEE");
      Serial.println(data);

      // Read temperature value from the DS18B20
      sensors.requestTemperatures();
      float temp = sensors.getTempCByIndex(0);

      // print the temperature on the LCD
      lcd.setCursor(0, 1);
      lcd.print(temp);

      mySerial.write("reset");
    } else if (data == 2) {
      Serial.println("BREWING: Strong COFFEE");
      Serial.println(data);

      // Read temperature value from the DS18B20
      sensors.requestTemperatures();
      float temp = sensors.getTempCByIndex(0);

      // print the temperature on the LCD
      lcd.setCursor(0, 1);
      lcd.print(temp);

      mySerial.write("reset");
    }
  }
}

排查与修复步骤

1. 修正LCD初始化参数

lcd.begin(20, 21); 参数错误,你的LCD是16列2行,应改为:

lcd.begin(16, 2);

这个错误会直接导致LCD初始化失败,阻塞后续代码执行。

2. 调整串口数据读取逻辑

需求中NodeMCU发送的是0、1、2单字节数据,但当前代码按双字节读取(if(mySerial.available() >= 2)),导致Arduino一直等待2字节数据无法触发逻辑。修改为单字节读取:

if(mySerial.available() > 0) {
  int data = mySerial.read();
  // 后续判断逻辑保持不变
}

若NodeMCU确实发送双字节数据,需确认发送格式后再调整读取逻辑。

3. 优化电机控制逻辑

  • analogWrite(ENA, 128); 放在电机停止后无作用,应提前设置转速:
analogWrite(ENA, 128); // 先设置电机转速
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
delay(1000);
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW); // 停止电机

4. 处理温度传感器读取异常

sensors.requestTemperatures() 默认阻塞约750ms,可能影响串口响应,同时添加读取失败判断:

sensors.requestTemperatures();
float temp = sensors.getTempCByIndex(0);
if(temp == DEVICE_DISCONNECTED_C) {
  lcd.print("Err");
} else {
  lcd.print(temp);
}

5. 检查引脚冲突

  • Arduino Mega的10、11引脚是SPI引脚(SS、MOSI),确保未被其他外设占用;
  • 用I2C扫描工具确认LCD的I2C地址是否为0x27,避免地址错误导致初始化失败。

6. 解决电源负载问题

添加电机后电源负载增大,Arduino可能因供电不足崩溃。建议给L298N电机驱动模块单独供电,确保Arduino的5V/3.3V输出稳定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 11:35:22