使用 LUA 捕获 ANSI 转义序列响应

我正在使用 ESP8266 和 Nodemcu 通过 Putty 与串行终端进行通信。 使用像这些问题中引用的转义序列:

从终端读取 ANSI 转义

如何确定 ANSI 终端的大小?

转义序列列表 https://vt100.net/docs/vt100-ug/chapter3.html

我正在尝试使用 LUA 读取作为回复的转义序列,以查找光标位置。我似乎没有得到可见的回复(预期),但我似乎也没有得到任何东西。除回复外的一切似乎都有效。

我做错了什么,如何捕获响应?

  -- 清除屏幕
  uart.write(0, "\033[2J")

  -- 设置事件处理程序回调以从终端读取数据
  -- 控制序列以 'R' 结束
  -- 我正在替换回复中的 ESC,以便我可以有希望获得可见回复的 _[25;80R

  uart.on("data", 0, function(data)
    if data ~= 'R' then
      uart.write(0, data)
    end
    if data == '\033' then
      uart.write(0, "_")
    end
  end, 0)

  -- ESC = \033

  -- cursorpos(v,h) CUP    将光标移动到屏幕位置 v,h     ^[[<v>;<h>H
  uart.write(0, "\033[20;20H")

  uart.write(0, "\033[6n")

  -- 响应:
  -- cursorpos CPR         响应:光标位于 v,h                ^[<v>;<h>R
点赞
用户870223
用户870223

看起来我的 UART 读取处理器存在语法错误。

我将 /033 更改为 CTRL-v[, 并且修改了 IF 语句中的条件。不确定为什么 \033 不起作用。

为了测试,我将 20;20 部分更改为 200;200,只是想看看它的效果,结果给出了正确的预期响应: _[45;157R

我将代码从以下内容更改为:

  uart.on("data", 0, function(data)
    if data ~= 'R' then
      uart.write(0, data)
    end
    if data == '\033' then
      uart.write(0, "_")
    end
  end, 0)

改为:

 uart.on("data", 0, function(data)
 if data == '\27' then
   uart.write(0,"_")
 else
   uart.write(0, data) end end, 0)
2021-03-13 10:30:26