如何使用Nodemcu(Lua)进行多个串口通信

Sub*_*der 2 lua arduino nodemcu

____________
|          |
|   N      |
|   O   Rx2|<------Tx EnergyMeter(Returns value based on command)
|   D   Tx2|------>Rx EnergyMeter(Receive command)   
|   E      |
|          |
|   M   Rx1|<------Tx Gsm(For MQTT)
|   C   Tx1|------>Rx Gsm(For MQTT)
|   U      |
|          |
-----------
Run Code Online (Sandbox Code Playgroud)

我正在尝试将 Gsm 模块和电表与我的 Nodemcu 连接起来,如图所示。虽然可以通过 Arduino 编码实现,但我只想使用 lua 来实现。

在lua脚本的情况下,如果我使用“uart.alt()”这个函数,然后单击“保存到Esp”,那么在“uart.alt()”行,保存过程会跳转到不同的usart,并且代码不会完全保存到ESP中。

那么在nodemcu中使用多个usart的有效方法是什么(类似于arduino中的软件串行)?

I am using
Nodemcu model : ESP8266
Nodemcu Version : 3
& NodeMCU custom build by frightanic.com branch: 1.5.4.1-fina
Run Code Online (Sandbox Code Playgroud)

我没有得到任何符合我的要求的完美例子。因此,请给我关于这个问题的完美文档或示例。

谢谢。

Cod*_*007 5

您没有给出 NodeMCU 的品牌,但由于 ESP32 上没有 uart.alt,我猜是 8266
因此,如果您的 NodeMCU 是 ESP8266,则您的设置存在问题:
来自ESP8266 文档
虽然有两个 UART(0 和1) 可供 NodeMCU 使用,UART 1 无法接收数据,因此只能发送。我不是 LUA 专家,但我想这就是编译器想告诉你的。
是的,有一个ESP32 版本的 NodeMCU, OP 只是声明他使用 NodeMCU,但没有提供更多信息。

uart.alt()  Change UART pin assignment. 
Run Code Online (Sandbox Code Playgroud)

-表示您可以分配UART 0的引脚

 uart.alt(on)
Parameters

on

0 for standard pins
1 to use alternate pins GPIO13 and GPIO15
Run Code Online (Sandbox Code Playgroud)

因此,这只适用于 NodeMCU ESP8266 上的一个 uart (UART 0)。

如果您使用基于 ESP32 的 NodeMCU
启用 UART 1 会导致 ESP32 崩溃!原因是默认情况下,UART 1 使用与 ESP32 闪存相同的引脚。 请参阅NodeMCU ESP32 开发板的

官方文档。因此,在提问时请务必提供 NodeMCU 的版本和板类型。