跳转至

Air8101-WiFi AP 文件管理系统

作者:拓毅恒 | 最后修改:2026-04-09

一、WiFi AP 文件管理系统概述

本文档介绍基于 Air8101 工业引擎实现的 WiFi AP 文件管理系统功能,通过该功能可以将设备变身为一个轻量级的文件服务器,用户只需连接到设备创建的 WiFi 热点,即可通过浏览器方便地浏览、管理和下载设备内部存储及 SD 卡中的文件。

1.1 工作原理

Air8101 工业引擎支持两种 WiFi 无线网络工作模式:

  1. AP 模式

  2. AP 是 Access Point 的缩写,即无线接入点,作为无线网络的中心节点

  3. 设备工作在 AP 模式时,可以创建一个 WiFi 热点,供其他设备连接
  4. 其他设备连接到该热点后,可以直接与 Air8101 进行通信

  5. STA 模式

  6. STA 是 Station 的缩写,它是无线网络中的一个终端站点设备

  7. 处于 STA 模式下的设备连接到 AP 节点进行网络访问

本项目利用 Air8101 的 AP 模式,创建 WiFi 热点并启动 HTTP 服务器,实现文件的远程访问和下载功能。

1.2 系统架构

WiFi AP 文件管理系统由以下核心组件构成:

  • WiFi AP 模块:创建名为 LuatOS_FileHub 的 WiFi 热点
  • SD 卡管理模块:挂载和管理 SD 卡存储
  • HTTP 服务器:提供文件列表浏览和下载功能
  • 任务控制模块:管理系统的启动和停止

二、准备硬件环境

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

2.1 Air8101 核心板

本功能测试需要使用 Air8101 核心板 + AirMICROSD_1010 配件板

2.2 Air8101 核心板 +AirMICROSD_1010 配件板的硬件接线

Air8101 核心板和 AirMICROSD_1010 配件板的硬件接线方式为:

Air8101核心板 AirMICROSD_1010配件板
59/3V3 3V3
gnd gnd
65/GPIO2 spi_clk
67/GPIO4 spi_mosi
66/GPIO3 spi_cs
8/GPIO5 spi_miso

2.3 PC 电脑

WIN10 以及以上版本的 WINDOWS 系统;

2.4 数据通信线

USB 数据线(其一端为 Type-C 接口,用于连接 Air8101)。

2.5 SD/TF 卡

在各位选择使用的 TF 卡时,我们建议不要使用白牌卡,尽量选择大品牌的主流 TF 卡。

三、准备软件环境

3.1 文章内容应用

在开始实践本示例之前,先筹备一下软件环境:

1. 烧录工具:Luatools 工具

2. 本demo开发测试时使用的固件为Air8101 V2010 版本固件,本demo对固件版本没有什么特殊要求,所以你如果要测试本demo时,可以直接使用最新版本的内核固件;如果发现最新版本的内核固件测试有问题,可以使用我们开发本demo时使用的内核固件版本来对比测试;

3. 脚本文件:https://gitee.com/openLuat/LuatOS/tree/master/module/Air8101/project/wifi_ap_read_file

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

准备好软件环境之后,接下来查看 Air8101 产品手册中“Air8101 核心板使用手册 -> 使用说明”,将本篇文章中演示使用的项目文件烧录到 Air8101 核心板中。

3.2 API 介绍

这里仅介绍本项目所使用的主要 API:

exremotefile.open()

打开远程文件管理系统

exremotefile.close()

关闭远程文件管理系统

四、功能实现

4.1 功能概述

本项目实现的核心功能包括:

  1. 任务控制:通过 boot 按键控制文件管理系统的启停
  2. 热点创建:自动创建名为 LuatOS_FileHub 的 WiFi 热点
  3. 文件服务:启动 HTTP 服务器,提供文件浏览和下载功能
  4. 用户认证:提供简单的用户名密码认证机制
  5. SD 卡支持:自动挂载并管理 SD 卡中的文件

4.2 代码结构

项目代码结构清晰,主要由以下几个文件组成:

  • main.lua:主入口文件,初始化系统环境
  • task_control.lua:控制系统服务的启动和停止
  • check_wifi.lua:检查和升级 WiFi 固件(可选)
  • 456.txt:示例文件,用于演示文件下载功能

4.3 核心代码示例

main.lua(主入口文件)

--[[
必须定义PROJECT和VERSION变量,Luatools工具会用到这两个变量,远程升级功能也会用到这两个变量
PROJECT:项目名,ascii string类型
        可以随便定义,只要不使用,就行
VERSION:项目版本号,ascii string类型
        如果使用合宙iot.openluat.com进行远程升级,必须按照"XXX.YYY.ZZZ"三段格式定义:
            X、Y、Z各表示1位数字,三个X表示的数字可以相同,也可以不同,同理三个Y和三个Z表示的数字也是可以相同,可以不同
            因为历史原因,YYY这三位数字必须存在,但是没有任何用处,可以一直写为000
        如果不使用合宙iot.openluat.com进行远程升级,根据自己项目的需求,自定义格式即可
]]
PROJECT = "WIFI_AP_READ_FILE"
VERSION = "001.000.000"

-- 在日志中打印项目名和项目版本号
log.info("main", PROJECT, VERSION)

-- 如果内核固件支持wdt看门狗功能,此处对看门狗进行初始化和定时喂狗处理
-- 如果脚本程序死循环卡死,就会无法及时喂狗,最终会自动重启
if wdt then
    --配置喂狗超时时间为9秒钟
    wdt.init(9000)
    --启动一个循环定时器,每隔3秒钟喂一次狗
    sys.timerLoopStart(wdt.feed, 3000)
end

-- 引入任务控制模块
require "task_control"

-- 结尾总是这一句
sys.run()

task_control.lua(任务控制模块)

-- 控制模式配置:
-- 1. 自动启动系统:在代码中将AUTO_START设置为true(默认)
-- 2. 手动控制系统:在代码中将AUTO_START设置为false,通过杜邦线短接GPIO5与GND然后断开,切换系统状态

-- 导入exremotefile库
local exremotefile = require "exremotefile"
local AUTO_START = true -- 默认使用自动启动方式

-- 系统状态变量
local is_running = false -- 标记系统是否正在运行

-- 启动系统服务
local function start_services()
    if not is_running then
        log.info("main", "启动系统服务")

        -- 自定义参数启动(使用8101核心板)
        -- 启动后连接默认AP热点,访问日志中的地址"http://192.168.4.1:80/explorer.html"来访问文件管理服务器。
        exremotefile.open(nil, {is_sdio = true})
        -- exremotefile.open()

        is_running = true
        log.info("main", "系统服务启动完成")
    end
end

-- 停止系统服务
local function stop_services()
    if is_running then
        log.info("main", "停止系统服务")

        -- 关闭远程文件管理系统
        exremotefile.close()

        is_running = false
        log.info("main", "系统服务已停止")
    end
end

-- 初始化按键,这里选取GPIO5作为功能键
local function press_key()
    log.info("GPIO press")
    sys.publish("PRESS", true)
end
gpio.setup(5, press_key, gpio.PULLUP, gpio.BOTH)
-- gpio.debounce(5, 100, 1) -- 实际设计板子时,根据自己的需求可以更改防抖配置以及打开防抖

local function config_services()
    -- 根据配置决定是否自动启动服务
    if AUTO_START then
        start_services()
    else
        log.info("main", "系统已就绪,等待按键触发")
    end

    while true do
        sys.waitUntil("PRESS")
        -- 切换系统状态
        if is_running then
            stop_services()
        else
            start_services()
        end
    end
end

sys.taskInit(config_services)

五、功能演示

5.1 启动系统

  1. 烧录内核固件 + 脚本后自动开机,设备初始化按键功能

  1. 观察日志,等待"启动系统服务"的提示

5.2 连接 WiFi 热点

使用手机或电脑搜索并连接名为 LuatOS_FileHub 的 WiFi 热点,密码为 12345678

5.3 访问文件管理系统

连接热点后,打开浏览器,输入 http://192.168.4.1/explorer.html 访问文件管理系统

5.4 用户认证

使用默认用户名 admin 和密码 123456 登录文件管理系统

5.5 浏览和下载文件

登录成功后,可以查看设备内部存储和 SD 卡中的文件列表,点击文件可直接下载

5.6 示例文件访问

项目中包含一个示例文件:

  • 456.txt:文本文件

可以通过文件管理系统直接下载这些文件进行测试

六、总结

本文档详细介绍了基于 Air8101 工业引擎的 WiFi AP 文件管理系统实现方法。通过简单的配置和操作,用户可以快速将设备变为一个轻量级的文件服务器,实现文件的远程浏览和下载功能。

系统具有以下特点:

  • 操作简单:通过默认配置和 GPIO 按键控制是否启停文件管理任务
  • 使用方便:用户只需连接 WiFi 热点,通过浏览器即可访问
  • 功能实用:支持文件浏览和下载,支持 SD 卡扩展存储
  • 安全可靠:提供用户认证机制,保护文件安全

该系统适用于需要远程访问设备文件的场景,如设备配置、日志查看、数据导出等应用。

七、常见问题

7.1 无法连接 WiFi 热点

确保设备已成功启动系统服务(观察串口日志),检查热点名称和密码是否正确。

7.2 无法访问文件管理系统

确认设备已连接到正确的 WiFi 热点,检查浏览器输入的 URL 是否正确(http://192.168.4.1/explorer.html)。

7.3 登录失败

默认用户名:admin,默认密码:123456,请确保输入正确。

7.4 无法识别 SD 卡

确保 SD 卡格式正确(建议使用 FAT32 格式),检查 SD 卡是否正确插入。