SoftAP配网
一、SoftAP 概述
文章开篇先简单介绍下 Air8101 工业引擎的 AP 模式,一般来说,Air8101 工业引擎使用中支持两种无线网络工作模式,分别为 AP 模式和 STA 模式。
1. AP 模式:
AP 是 Access Point 的缩写,即无线接入点,它是一个无线网络的中心节点,可以看成是一个服务器。它作为一个网络的中心节点,提供无线接入服务,其他的无线设备允许接入该节点,所有接入该节点设备的无线信号数据都要通过它才能进行交换和互相访问。一般的无线路由器、网关、热点就是工作在 AP 模式下,AP 节点和 AP 节点之间允许相互连接。
Air8101 工业引擎工作在 AP 模式时,就可以用手机或者其他通讯设备连接上 Air8101 工业引擎直接与其通信,通过 Air8101 工业引擎可以实现设备集中管理及局域网无线控制。
2. STA 模式
STA 是 Station 的缩写,它是无线网络中的一个终端站点设备,可以看成是一个客户端,一般来说,处在 STA 模式下的设备本身不接受无线的接入,该设备连接到 AP 节点进行网络访问,STA 模式下的设备之间的通信可以通过 AP 进行转发实现。
Air8101 工业引擎工作在 STA 模式时,可以连接到路由器的无线网络中去,手机或电脑通过无线网络实现对 Air8101 工业引擎的远程控制。
SoftAP 配网也就是让 Air8101 工作在 AP 模式下,创建一个 WIFI 热点,用户将手机或者电脑连接这个 WIFI,通过配网页面将要连接的 WIFI 信息发送给 Air8101,从而实现配网。
二、准备硬件环境
“古人云:‘工欲善其事,必先利其器。’在深入介绍本功能示例之前,我们首先需要确保以下硬件环境的准备工作已经完成。”
参考:硬件环境清单,准备以及组装好硬件环境。
三、准备软件环境
“凡事预则立,不预则废。”在详细阐述本功能示例之前,我们需先精心筹备好以下软件环境。
1. Luatools 工具;
2. 内核固件文件(底层 core 固件文件):LuatOS-SoC_V10001_Air8101.soc;参考项目使用的内核固件;
3. luatos 需要的脚本和资源文件
脚本和资源文件:https://gitee.com/openLuat/LuatOS-Air8101/tree/master/demo/wlan/softAP
lib 脚本文件:使用 Luatools 烧录时,勾选 添加默认 lib 选项,使用默认 lib 脚本文件;
准备好软件环境之后,接下来查看如何烧录项目文件到 Air8101 开发板,将本篇文章中演示使用的项目文件烧录到 Air8101 开发板中。
四、SoftAP 配网实现功能概述
本小节教你怎么设置 SoftAP 配网,实现 Air8101 工业引擎的配网系统。
4.1 本教程实现的功能定义是:
1. 启用 AP 模式,设置 SSID 和密码,创建一个 WiFi 网络
2. 启动 HTTP 服务器,管理 Wi-Fi 接入点的配置和连接
3. 其他设备连接到 Air8101 创建的 WiFi 网络,并通过配网系统与 Air8101 进行通信
4.2 文章内容引用
本教程所使用的接口函数不再做详细介绍,可通过此链接查看具体介绍:wlan - wifi 操作
4.3 核心脚本代码详解
1. 启用 AP 模式
启用 AP 模式,设置 AP 的 ssid 和 password,可以在手机/电脑等设备搜到该热点。
-- wlan初始化
local initResult = wlan.init()
-- 检查初始化是否成功
if initResult then
log.info("wlan", "初始化成功")
-- 启用AP模式, 设置AP的ssid和password
wlan.createAP("luatos_" .. wlan.getMac(), "12341234")
log.info("AP", "luatos_" .. wlan.getMac(), "12341234")
else
log.info("wlan", "初始化失败")
end
2. 启动一个 HTTP 服务器,管理 Wi-Fi 接入点的配置和连接
通过 HTTP 服务器实现对 WiFi 热点的管理和控制。可以在网页通过 HTTP 请求控制 LED 的开关、发送任意消息、扫描可用的 WiFi 网络,获取 AP 列表,以及连接到新的 WiFi 网络。
-- 启动并监听一个http端口
httpsrv.start(80, function(fd, method, uri, headers, body)
log.info("httpsrv", method, uri, json.encode(headers), body)
-- /led是控制灯的API
if uri == "/led/1" then
-- LEDA(1)
log.info("led", "on")
return 200, {}, "ok"
elseif uri == "/led/0" then
-- LEDA(0)
log.info("led", "off")
return 200, {}, "ok"
-- 处理消息
elseif uri == "/msg" then
local messageData = json.decode(body) -- 假设消息是 JSON 格式
if messageData and messageData.message then
log.info("Received message:", messageData.message)
-- 处理接收到的消息,例如保存、转发、响应等等
return 200, {}, "Message received: " .. messageData.message
end
-- 扫描AP
elseif uri == "/scan/go" then
wlan.scan()
log.info("scan", "start")
return 200, {}, "ok"
-- 前端获取AP列表
elseif uri == "/scan/list" then
return 200, {["Content-Type"]="applaction/json"}, (json.encode({data=_G.scan_result, ok=true}))
-- 前端填好了ssid和密码, 那就连接吧
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"
-- 根据ip地址来判断是否已经连接成功
elseif uri == "/connok" then
return 200, {["Content-Type"]="applaction/json"}, json.encode({ip=socket.localIP()})
elseif uri == "/send" then
if method == "POST" and body and #body > 2 then
local jdata = json.decode(body)
if jdata and jdata.msg then
log.info("Received message:", jdata.msg)
return 200, {}, "Message received"
end
end
return 400, {}, "Bad Request"
end
-- 其他情况就是找不到了
return 404, {}, "Not Found" .. uri
end)
4.4 成果演示
4.4.1 配网系统展示
可以通过手机或者电脑登录配网网页 IP 地址:192.168.4.1,显示内容如下:
注意:登录配网网页的设备,需要先连接上开发板创建的 WIFI。
4.4.2 配网系统实例
使用手机或电脑登录到 Air8101 开发板的网络 IP 地址,此时手机或电脑等登陆设备作为客户端,而开发板则充当服务端,双方进行简单的通信交流,以下统一以服务端和客户端来分别指代开发板和登录设备。 1. 客户端通过配网页面点击 wifi 扫描按钮,可以实现 wifi.scan 的功能,显示在配网系统页面以及 luatools 日志中,如下所示:
2\,. 服务端向配网页面发送消息
用户在客户端网页的输入框中键入消息,然后将这个消息通过 POST 请求以 JSON 格式发送到服务端的 /msg
路径,服务端监听到请求后,解析获取到的消息,并通过 log 打印出来。
3. 客户端通过配网页面发指令让服务端连接到新的 WiFi 网络
如下图所示,服务端连接到 WIFI 热点: kfyy123,连接成功后,会发布一个"IP_READY"消息,后续可以通过订阅该消息,实现联网后的业务逻辑实现。
五、总结
本文档详细展示了 SoftAP 配网技术的实现流程,通过具体实例生动诠释了这一过程。首先,系统启用 AP 模式,设定特定的 SSID 和密码,从而创建出一个 WiFi 网络。紧接着,HTTP 服务器被启动,用于管理并控制 Wi-Fi 接入点的配置与连接状态。
当其他设备成功连接到由 Air8101 创建的 WiFi 网络后,它们便能够通过配网系统与 Air8101 建立起通信桥梁。这一通信渠道为用户提供了极大的便利,使他们能够通过配网页面轻松实现对 WiFi 热点的高效管理和灵活控制。
用户只需在网页上发送简单的 HTTP 请求,便能远程操控 LED 的开关状态、发送任意消息、扫描并获取当前可用的 WiFi 网络列表(AP 列表),甚至还能连接到全新的 WiFi 网络。其中还有更多的玩法等你来探索!
六、常见问题
6.1 手机或电脑无法打开配网网页 IP 地址
注意开发板需要配置成 AP 模式,创建一个热点,手机或电脑打开配网网页前,需要先连接上前面创建的热点。
6.2 如何获取开发板的 MAC 地址
通过 wlan.getMac()接口即可,返回值是以十六进制形式呈现。
6.3 SoftAP 配网优缺点
1. 优点:这种方式很可靠,成功率基本达到 100%,设备端的代码也简单。
2. 缺点:需要手动切换手机 wifi 连接的网络,先连接到 Air8101 的 AP 网络,配置完成后再恢复连接正常 wifi 网络,操作上有一定的复杂性,会给用户带来一定的困扰。
如果想要更简洁的配网方式,请参考下篇文章 AirKiss,使用另一种 AirKiss 配网方式。
七、扩展
后续扩展在此补充,敬请期待......