+
95
-

回答

下面是一个简单的基于NodeMCU(ESP8266)的Lua程序示例,通过一个网页按钮和一个机械按钮来控制LED的开关,同时在网页上显示LED的状态。

此程序使用NodeMCU提供的net和gpio模块,同时使用HTTP服务器来处理网页请求。

-- 设置LED引脚
local ledPin = 4 -- GPIO2

-- 初始化LED状态
local ledState = gpio.LOW

-- 初始化网络配置
local wifiConfig = {
  ssid = "your-ssid",      -- 你的WiFi名称
  pwd = "your-password"    -- 你的WiFi密码
}

-- 初始化HTTP服务器
srv = net.createServer(net.TCP)
srv:listen(80, function(conn)
  conn:on("receive", function(client, 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 _GET = {}
    if vars ~= nil then
        for k, v in string.gmatch(vars, "(%w+)=(%w+)&*") do
            _GET[k] = v
        end
    end

    local response = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n"
    
    if _GET.pin == "ON" then
        gpio.write(ledPin, gpio.HIGH)
        ledState = gpio.HIGH
    elseif _GET.pin == "OFF" then
        gpio.write(ledPin, gpio.LOW)
        ledState = gpio.LOW
    end

    response = response .. "<html><body>"
    response = response .. "<h1>ESP8266 LED Control</h1>"
    response = response .. "<p>LED State: " .. (ledState == gpio.HIGH and "ON" or "OFF") .. "</p>"
    response = response .. "<p><a href=\"?pin=ON\"><button style=\"background-color:green\">Turn ON</button></a></p>"
    response = response .. "<p><a href=\"?pin=OFF\"><button style=\"background-color:red\">Turn OFF</button></a></p>"
    response = response .. "</body></html>"

    client:send(response)
    client:close()
    collectgarbage()
  end)
end)

-- 设置LED引脚为输出
gpio.mode(ledPin, gpio.OUTPUT)

-- 连接WiFi
wifi.setmode(wifi.STATION)
wifi.sta.config(wifiConfig)

-- 等待WiFi连接成功
tmr.alarm(1, 1000, 1, function()
  if wifi.sta.getip() == nil then
    print("Connecting to WiFi...")
  else
    tmr.stop(1)
    print("Connected to WiFi. IP Address: " .. wifi.sta.getip())
  end
end)

这个Lua程序通过HTTP服务器监听端口80,当收到网页请求时,会根据请求参数控制LED的状态,并在网页上显示LED的当前状态。你可以使用NodeMCU Flasher等工具将该Lua程序烧录到ESP8266上。在程序中,LED的引脚使用GPIO2(对应NodeMCU的D4引脚),你可以根据实际硬件连接修改引脚号

网友回复

我知道答案,我要回答