热门标签 | 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. 开发过程中的调试,通过串行端口输出调试信息,帮助开发者监控程序运行状态。

推荐阅读
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • 深入解析JVM垃圾收集器
    本文基于《深入理解Java虚拟机:JVM高级特性与最佳实践》第二版,详细探讨了JVM中不同类型的垃圾收集器及其工作原理。通过介绍各种垃圾收集器的特性和应用场景,帮助读者更好地理解和优化JVM内存管理。 ... [详细]
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 本文详细介绍了 GWT 中 PopupPanel 类的 onKeyDownPreview 方法,提供了多个代码示例及应用场景,帮助开发者更好地理解和使用该方法。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 在 Windows 10 中,F1 至 F12 键默认设置为快捷功能键。本文将介绍几种有效方法来禁用这些快捷键,并恢复其标准功能键的作用。请注意,部分笔记本电脑的快捷键可能无法完全关闭。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
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社区 版权所有