|
宣传语:
是相框,也是日历; 可以放在床头,也可以摆在桌上; 记录你的欢乐,也懂得你的冷暖~
正式点的介绍:
电子相框是显示数码照片而非纸质照片的相框。与传统的纸质相框相比,它具有可自由打印,易于更新和可回收的优点。
在本项目中,我在STM32H745开发板上实现了基于RT-Thread和LVGL的网络天气数码相框。天气查询使用了高德的云服务,服务端是高德提供的开放接口,客户端是自己开发的。另外,由于ST和RT-Thread官方均没有对STM32H745上运行RT-Thread做支持,本项目也可以作为STM32H745上运行RT-Thread的基础版本。由于RT-Thread和LVGL的轻量性,该项目可以很容易地移植到类似的成本较低的硬件方案上。
本项目是 【赋能物联网——2022得捷创新设计大赛】 参赛项目,大赛链接:https://www.eeworld.com.cn/huodong/digikey_iot_contest_2022/?sid=102
作品帖首发于电子工程师世界论坛EEWorld.com,详情请移步论坛的大赛专区:https://bbs.eeworld.com.cn/forum-275-1.html
整个作品中,硬件部分包括:
STM32H745-DISCO开发板,作为主控,同时使用了板上的按键、液晶触摸屏、eMMC、SDRAM等外设;
ESP-01S模组,用于实现Wi-Fi联网;
主控STM32H745片上硬件资源使用了GPIO、UART、I2C、LTDC、SDMMC、FMC,分别用于实现:
GPIO,用于支持用户按键;
UART,和ESP-01S模组连接,用于实现WiFi联网;
I2C,和触摸屏的触摸信号连接,用于支持屏幕触摸;
LTDC,和液晶屏LCD接口连接,用于支持图形用户界面(GUI)显示;
SDMMC,和eMMC存储芯片连接,用于支持文件系统,实现保存图片文件、配置信息;
FMC,和SDRAM芯片连接,用于扩展RAM空间,实现图片文件加载到内存;
软件主要功能划分如下:
软件整体基于RT-Thread操作系统,使用了系统自带的一些组件和一些外加软件包。
业务功能通过几个线程实现:
界面线程
按键线程
网络线程
图片扫描线程(其实不用独立线程也可以,所以图上就没画出来了)
每个线程具体执行的工作如图中的文字描述;
本节描述相关功能的软件实现原理。
由于RT-Thread目前还不支持STM32H745芯片,这部分主要开发工作包括:
RT-Thread系统移植;
基础外设支持(串口、片上SRAM、片上Flash);
本项目中 ,这部分主要工作在于移植了RT-Thread系统最小系统。
图形用户界面主要基于开源的LVGL,以RT-Thread软件包形式集成到项目上。这部分除了LVGL开源代码外,本项目开发的部分有:
添加了STM32H745-DISCO开发板的LCD屏幕对接LVGL;
添加了STM32H745-DISCO开发板的触摸对接LVGL;
添加了STM32H745-DISCO开发板的SDRAM芯片支持,用于支持显示png图片;
添加了LVGL测试界面(benchmark、music、widgets);
添加了作评的两个业务界面代码;
本项目中 ,这部分主要工作在于为LVGL开发了显示、触摸驱动、SDRAM支持,以及完成业务界面代码。
配置和照片保存,主要实现方式:
为STM32H745-DISCO开发板的eMMC添加了RT-Thread块设备驱动;
将eMMC块设备格式化为FATFS格式;
添加了开机自动挂载eMMC到/mnt目录;
添加了FlashDB软件包,用于支持用户配置保存;
创建了/mnt/kvdb目录,用于保存用户配置的kvdb文件;
创建了/mnt/img目录,用于保存照片;
本项目中 ,这部分主要工作在于为eMMC开发了RT-Thread驱动,以及实现了业务数据、图片文件的存储。
联网和天气查询,主要实现方式:
添加了搜狐IP查询,实现查询当前公网IP地址;
添加了高德定位,实现根据公网IP地址定位大概位置(可以精确到行政区县级别);
添加了高德天气,实现根据所在区县查询当前天气;
开启了RT-Thread的SAL组件、at_socket组件,用于和at_device对接;
添加了at_device软件包,用于构造esp8266 AT命令,以及解析esp8266 AT的输出;
配置了UART2,用于支持ESP-01S模组的输入输出;
本项目中 ,这部分主要工作在于开发了搜狐IP查询、高德定位、高德天气客户端代码,以及实现了WiFi联网等相关业务的实现。
图片传到设备,主要实现方式:
通过WiFi网络,使用TFTP协议;
设备端使用,RT-Thread的netutils软件包,提供了TFTP服务的实现,只需要打开相应配置即可;
PC端借助已有的TFTP客户端(如Linux的tftp命令,Windows MobaXterm也有tftp命令);
本项目中 ,这部分主要工作在于大量调试工作。
默认情况下:
开发板的STMOD#2连接的是PB15(通过SB13零欧电阻),STMOD#3连接的是PI2(通过SB11零欧电阻):
需要修改为:去除SB11和SB13两个零欧电阻,短接SB12和SB16两个空位;
修改后实物图:
前面已经介绍了,模组用的ESP-01S(很容易买到)。
连接方式如下图:
(图中右下角黑色的是ESP-01S模组,蓝色是开发板附赠的STMod扩展板)
源码仓库: javascript:;
演示视频: javascript:;
感谢得捷赞助本次大赛。
项目开发初期决定使用RT-Thread实时操作系统(RTOS)和LVGL图形用户界面(GUI)框架,不是ST官方CubeMX工具已经支持的FreeRTOS和STemWin,同时RT-Thread官方也尚未支持STM32H745芯片和开发板。因此,整个开发过程中,底层驱动的支持部分的难度和工作量均比预想的要大。
因为官方的CubeMX工具支持的FreeRTOS中所有片上硬件资源以及板载外设均已经支持了,而且经过了官方开发人员的测试验证。使用RT-Thread和LVGL,所有片上硬件和板上外设驱动需要自己移植、开发、验证。期间因为硬件功能调试,查阅了大量资料,花费了很多时间和精力。
另外,也正是因为使用了RT-Thread和LVGL,这一套非官方支持的基础技术架构。顺便复习了很多硬件相关的知识点,同时实操了RT-Thread的驱动开发,这也是过程中收获或者收益最大的内容。