切换到宽版
爱科技/爱创意/爱折腾/爱极致;技术知识分享平台,点击进入新版数码之家网站
  • 1773阅读
  • 2回复

[影像]ESP8266 做编程快门 LUA脚本!求纠错! [复制链接]

上一主题 下一主题
离线handsome
 

发帖
2524
M币
0
专家
3
粉丝
51
只看楼主 倒序阅读 我要置顶 楼主  发表于: 2018-03-22
本来该发到 单片机板块的 那边人台少了。。
因为对编程0基础。。遇到很大阻力
感谢@elecfunwb老哥提供样例 并且耐心讲解 脚本语言的相关功能。。
因为不懂编程,没有系统性的了解过。在代码书写规则方面,停滞了很久。3天时间有2天都是因为书写问题导致编译不通过。。然后百度查看样例才发现这些小问题。。

经过几天的排查。。终于把这些问题搞定了。。基础很重要呀。。不然像我临时抱佛脚。耽误太多时间在基础语法上面了。

感谢坛友elecfunwb的耐心指导,以上功能已基本实现。期间遇到各种基本语法性问题 耽误了很多时间。 如果要直接用下面代码,请注意自己的模块io口默认情况是拉高还是拉低了的。如果出现该关的时候变成开了 就请调换下面代码中的low与HIGH的位置。
wifi.setmode(wifi.STATION)
wifi.sta.config("WiFi名字","密码")--你家里的路由或者手机开热点让模块链接。
print(wifi.sta.getip())
led1 = 12
led2 = 04 --这个是模块的io口号码,你看看你买的模块上面有哪些口可以已用知己改后面的号码。
gpio.mode(led1, gpio.OUTPUT)
gpio.mode(led2, gpio.OUTPUT)
gpio.write(led1, gpio.HIGH)
gpio.write(led2, gpio.HIGH)
local a
if (srv~=nil) then
  srv:close()
end
srv=net.createServer(net.TCP)
srv:listen(80,function(conn)
    conn:on("receive", function(client,request)
        local buf = ""
        print(request)
        local _, _, method, path, vars = string.find(request, "([A-Z]+) (.+)?(.+) HTTP")
        if(method == nil)then
            _, _, method, path = string.find(request, "([A-Z]+) (.+) HTTP")
        end
        local _mode, _time, t
        if (vars ~= nil)then
            _, _, _mode, _time = string.find(vars, "(%w+)=(%d+)&*")
        end
        if(_mode == "m1")then
              _, _, a = string.find(vars, "&*ZS=(%d+)")
              t=_time*1000
              print(t,a)
              print("mode1")
              tmr.stop(0)
              tmr.alarm(0,t,1,AlarmMode1)
        elseif(_mode == "m2")then
              print("mode2")
              t=_time*1000
              tmr.stop(0)
              gpio.write(led1, gpio.LOW)
              tmr.delay(1000000)
              gpio.write(led2, gpio.LOW)
              tmr.alarm(0,t,0, function()
              gpio.write(led1, gpio.HIGH)
              gpio.write(led2, gpio.HIGH)
              end
              )
        elseif(_mode == "stop")then
              print("stop")
              tmr.stop(0)
              gpio.write(1, gpio.HIGH)
              gpio.write(2, gpio.HIGH)
        end
        buf = buf.."<h1> Hello, NodeMcu.</h1>"
        buf = buf.."延时<form><input type=\"text\" name=\"m1\" value=\"1\" pattern=\"[0-9]{2,4}\">秒 <input type=\"text\" name=\"ZS\" value=\"\" pattern=\"[0-9]{1,4}\">张 <input type=\"submit\" value=\"延时\" ></form>"
        buf = buf.."<form><input type=\"text\" name=\"m2\" value=\"2\" pattern=\"[0-9]{1,4}\">秒 <input type=\"submit\" value=\"B门\" ></form>"
        buf = buf.."<form><dir style=\"display: none;\"><input name=\"stop\" value=\"1\"></dir><input type=\"submit\" value=\"停止\" ></form>"
        client:send(buf)
    end)
    conn:on("sent", function (c) c:close() end)
end)
function AlarmMode1()
    gpio.write(led1, gpio.LOW)
    tmr.delay(1000000)
    gpio.write(led2, gpio.LOW)
    tmr.delay(1000)
    gpio.write(led1, gpio.HIGH)
    gpio.write(led2, gpio.HIGH)
    a=a-1
    print(a)
    if(a==0)then
                    tmr.stop(0)
                end
end

模块上面就只需要,刷nodemcu 然后将上面的代码保持为init.lua文件 烧录到模块中去就行了(注意骚绿位置)

然后外部电路很简单 我就口述一下就行了。。

两个光耦串联,输入端(接模块一端)中间通过电阻接正极 两边分别接led1和led2对应的引脚 然后光耦另一边 同样窜连 中间接快门线的地线 两边分别接对焦线与快门释放线(对应关系请自己测试,就两根线不对就换一下)
就这样,我还没动手做外部电路。。不过应该没问题吧!光耦不行大不了换三极管或者续电器来触发快门线。
[ 此帖被handsome在2018-03-31 21:50重新编辑 ]
本帖最近打赏记录:共1条打赏专家+1
發騷友 专家 +1 認真發帖 2018-07-30
离线一灯
发帖
788
M币
45
专家
3
粉丝
13
只看该作者 1楼 发表于: 2018-03-22
请登录后查看
离线xu_john

发帖
1183
M币
598
专家
2
粉丝
23
只看该作者 2楼 发表于: 2018-03-23
请登录后查看
快速回复
限80 字节
温馨提示:所有技术区严禁灌水,“沙发”“顶”字样;禁止广告贴;以免被删除
 
上一个 下一个