ESP8266软串口问题解决

ESP8266软串口问题解决


开发项目中想使用ESP8266作为主设备实现与NB_IoT板子进行通讯。经过多天的努力,终于败下阵来,在这里记录下来,与大家共同探讨。

手头上有一块上一篇博客写的ESP8266板子,ESP8266使用eTFT库显示TFT。板子的外形图如下:
在这里插入图片描述
利用这个板子作为主控,使用硬件串口0作为调试串口,用软串口作为与BC95板子的通讯串口。
BC95-B5模块的图如下:
在这里插入图片描述
程序如下:

#include <SoftwareSerial.h>     // 采用软件的串口
#if defined(ESP8266)
#define D5 (14)
#define D6 (12)
#define D7 (13)
#define D8 (15)
#define RX (3)
#define TX (1)
#endif
SoftwareSerial sUart;     // Software Serial RX, TX

setup()
{
    
    
	Serial.begin(9600);	// 硬件串口,调试串口
	sUart.begin(9600, SWSERIAL_8N1, D5, D6);// 软件串口,连接BC95
	Serial.printf("The Hardware Serial COM0: baud rate = 9600 pbs\r\n");
	Serial.printf("The Software Serial COM1:baud rate = 9600 pbs\r\n");
}

loop()
{
    
    
	if (Serial.available())
		sUart.write(Serial.read());
	
	if (sUart.available())
		Serial.write(sUart.read());
}	

使用上面的程序可以实现调试串口输入的数据通过软串口发送给BC95-B5的板子,BC95-B5返回的信息又会通过软串口再发送到调试串口的输出。比如在调试串口上输入AT\r\n,BC95-B5就会回复OK,这个OK会通过调试串口输出到屏幕上。

用调试串口试验,用硬件串口直接输出,都会经常出现乱码,开始以为是串口的设置有问题,用调试助手与BC95-B5通讯,完全正常。用调试助手外接CH340与软串口和调试串口通讯都没有问题。不知道问题出在哪里!最后用一个ESP32的板子,轻松实现正常通讯。希望高手能告诉我这到底是为啥,是不是有人用过这种配置。没办法,项目只能用ESP32来实现了。

后记:不死心,今天又将板子的电路图仔细看了一下,软件的串口库也看了一下,终于找到了毛病。

问题出在BC95-B5的板子上,这个板子的RX,TX以及RI的内部串接了一个2.2KΩ的电阻。而我们的软件串口库中有RX端子设定的是pinMode(m_rxPin, INPUT_PULLUP), 而有文献介绍Arduino的端子设定为输入PULLUP是用50-150Ω的电阻上拉到电源电压。如果RX的端子是高电平没有问题,但当BC95-B5的TX是低电平时使这个点的电压很高,无法达到低电平。因此出现乱码。如何解决哪?就是在初始化了软件串口以后再增加一句:
pinMode(D5, INPUT); 这个问题就可以解决了。能找到这个问题很高兴。希望会帮到用到这个电路的人。
增加一个上面BC95外部连接的原理图。以便大家理解!
在这里插入图片描述
注意,这里串联了2.2KΩ的电阻再连接到外部的。

猜你喜欢

转载自blog.csdn.net/weixin_44481398/article/details/104365740
今日推荐