跳转至

AirKiss配网

一、AirKiss 概述

1.1 AirKiss 介绍

AirKiss 是微信硬件平台为 Wi-Fi 设备提供的微信配网、局域网发现和局域网通讯的技术。我们一般使用的就是配网功能,其他功能基本很少有使用。

其原理和 SmartConfig 类似,发送端通过发送 UDP 广播包或多播包,利用报文的特征进行编码,设备端在混杂模式下捕获到 UDP 报文后,按约定的方式解码出发送的 WiFi 信息实现配网。

AirKiss 虽然没有蓝牙配网那样稳定,但因为配网过程极为简单,所以使得现在硬件厂商一般依然会提供该功能。

AirKiss 官方网站连接:https://iot.weixin.qq.com/wiki/new/index.html?page=4-1-1

1.2 AirKiss 技术使用场景

AirKiss 主要在如下场景中使用:

1. 待接入互联网的设备不具备输入输出能力,如空调、空气净化器、烟雾报警器等。

2. 用户追求更为简单的配网方式。

1.3 AirKiss 技术的优势

相比其它配置方式,AirKiss 技术有着以下几个显著的优势:

1. 用户可以使用最为熟悉的微信客户端来操作入网配置,无需下载额外的第三方软件即可。

2. 用户无需首先将设备配置为热点模式并连接,在配置模式下可直接将无线路由器的 SSID 发送至设备。

二、准备硬件环境

“古人云:‘工欲善其事,必先利其器。’在深入介绍本功能示例之前,我们首先需要确保以下硬件环境的准备工作已经完成。”

参考:硬件环境清单,准备以及组装好硬件环境。

三、准备软件环境

“凡事预则立,不预则废。”在详细阐述本功能示例之前,我们需先精心筹备好以下软件环境。

1. Luatools 工具

2. 内核固件文件(底层 core 固件文件):LuatOS-SoC_V10001_Air8101.soc;参考项目使用的内核固件

3. luatos 需要的脚本和资源文件

脚本和资源文件:https://gitee.com/openLuat/LuatOS-Air8101/tree/master/demo/wlan/airkiss

lib 脚本文件:使用 Luatools 烧录时,勾选 添加默认 lib 选项,使用默认 lib 脚本文件;

准备好软件环境之后,接下来查看如何烧录项目文件到 Air8101 开发板,将本篇文章中演示使用的项目文件烧录到 Air8101 开发板中。

四、AirKiss 配网实现功能概述

本小节教你怎么如何实现 Air8101 工业引擎的 AirKiss 配网。

4.1 本教程实现的功能定义是:

1. 通过 wlan.smartconfig(wlan.AIRKISS)接口设置成 AirKiss 配网模式。

2. 微信公众号或者微信小程序搜索 AirKiss 配网页面,实现设备的配网。

(注意:会将你设备正在连接的 wifi 进行配网发送,所以要注意使用 2.4G 网络)

4.2 文章内容引用

本教程所使用的接口函数不再做详细介绍,可通过此链接查看具体介绍:wlan - wifi 操作

4.3 核心脚本代码详解

1. 启动 AirKiss 配网

通过 wlan.smartconfig(wlan.AIRKISS)启动配网,如果配网成功,系统会发布一个"SC_RESULT"消息,消息包含配网成功的 WiFi 的 SSID 和密码,配网成功后可以将 SSID 和密码保存到 fdb,做持久化存储;如果配网超时,则停止配网过程并等待 3 秒后重新开始配网。

while 1 do
        -- 启动AirKiss配网
        log.info("wlan", "启动airkiss")
        wlan.smartconfig(wlan.AIRKISS) --启动成功后返回true
        local ret, ssid, passwd = sys.waitUntil("SC_RESULT", 180*1000) -- 等3分钟
        if ret == false then
            log.info("smartconfig", "timeout")
            wlan.smartconfig(wlan.STOP)
            sys.wait(3000) -- 再等3s重新配网, 或者直接reboot也行
        else
            -- 获取配网后, ssid和passwd会有值
            log.info("smartconfig", ssid, passwd)
            -- 获取IP成功, 将配网信息存入fdb, 做持久化存储
            log.info("fdb", "save ssid and passwd")
            fdb.kv_set("wlan_ssid", ssid)
            fdb.kv_set("wlan_passwd", passwd)
            break
        end
    end

2. 订阅"IP_READY 消息"

在网络连接成功时,会发布一个系统消息 IP_READY,联网成功,可以根据自己的业务逻辑实现相应的功能。

sys.subscribe("IP_READY", function(ip)
    log.info("wlan", "ip ready", ip)
    -- 联网成功, 可以发起http, mqtt, 等请求了
end)

3. 通过按键清除配网信息

通过长按 BOOT 按钮(持续 3 秒以上)来清除设备保存的 Wi-Fi 配网信息(SSID 和密码),并提供两种处理清除后的方案:直接重启设备/通过快速闪灯提示让用户自行复位重启。这样设计可以方便用户在设备丢失或需要重新配网的情况下,能够轻松地清除旧的配网信息。

-- GPIO9, 作为清除配网信息的按钮
local BTN_BOOT = 12
gpio.debounce(BTN_BOOT, 1000)
gpio.setup(BTN_BOOT, function()
    log.info("gpio", "boot button pressed")
    sys.publish("BTN_BOOT")
end)


-- 下面的task是演示通过按键清除配网信息
-- 实现的效果是: 开机500ms后, 长按BOOT按钮3秒以上, 清除配网信息, 然后重启或者快速闪灯.
sys.taskInit(function()
    -- 开机后, 先等500ms
    sys.wait(500)
    -- 然后开始监听BTN按钮
    while true do
        local flag = true
        while true do
            -- 等待boot按钮按下
            local ret = sys.waitUntil("BTN_BOOT", 3000)
            --log.info("gpio", "BTN_BOOT", "wait", ret)
            if ret then
                break
            end
        end
        log.info("wifi", "Got BOOT button pressed")
        for i=1, 30 do
            -- 要求持续3s的低电平, 若中途松开了,就无效咯
            if gpio.get(BTN_BOOT) ~= 0 then
                log.info("wifi", "BOOT button released, wait next press")
                flag = false
                break
            end
            sys.wait(100)
        end

        if flag then
            -- 用户的确要请求配网信息, 那就清除吧
            log.info("gpio", "boot pressed 3s, remove ssid/passwd")
            fdb.kv_del("wlan_ssid")
            fdb.kv_del("wlan_passwd")
            -- fdb.clear() -- 这里还有一个方案是清除fdb里的全部数据,从业务上说相当于恢复出厂配置
            log.info("gpio", "removed, wait for reboot")

            -- 方案1, 直接重启, 重启后因为没有配网数据了, 就自动开始配网
            -- rtos.reboot()

            -- 方案2, 100ms闪灯, 让用户自行复位重启
            gpio.setup(12, 0)
            while 1 do
                gpio.toggle(12)
                sys.wait(100)
            end
        end
    end
end)

4.4 成果演示

4.4.1 微信平台配置

微信搜索 airKiss 一键配网,本教程使用的是巴法云的 airkiss 配网功能:

进入小程序,切换协议到 AirKiss 配网,如下所示:

然后连接 wifi 即可

4.4.2 配网成功显示

通过 luatools 日志显示,可以看到 AirKiss 配网成功,并已保存到 fdb 中,掉电不丢失。

五、总结

本文档详细介绍了如何使用 Air8101 进行 AirKiss 配网,此配网方式极为简单,只需要将 Air8101 设置成 AirKiss 模式后,微信平台进行 AirKiss 配网即可。

六、常见问题

6.1 如何获取开发板的 MAC 地址

通过 wlan.getMac()接口即可,返回值是以十六进制形式呈现。

6.2 AirKiss 配网优缺点

1. 优点:

相比其它配置方式,AirKiss 技术有着以下几个显著的优势:

(1) 用户可以使用最为熟悉的微信客户端来操作入网配置,无需下载额外的第三方软件即可。

(2) 用户无需首先将设备配置为热点模式并连接,在配置模式下可直接将无线路由器的 SSID 发送至设备。

2. 缺点:

配网成功率受环境影响较大。

6.3 AirKiss 配网支持 5G 频段的 WIFI 吗

不支持,只支持 2.4G。因为 2.4G 频段的 WIFI 信号具有广泛的覆盖范围,能够被大多数智能设备和路由器所支持,因此成为了 AirKiss 配网技术的首选频段。

七、扩展

后续扩展功能在此补充,敬请期待......