wenbo2005.online

学习记录 / Arduino 与 ESP

软串口通信

Arduino 与 ESP2024-10-22

(一),开启单个软串口

Arduino板只有一个硬件串口,该串口在下载程序时需要断开与其他设备的连接,否则可能下载失败,所以需要开启软串口与其他设备通信:

以下示例实现两个串口互相通信,显示的数据有概率乱码,建议降低波特率

添加自带的库:

#include <SoftwareSerial.h>

创建变量:

SoftwareSerial Serial_1(9, 10);//RX,TX

定义临时变量:

String str1,str2;

初始化串口:

void setup() {
  Serial.begin(115200);
  Serial_1.begin(115200);
}

String Read_Data1()                                //读取PC端发送过来的信息
{
  String data = "";
  while(Serial.available()>0)
  {
    data+=char(Serial.read());
    delay(1);
  }
  return data;
}

String Read_Data2()                                //读取硬件串口发送过来的信息
{
  String data = "";
  while(Serial_1.available()>0)
  {
    data+=char(Serial_1.read());
    delay(2);
  }
  return data;
}

unsigned long rx_time1=0;
void Rx1_Data()
{
  if(millis() - rx_time1 < 500) return;
  rx_time1 = millis();

  str1 = Read_Data1();
  if (str1.length() != 0)                         //如果不是非空字符串,则打印到PC端串口调试助手
  {
    Serial_1.print(str1);
    str1="";
  }
}

unsigned long rx_time2=0;
void Rx2_Data()
{
  if(millis() - rx_time2 < 500) return;
  rx_time2 = millis();

  str2 = Read_Data2();
  if (str2.length() != 0)                         //如果不是非空字符串,则打印到串口显示器
  {
    Serial.print(str2);
    str2="";
  }
}

void loop() {
  // put your main code here, to run repeatedly:

Rx1_Data();

Rx2_Data();
}

(二),开启多个软串口(两个)

使用自带的软串口库,是无法开启两个的,需要添加另一个库:#include <AltSoftSerial.h>

添加库:

#include <AltSoftSerial.h>
#include <SoftwareSerial.h>    //自带的软串口

定义变量:

SoftwareSerial BLE(10,11);
AltSoftSerial AltGPS;                       //Nano板默认D8(TX),D9(RX)不可以更改

初始化:

  Serial.begin(9600);
  //软串口
  BLE.begin(9600);
  AltGPS.begin(9600);

如此,两个软串口接收的内容都可以打印在硬件串口上