Air8101-蓝牙配网
一、蓝牙配网概述
1.1 蓝牙配网是什么
蓝牙配网是一种利用蓝牙低功耗(BLE)链路,在未联网设备与手机之间建立本地安全通道,把 Wi-Fi 的 SSID、密码及其他网络参数传递给设备,使其独立完成 STA 或 SOFTAP 联网的技术方案。
1.3 蓝牙配网原理
设备在上电后进入配网模式,作为 BLE Peripheral 持续广播自定义的配网服务 UUID;手机 APP 作为 Central 扫描并建立 GATT 连接,随后通过加密特征值把网络参数下发给设备。设备收到参数后,启用 Wi-Fi 并执行联网流程。
1.4 蓝牙配网流程
1. 广播
设备以固定间隔广播配网服务,等待手机连接。
2. 连接
手机 APP 扫描 → 选择目标设备 → 建立 BLE 连接。
3. 选择配网方式
在 APP 界面选择:
station 模式:设备直接作为 Station 连接路由器。
softap 模式:设备通过 4G 开 AP 热点,用于其他设备连接(由于 Air8101 本身内部没有 4G,所以暂时不支持配置 AP 功能)。
1.5 配网模式介绍
由于 Air8101 本身内部没有 4G,所以暂时仅支持使用中支持一种无线网络工作模式,即 STA 模式。
1. STA 模式
STA 是 Station 的缩写,它是无线网络中的一个终端站点设备,可以看成是一个客户端,一般来说,处在 STA 模式下的设备本身不接受无线的接入,该设备连接到 AP 节点进行网络访问,STA 模式下的设备之间的通信可以通过 AP 进行转发实现。
Air8101 工业引擎工作在 STA 模式时,可以连接到路由器的无线网络中去,手机或电脑通过无线网络实现对 Air8101 工业引擎的远程控制。
2. AP 模式:
AP 是 Access Point 的缩写,即无线接入点,它是一个无线网络的中心节点,可以看成是一个服务器。它作为一个网络的中心节点,提供无线接入服务,其他的无线设备允许接入该节点,所有接入该节点设备的无线信号数据都要通过它才能进行交换和互相访问。一般的无线路由器、网关、热点就是工作在 AP 模式下,AP 节点和 AP 节点之间允许相互连接。
由于 Air8101 本身内部没有 4G,所以 Air8101 工业引擎无法单独工作在 AP 模式。如需 AP 功能,可以通过外挂 Air780Exx 等 4G 模组,就可以用手机或者其他通讯设备连接上 Air8101 工业引擎与其通信。
蓝牙配网就是让 Air8101 工作在蓝牙配网模式下,手机 app 通过蓝牙连接 Air8101,通过 app 内界面实现配网功能。
二、演示功能概述
2.1 本教程实现的功能定义:
本章节将通过蓝牙和 APP 端来使 Air8101 核心板连接路由器来进行蓝牙配网的演示。
三、准备硬件环境
因为蓝牙配网功能不受硬件限制,所以本篇教程选用 Air8101 核心板来开发调试。也可以参考:Air8101 硬件环境清单,准备好硬件环境。
3.1 Air8101 核心板
四、准备软件环境
4.1 文章内容应用
在开始实践本示例之前,先筹备一下软件环境:
1. 烧录工具:Luatools 工具;
2. 内核固件:https://docs.openluat.com/air8101/luatos/firmware/
4. APP 客户端下载地址:
安卓测试 APP 下载地址 1:https://github.com/EspressifApp/EspBlufiForAndroid/releases(如果打不开就用下面的)
安卓测试 APP 下载地址 2:https://docs.openluat.com/cdn2/apk/blufi-1.6.5-31.apk
5. LuatOS 运行所需要的 lib 文件:使用 Luatools 烧录时,勾选 添加默认 lib 选项,使用默认 lib 脚本文件。
准备好软件环境之后,接下来查看如何烧录项目文件到 Air8101 核心板中,将本篇文章中演示使用的项目文件烧录到 Air8101 开发板中。
4.2 API 介绍
这里仅介绍本篇文档所使用的 API,详情请查看:API 索引 - luatos@Air8101 - 合宙模组资料中心
wlan.init()
初始化
wlan.connect(ssid, password, auto_reconnect, bssid)
作为 STATION 时,连接到指定 AP
exnetif.setproxy(adapter, main_adapter,other_configs)
设置多网融合模式,例如 4G 作为数据出口给 WIFI 或以太网设备上网(需要在 task 中调用)
五、APP 蓝牙配网功能实现
本小节教你怎么设置蓝牙配网,实现 Air8101 工业引擎的配网系统。
5.1 初始化蓝牙等相关功能
使用蓝牙配网,首先需要初始化蓝牙设备并启动 espblufi 配网功能。
-- 定义网络配置任务函数
local function ble_wifi_config_task()
-- 初始化蓝牙设备,并将初始化结果存储在 bluetooth_device 变量中
local bluetooth_device = bluetooth.init()
-- 初始化 espblufi 模块,传入蓝牙设备实例和回调函数
espblufi.init(bluetooth_device, espblufi_callback)
-- 启动 espblufi 配网功能
espblufi.start()
-- 进入无限循环,保持任务持续运行
end
5.2 定义 espblufi 回调函数
-- 定义 espblufi 回调函数,用于处理不同类型的事件,如 EVENT_STA_INFO、EVENT_SOFTAP_INFO 等。
-- EVENT_STA_INFO 事件:当收到 APP 下发的 STA 连接信息时触发,会打印出设备连接 WiFi STA 所输入的键值对,其中 i 为配置项名称(如 "ssid"、"passwd"),v 为对应的值。
local function espblufi_callback(event, data)
-- 检查事件类型是否为 STA 信息事件
if event == espblufi.EVENT_STA_INFO then
-- 遍历 STA 信息数据
for i, v in pairs(data) do
-- 打印 STA 信息数据的键值对
print("STA:", i, v)
end
end
end
5.3 定义网络测试功能函数
用于接收 "STA_CONNED"、"STA_DISCONNED"、"AP_CONNED"等消息来进行对应的逻辑处理
-- 定义网络测试函数
local function network_event_handler()
while true do
-- 等待指定任务的消息,不设置超时时间
msg = sysplus.waitMsg(taskName, nil)
-- 检查接收到的消息是否为表类型
if type(msg) == 'table' then
log.info("MSG:", msg[1])
-- 检查消息的第一个元素是否为 "STA_CONNED",即 STA 连接成功消息
if msg[1] == "STA_CONNED" then
-- 打印 STA 连接成功日志
log.info("STA:", "STA CONNED OK!")
sys.wait(3000)
-- 发起一个 GET 请求,请求 https://httpbin.air32.cn/bytes/2048 地址,使用 STA 适配器,超时时间为 5000 毫秒
local code, headers, body = http.request("GET", "https://httpbin.air32.cn/bytes/2048", nil, nil, {adapter = socket.LWIP_STA,timeout = 5000,debug = false}).wait()
-- 打印 HTTP 请求执行结果,包含状态码、响应头和响应体长度
log.info("http执行结果", code, headers, body and #body)
end
-- 检查消息的第一个元素是否为 "STA_DISCONNED",即 STA 断开连接消息
if msg[1] == "STA_DISCONNED" then
-- 打印 STA 断开连接日志
log.info("STA:", "STA DISCONNED!")
-- 断开 STA 连接
wlan.disconnect()
-- -- 断开 STA 连接后,禁用 STA 与 4G 网络的多网融合代理
libnetif.setproxy(socket.LWIP_STA, socket.LWIP_GP, nil)
end
-- 检查消息的第一个元素是否为 "AP_CONNED",即 AP 创建连接消息
if msg[1] == "AP_CONNED" then
log.info("AP:", "Air8101本身没有4G")
log.info("AP:", "暂不支持配置AP功能")
log.info("AP:", "请使用STA配网功能")
end
end
sys.wait(10)
end
end
六、功能演示
6.1 station 模式下的配网功能演示
1. 首先将固件和脚本烧录进模组中并开机
2. 此时打开手机 APP 端,可以看到已经扫描到我们的设备了(如果没有扫描到就重启一下设备并下拉刷新 APP)
3. 点击我们的设备,进入配网界面,点击连接,就可以进行配网的操作了
4. 点击配网,进行 station 配网模式,选择需要连接的 WiFi,输入对应的密码,即可开始连接。
5. 此时看日志,即可看到 sta 已经连接成功,并且进行 HTTP 请求成功。
6.2 ap 模式下的配网功能演示
由于 Air8101 内部没有 4G,所以暂时不支持 AP 功能。
七、 总结
至此,我们演示了使用 APP 进行蓝牙配网的全过程,相信聪明的你已经完全领悟配网逻辑了,快来实际操作一下吧!
八、常见问题
8.1 无法连接 Air8101 WIFI 热点
2. 检查是否连接天线。
3. 确认连网设备在 Air8101 附近。
8.2 扫描不到 Air8101 的蓝牙
1. 检查是否烧录 Air8101 蓝牙配网脚本。
2. 将核心板断电再上电或是重启 APP。
3. 在手机端 APP 内下拉刷新。
8.3 蓝牙配网优缺点
1. 优点:这种方式很可靠,成功率基本达到 100%,设备端的代码也简单,有手机即可快速配网。
2. 缺点:目前只有安卓手机支持该 APP,并且受限于距离,需要用户在设备附近才可进行连接配网。