跳转至

STA 应用(连接热点)

一、STA 概述

文章开篇先简单介绍下 Air8000 工业引擎的 STA 模式,一般来说,Air8000 工业引擎使用中支持两种无线网络工作模式,分别为 STA 模式和 AP 模式。

1.1 STA 模式:

STA 是 Station 的缩写,它是无线网络中的一个终端站点设备,可以看成是一个客户端,一般来说,处在 STA 模式下的设备本身不接受无线的接入,该设备连接到 AP 节点进行网络访问,STA 模式下的设备之间的通信可以通过 AP 进行转发实现。

Air8000 工业引擎工作在 STA 模式时,可以连接到路由器的无线网络中去,手机或电脑通过无线网络实现对 Air8000 工业引擎的远程控制。

1.2 AP 模式:

AP 是 Access Point 的缩写,即无线接入点,它是一个无线网络的中心节点,可以看成是一个服务器。它作为一个网络的中心节点,提供无线接入服务,其他的无线设备允许接入该节点,所有接入该节点设备的无线信号数据都要通过它才能进行交换和互相访问。一般的无线路由器、网关、热点就是工作在 AP 模式下,AP 节点和 AP 节点之间允许相互连接。

Air8000 工业引擎工作在 AP 模式时,就可以用手机或者其他通讯设备连接上 Air8000 工业引擎直接与其通信,通过 Air8000 工业引擎可以实现设备集中管理及局域网无线控制。

二、演示功能概述

本篇文章演示的内容为:手机打开 WIFI 热点,Air8000 打开 WIFI STA 模式,连接手机热点后,进行 http 请求数据

三、准备硬件环境

参考:Air8000 硬件环境清单,准备好硬件环境

四、准备软件环境

烧录工具:Luatools 工具

Air8000S 需要烧录使用教程中的固件和脚本:https://docs.openluat.com/air8000/luatos/common/download/#431-wifi

注意:烧录 WIFI 固件及脚本时,需要先烧录 4G 固件和 4G 脚本文件,通过 4G 脚本控制 GPIO23, 下电 1ms,详情查看 8000S 烧录教程:升级WIFI - luatos@air8000 - 合宙模组资料中心

LuatOS 运行所需要的 lib 文件:使用 Luatools 烧录时,勾选 添加默认 lib 选项,使用默认 lib 脚本文件

五、代码示例

-- LuaTools需要PROJECT和VERSION这两个信息
PROJECT = "air8000_wifi"
VERSION = "1.0.5"

dnsproxy = require("dnsproxy")
dhcpsrv = require("dhcpsrv")
httpplus = require("httpplus")



-- wifi的STA相关事件
sys.subscribe("WLAN_STA_INC", function(evt, data)
    -- evt 可能的值有: "CONNECTED", "DISCONNECTED"
    -- 当evt=CONNECTED, data是连接的AP的ssid, 字符串类型
    -- 当evt=DISCONNECTED, data断开的原因, 整数类型
    log.info("收到STA事件", evt)
end)


function test_sta()
    log.info("执行STA连接操作")
    wlan.connect("Xiaomi 13", "15055190176")
    -- netdrv.dhcp(socket.LWIP_STA, true)
    sys.wait(8000)
    -- iperf.server(socket.LWIP_STA)
    -- iperf.client(socket.LWIP_STA, "47.94.236.172")

    sys.wait(5000)
    while 1 do
        -- log.info("MAC地址", netdrv.mac(socket.LWIP_STA))
        -- log.info("IP地址", netdrv.ipv4(socket.LWIP_STA))
        -- log.info("ready?", netdrv.ready(socket.LWIP_STA))
        -- sys.wait(1000)
        -- log.info("执行http请求")
        -- local code = http.request("GET", "http://192.168.1.15:8000/README.md", nil, nil, {adapter=socket.LWIP_STA,timeout=3000}).wait()
        local code, headers, body = http.request("GET", "https://httpbin.air32.cn/bytes/2048", nil, nil, {adapter=socket.LWIP_STA,timeout=5000,debug=false}).wait()
        log.info("http执行结果", code, headers, body and #body)
        -- socket.sntp(nil, socket.LWIP_STA)
        sys.wait(2000)

        -- socket.sntp(nil)
        -- sys.wait(2000)
        -- log.info("执行ping操作")
        -- icmp.ping(socket.LWIP_STA, "183.2.172.177")
        -- sys.wait(2000)
    end
end

sys.subscribe("PING_RESULT", function(id, time, dst)
    log.info("ping", id, time, dst);
end)

function test_scan()
    while 1 do
        log.info("执行wifi扫描")
        wlan.scan()
        sys.wait(30 * 1000)
    end
end
sys.subscribe("WLAN_SCAN_DONE", function ()
    local results = wlan.scanResult()
    log.info("scan", "results", #results)
    for k,v in pairs(results) do
        log.info("scan", v["ssid"], v["rssi"], (v["bssid"]:toHex()))
    end
end)

function ip_ready_handle(ip, adapter)
    log.info("ip_ready_handle",ip, adapter)
    if adapter == socket.LWIP_STA then
        log.info("wifi sta 链接成功")
    end
end

--  每隔6秒打印一次airlink统计数据, 调试用
-- sys.taskInit(function()
--     while 1 do
--         sys.wait(6000)
--         airlink.statistics()
--     end
-- end)

sys.taskInit(function()
    log.info("新的Air8000脚本...")
    wlan.init()
    test_sta()
    test_scan()
end)
sys.subscribe("IP_READY", ip_ready_handle)

-- 用户代码已结束---------------------------------------------
-- 结尾总是这一句
sys.run()
-- sys.run()之后后面不要加任何语句!!!!!

六、代码演示流程

6.1 手机或电脑打开 WIFI 热点

如图,设置 WIFI 热点,ssid:luatos1234,password:12341234

6.2 烧录代码

参考:如何使用 LuaTools 给 Air8000 烧录软件,将准备好的软件烧录进 Air8000

6.3 查看运行日志

注:前几次请求还没连网,报错正常,可以等 ip_ready

七、总结

至此,我们已使用 Air8000 核心板 演示了连接 WIFI 热点并进行 http 请求数据的功能。