极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 45316|回复: 16

请求 ESP32 增加串口的方案

[复制链接]
发表于 2018-9-2 14:50:25 | 显示全部楼层 |阅读模式
本帖最后由 Super169 于 2018-9-2 14:54 编辑

早前用 ESP8266 做了一个项目, 当中因为需要多个串口, 使用了 espsoftwareserial 库, 并修改了可支援单线串口.

最近尝试转用 ESP32, 希望可以提供更多的 GPIO.
看到已有 arduino framework 的支援, 初时以为可以很容易转过去.

但一开始, 就被软串的库卡住了.  虽然 ESP32 号称有三个 UART, 但可以成功使用的只有两个.
自己尝试用 UART2, 惨不忍睹, 收发的资料都是垃圾 (就是已經轉用到別的 GPIO 也不行.), 可以可说是完全不能用.
在网上找到的例子, 都只用了当中两个, 就连一些 ESP32 的硬件, 都找不到有全用三个的例子.

在网上找到了几个库, 都是改自 ESP8266 的, 可惜没有一个真的完全可用.
暂时只可以勉强作为发出 (发大量数据时, 还是有很多杂讯), 但接收时都会死机.
网上找了一段日子, 看似是 ESP32 的中断还没处理好, 接收是靠中断作开始的.

由於要连接总线舵机, 单线串口是必需的, 软的不行, 只可以硬来, 按网上找到的简单电路, 用 74HC04 + 74HC126 把其中一个 UART 转成单线通讯.

但串口还是不足, 自己心想, 如果 OneWire 可以直接在串口通讯就好了.  只可惜自己能力有限, 还是做不到.

从另一个方向想, 既然市场上有不少单线串口的东西, 不知是否有简单的芯片, 可以作通讯之用, 但还是找不到有类似的东西.

所以, 想请教一下, 大家有用过 ESP32 的软串口吗?  有没有什麽测试过可用的库?
或者, 有没有其他简单的方案, 可以把其他 GPIO 用作串口通讯?
回复

使用道具 举报

发表于 2018-9-2 21:41:54 | 显示全部楼层
串口特别多的话。。。我们常常串口转I2C
回复 支持 反对

使用道具 举报

发表于 2018-9-3 09:45:30 | 显示全部楼层
弘毅 发表于 2018-9-2 21:41
串口特别多的话。。。我们常常串口转I2C

这样的模块一个要几十块吧,还不如买一堆的8266,每个提供n串口转i2c,成本几块钱。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-3 10:23:40 | 显示全部楼层
弘毅 发表于 2018-9-2 21:41
串口特别多的话。。。我们常常串口转I2C

谢谢
请问 串口转I2C 是用什麽方法?  是有硬件芯片去做的吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-3 10:29:32 | 显示全部楼层
spirn 发表于 2018-9-3 09:45
这样的模块一个要几十块吧,还不如买一堆的8266,每个提供n串口转i2c,成本几块钱。

谢谢
其实之前也尝试加入一片 8266, 以 I2C 连线, 再自己写一套协定, 作远程的串口.
但就要多加一片 mcu, 多一套程式要管理.  
可以的话, 还是希望可以单一个完成.
回复 支持 反对

使用道具 举报

发表于 2018-9-3 11:14:55 | 显示全部楼层
感谢楼主的实例提点,我之前还想着要不要把第三个串口也用上呢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-3 11:29:15 | 显示全部楼层
wing 发表于 2018-9-3 11:14
感谢楼主的实例提点,我之前还想着要不要把第三个串口也用上呢

也有可能是我做得不好, 才出现问题.  
如果你可以全用上3 个 UART, 希望可以分享一下.
回复 支持 反对

使用道具 举报

发表于 2018-9-3 13:57:49 | 显示全部楼层
8F328P作为串口转换芯片。。。SSOP20的只要1.8元一颗~
回复 支持 反对

使用道具 举报

发表于 2018-9-4 09:44:53 | 显示全部楼层
Arduino, ESP32 and 3 hardware serial ports
https://quadmeup.com/arduino-esp32-and-3-hardware-serial-ports/
回复 支持 反对

使用道具 举报

发表于 2018-9-4 10:10:26 | 显示全部楼层
eddiewwm 发表于 2018-9-4 09:44
Arduino, ESP32 and 3 hardware serial ports
https://quadmeup.com/arduino-esp32-and-3-hardware-serial ...

这个页面好像打不开呢
回复 支持 反对

使用道具 举报

发表于 2018-9-4 10:17:17 | 显示全部楼层
Arduino, ESP32 and 3 hardware serial ports
When working with ESP32 WiFi/Bluetooth MCU under Arduino SDK for ESP32, you will notice that Serial work just fine. But Serial1 and Serial2 do not. ESP32 has 3 hardware UARTs that can be mapped to almost any pin. But, Serial1 and Serial2 will not work. In case of ESP32 this just has to be done in a slightly different way:

include <HardwareSerial.h>

HardwareSerial MySerial(1);

void setup() {
    MySerial.begin(9600, SERIAL_8N1, 16, 17);
}

void loop() {
    while (MySerial.available() > 0) {
        uint8_t byteFromSerial = MySerial.read();
        // Do something
    }
   
    //Write something like that
    MySerial.write(rand(0, 255));
}
view rawESP32 HardwareSerial hosted with &#10084; by GitHub
The trick is to use HardwareSerial library to access UART 1 and 2 instead of Serial1 and Serial2

ESP32 WiFi bluetooth development board

Class HardwareSerial accepts one parameter in constructor, it is a number of UART. Values from 0 (UART 1) to 2 (UART 3)
HardwareSerial(0) is the same as Serial so be aware
begin method accepts 4 parameters
baud speed
UART mode
RX pin
TX pin
The real beauty of this solution is that almost any pin can be used as TX or RX pin for any UART. Most ESP32 dev boards have labels like TX2 or RX2, but you really do not have to exactly those pins. Every other GPIO pin can act as Serial RX, but only the ones between GPIO0 and GPIO31 can be used as TX. Still, that gives plenty of pins to choose from…
More about ESP32 can be read in Getting Started With ESP32 and Arduino post.
回复 支持 反对

使用道具 举报

发表于 2018-9-4 11:12:17 | 显示全部楼层
ESP32 with Multiple DS18B20 Temperature Sensors
https://randomnerdtutorials.com/ ... emperature-sensors/
回复 支持 反对

使用道具 举报

发表于 2018-9-4 11:29:57 | 显示全部楼层
SECRET SERIAL PORT FOR ARDUINO/ESP32
https://hackaday.com/2017/08/17/ ... t-for-arduinoesp32/

Pay attention on the video, especially on the CTS / RTS issues.
回复 支持 反对

使用道具 举报

发表于 2018-9-6 09:39:59 | 显示全部楼层
可以考虑使用开关电路复用同一个UART口,我之前经常使用CD4052芯片做切换TXRX
参考以下论文:《硬件扩展单片机多串口通讯方式的研究》

回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-6 19:04:35 | 显示全部楼层
HuaShine2015 发表于 2018-9-6 09:39
可以考虑使用开关电路复用同一个UART口,我之前经常使用CD4052芯片做切换TXRX
参考以下论文:《硬件扩展单 ...

谢谢, 初步看好像不错, 要认真研究一下.
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-28 18:31 , Processed in 0.048277 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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