ESP8266|ESP-01 Wi-Fi模块 - 使用 Lua 远程控制 LED

ESP8266 - 远程控制 LED

注:我研究生已经在学习机器学习、深度学习相关知识。

已经不再做任何和本科有关的物联网项目了!

通过使用 ESP8266 模块,使用 Lua 语言编程,实现在局域网下的远程控制。

ESP8266|ESP-01 Wi-Fi模块 - 使用 Lua 远程控制 LED_第1张图片

准备工作

ESP8266 01 (最便宜的)和 TTL 转 USB

 

ESP8266|ESP-01 Wi-Fi模块 - 使用 Lua 远程控制 LED_第2张图片

ESP8266 01

 

烧录 NoteMcu

 

ESP8266|ESP-01 Wi-Fi模块 - 使用 Lua 远程控制 LED_第3张图片

NoteMcu

 

开发环境采用 ESPlorer ,到官网下载源码(3MB),运行需要 Java 环境,mac 应该自带。

ESP8266|ESP-01 Wi-Fi模块 - 使用 Lua 远程控制 LED_第4张图片

IDE

 

其他:LED、杜邦线,接线很简单。下图是我的连接图。一个 LED 用于调试,接到 GPIO2,共地,ESP8266 通过 TTL-USB 连接到电脑。

 

ESP8266|ESP-01 Wi-Fi模块 - 使用 Lua 远程控制 LED_第5张图片

 

检查环境安装完成

将安装好 NoteMcu 的 ESP8266 链接到电脑(macOS Catalina 10.15.2)。解压 ESPlorer 源码,在终端中打开。运行如下代码启动开发环境。

java -jar "ESPlorer.jar"

ESP8266|ESP-01 Wi-Fi模块 - 使用 Lua 远程控制 LED_第6张图片

 

在右侧窗口选择串口(/dev/cu.wchusbserial…),点击 Open,然后重置 ESP8266 ( 没有 reset 键,可以拔掉 VCC 再重新插入),右侧窗口输入如下截图信息说明 NoteMcu 安装成功,准备工作完成。这里使用普通的串口调试助手也是可以的。

ESP8266|ESP-01 Wi-Fi模块 - 使用 Lua 远程控制 LED_第7张图片

首次启动 NoteMcu

 

不能打开 init.lua 是正常的,接下来就是要创建 init.lua,并在此文件中编程程序,装载到安装好 NoteMcu 的 ESP8266 中。

测试程序

现在编程一个简单的 Lua 程序,它使得 ESP8266 上电后,自动连接上一个热点,连接成功后,点亮 LED。

创建一个 init.lua,内容如下,保存后 IDE 自动上传到 ESP8266 中,如果不自动上传,则点击Save to ESP即可。

-- init.lua
pin = 4
gpio.mode(pin, gpio.OUTPUT)
gpio.write(pin, gpio.LOW)  -- LED Off

print('Setting up WIFI...')
wifi.setmode(wifi.STATION)
wifi.sta.config('Landon', '123456798')
wifi.sta.connect()

tmr.alarm(1, 1000, tmr.ALARM_AUTO, function()
    if wifi.sta.getip() == nil then
        print('Waiting for IP ...')
    else
        print('IP is ' .. wifi.sta.getip())
        -- LED ON
        gpio.write(pin, gpio.HIGH)
        print("LED On")
    tmr.stop(1)
    end
end)

重置 ESP8266 (拔 VCC 重插),可以在右侧窗口中看到如下截图的输出。

ESP8266|ESP-01 Wi-Fi模块 - 使用 Lua 远程控制 LED_第8张图片

 

此时用手机开一个热点,重启 ESP8266,可以在手机端看到有设备连接,ESP8266 点亮了 LED。

ESP8266|ESP-01 Wi-Fi模块 - 使用 Lua 远程控制 LED_第9张图片

 

手机端检测到有设备连接。

 

ESP8266|ESP-01 Wi-Fi模块 - 使用 Lua 远程控制 LED_第10张图片

 

远程控制 LED

接下来使用 Lua 编写一个远程控制页面,电脑只需要访问这个页面,就可以进行 LED 的远程控制。

这里的示例采用 AP 模式,即 ESP8266 创建一个热点,电脑连接后,访问特定的页面,可以进行 LED 控制。

在 init.lua 中输入以下代码(还加了点 CSS :) ):

wifi.setmode(wifi.SOFTAP)   -- set AP parameter
config = {}
config.ssid = "NodeMCU"
config.pwd = "123456798"
wifi.ap.config(config)

config_ip = {}  -- set IP,netmask, gateway
config_ip.ip = "192.168.2.1"
config_ip.netmask = "255.255.255.0"
config_ip.gateway = "192.168.2.1"
wifi.ap.setip(config_ip)

LEDpin = 4                  -- declare LED pin
gpio.mode(LEDpin, gpio.OUTPUT)
server = net.createServer(net.TCP)-- create TCP server

function SendHTML(sck, led) -- Send LED on/off HTML page
   htmlstring = "\r\n"
   htmlstring = htmlstring.."\r\n"
   htmlstring = htmlstring.."\r\n"
   htmlstring = htmlstring.."LED Control\r\n"
   htmlstring = htmlstring.."\r\n"
   htmlstring = htmlstring.."\r\n"
   htmlstring = htmlstring.."\r\n"
   htmlstring = htmlstring.."
" htmlstring = htmlstring.."

LED DEMO

\r\n" htmlstring = htmlstring.."

Click to switch LED on and off.

\r\n" if (led) then htmlstring = htmlstring.."LED status: ON\r\n" else htmlstring = htmlstring.."LED status: OFF\r\n" end htmlstring = htmlstring.."
\r\n" if (led) then htmlstring = htmlstring.."\r\n" else htmlstring = htmlstring.."\r\n" end htmlstring = htmlstring.."
\r\n" htmlstring = htmlstring.."
" htmlstring = htmlstring.."\r\n" htmlstring = htmlstring.."\r\n" sck:send(htmlstring) end function receiver(sck, data)-- process callback on recive data from client if string.find(data, "GET /ledon") then SendHTML(sck, true) gpio.write(LEDpin, gpio.HIGH) elseif string.find(data, "GET / ") or string.find(data, "GET /ledoff") then SendHTML(sck, false) gpio.write(LEDpin, gpio.LOW) else sck:send("

Not found...!!

") sck:on("sent", function(conn) conn:close() end) end end if server then server:listen(80, function(conn)-- listen to the port 80 conn:on("receive", receiver) end) end

重置后,可以发现 ESP8266 创建了一个热点。

 

ESP8266|ESP-01 Wi-Fi模块 - 使用 Lua 远程控制 LED_第11张图片

 

使用代码中的配置信息进行连接:

config.ssid = "NodeMCU"
config.pwd = "123456798"

LED 控制页面。

 

ESP8266|ESP-01 Wi-Fi模块 - 使用 Lua 远程控制 LED_第12张图片

Chrome

 

 

ESP8266|ESP-01 Wi-Fi模块 - 使用 Lua 远程控制 LED_第13张图片

Safari

 

 

ESP8266|ESP-01 Wi-Fi模块 - 使用 Lua 远程控制 LED_第14张图片

手机- 夸克浏览器

 

点击绿色按钮,即可实现 LED 的亮灭控制。

注意事项

推荐使用 Chrome 浏览器。

每次调试前 ESP8266 要重置。ESP8266-01 是最小模块(便宜),没有 reset 按键,可以通过拔 VCC 重插的方式 reset。

你可能感兴趣的:(OpenWrt,wifi)