首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LUA脚本在编译时产生错误

LUA脚本在编译时产生错误
EN

Stack Overflow用户
提问于 2021-10-07 18:41:49
回答 2查看 95关注 0票数 1

当在Arduino 1.8.16中编译以下lua脚本以加载到NodeMCU 8266 MOD 12-F时,我得到一条失败消息(附加在脚本后面)。我在整个Arduino (和整个SW ..)都是新手。主题和只是尝试建立一些基于NodeMCU的DYI。如果您能就这里的错误或缺失给我一个建议,我将不胜感激..提前谢谢你!

代码语言:javascript
复制
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..“

代码语言:javascript
复制
  |                     ^ 

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

28 | ";

代码语言:javascript
复制
  |  ^~

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

29 | buf =buf..“门打开

代码语言:javascript
复制
  |                     ^~~~~~~~~~

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

30 | ";

代码语言:javascript
复制
  | ^~

sketch_oct05a:1:1:错误:'wifi‘没有命名类型

代码语言:javascript
复制
1 | wifi.setmode(wifi.STATION)

  | ^~~~

sketch_oct05a:11:2:错误:'gpio‘未命名类型

11 | gpio.write(pin1,gpio.LOW)

代码语言:javascript
复制
  |  ^~~~

sketch_oct05a:16:10:错误:“”local“”未命名类型

16 |本地,,方法,路径,vars = string.find(request,"(A-Z+) (.+)?(.+) HTTP");

代码语言:javascript
复制
  |          ^~~~~

sketch_oct05a:17:10:错误:'if‘前应为未限定的id

17 | if(method == nil) then

代码语言:javascript
复制
  |          ^~

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

19 |结束

代码语言:javascript
复制
  |          ^~~

sketch_oct05a:21:10:错误:'if‘前应为未限定的id

21 | if (vars ~= nil)则

代码语言:javascript
复制
  |          ^~

sketch_oct05a:40:16:错误:在嵌套名称说明符中找到':‘,应为'::’

40 | client:close();

代码语言:javascript
复制
  |                ^

  |                ::

sketch_oct05a:40:10:错误:'client‘没有命名类型

40 | client:close();

代码语言:javascript
复制
  |          ^~~~~~

sketch_oct05a:41:26:错误:';‘标记前应为构造函数、析构函数或类型转换

41 |收集器垃圾();

代码语言:javascript
复制
  |                          ^

sketch_oct05a:42:6:错误:'end‘未命名类型

42 |结束)

代码语言:javascript
复制
  |      ^~~

退出状态%1

缺少“终止”字符

如果在文件->首选项中启用了“在编译期间显示详细输出”选项,则该报告将包含更多信息。

EN

回答 2

Stack Overflow用户

发布于 2021-10-07 19:24:45

我认为您必须在这里为Datatype字符串使用更专业的定义。

我是说..。

代码语言:javascript
复制
buf = buf .. " 
NodeMCU Door Opener 
";

...has的目标是...

代码语言:javascript
复制
buf = buf .. [[ 
NodeMCU Door Opener 
]];

...here。

对于字符串,它([[]])类似于HTML <pre></pre>元素。

因为你可以放入你想要的东西。

例如,其他编程语言的源代码。

此外,\n和类似的(空格)将不会被解释,并将按原样输出。

特别是在您的例子中,有换行符,这可能就是Errormessage抱怨的内容。

或者简单的定义...

代码语言:javascript
复制
buf = buf .. "\nNodeMCU Door Opener\n";

适用于:buf = buf .. "Door OPEN\n";

票数 1
EN

Stack Overflow用户

发布于 2021-10-08 06:40:37

我不知道你在这里做什么。Arduino不是Lua IDE。虽然您可以在C++中使用Arduino IDE对NodeMCU硬件进行编程,但NodeMCU固件运行的是Lua脚本。你不能在Arduino软件中编译Lua代码。那也太没道理了。

我认为你在这方面有一些很大的误解。这就是为什么你会得到所有这些类型和名称错误。

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

代码语言:javascript
复制
buf = buf .. " 
NodeMCU Door Opener 
"; 
         buf = buf .. "Door OPEN
 "; 

在这里,您违反了Lua 5.4 Reference Manual 3.1 Lexical Conventions的以下规则

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

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

也可以使用由长方括号括起来的长格式来定义

文字字符串。我们将第n级的左长括号定义为一个左方括号,后面跟着n个等号,然后是另一个左方括号。因此,0级的左长括号写成[[,1级的左长括号写成[=,依此类推。右长括号的定义类似;例如,级别4的右长括号写为====]。长文字以任意级别的左长括号开始,在同一级别的第一个右长括号结束。它可以包含除同级右括号之外的任何文本。这种带括号形式的文字可以运行几行,不解释任何转义序列,并且忽略任何其他级别的长括号。任何类型的行尾序列(回车符、换行符、回车符和换行符,或者换行符和回车符)都会转换为简单的换行符。当左长括号后面紧跟换行符时,换行符不包括在字符串中。

代码语言:javascript
复制
local , , method, path, vars = string.find (request, "([AZ] +) HTTP"). (+)? (+.)

删除localmethod之间的逗号。

你的字符串pattern也不是很好。您需要使用%转义魔法字符

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69486298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档