配网应用
一、SoftAP 概述
文章开篇先简单介绍下 Air8000 工业引擎的 AP 模式,一般来说,Air8000 工业引擎使用中支持两种无线网络工作模式,分别为 AP 模式和 STA 模式。
1. AP 模式:
AP 是 Access Point 的缩写,即无线接入点,它是一个无线网络的中心节点,可以看成是一个服务器。它作为一个网络的中心节点,提供无线接入服务,其他的无线设备允许接入该节点,所有接入该节点设备的无线信号数据都要通过它才能进行交换和互相访问。一般的无线路由器、网关、热点就是工作在 AP 模式下,AP 节点和 AP 节点之间允许相互连接。
Air8000 工业引擎工作在 AP 模式时,就可以用手机或者其他通讯设备连接上 Air8000 工业引擎直接与其通信,通过 Air8000 工业引擎可以实现设备集中管理及局域网无线控制。
2. STA 模式
STA 是 Station 的缩写,它是无线网络中的一个终端站点设备,可以看成是一个客户端,一般来说,处在 STA 模式下的设备本身不接受无线的接入,该设备连接到 AP 节点进行网络访问,STA 模式下的设备之间的通信可以通过 AP 进行转发实现。
Air8000 工业引擎工作在 STA 模式时,可以连接到路由器的无线网络中去,手机或电脑通过无线网络实现对 Air8000 工业引擎的远程控制。
SoftAP 配网也就是让 Air8000 工作在 AP 模式下,创建一个 WIFI 热点,用户将手机或者电脑连接这个 WIFI,通过配网页面将要连接的 WIFI 信息发送给 Air8000,从而实现配网。
二、准备硬件环境
参考:Air8000 硬件环境清单,准备好硬件环境。
2.1 Air8000 核心开发板
三、准备软件环境
3.1 文章内容应用
1. 烧录工具:Luatools 工具
2. Air8000 烧录需要的固件和脚本文件:
3. LuatOS 运行所需要的 lib 文件:使用 Luatools 烧录时,勾选 添加默认 lib 选项,使用默认 lib 脚本文件。
准备好软件环境之后,接下来查看如何烧录项目文件到 Air8000 开发板中,将本篇文章中演示使用的项目文件烧录到 Air8000 开发板中。
4. 使用 WIFI 功能需要按照如下步骤在板子上烧录 wifi 固件:https://docs.openluat.com/air8000/luatos/app/updatwifi/update/
3.2 API 介绍
这里仅介绍本篇文档所使用的 API,详情请查看:API 索引 - luatos@air8000 - 合宙模组资料中心
wlan.init()
初始化
wlan.connect(ssid, password, auto_reconnect, bssid)
作为 STATION 时,连接到指定 AP
wlan.scanResult()
获取 wifi 扫描结果
wlan.createAP(ssid, passwd, gateway, netmask, channel, opts)
启动 AP
netdrv.ipv4(id, addr, mark, gw)
设置或读取 ipv4 地址
四、SoftAP 配网实现功能概述
本小节教你怎么设置 SoftAP 配网,实现 Air8000 工业引擎的配网系统。
4.1 本教程实现的功能定义是:
1. 启用 AP 模式,设置 SSID 和密码,创建一个 WiFi 网络并连接
2. 启动 HTTP 服务器,管理 Wi-Fi 接入点的配置和连接
3. 其他设备连接到 Air8000 创建的 WiFi 网络,并通过配网系统与 Air8000 进行通信
4.2 代码示例
-- LuaTools需要PROJECT和VERSION这两个信息
PROJECT = "WIFI_AP"
VERSION = "1.0.0"
-- sys库是标配
_G.sys = require("sys")
require "sysplus"
dnsproxy = require("dnsproxy")
dhcpsrv = require("dhcpsrv")
httpplus = require("httpplus")
-- 初始化LED灯, 这里演示控制Air8000核心板蓝灯,其他开发板请查看硬件原理图自行修改
local LEDA = gpio.setup(20, 0, gpio.PULLUP)
function create_ap()
log.info("执行AP创建操作", "luatos8888")
wlan.createAP("luatos8888", "12345678")
sys.wait(1000)
netdrv.ipv4(socket.LWIP_AP, "192.168.4.1", "255.255.255.0", "0.0.0.0")
dnsproxy.setup(socket.LWIP_AP, socket.LWIP_GP)
dhcpsrv.create({adapter=socket.LWIP_AP})
while 1 do
if netdrv.ready(socket.LWIP_GP) then
netdrv.napt(socket.LWIP_GP)
break
end
sys.wait(1000)
end
end
function wifi_networking()
sys.wait(3000)
httpsrv.start(80, handle_http_request, socket.LWIP_AP)
log.info("web", "pls open url http://192.168.4.1/")
end
function handle_http_request(fd, method, uri, headers, body)
log.info("httpsrv", method, uri, json.encode(headers), body)
if uri == "/led/1" then
LEDA(1)
return 200, {}, "ok"
elseif uri == "/led/0" then
LEDA(0)
return 200, {}, "ok"
elseif uri == "/scan/go" then
wlan.scan()
return 200, {}, "ok"
elseif uri == "/scan/list" then
return 200, {["Content-Type"]="application/json"}, (json.encode({data=_G.scan_result, ok=true}))
elseif uri == "/connect" then
if method == "POST" and body and #body > 2 then
local jdata = json.decode(body)
if jdata and jdata.ssid then
sys.timerStart(wlan.connect, 500, jdata.ssid, jdata.passwd)
return 200, {}, "ok"
end
end
return 400, {}, "ok"
elseif uri == "/connok" then
return 200, {["Content-Type"]="application/json"}, json.encode({ip=socket.localIP()})
end
return 404, {}, "Not Found" .. uri
end
function scan_done_handle()
local result = wlan.scanResult()
_G.scan_result = {}
for k, v in pairs(result) do
log.info("scan", (v["ssid"] and #v["ssid"] > 0) and v["ssid"] or "[隐藏SSID]", v["rssi"], (v["bssid"]:toHex()))
if v["ssid"] and #v["ssid"] > 0 then
table.insert(_G.scan_result, v["ssid"])
end
end
log.info("scan", "aplist", json.encode(_G.scan_result))
end
function ip_ready_handle()
log.info("wlan", "已联网", "通知服务器")
end
function test_scan()
while 1 do
log.info("执行wifi扫描")
wlan.scan()
sys.wait(30 * 1000)
end
end
function main_task()
wlan.init()
sys.wait(100)
create_ap()
wifi_networking()
test_scan()
end
sys.subscribe("WLAN_SCAN_DONE", scan_done_handle)
sys.subscribe("IP_READY", ip_ready_handle)
sys.taskInit(main_task)
-- 用户代码已结束---------------------------------------------
sys.run()
五、功能演示
5.1 连接 Air8000 AP 热点
热点名称为:luatos8888,密码为:12345678
5.2 配网系统展示
可以通过手机或者电脑登录配网网页 IP 地址:192.168.4.1
注意:登录配网网页的设备,需要先连接上开发板创建的 WIFI。
显示内容如下:
5.3 控制 LED 灯状态
进入网页后通过按钮控制 LED 灯,可以在日志中看到如下打印
此时核心板 LED 灯亮起
关闭核心板 LED 灯
此时核心板 LED 灯关闭
5.4 扫描 Wi-Fi 功能
点击扫描 Wi-Fi,即可主动进行一次 WiFi 扫描
5.5 链接 Wi-Fi 功能
扫描到 WiFi 热点后,选择需要连接的 WiFi 热点,输入 WiFi 密码即可开始连接
5.6 检查联网状态
点击按钮检查是否成功连接网络
六、总结
本文档详细展示了 SoftAP 配网技术的实现流程,通过具体实例生动诠释了这一过程。首先,系统启用 AP 模式,设定特定的 SSID 和密码,从而创建出一个 WiFi 网络。紧接着,HTTP 服务器被启动,用于管理并控制 Wi-Fi 接入点的配置与连接状态。
当其他设备成功连接到由 Air8000 创建的 WiFi 网络后,它们便能够通过配网系统与 Air8000 建立起通信桥梁。这一通信渠道为用户提供了极大的便利,使他们能够通过配网页面轻松实现对 WiFi 热点的高效管理和灵活控制。
用户只需在网页上发送简单的 HTTP 请求,便能远程操控 LED 的开关状态、发送任意消息、扫描并获取当前可用的 WiFi 网络列表(AP 列表),甚至还能连接到全新的 WiFi 网络。其中还有更多的玩法等你来探索!
七、常见问题
7.1 手机或电脑无法打开配网网页 IP 地址
注意开发板需要配置成 AP 模式,创建一个热点,手机或电脑打开配网网页前,需要先连接上前面创建的热点。
7.2 SoftAP 配网优缺点
1. 优点:这种方式很可靠,成功率基本达到 100%,设备端的代码也简单。
2. 缺点:需要手动切换手机 wifi 连接的网络,先连接到 Air8000 的 AP 网络,配置完成后再恢复连接正常 wifi 网络,操作上有一定的复杂性,会给用户带来一定的困扰。
如果想要更简洁的配网方式,请参考下篇文章 AirKiss,使用另一种 AirKiss 配网方式。