LUA 脚本在编译时产生错误



在Arduino 1.8.16中编译以下lua脚本以加载到NodeMCU 8266 MOD 12-F时,我收到一条失败消息(附在脚本之后)。 我是整个Arduino(以及整个软件)主题的新手,只是试图基于NodeMCU构建一些DYI。我将不胜感激关于这里错误或缺失的建议。 提前非常感谢!

wifi.setmode (wifi.STATION) 
wifi.sta.config ("BudSpencer", "PaPAT2xx1", 1) 
wifi.sta.connect () 
print (wifi.sta.getip ()) 
bell1 = 2 
pin1 = 3 
led1 = 4 
gpio.mode (pin1, gpio.OUTPUT) 
gpio.mode (led1, gpio.OUTPUT) 
gpio.mode (bell1, gpio.INPUT, gpio.PULLUP); 
gpio.write (pin1, gpio.LOW) 
gpio.write (led1, gpio.HIGH) 
srv = net.createServer (net.TCP) srv: listen (80, function (conn) 
conn: on ("receive", function ( client, request) 
local buf = ""; 
local , , method, path, vars = string.find (request, "([AZ] +) HTTP"). (+)? (+.); 
if (method == nil) then 
,, method, path = string.find (request, "([AZ] +) (. +) HTTP"); 
end 
local _GET = {} 
if (vars ~ = nil) then 
for k, v in string.gmatch (vars, "(% w +) = (% w +) & *") do 
_GET [k] = v 
end 
end 
buf = buf .. " 
NodeMCU Door Opener 
"; 
buf = buf .. "Door OPEN
"; 
local _on, _off = "", "" 
if (_GET.pin == "OPEN") then 
gpio.write (led1, gpio.LOW) 
gpio.write (pin1, gpio.HIGH) 
tmr.delay (1000 * 2000) 
gpio.write (led1, gpio.
end 
client: send (buf); 
client: close (); 
collectgarbage (); 
end) 
end) 
lock = 0 
function callback () 
if lock == 0 then 
lock = 1 
print ("called") 
print ("notify ()") 
http.post ('http://192.168.178.5:9999/bell ', 
' Content-Type: application / json  r  n ', 
' {"hello": "world"} ', 
nil) 
lock = 0 
end 
end 
gpio.trig (bell1, "up", callback)

失败消息 - Arduino: 1.8.16 (Windows 10), 开发板: "NodeMCU 1.0 (ESP-12E 模块), 80 MHz, 闪存, 禁用 (在 oom 上新中止), 禁用, 所有 SSL 密码 (最兼容), 32KB 缓存 + 32KB IRAM(平衡), 将pgm_read宏用于 IRAM/PROGMEM, 4MB (FS:2MB OTA:~1019KB), 2, v2 较低内存, 禁用, 无, 仅草图, 115200">

sketch_oct05a:26:21: 错误: 缺少终止 " 字符

26 | buf = buf..">

|                     ^ 

sketch_oct05a:28:2: 错误: 缺少终止"字符

28 | ";

|  ^~

sketch_oct05a:29:21: 错误: 缺少终止 " 字符

29 | buf = buf.."门打开

|                     ^~~~~~~~~~

sketch_oct05a:30:1:错误:缺少终止"字符

30 | ";

| ^~

sketch_oct05a:1:1:1:错误:"wifi"未命名类型

1 | wifi.setmode(wifi.STATION)
| ^~~~

sketch_oct05a:11:2: 错误:"GPIO"未命名类型

11 | GPIO.write(pin1, gpio.低)

|  ^~~~

sketch_oct05a:16:10: 错误:"本地"未命名类型

16 | local , , method, path, vars = string.find(request, "([A-Z]+) (.+)?(.+) HTTP");

|          ^~~~~

sketch_oct05a:17:10:错误:"if"之前应存在非限定 ID

17 | if(方法 == nil) 则

|          ^~

sketch_oct05a:19:10: 错误:"end"未命名类型

19 | 结束

|          ^~~

sketch_oct05a:21:10:错误:"if"之前应存在非限定 id

21 | 如果 (vars ~= nil)则

|          ^~

sketch_oct05a:40:16:错误:在嵌套名称说明符中找到":",预期为"::">

40 | 客户端:关闭();

|                ^
|                ::

sketch_oct05a:40:10: 错误:"客户端"未命名类型

40 | 客户端:关闭();

|          ^~~~~~

sketch_oct05a:41:26:错误:在";"标记之前进行预期的构造函数、析构函数或类型转换

41 | 收集垃圾();

|                          ^

sketch_oct05a:42:6: 错误:"结束"未命名类型

42 | 完)

|      ^~~

退出状态 1

缺少终止 " 字符

此报告将包含更多信息 "在编译期间显示详细输出" 在文件 -> 首选项中启用的选项。

我认为您必须在此处对数据类型字符串使用更专业的定义.
我的意思是...

buf = buf .. " 
NodeMCU Door Opener 
";

。必须...

buf = buf .. [[ 
NodeMCU Door Opener 
]];

。这里。

字符串的它([[]])就像HTML<pre></pre>Element.
因为你可以输入你想要的东西.
像其他编程语言的源代码,例如.
此外,n和类似的(空格)不会被解释,并将按原样提出.
特别是在你的情况下,其中有换行符,这可能是错误消息呻吟的内容。

或者简单地定义...

buf = buf .. "nNodeMCU Door Openern";

相同:buf = buf .. "Door OPENn";

我不确定你在这里做什么。Arduino 不是 Lua IDE。虽然您可以在C++中使用Arduino IDE对NodeMCU硬件进行编程,但NodeMCU固件运行Lua脚本。您无法在 Arduino 软件中编译 Lua 代码。这说不通。

我想你在这里有一些很大的误解。顺便说一句,这就是为什么您会收到所有这些类型和名称错误的原因。

仅举一些 Lua 代码中的几个问题:

buf = buf .. " 
NodeMCU Door Opener 
"; 
buf = buf .. "Door OPEN
"; 

在这里,您违反了Lua 5.4参考手册3.1词汇约定中的以下规则:

短文本字符串不能包含未转义的换行符

n或长文本字符串中使用转义换行符

文本字符串也可以使用由 长括号。我们将级别 n 的左长括号定义为 左方括号后跟 N 个等号,后跟另一个等号 左方括号。因此,级别 0 的开口长括号是 写为 [[,级别 1 的左长括号写为 [=[, 等等。右长括号的定义类似;例如 级别 4 的右长括号写为 ]====]。长字面 从任何级别的开口长括号开始,到第一个结束 关闭同一级别的长括号。它可以包含任何文本,除了 同一级别的右括号。此括号形式的文字 可以运行多行,不解释任何转义序列,以及 忽略任何其他级别的长括号。任何类型的生产线末端 顺序(回车、换行符、回车符后跟 换行符或换行符后跟回车符)转换为 简单的换行符。当紧跟着开始的长括号时 通过换行符,换行符不包含在字符串中。

local , , method, path, vars = string.find (request, "([AZ] +) HTTP"). (+)? (+.)

删除localmethod之间的逗号。

你的字符串模式也不行。你需要用%逃离魔法角色

gpio.write (led1, gpio.不完整。

相关内容

最新更新