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,220 @@
--[[
@module iconv_test
@summary 字符编码转换测试模块
@version 1.0
@date 2025.10.27
@author 孟伟
@usage
本模块提供多种字符编码之间的相互转换功能,支持以下编码转换:
1. Unicode小端(ucs2)与GB2312编码互转
2. Unicode大端(ucs2be)与GB2312编码互转
3. Unicode小端(ucs2)与UTF8编码互转
4. Unicode大端(ucs2be)与UTF8编码互转
5. GB2312 编码与 UTF-8 编码之间的转换。
本文件没有对外接口,直接在main.lua中require "iconv_test"就可以加载运行;
]]
--- unicode小端编码 转化为 gb2312编码
-- @string ucs2s unicode小端编码数据
-- @return string data,gb2312编码数据
-- @usage local data = common.ucs2ToGb2312(ucs2s)
function ucs2ToGb2312(ucs2s)
local cd = iconv.open("gb2312", "ucs2")
return cd:iconv(ucs2s)
end
--- gb2312编码 转化为 unicode小端编码
-- @string gb2312s gb2312编码数据
-- @return string data,unicode小端编码数据
-- @usage local data = common.gb2312ToUcs2(gb2312s)
function gb2312ToUcs2(gb2312s)
local cd = iconv.open("ucs2", "gb2312")
return cd:iconv(gb2312s)
end
--- unicode大端编码 转化为 gb2312编码
-- @string ucs2s unicode大端编码数据
-- @return string data,gb2312编码数据
-- @usage data = common.ucs2beToGb2312(ucs2s)
function ucs2beToGb2312(ucs2s)
local cd = iconv.open("gb2312", "ucs2be")
return cd:iconv(ucs2s)
end
--- gb2312编码 转化为 unicode大端编码
-- @string gb2312s gb2312编码数据
-- @return string data,unicode大端编码数据
-- @usage local data = common.gb2312ToUcs2be(gb2312s)
function gb2312ToUcs2be(gb2312s)
local cd = iconv.open("ucs2be", "gb2312")
return cd:iconv(gb2312s)
end
--- unicode小端编码 转化为 utf8编码
-- @string ucs2s unicode小端编码数据
-- @return string data,utf8编码数据
-- @usage data = common.ucs2ToUtf8(ucs2s)
function ucs2ToUtf8(ucs2s)
local cd = iconv.open("utf8", "ucs2")
return cd:iconv(ucs2s)
end
--- utf8编码 转化为 unicode小端编码
-- @string utf8s utf8编码数据
-- @return string data,unicode小端编码数据
-- @usage local data = common.utf8ToUcs2(utf8s)
function utf8ToUcs2(utf8s)
local cd = iconv.open("ucs2", "utf8")
return cd:iconv(utf8s)
end
--- unicode大端编码 转化为 utf8编码
-- @string ucs2s unicode大端编码数据
-- @return string data,utf8编码数据
-- @usage data = common.ucs2beToUtf8(ucs2s)
function ucs2beToUtf8(ucs2s)
local cd = iconv.open("utf8", "ucs2be")
return cd:iconv(ucs2s)
end
--- utf8编码 转化为 unicode大端编码
-- @string utf8s utf8编码数据
-- @return string data,unicode大端编码数据
-- @usage local data = common.utf8ToUcs2be(utf8s)
function utf8ToUcs2be(utf8s)
local cd = iconv.open("ucs2be", "utf8")
return cd:iconv(utf8s)
end
--- utf8编码 转化为 gb2312编码
-- @string utf8s utf8编码数据
-- @return string data,gb2312编码数据
-- @usage local data = common.utf8ToGb2312(utf8s)
function utf8ToGb2312(utf8s)
local cd = iconv.open("ucs2", "utf8")
local ucs2s = cd:iconv(utf8s)
cd = iconv.open("gb2312", "ucs2")
return cd:iconv(ucs2s)
end
--- gb2312编码 转化为 utf8编码
-- @string gb2312s gb2312编码数据
-- @return string data,utf8编码数据
-- @usage local data = common.gb2312ToUtf8(gb2312s)
function gb2312ToUtf8(gb2312s)
local cd = iconv.open("ucs2", "gb2312")
local ucs2s = cd:iconv(gb2312s)
cd = iconv.open("utf8", "ucs2")
return cd:iconv(ucs2s)
end
--------------------------------------------------------------------------------------------------------
--[[
函数名:ucs2ToGb2312
功能 :unicode小端编码 转化为 gb2312编码,并打印出gb2312编码数据
参数
ucs2sunicode小端编码数据,注意输入参数的字节数
返回值:
]]
local function testucs2ToGb2312(ucs2s)
print("ucs2ToGb2312")
local gb2312num = ucs2ToGb2312(ucs2s) --调用的是common.ucs2ToGb2312,返回的是编码所对应的字符串
--print("gb2312 code",gb2312num)
print("gb2312 code", string.toHex(gb2312num))
end
--[[
函数名:gb2312ToUcs2
功能 gb2312编码 转化为 unicode十六进制小端编码数据并打印
参数
gb2312s:gb2312编码数据,注意输入参数的字节数
返回值:
]]
local function testgb2312ToUcs2(gb2312s)
print("gb2312ToUcs2")
local ucs2num = gb2312ToUcs2(gb2312s)
print("unicode little-endian code:" .. string.toHex(ucs2num)) -- 要将二进制转换为十六进制,否则无法输出
end
--[[
函数名:ucs2beToGb2312
功能 :unicode大端编码 转化为 gb2312编码,并打印出gb2312编码数据,
大端编码数据是与小端编码数据位置调换
参数
ucs2s:unicode大端编码数据,注意输入参数的字节数
返回值:
]]
local function testucs2beToGb2312(ucs2s)
print("ucs2beToGb2312")
local gb2312num = ucs2beToGb2312(ucs2s) -- 转化后的数据直接变成字符可以直接输出
print("gb2312 code :" .. string.toHex(gb2312num))
end
--[[
函数名:gb2312ToUcs2be
功能 gb2312编码 转化为 unicode大端编码,并打印出unicode大端编码
参数
gb2312s:gb2312编码数据,注意输入参数的字节数
返回值:unicode大端编码数据
]]
function testgb2312ToUcs2be(gb2312s)
print("gb2312ToUcs2be")
local ucs2benum = gb2312ToUcs2be(gb2312s)
print("unicode big-endian code :" .. string.toHex(ucs2benum))
end
--[[
函数名:ucs2ToUtf8
功能 :unicode小端编码 转化为 utf8编码,并打印出utf8十六进制编码数据
参数
ucs2s:unicode小端编码数据,注意输入参数的字节数
返回值:
]]
local function testucs2ToUtf8(ucs2s)
print("ucs2ToUtf8")
local utf8num = ucs2ToUtf8(ucs2s)
print("utf8 code:" .. string.toHex(utf8num))
end
--[[
函数名:utf8ToGb2312
功能 :utf8编码 转化为 gb2312编码,并打印出gb2312编码数据
参数
utf8s:utf8编码数据,注意输入参数的字节数
返回值:
]]
local function testutf8ToGb2312(utf8s)
print("utf8ToGb2312")
local gb2312num = utf8ToGb2312(utf8s)
print("gb2312 code:" .. string.toHex(gb2312num))
end
--[[
函数名:gb2312ToUtf8
功能 :gb2312编码 转化为 utf8编码,并打印出utf8编码数据
参数
gb2312sgb2312s编码数据,注意输入参数的字节数
返回值:
]]
local function testgb2312ToUtf8(gb2312s)
print("gb2312ToUtf8")
local utf8s = gb2312ToUtf8(gb2312s)
print("utf8s code:" .. utf8s)
end
function iconv_test_fun()
while 1 do
sys.wait(10000)
testucs2ToGb2312(string.fromHex("1162")) -- "1162"是"我"字的ucs2编码,这里调用了string.fromHex将参数转化为二进制,也就是两个字节。
testgb2312ToUcs2(string.fromHex("CED2")) -- "CED2"是"我"字的gb2312编码
testucs2beToGb2312(string.fromHex("6211")) -- "6211"是"我"字的ucs2be编码
testgb2312ToUcs2be(string.fromHex("CED2"))
testucs2ToUtf8(string.fromHex("1162"))
testutf8ToGb2312(string.fromHex("E68891")) -- "E68891"是"我"字的utf8编码
testgb2312ToUtf8(string.fromHex("CED2"))
end
end
sys.taskInit(iconv_test_fun)
@@ -0,0 +1,70 @@
--[[
@module main
@summary LuatOS用户应用脚本文件入口,总体调度应用逻辑
@version 1.0
@date 2025.10.27
@author 孟伟
@usage
本demo演示的功能为:
提供多种字符编码之间的相互转换功能,支持以下编码转换:
1. Unicode小端(ucs2)与GB2312编码互转
2. Unicode大端(ucs2be)与GB2312编码互转
3. Unicode小端(ucs2)与UTF8编码互转
4. Unicode大端(ucs2be)与UTF8编码互转
5. GB2312 编码与 UTF-8 编码之间的转换。
更多说明参考本目录下的readme.md文件
]]
--[[
必须定义PROJECT和VERSION变量,Luatools工具会用到这两个变量,远程升级功能也会用到这两个变量
PROJECT:项目名,ascii string类型
可以随便定义,只要不使用,就行
VERSION:项目版本号,ascii string类型
如果使用合宙iot.openluat.com进行远程升级,必须按照"XXX.YYY.ZZZ"三段格式定义:
X、Y、Z各表示1位数字,三个X表示的数字可以相同,也可以不同,同理三个Y和三个Z表示的数字也是可以相同,可以不同
因为历史原因,YYY这三位数字必须存在,但是没有任何用处,可以一直写为999
如果不使用合宙iot.openluat.com进行远程升级,根据自己项目的需求,自定义格式即可
]]
PROJECT = "iconv_test"
VERSION = "001.999.000"
-- 在日志中打印项目名和项目版本号
log.info("main", PROJECT, VERSION)
-- 如果内核固件支持errDump功能,此处进行配置,【强烈建议打开此处的注释】
-- 因为此功能模块可以记录并且上传脚本在运行过程中出现的语法错误或者其他自定义的错误信息,可以初步分析一些设备运行异常的问题
-- 以下代码是最基本的用法,更复杂的用法可以详细阅读API说明文档
-- 启动errDump日志存储并且上传功能,600秒上传一次
-- if errDump then
-- errDump.config(true, 600)
-- end
-- 使用LuatOS开发的任何一个项目,都强烈建议使用远程升级FOTA功能
-- 可以使用合宙的iot.openluat.com平台进行远程升级
-- 也可以使用客户自己搭建的平台进行远程升级
-- 远程升级的详细用法,可以参考fota的demo进行使用
-- 启动一个循环定时器
-- 每隔3秒钟打印一次总内存,实时的已使用内存,历史最高的已使用内存情况
-- 方便分析内存使用是否有异常
-- sys.timerLoopStart(function()
-- log.info("mem.lua", rtos.meminfo())
-- log.info("mem.sys", rtos.meminfo("sys"))
-- end, 3000)
-- 加载iconv功能测试模块
require("iconv_test")
-- 用户代码已结束---------------------------------------------
-- 结尾总是这一句
sys.run()
-- sys.run()之后后面不要加任何语句!!!!!
@@ -0,0 +1,62 @@
## 功能模块介绍
1、main.lua:主程序入口;
2、iconv.lua:字符编码转换模块,提供多种字符编码之间的相互转换功能;
## 演示功能概述
本demo演示的功能为:
提供多种字符编码之间的相互转换功能,支持以下编码转换:
1. Unicode小端(ucs2)与GB2312编码互转
2. Unicode大端(ucs2be)与GB2312编码互转
3. Unicode小端(ucs2)与UTF8编码互转
4. Unicode大端(ucs2be)与UTF8编码互转
5. GB2312 编码与 UTF-8 编码之间的转换。
## 演示硬件环境
![](https://docs.openluat.com/air780epm/luatos/app/driver/eth/image/RFSvb75NRoEWqYxfCRVcVrOKnsf.jpg)
1、Air780EPM V1.3版本开发板一块
2、TYPE-C USB数据线一根 + USB转串口数据线一根,Air780EPM V1.3版本开发板和数据线的硬件接线方式为:
- Air780EPM V1.3版本开发板通过TYPE-C USB口供电;(外部供电/USB供电 拨动开关 拨到 USB供电一端)
- TYPE-C USB数据线直接插到核心板的TYPE-C USB座子,另外一端连接电脑USB口;
## 演示软件环境
1、Luatools下载调试工具
2、[Air780EPM V2016版本固件)](https://docs.openluat.com/air780epm/luatos/firmware/version/)
## 演示操作步骤
1、搭建好硬件环境
2、将demo烧录到模组中
3、可以看到如下输出:
```lua
[2025-10-27 18:28:17.553][000000005.822] D/mobile NETIF_LINK_ON -> IP_READY
[2025-10-27 18:28:17.614][000000005.932] D/mobile TIME_SYNC 0
[2025-10-27 18:28:21.797][000000010.217] ucs2ToGb2312
[2025-10-27 18:28:21.850][000000010.218] gb2312 code CED2 4
[2025-10-27 18:28:21.927][000000010.218] gb2312ToUcs2
[2025-10-27 18:28:21.990][000000010.218] unicode little-endian code:1162
[2025-10-27 18:28:22.050][000000010.219] ucs2beToGb2312
[2025-10-27 18:28:22.109][000000010.219] gb2312 code :CED2
[2025-10-27 18:28:22.169][000000010.219] gb2312ToUcs2be
[2025-10-27 18:28:22.227][000000010.220] unicode big-endian code :6211
[2025-10-27 18:28:22.294][000000010.220] ucs2ToUtf8
[2025-10-27 18:28:22.349][000000010.220] utf8 code:E68891
[2025-10-27 18:28:22.400][000000010.220] utf8ToGb2312
[2025-10-27 18:28:22.452][000000010.221] gb2312 code:CED2
[2025-10-27 18:28:22.510][000000010.221] gb2312ToUtf8
```