当在Arduino 1.8.16中编译以下lua脚本以加载到NodeMCU 8266 MOD 12-F时,我得到一条失败消息(附加在脚本后面)。我在整个Arduino (和整个SW ..)都是新手。主题和只是尝试建立一些基于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 (Windows10),主板:“SSL1.0(NodeMCU-12E模块),80 MHz,闪存,已禁用(oom上的新中止),已禁用,所有NodeMCU密码(最兼容),32KB高速缓存+ 32KB IRAM (平衡),将pgm_read宏用于NodeMCU/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:错误:'wifi‘没有命名类型
1 | wifi.setmode(wifi.STATION)
| ^~~~sketch_oct05a:11:2:错误:'gpio‘未命名类型
11 | gpio.write(pin1,gpio.LOW)
| ^~~~sketch_oct05a:16:10:错误:“”local“”未命名类型
16 |本地,,方法,路径,vars = string.find(request,"(A-Z+) (.+)?(.+) HTTP");
| ^~~~~sketch_oct05a:17:10:错误:'if‘前应为未限定的id
17 | if(method == nil) then
| ^~sketch_oct05a:19:10:错误:'end‘未命名类型
19 |结束
| ^~~sketch_oct05a:21:10:错误:'if‘前应为未限定的id
21 | if (vars ~= nil)则
| ^~sketch_oct05a:40:16:错误:在嵌套名称说明符中找到':‘,应为'::’
40 | client:close();
| ^
| ::sketch_oct05a:40:10:错误:'client‘没有命名类型
40 | client:close();
| ^~~~~~sketch_oct05a:41:26:错误:';‘标记前应为构造函数、析构函数或类型转换
41 |收集器垃圾();
| ^sketch_oct05a:42:6:错误:'end‘未命名类型
42 |结束)
| ^~~退出状态%1
缺少“终止”字符
如果在文件->首选项中启用了“在编译期间显示详细输出”选项,则该报告将包含更多信息。
发布于 2021-10-07 19:24:45
我认为您必须在这里为Datatype字符串使用更专业的定义。
我是说..。
buf = buf .. "
NodeMCU Door Opener
";...has的目标是...
buf = buf .. [[
NodeMCU Door Opener
]];...here。
对于字符串,它([[和]])类似于HTML <pre></pre>元素。
因为你可以放入你想要的东西。
例如,其他编程语言的源代码。
此外,\n和类似的(空格)将不会被解释,并将按原样输出。
特别是在您的例子中,有换行符,这可能就是Errormessage抱怨的内容。
或者简单的定义...
buf = buf .. "\nNodeMCU Door Opener\n";适用于:buf = buf .. "Door OPEN\n";
发布于 2021-10-08 06:40:37
我不知道你在这里做什么。Arduino不是Lua IDE。虽然您可以在C++中使用Arduino IDE对NodeMCU硬件进行编程,但NodeMCU固件运行的是Lua脚本。你不能在Arduino软件中编译Lua代码。那也太没道理了。
我认为你在这方面有一些很大的误解。这就是为什么你会得到所有这些类型和名称错误。
仅举几个Lua代码中的问题:
buf = buf .. "
NodeMCU Door Opener
";
buf = buf .. "Door OPEN
"; 在这里,您违反了Lua 5.4 Reference Manual 3.1 Lexical Conventions的以下规则
短文字字符串不能包含未转义的换行符
使用转义换行符\n或长文字字符串
也可以使用由长方括号括起来的长格式来定义
文字字符串。我们将第n级的左长括号定义为一个左方括号,后面跟着n个等号,然后是另一个左方括号。因此,0级的左长括号写成[[,1级的左长括号写成[=,依此类推。右长括号的定义类似;例如,级别4的右长括号写为====]。长文字以任意级别的左长括号开始,在同一级别的第一个右长括号结束。它可以包含除同级右括号之外的任何文本。这种带括号形式的文字可以运行几行,不解释任何转义序列,并且忽略任何其他级别的长括号。任何类型的行尾序列(回车符、换行符、回车符和换行符,或者换行符和回车符)都会转换为简单的换行符。当左长括号后面紧跟换行符时,换行符不包括在字符串中。
local , , method, path, vars = string.find (request, "([AZ] +) HTTP"). (+)? (+.)删除local和method之间的逗号。
你的字符串pattern也不是很好。您需要使用%转义魔法字符
gpio.write (led1, gpio.不完整。
https://stackoverflow.com/questions/69486298
复制相似问题