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,65 @@
--[[
@module main
@summary LuatOS用户应用脚本文件入口,总体调度应用逻辑
@version 1.0
@date 2025.11.4
@author 王城钧
@usage
本demo演示的核心功能为:
1、rsa_app:普通的rsa加密解密、签名验签功能演示
2、privkey.pem 和 public.pem:公钥私钥文件
更多说明参考本目录下的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 = "RSA"
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)
-- 加载http应用功能模块
require "rsa_app"
-- 用户代码已结束---------------------------------------------
-- 结尾总是这一句
sys.run()
-- sys.run()之后不要加任何语句!!!!!因为添加的任何语句都不会被执行
@@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAp0WakShvpE1/28hyZzz0TFiBpN/d6EU2Wkl5lrazTxK/LDdZ
kAQuz6eA+kdPUqSueIpN0X8DT4Or5/0yD/ABvgW2t7A6g2/zQpzv9IoAl2f1Vhnx
dd7iSnhWTeF80lywp4VlHHEVVp7ZCqod59qa9nyp45ycWPwV0VCdX6NwS7chPodC
/Nf4UVbC1/JJ26WPVKqgOuSz0hIX58pnEaU/ntSDuJiLcKdCNUyIHJEzNYGaQVwx
mqBoyolktkTOL04AW/OXlOTP8eZrEZpckrODDaWlLUOt5SARS6qUYJSvuyYry8a0
rGOLbCnoIYVBvu8NX8I5hfeMGnYkEdpx6x/xYwIDAQABAoIBADfwehGDYVqkJFc/
AKtv4g9KJgkaaN7NjrDBE62IagzOqypBVG1qSLFfRi3s/SUZN9POBNpDzLqhwTKz
JTPZQuvmg0WI5Pihzst/KmwwXqRDuvNRd8PAhxL6jXo8J38+SkGrxbWuR8GRG+qK
G7g3Dk3SQQqCjHLh0vYOLKMYSGy5RgfIQyve6yBK1LHeanzgGgcSbawsvCiiDOkb
Y3I8CHasnK/Hxpmx/NzfNfY+r32AVXx4b+sN2YxB7A9OCxgdwYQHxYvKZ1JIiCh+
Mv85wDHT25SJ5NLdP/jHILgGrgpyDN5+9c4fk3rjkoTrTs01wJ4rQfItkQ1Zlr0/
9tub6mECgYEA2e7gerNRv53L0HkY9GS0B7Esi2FiUc/oh4xKRKPm+/ydXcroVbAK
Mz3mCVlRNvkA+68P670s3AKVpeB671R70dCY+MQXTeNaxc0NlhGOKYoerPd9D/GN
CF460AT2SQEWYTdIbin2dxeROEuC79zn1yczxnSwjAvqDwpvpHceP3ECgYEAxH1a
hXk84U5PGKyUuAVMNMaQQll8rcxoFThxrei7iNT6SfVAeHQufCgeW9g1cOL5Vjmk
9Te1caJt2VXaAhq883qZ1ABypQgcfUwLaK6q4BzAIPtYRIpkJstFKaYWqYaVwCGh
QTqcP+ebEJ1BgKgxH4nXjlMUMwf8qzTGmQlO/BMCgYEAzZblG7uIlgyFVnC3Eu7h
SxRgIkjHWMia4yx8b45zfCpORkoBrbw5kyeEmDMzQ3nZ7JS0nz5CUHb7t5UyRA7e
FAwGEz/hgC/H1Svg8j4zb4qF78Q1rdHAqzFBqDXWJP6qnyFo6cwaXzTTYVkS97bc
24J2/HPejO88ad39fhiFZ3ECgYEAvDJgaGU2BYrOwZBTJWqVkhr5g0NY4tJcgq68
W1kFfkqXrAzGglitSWfXpBqTHRuYu5icwe5o0H1F/5t2IvvfLMmp2t/O7vi06OHU
L6DUs7F16GE1KvjuciXRidG19QueFRdg7ywnCiJYaHJmkccGvfF1z7ENMM+el5EG
AwBicZcCgYBdcmz3nmTyGb+BY6yHDNrJh97eSJaP5KOpfs1ZGM4Jx/Pa391q1X9Y
WigaNEpW5eJKzTnyX0GlbEPPhTkBJS4ZwuKRZBvwzmLdoICA+i7gpjwfqDcrdJND
IhEjjWogNyIvepre3eL1HMaJr6TS4j7wZTl7Ha4httCNBkQb0qJeWw==
-----END RSA PRIVATE KEY-----
@@ -0,0 +1,9 @@
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp0WakShvpE1/28hyZzz0
TFiBpN/d6EU2Wkl5lrazTxK/LDdZkAQuz6eA+kdPUqSueIpN0X8DT4Or5/0yD/AB
vgW2t7A6g2/zQpzv9IoAl2f1Vhnxdd7iSnhWTeF80lywp4VlHHEVVp7ZCqod59qa
9nyp45ycWPwV0VCdX6NwS7chPodC/Nf4UVbC1/JJ26WPVKqgOuSz0hIX58pnEaU/
ntSDuJiLcKdCNUyIHJEzNYGaQVwxmqBoyolktkTOL04AW/OXlOTP8eZrEZpckrOD
DaWlLUOt5SARS6qUYJSvuyYry8a0rGOLbCnoIYVBvu8NX8I5hfeMGnYkEdpx6x/x
YwIDAQAB
-----END PUBLIC KEY-----
@@ -0,0 +1,54 @@
功能模块介绍
---------
1、main.lua:主程序入口;
2、rsa_app:rsa加密解密、签名验签功能演示;
3、privkey.pem:PEM格式的RSA私钥文件
4、public.pem:PEM格式的RSA公钥文件
## 演示功能概述
1、rsa加密解密、签名验签功能
## 演示硬件环境
1、Air780EPM开发板一块;
![netdrv_multi](https://docs.openLuat.com/cdn/image/Air780EPM开发板.jpg)
2、TYPE-C USB数据线一根
* Air780EPM开发板/核心板通过 TYPE-C USB 口供电;
* TYPE-C USB 数据线直接插到核心板的 TYPE-C USB 座子,另外一端连接电脑 USB 口;
演示软件环境
---------
1、Luatools下载调试工具
2、[Air780EPM V2016版本]([固件和应用脚本Demo - luatos@air8000 - 合宙模组资料中心](https://docs.openluat.com/air780epm/luatos/firmware/))(理论上最新版本固件也可以,如果使用最新版本的固件不可以,可以烧录V2016-1固件对比验证)
## 演示核心步骤
1、搭建好硬件环境
2、Luatools烧录内核固件和demo脚本代码
3、烧录成功后,自动开机运行
4、可以看到代码运行结果如下:
日志中如果出现以下类似以下打印则说明rsa加密解密、签名和验签功能正常
```lua
[2025-11-04 09:26:34.590][000000002.759] I/user.rsa encrypt 256
[2025-11-04 09:26:34.620][000000002.759] 7C4D741E29C7E3612C53B06602FBA562A7F3F1FF197519AECEE8B993E7B1C3EC709C41B3BD54A669836A13F9456322E6FB686398C961C8F283AEB8EFC775F2965CFB0FFC5E40CDADE301CFC9E0A94389C33090274CFC524CF54281565A89DFD6B6558C21F5AC1338BACFDA65057FF936AE1E60FC60A0809A9C1D45F641483F340B297D64BDF2BFBE46E1A34BE578C255F3AE04F1C1D19A28437B77AE98136D460C336CF6221BF33649731E85465721D255764936C9944DA199378CBC9CAAE07CD462EF3AEC0AA5E2F9C7FF68F9B2CAD5FE44C1A18F724CD637CCFE7B2E12BE93B78DC3B39C595C36B798050094B497D8F23AB32D33165861BD3EBCFA04CA0C26
[2025-11-04 09:26:34.664][000000003.850] I/user.rsa decrypt 3 616263
[2025-11-04 09:26:34.702][000000004.950] I/user.rsa sign 256
[2025-11-04 09:26:34.724][000000004.950] 2A526049B5D0FFFDF370EE1EB37E87A1C054B387386C635B4DD46E3970F90D08732D4CC1B338EA9153B6C52AE22602C55272C828D4F627E1BF8B994BC02C79DB1F0462F3A5A654D9DAF2794F4D8EC1A691FE6D0C455CA0DCE9B9ACDFC44C79D9CFFF46740248131EE58ACE00BE7DA8537F1E6550F17C204ADDD79C735C57D9FD4ACC7006BA22E248B9FEFE002E8FCCCF85B5A8DA0D133669D6463D24F8CA24C2E314CCCE39DF43A05EB33840BDC1298F0361D13FE2EEF3C87A76D826968873B8FEDD748DF54D70CB3D2A5072D137954BFA4FA990D2C01D8061FF0F2E27DF813DA8751A06F38C83827E574EDCC52F271A98EC2E6CD9A8A8AFC9DA0475EB7547D0
[2025-11-04 09:26:34.750][000000004.968] I/user.rsa verify true
```
@@ -0,0 +1,59 @@
--[[
@module rsa_app
@summary rsa应用功能模块
@version 1.0
@date 2025.11.4
@author 王城钧
@usage
本文件为rsa应用功能模块,核心业务逻辑为:基于不同的应用场景,演示rsa核心库的使用方式;
本文件没有对外接口,直接在main.lua中require "rsa_app"就可以加载运行;
]]
--[[
提醒: 本demo需要用到公钥和私钥, demo目录中的公钥私钥文件是演示用的, 实际使用请自行生成
生成公钥私钥, 可使用openssl命令, 或者找个网页生成. 2048 是RSA位数, 最高支持4096,但不推荐,因为很慢.
openssl genrsa -out privkey.pem 2048
openssl rsa -in privkey.pem -pubout -out public.pem
-- 下载脚本和资源到设备时, 务必加上本目录下的两个 pem 文件, 否则本demo无法运行.
]]
local function rsa_task()
-- 此处延时2秒是为了方便观察日志,非必须
sys.wait(2000)
-- 检查是否带rsa库, 没有就提醒一下吧
if not rsa then
log.warn("main", "this demo need rsa lib!!!")
return
end
-- 读取公钥并马上加密数据
local res = rsa.encrypt((io.readFile("/luadb/public.pem")), "abc")
-- 打印结果
log.info("rsa", "encrypt", res and #res or 0, res and res:toHex() or "")
-- 下面是解密, 通常不会在设备端进行, 这里主要是演示用法, 会很慢
if res then
-- 读取私钥, 然后解码数据
local dst = rsa.decrypt((io.readFile("/luadb/privkey.pem")), res, "")
log.info("rsa", "decrypt", dst and #dst or 0, dst and dst:toHex() or "")
end
-- 演示签名和验签
local hash = crypto.sha1("1234567890"):fromHex()
-- 签名通常很慢, 通常是服务器做
local sig = rsa.sign((io.readFile("/luadb/privkey.pem")), rsa.MD_SHA1, hash, "")
log.info("rsa", "sign", sig and #sig or 0, sig and sig:toHex() or "")
if sig then
-- 验签是很快的
local ret = rsa.verify((io.readFile("/luadb/public.pem")), rsa.MD_SHA1, hash, sig)
log.info("rsa", "verify", ret)
end
end
--创建并且启动一个task
--运行这个task的处理函数rsa_task
sys.taskInit(rsa_task)