查看: 1201|回复: 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() 函数,接收序号作为参数

kittenblock中小学创客名师推荐的图形化编程软件

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)

  }

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

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

  • TA的每日心情
    慵懒
    2018-11-12 08:58
  • 签到天数: 37 天

    [LV.5]常住居民I

    发表于 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 提供的库,估计比较老了

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

    本版积分规则

    热门推荐

    [限时福利]5分钟带你快速了解新一代开发板:M5STACK
    [限时福利]5分钟带你快速
    一、什么是M5Stack M5Stack是一种模块化、可堆叠扩展的开发板,每个模块
    点灯·blinker-app智动化设置不工作,还需设置那些?
    点灯·blinker-app智动化
    void loop() { Blinker.run(); // Blinker.delay(100); if (read_time ==
    OLED 128*64自制可达10000000个选项的菜单(已更新)
    OLED 128*64自制可达10000
    OLED 128*64自制可达10000000个选项的菜单 温馨提示: 建议占个楼再食用本帖子
    点灯·blinker-3 天猫精灵接入8266+继电器控制灯
    点灯·blinker-3 天猫精灵
    继续倒腾,今天试试把“点灯”接入家里的天猫精灵。 参考“点灯”官网教程:ht
    arduino无法加载库原因
    arduino无法加载库原因
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表