热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ESP-8266串行通信详解

本文详细介绍了ESP8266的串行通信特性,包括其硬件FIFO和额外缓存机制,以及如何配置和使用NodeMCU上的多个串行端口。
ESP8266的串行通信功能与传统Arduino设备相似,但具有增强的硬件特性。除了标准的硬件FIFO(每方向128字节)外,ESP8266还提供了额外的256字节TX和RX缓存。这些缓存有助于提高数据传输效率,减少数据丢失。

所有发送和接收操作均通过中断处理。当FIFO或缓存满时,write函数将暂停执行,直到有足够的空间可用。同样,当FIFO或缓存为空时,read函数将阻塞,直到接收到新的数据。

NodeMCU开发板上配备了两个串行端口:Serial和Serial1。Serial默认使用UART0接口,连接至GPIO1(TX,即D10)和GPIO3(RX,即D9)。通过调用Serial.swap()方法,可以将这些引脚重新映射到GPIO15(TX,即D8)和GPIO13(RX,即D7)。再次调用Serial.swap()则恢复到默认设置。

例如:
void setup() {
Serial.begin(
115200);
Serial.println(
"初始映射:GPIO1(TX), GPIO3(RX)");
Serial.swap();
Serial.println(
"映射后:GPIO15(TX1), GPIO13(RX1)");
Serial.swap();
Serial.println(
"恢复映射:GPIO1(TX), GPIO3(RX)");
}

void loop() {
}


Serial1使用UART1接口,默认TX引脚为GPIO2(D4)。需要注意的是,由于RX引脚用于连接闪存芯片,因此Serial1不能用于接收数据。若需使用Serial1进行数据发送,只需调用Serial1.begin(baudrate)即可。

如果不使用Serial1且不需要重新映射串口,可以将UART0的TX引脚映射到GPIO2,这可以通过调用Serial.set_tx(2)或直接使用Serial.begin(baud, config, mode, 2)来实现。

默认情况下,调用Serial.begin后会禁用WiFi库的诊断输出。如需重新启用调试输出,可调用Serial.setDebugOutput(true)。若要将调试输出定向到Serial1,则应调用Serial1.setDebugOutput(true)。

用户还可以通过调用Serial.setRxBufferSize(size_t size)自定义接收缓冲区的大小,默认为256字节。虽然增加缓冲区大小可以提高性能,但也需注意这会消耗更多内存。

Serial和Serial1对象支持多种数据格式,包括5至8位的数据位、奇偶校验(奇数、偶数或无)及1或2个停止位。设置这些参数可通过调用如Serial.begin(baudrate, SERIAL_8N1)或Serial.begin(baudrate, SERIAL_6E2)等方法实现。

此外,Serial和Serial1提供了一个新方法来查询当前的波特率设置。调用Serial.baudRate()或Serial1.baudRate()即可返回当前的波特率。

示例代码如下:
void setup() {
Serial.begin(
57600);
int br = Serial.baudRate(); // 查询当前波特率
Serial.printf("当前波特率为: %d bps\n", br);
}

void loop() {
}


串行通信的应用主要集中在两个方面:
1. 与外部设备进行数据交换,如蓝牙模块、其他Arduino设备等;
2. 开发过程中的调试,通过串行端口输出调试信息,帮助开发者监控程序运行状态。

推荐阅读
  • Shiro功能拓展:登录失败重试次数限制
    本文详细介绍了如何在Apache Shiro框架中实现对用户登录失败重试次数的限制,通过自定义密码匹配器来增强系统的安全性。该方法不仅能够有效防止暴力破解攻击,还能确保合法用户的账户安全。 ... [详细]
  • CGroups: 资源管理和控制
    CGroups(Control Groups)是Linux内核提供的一个功能,旨在限制、记录和隔离进程组使用的物理资源,如CPU、内存和I/O等。它通过精细的资源管理,支持现代容器技术如Docker的资源限制需求。 ... [详细]
  • 框图|中将_DA14531 学习笔记经验总结
    框图|中将_DA14531 学习笔记经验总结 ... [详细]
  • 深入理解Play Framework 1.2.7中的缓存机制
    本文探讨了Play Framework 1.2.7版本中提供的缓存解决方案,包括Ehcache和Memcached的集成与使用。文章详细介绍了缓存相关的类及其功能,以及如何通过配置选择合适的缓存实现。 ... [详细]
  • 探讨在数据库中存储URL时,删除尾部斜杠的安全性和潜在影响,以及如何确保URL的一致性。 ... [详细]
  • 探索Java堆外内存:超越JVM限制的新途径
    本文深入探讨了Java堆外内存的应用及其对性能的提升,特别是如何通过堆外内存绕过JVM的限制,解决内存不足的问题。 ... [详细]
  • 本文详细介绍了在Hive中创建表的基本语法,包括临时表、外部表的创建方法,以及如何设置表的各种属性和约束条件。 ... [详细]
  • 本文介绍如何通过自定义控件LoadLayout实现ListView的上拉加载更多和下拉刷新功能。LoadLayout支持上拉加载,而下拉刷新则利用了android.support.v4.widget.SwipeRefreshLayout组件。 ... [详细]
  • Kafka 示例项目中 Log4j 的配置与调试
    本文详细介绍了如何在 Kafka 源码中的示例项目配置 Log4j,以确保能够正确记录日志信息,帮助开发者更好地理解和调试代码。 ... [详细]
  • 本文探讨如何通过贪心算法有效地安排一系列活动,确保使用最少数量的会场来完成所有活动的调度。 ... [详细]
  • 本文探讨了使用匈牙利算法解决二分图中的最大权匹配问题,并通过HDU1533题目实例进行详细解析。代码实现中包括了必要的数据结构定义、输入处理以及求解过程。 ... [详细]
  • 一、数据更新操作DML语法中主要包括两个内容:查询与更新,更新主要包括:增加数据、修改数据、删除数据。其中这些操作是离不开查询的。1、增加数据语法:INSERTINTO表名称[(字 ... [详细]
  • Django框架的使用教程mysql数据库[三]
    Django的数据库1.在Django_test下的view.py里面model定义模型fromdjango.dbimportmodels#Createyourmodelshere ... [详细]
  • 应用程序配置详解
    本文介绍了配置文件的关键特性及其在不同场景下的应用,重点探讨了Machine.Config和Web.Config两种主要配置文件的用途和配置方法。文章还详细解释了如何利用XML格式的配置文件来调整应用程序的行为,包括自定义配置、错误处理、身份验证和授权设置。 ... [详细]
  • 本文深入探讨了企业级开发框架NHibernate和Spring.NET的关键特性之一——面向方面编程(AOP)。文章不仅介绍了AOP的基本概念及其如何增强面向对象编程(OOP),还详细说明了Spring.NET中AOP的具体应用,包括事务管理和自定义方面的实现。 ... [详细]
author-avatar
没有你的日子1976_472
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有