模块信息(hmeta)
一、模块信息概述
模块信息是合宙每一个模块携带的信息,就像人的身份证一样,这些信息确定了模块的唯一性;
包含设备唯一 id,硬件型号,模组的硬件版本号,固件版本号等;
模块远程升级需要上传模块信息,解决和分析某些问题的时候可能也会需要确认模块信息.
二、演示功能概述
使用 Air201模组烧录底层固件(LuatOS-SoC_V2002_Air201.soc)和 hmeta 例程脚本学习有关模块信息的 api 函数.
三、硬件准备
3.1 Air201模组
使用 Air201 模组,如下图所示:
点击链接购买:合宙Air201模组淘宝购买链接 ;
此模组的详细使用说明参考:Air201 产品手册 。
3.2 SIM 卡
中国大陆环境下,可以上网的 sim 卡,一般来说,使用移动,电信,联通的物联网卡或者手机卡都行.
3.3 PC 电脑
请准备一台配备 USB 接口且能够正常上网的电脑。
电脑操作系统为:WIN10以及以上版本的WINDOWS系统。
3.4 数据通信线
USB 数据线.
四、软件环境
4.1 Luatools 工具
要想烧录 LuatOS 固件到 4G 模组中,需要用到合宙的强大的调试工具:Luatools;
详细使用说明参考:Luatools 工具使用说明 .
Luatools 工具集具备以下几大核心功能:
- 一键获取最新固件:自动连接合宙服务器,轻松下载最新的合宙模组固件.
- 固件与脚本烧录:便捷地将固件及脚本文件烧录至目标模组中.
- 串口日志管理:实时查看模组通过串口输出的日志信息,并支持保存功能.
- 串口调试助手:提供简洁的串口调试界面,满足基本的串口通信测试需求.
Luatools 下载之后, 无需安装, 解压到你的硬盘,点击 Luatools_v3.exe 即可运行.
4.2 准备需要烧录的代码
首先要说明一点: 脚本代码, 要和固件的 soc 文件一起烧录.
4.2.1 烧录的底层固件文件
官网下载,底层 core 下载地址:LuatOS 底层 core 注:本 demo 使用如图所示固件
4.2.2 烧录的脚本代码
首先要下载 Air201 的 LuatOS 示例代码到一个合适的项目目录,示例代码网站: LuatOS-Air201LuatOS源码
下载流程参考下图:
下载的文件解压,找到 LuatOS-Air201-master\demo\hmeta\main.lua,如图:
五、API 说明
5.1 mcu.unique_id()
获取设备唯一 id.
参数
无
返回值
返回值类型 | 解释 |
---|---|
string | 设备唯一 id |
例子
--注意,可能包含不可见字符,如需查看建议 toHex()后打印
sys.taskInit(function()
local unique_id = mcu.unique_id()
log.info("unique_id", unique_id:toHex())
-- 实例输出:unique_id 4A5139383707942E55FF 20
end)
5.2 mobile.imei(index)
获取设备 IMEI
参数
传入值类型 | 解释 |
---|---|
int | 编号,默认0. 在支持双卡的模块上才会出现0或1的情况 |
返回值
返回值类型 | 解释 |
---|---|
string | 设备 IMEI |
例子
--4G 模组只支持双卡单待/单卡,只有一个 IMEI,可以通过 mobile.imei()直接获取
sys.taskInit(function()
-- 获取 IMEI
log.info("imei", mobile.imei())
-- 实例输出:imei 866374063853768
end)
5.3 hmeta.model()
获取硬件型号
参数
无
返回值
返回值类型 | 解释 |
---|---|
string | 若能识别到,返回硬件型号, 否则会是 nil |
例子
sys.taskInit(function()
log.info("hmeta-model", hmeta.model())
-- 实例输出:hmeta-model Air780E
end)
5.4 rtos.bsp()
获取硬件 bsp 型号
参数
无
返回值
返回值类型 | 解释 |
---|---|
string | 硬件 bsp 型号 |
例子
sys.taskInit(function()
log.info("rtos.bsp", rtos.bsp())
-- 实例输出:rtos-bsp EC618
end)
5.5 hmeta.hwver()
获取模组的硬件版本号
参数
无
返回值
返回值类型 | 解释 |
---|---|
string | 若能识别到,返回模组的硬件版本号, 否则会是 nil |
例子
sys.taskInit(function()
log.info("hmeta", hmeta.hwver and hmeta.hwver())
-- 实例输出:hmeta A16
end)
5.6 rtos.version()
获取固件版本号
参数
无
返回值
返回值类型 | 解释 |
---|---|
string | 固件版本号 |
例子
sys.taskInit(function()
log.info("luatos_version ", rtos.version())
-- 实例输出:luatos_version V1112
end)
六、功能验证
6.1 烧录固件
6.1.1 正确连接电脑和 4G 模组电路板
使用带有数据通信功能的数据线,不要使用仅有充电功能的数据线.
6.1.2 识别 4G 模组的 BOOT 引脚
Air201进入boot下载模式,烧录固件和程序,需要将预留的测试点(Air201板子 B面图) 的BOOT 上拉到vdd_ext(A面USB旁边),之后上电开机,即可进入下载模式,下载完程序后将boot脚悬空。
Air201板子 A面图
Air201板子 B面图
6.1.3 识别电脑的正确端口
判断是否进入 BOOT 模式:模块上电,此时在电脑的设备管理器中,查看串口设备, 会出现一个端口表示进入了 BOOT 下载模式,如下图所示:
6.1.4 用 Luatools 工具烧录
- 新建项目
首先,确保你的 Luatools 的版本,大于等于 3.0.6 版本的.
在 Luatools 的左上角上有版本显示的,如图所示:
Luatools 版本没问题的话, 就点击 Luatools 右上角的“项目管理测试”按钮,如下图所示:
这时会弹出项目管理和烧录管理的对话框,可以新建一个项目,如下图:
- 开始烧录
选择 201 板子对应的底层 core 和刚改的 main.lua 脚本文件.下载到板子中.
点击下载后,我们需要进入 BOOT 模式才能正常下载.
如果没进入 BOOT 模式会出现下图情况:
进入 BOOT 模式下载,如图:
6.2 例程
本库有专属 demo,点此链接查看 module 的 demo 例子
-- LuaTools需要PROJECT和VERSION这两个信息
PROJECT = "module_demo"
VERSION = "1.0.0"
-- sys库是标配
_G.sys = require("sys")
sys.taskInit(function()
while hmeta do
-- hmeta识别底层模组类型的
-- 不同的模组可以使用相同的bsp,但根据封装的不同,根据内部数据仍可识别出具体模块
log.info("hmeta", hmeta.model(), hmeta.hwver and hmeta.hwver())
log.info("bsp", rtos.bsp())
local unique_id = mcu.unique_id()
log.info("unique_id", unique_id:toHex())
-- 实例输出:unique_id 3539333139071F1E4330 20
log.info("luatos_version ", rtos.version())
-- 实例输出:luatos_version V1112
sys.wait(3000)
end
log.info("这个bsp不支持hmeta库哦")
end)
-- 用户代码已结束---------------------------------------------
-- 结尾总是这一句
sys.run()
-- sys.run()之后后面不要加任何语句!!!!!
6.3 对应 log
七、总结
通过本章学习,你可以学习到模块唯一 ID,模块硬件型号,固件版本,硬件版本的获取方法.
八、常见问题
8.1 模块唯一 ID 文档
mobile.sn()获取 SN,出厂未必有写 SN; 一般用途的唯一 id, 可以用 mobile.imei()代替; 如需要真正的唯一 ID, 使用 mcu.unique_id()