0°

(七)ESPlorer系列:NodeMCU UART串口使用方法

介绍

UART(通用异步接收器/发送器)是一种串行通信协议,其中数据一次一位地串行传输。异步串行通信广泛用于面向字节的传输。在异步串行通信中,一次传输一个字节的数据。

UART串行通信协议使用定义的帧结构作为其数据字节。异步通信中的帧结构包括:

  • START位:它有点表示串行通信已启动且始终为低电平。
  • DATA BYTE位:数据位可以是5到9位的包。通常我们使用8位数据包,它总是在START位之后发送。
  • STOP位:通常为一位或两位。它在数据位包之后发送以指示帧结束。停止位始终为逻辑高电平。
(七)ESPlorer系列:NodeMCU UART串口使用方法

通常,异步串行通信帧由START位(1位)后跟DATA BYTE(8位)和STOP位(1位)组成,它形成一个10位帧,如上图所示。帧也可以由2个STOP位而不是单个位组成,并且在STOP位之后还可以有一个PARITY位。

基于NodeMCU的ESP8266有两个UART接口,UART0和UART1。通过UART接口的ESP8266数据传输速度可达到115200的40倍,即4.5 Mbps。默认情况下,40MHz振荡器的UART0波特率为115200。它可以根据应用需要更改为用户定义的值。

NodeMCU UART引脚

(七)ESPlorer系列:NodeMCU UART串口使用方法

NodeMCU UART引脚

 

TXD(数据传输引脚)

          该引脚用于串行传输数据。

RXD(数据接收引脚)

          该引脚用于串行接收数据。

注: SD_DATA_1 / RXD1引脚内部用于与闪存的SPI四通信。因此,我们只能使用UART1的TXD1引脚。

 

基于NodeMCU LUA的UART功能

让我们看一下基于LUA的函数,这些函数可用于NodeMCU中的UART接口。

uart.setup()

该功能配置UART的通信参数。

注意:如果此功能在接收过程中重新配置UART,则通过UART发送的字节将丢失。

句法: uart.setup(id, baud, databits, parity, stopbits[, echo])

参数:

  • id UART id(0或1)。
  • baud波特率可以是以下之一:300,600,1200,2400,4800,9600,19200,31250,38400,57600,74880,115200,230400,256000,460800,921600,1843200,3686400。
  • databits数字,每帧数据位数。它可以采用以下值之一:5,6,7,8
  • parity如果需要,从uart.PARITY_NONE,uart.PARITY_ODD或uart.PARITY_EVEN设置奇偶校验选项
  • stopbits设置否。每帧停止位。它可以是以下之一:uart.STOPBITS_1,uart.STOPBITS_2
  • echo如果为0,则禁用echo,否则启用echo(如果省略则默认)

返回:配置的波特率。

例:

-- configure for 9600, 8N1, with echo
uart.setup(0, 9600, 8, uart.PARITY_NONE, uart.STOPBITS_1, 1)

 

uart.on()

此函数设置回调函数以处理UART事件。目前仅支持“数据”事件。

注意:由于ESP8266的限制,只有UART 0能够接收数据。

句法: uart.on(method, [number/end_char], [function], [run_input])

参数:

  • method “数据”,数据将在UART上接收
  • number/end_char number用于设置要接收的数据字节数。end_char是将用作数据结尾的任何字符。
  • function这是回调函数,它根据number / end_char中定义的方式完全接收数据时触发。它有数据作为输入参数来处理。
  • 例如,功能(数据)打印(“接收数据:”,数据)结束
  • run_input 0或1.如果为0,UART的输入将不会进入Lua解释器。它可以接受二进制数据。如果为1,UART的输入将进入Lua解释器并运行。

要取消注册回调,请仅提供“data”参数。即uart.on(“data”)

返回: null

 

uart.alt()

该功能用于更改UART引脚分配。

句法: uart.alt(on)

参数:

  • On 0表示标准引脚,即GPIO3和GPIO1,1表示使用备用引脚,即GPIO13和GPIO15。

返回: null

 

uart.getconfig()

该函数用于返回UART的当前配置参数。

句法: uart.getconfig(id)

参数:

  • id UART id(0或1)。

返回:返回四个值,如下所示:

  • baud以下之一:300,600,1200,2400,4800,9600,19200,38400,57600,74880,115200,230400,256000,460800,921600,1843200,3686400
  • databits以下之一:5,6,7,8
  • parity以下之一:uart.PARITY_NONE,uart.PARITY_ODD或uart.PARITY_EVEN
  • stopbits以下之一:uart.STOPBITS_1,uart.STOPBITS_1_5或uart.STOPBITS_2

 

uart.write()

该函数将字符串或字节写入UART。

句法: uart.write(id, data1 [, data2, ...])

参数:

  • id UART id(0或1)。
  • data1, data2, ...通过UART发送的字符串或字节

返回: null

例:

uart.write(0, "Hello, world\n")

 

让我们为两个NodeMCU之间的UART串行通信编写一个Lua脚本。

这里发送器NodeMCU将从UART1发送引脚发送字符串,即TXD1。接收器NodeMCU将接收它并在串行监视器窗口上打印。

(七)ESPlorer系列:NodeMCU UART串口使用方法

 

NodeMCU Transmitter(发送)的Lua脚本

uart.setup(1, 115200, 8, uart.PARITY_NONE, uart.STOPBITS_1, 1)-- setup UART1 i.e. pin GPIO2
while true do   --send string per second continuously
    uart.write(1, "Hello friend\n")
    tmr.delay(1000000)
end

NodeMCU Receiver(接收)的Lua脚本

限制以下用户组阅读此隐藏内容

请先登录

您的用户组:

输出结果

下面是接收器端的ESPlorer串行监视器输出窗口。接收器NodeMCU将在ESPlorer输出窗口上打印接收的数据,如下图所示。

(七)ESPlorer系列:NodeMCU UART串口使用方法

 

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论