init: Air780EPM 官方 LuatOS 项目代码基线

- 来源: 合宙 LuatOS 官方仓库 air780epm 模块完整代码
- 路径: luatos/air780epm/module/Air780EPM/demo 含官方 demo(含 mqtt/mqtts/socket/uart 等)
- 后续: 基于 demo 开发 UART<->MQTT 数据上报功能
This commit is contained in:
wangfq
2026-08-31 08:53:49 +08:00
commit 173dd6874f
813 changed files with 125484 additions and 0 deletions
@@ -0,0 +1,77 @@
--[[
@module httpsrv_start
@summary Air780EPM HTTP服务器应用模块
@version 1.0
@date 2025.10.24
@author 拓毅恒
@usage
本文件为Air780EPM开发板演示 HTTP 服务器功能的应用模块,核心业务逻辑为:
1. 初始化HTTP服务器
2. 配置HTTP服务器参数
3. 启动HTTP服务器服务
4. 处理HTTP请求和响应
]]
local function handle_http_request(fd, method, uri, headers, body)
log.info("httpsrv", method, uri, body or "")
if uri == "/send/text" then
log.info("Text Request", "Method:", method, "Body Length:", body and #body or 0)
if method == "POST" and body and #body > 0 then
-- 直接打印接收到的文本内容
log.info("Received Text:", body)
return 200, {}, "ok"
end
return 400, {}, "Invalid request"
elseif uri == "/scan/go" then
wlan.scan()
return 200, {}, "ok"
elseif uri == "/scan/list" then
return 200, {["Content-Type"]="application/json"}, (json.encode({data=scan_result, ok=true}))
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"
elseif uri == "/connok" then
log.info("connok", json.encode({ip=socket.localIP(2)}))
return 200, {["Content-Type"]="application/json"}, json.encode({ip=socket.localIP(2)})
end
return 404, {}, "Not Found" .. uri
end
local function start_http_server()
-- 等待网络就绪事件
sys.waitUntil("CREATE_OK")
local local_ip = socket.localIP(socket.LWIP_ETH)
-- 启动HTTP服务器
httpsrv.start(80, handle_http_request, socket.LWIP_ETH)
log.info("HTTP", "文件服务器已启动,使用AirETH_1000-以太网模式")
log.info("HTTP", "访问地址: http://" .. (local_ip or "192.168.4.1"))
end
local function scan_done_handle()
local result = wlan.scanResult()
scan_result = {}
for k, v in pairs(result) do
log.info("scan", (v["ssid"] and #v["ssid"] > 0) and v["ssid"] or "[隐藏SSID]", v["rssi"], (v["bssid"]:toHex()))
if v["ssid"] and #v["ssid"] > 0 then
table.insert(scan_result, {
ssid = v["ssid"],
rssi = v["rssi"]
})
end
end
log.info("scan", "aplist count:", #scan_result)
end
-- 订阅WiFi扫描完成事件
sys.subscribe("WLAN_SCAN_DONE", scan_done_handle)
sys.taskInit(start_http_server)