FireBeelte 多串口通讯的实现-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3746|回复: 2

FireBeelte 多串口通讯的实现

[复制链接]
发表于 2019-2-28 20:47 | 显示全部楼层 |阅读模式
最近在用DFRobot 出品的 FireBeelte做点东西玩,在使用中需要用到多个串口。当我在程序开始写上  Include softwareSerial.h 之后,编译报错。研究了一番发现目前这个平台没有支持 Software Serial (准确的说没有自带原生的库,但是看起来有几个第三方的库)。再研究一番发现还有更简单的实现。
ESP32 支持了3个硬件串口(这样算起来不支持 Software Serial 也没有什么影响)。分别位于 IO3/1 , IO9/10 IO16/17。换成 Arduino IDE  的语言是 D0/0,D5/6 DI/LRCK。其中的IO3/1已经给烧写程序使用,所以一般都是使用后面2组。
fir.png
                              
使用这些硬件串口的代码可以在\AppData\Local\Arduino15\packages\esp32\hardware\DFRobot_FireBeetle-ESP32\0.0.9\cores\esp32\HardwareSerial.h\AppData\Local\Arduino15\packages\esp32\hardware\DFRobot_FireBeetle-ESP32\0.0.9\cores\esp32\HardwareSerial.cpp看到。
比如:初始化函数 begin() 函数,接收序号作为参数

[mw_shl_code=arduino,true]HardwareSerial::HardwareSerial(int uart_nr) : _uart_nr(uart_nr), _uart(NULL) {}

void HardwareSerial::begin(unsigned long baud, uint32_t config, int8_t rxPin, int8_t txPin, bool invert)

{

    if(0 > _uart_nr || _uart_nr > 2) {

        log_e("Serial number is invalid, please use 0, 1 or 2");

        return;

    }

    if(_uart) {

        end();

    }

    if(_uart_nr == 0 && rxPin < 0 && txPin < 0) {

        rxPin = 3;

        txPin = 1;

    }

    if(_uart_nr == 1 && rxPin < 0 && txPin < 0) {

        rxPin = 9;

        txPin = 10;

    }

    if(_uart_nr == 2 && rxPin < 0 && txPin < 0) {

        rxPin = 16;

        txPin = 17;

    }

    _uart = uartBegin(_uart_nr, baud, config, rxPin, txPin, 256, invert);

}

对用户来说使用HardwareSerial Serial1(1); 这样的就可以使用第二组串口。下面就是一个从USB发送然后转发到其他串口的例子:



HardwareSerial Serial1(2);

//HardwareSerial Serial2(2);



void setup() {

  Serial.begin(115200);

  Serial1.begin(115200);

  //Serial2.begin(115200);

}



void loop() {



  if (Serial.available()) {      // If anything comes in Serial (USB),

    Serial1.write(Serial.read());   // read it and send it out Serial1 (pins 0 & 1)

  }



  if (Serial1.available()) {     // If anything comes in Serial1 (pins 0 & 1)

    Serial.write(Serial1.read());   // read it and send it out Serial (USB)

  }

}[/mw_shl_code]
看起来实现很简单,功能也很强大,有兴趣的朋友可以研究一下。

参考:
1. https://www.qutaojiao.com/2452.htmlESP32使用多个串行端口

发表于 2019-3-1 09:15 | 显示全部楼层
可能你的版本不是最新的,现在新的git版本已经预先实例化了
https://github.com/espressif/ard ... rdwareSerial.h#L100
 楼主| 发表于 2019-3-1 10:07 | 显示全部楼层
跑龙套的保 发表于 2019-3-1 09:15
可能你的版本不是最新的,现在新的git版本已经预先实例化了
https://github.com/espressif/arduino-esp32/b ...

谢谢哈,我是直接用 dfrobot 提供的库,估计比较老了

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 11:38 , Processed in 0.076654 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表