在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"). (+)? (+.)
删除local
和method
之间的逗号。
你的字符串模式也不行。你需要用%
逃离魔法角色
gpio.write (led1, gpio.
不完整。