这是一台简易4G手机,主控基于合宙Air724UG模组,LuatOS二次开发,实现了通话、短信发送、播放音乐等等功能。
Air724UG是合宙通信推出的多功能LTECat.1模块,是4G全网通模块,采用紫光展锐的UIS8910平台,支持标准AT和LuatOS二次开发。
本次项目使用LuatOS二次开发将其直接作为主控,相对于常规的MCU+4G模块方案减少了成本和元器件,同时能更好的发挥其内部MCU性能。
MiniPhone已实现功能
02.短信发送
03.音乐播放
进入音乐APP界面,按右侧“↑”“↓”按键切换mp3文件(文件保存在sd卡的music文件夹里),按“*”号键播放和停止,按“#”键停止并退出。
04.一键指定呼叫
05.开关机及定时休眠
在关机状态,按住右侧电源按钮持续4秒手机开机,并显示开机动画。进入主菜单后,按住右侧电源按钮持续2秒弹出关机确认界面,按“*”号键关机,按“#”键返回。1分钟无按键操作,手机屏幕和按键灯熄灭,进入休眠状态以降低功耗。
06.游戏娱乐
进入游戏APP界面,有一个小鸟游戏。用“*”号键控制小鸟上升,很简单的一个游戏,按“#”键退出。
07.U盘模拟
手机接入电脑后会模拟出一个U盘,指向板上的sd卡,可以用来存放文件。
2
硬件说明
硬件上使用Air724UG模块作为主控,所有外设都接在模块上,主板采用4层板,阻容基本上是0402封装,整机外壳5X10cm,锂电池容量为1500mAH;板上预留了摄像头接口以及锂电池电量计芯片(未验证)。
手机正面是一块280X240的TFT液晶屏和12颗按键,按键采用的是6x6x7.2贴片带灯,套了数字按键帽,按键上的灯统一由Air724UG的一个PWM口控制。
侧面是3颗侧贴的轻触按钮,实现“上”、“下”、“开关机”功能。
底部是一个Type-C座和一个双色LED。Type-C口用于电池充电以及程序烧入,并且可以连接到PC用于模拟U盘,模拟的U盘目录指向手机上的SD卡。双色LED用于指示充电状态,红色表示充电,蓝色表示充满。
手机背面为扬声器位置开孔以及4个M2.5的固定孔位置。
3
软件说明
软件部分基于LuatOS-Air编写,LuatOS-Air=Lua+AT,是合宙嵌入式操作系统LuatOS在蜂窝物联网模组上推出的开源的二次开发框架。
LuatOS-Air将传统的AT命令用Lua语言封装成API,开发者可以通过调用API轻松便捷的实现SOCKET、MQTT、OTA、GPIO、I2C、SPI等功能。
紫光展锐8910平台的Cat.1模块底层core中跑的操作系统是FreeRTOS,core在启动过程中,会创建一系列的task。例如:音频、协议栈、串口等。
其中有一个task,用来加载Lua虚拟机,解析运行用户编写的Lua脚本,这个task我们称之为Luavirtualtask(另外在Lua脚本中,利用Lua的协程特性封装了一个sys.taskInit接口,借用了task的概念,实际上并不是真正的task)。
脚本中的所有应用,都运行在Luavirtualmachinetask中,属于单task应用。
本次工程代码用到了VOLTE高清通话、LVGL、浮点运算以及模拟U盘等功能,官方发布的core不满足需求,所以需要定制固件。
合宙官方提供了固件定制系统,针对用户不同功能使用场景,进行在线定制固件。满足用户功能定制化需求,同时也能最大化保留Lua运行和存储空间。
代码主要编写app应用层脚本,我将代码分为3个文件夹,分别为/main、/panel和/resources。
main文件夹部分是一些应用初始化以及UI加载等代码;
panel文件夹部分是每个应用app界面代码;
resources文件夹存放一些app图标、控件图片以及音频文件,尺寸较大的图片和文件存放在sd卡中。
UI基于LVGL库,LVGL是一个开源的图形库,它提供了创建嵌入式GUI所需的一切,具有易于使用的图形元素、漂亮的视觉效果和低内存占用的特点。基本上,大部分控制器(需要能够驱动显示屏)都适合运行LVGL。
最低要求如下:
C语言版本的LVGL支持触摸屏、鼠标、键盘、编码器、按钮等多种输入设备,合宙官方提供的demo是基于触摸屏的设计,移植到本工程改为按键输入时找不到group相对应的api,不知道是不是Lua版本的LVGL还未支持。目前是为所有界面编写了按键响应函数,这导致控件配合的不是很好。
4
软硬件调试
由于Air724UG模块背面有焊盘类似BGA,在焊接时需要借助加热台。先在焊盘上涂抹锡膏,放上模块进行加热,所以PCB板背面的元件先不要焊接!
焊好模块周边的元件以及USB口部分的元件,先烧入脚本进行测试模块背面焊盘是否焊接良好。背面焊盘主要是按键和摄像头以及LCD背光,摄像头预留暂时未写对应代码暂时不管,想用的可以用官方的demo测试。
按键可以用线短接来模拟测试。
主板与LCD板通过1.27间距的双排插座插针连接,这是为了检修以及安装方便。但是排针排座连接也增加了高度,为了参照按键的高度,我把LCD板上插针的黑色塑料部分拆了,剪短针长至4.5mm。
注意焊好后再去掉塑料部分是很困难的,在拔的过程中极有可能导致液晶屏损坏,所以最好先焊好排针最后焊液晶屏。
PCB板连接PC时需接上电池,否则TP4057可能工作不正常导致模块启不来。
手机侧面的第二个按钮是BOOT键,按住该键再重启即可进入BOOT模式。同时板上接出了一个重启按键,在裸板时可以协助调试。另外板上预留了串口接口,可以接出使用(未使用过,使用USB调试很方便)。
LuaTools工具可以打印日志,想输出哪些信息在脚本里调用log.info()即可:
烧入脚本程序重启后会发现没有开机动画,进入主界面也没有背景等问题。这是因为SD卡里没有对应文件。
用USB接上PC,会在PC端弹出一个U盘,该U盘指向的就是手机上的SD卡,将附件提供的music文件、message.json、calllist.json、wallpaper.png、wallpaper2.png和startupanimation.gif放入U盘,再重启就可以了。
如果PC端有提示U盘但是打不开,可能是SD卡格式损坏,将U盘快速格式化一遍就行了。
5
总结和待实现功能
之前做的一些关于4G模块的项目都是MCU+4G方案,初次了解到合宙的这种方案,感觉这是种趋势,在性能和成本上都要好于常规方案,配套的LuatOS框架也很大的提升了开发效率。
Lua作为一种脚本语言,可以很容易的被C/C++代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用。不仅仅作为扩展脚本,也可以作为普通的配置文件,代替XML、ini等文件格式,并且更容易理解和维护。
还有一些功能后续也会添加:
本工程依据“CC-BY-NC-SA4.0”知识共享许可协议,请勿用于商用,转载时请标明出处。