【嵌入式Linux应用开发】基于STM32MP157的智能疫情监控

1. 介绍说明
本设计可实时展示全国和本地的新冠疫情信息,有针对地做好防疫措施,尽可能提高防疫的积极性,减少感染风险。
本设计的实现基于深圳百问网科技的STM32MP157开发板,外接有LCD屏幕、DS18B20温度传感器,程序由C语言编写,运行嵌入式Linux系统,图形界面采用了LittleVGL库。实现的功能不限于:

  1. 显示全国疫情信息
  2. 显示本地疫情信息
  3. 显示北京时间
  4. 显示当前温度

可用于公共场合进行信息展示。如悬挂于商场、电梯内、银行等等各种公共场合。集成了时钟与温度计的功能,在显示疫情信息的同时也能达到时间与温度显示的功能。

2.硬件准备

  • STM32MP157开发板及Typec-C等配件(必需)
  • 7寸LCD屏(必需)
  • STM32MP157转接板+DS18B20模块(可选)

3.恢复系统
为了保证开发板环境一致,这里先烧写出厂镜像,恢复出厂系统。出厂镜像在开发板配套资料的路径为:“02_Images(开发板系统镜像)\Buildroot_2020”。
(以下操作、接线的详细步骤,参考《完全手册》第十一章:更新开发板系统)
开发板连接好串口线和USB线,切换为USB启动,重启进入USB下载模式。
打开“STM32CubeProgrammer”,选择“USB”连接,配置文件选择“Flashlayout”下的“Buildroot_Emmc_Systemall.tsv”,文件路径选择“100ASK_STM32MP157_PRO开发板(同步)\02_Images(开发板系统镜像)\Buildroot_2020\”,如下图所示。
STM32CubeProgrammer V2.8 以上可能遇到中文路径闪退,需修改去掉文件路径)

4.快速体验
将“3.运行文件”里面的“app.tar”复制到开发板“/root”目录,执行以下命令解压运行,边可启动程序,快速体验效果。(需使用转接板连接DS18B20模块,才能正常显示温度)

[root@100ask:~]# tar xf app.tar
[root@100ask:~]# ./install.sh


5.功能框架


6.源码编译
以下源码编译,需先参考《完全手册》配置交叉编译工具链和编译内核,需要一定的嵌入式Linux基础知识,建议学员先学习基础课程后,再研究编译过程和源码。
1. 添加 SDL2
在Ubuntu执行以下命令:

book@100ask:~$ cd ~  && mkdir test && cd test
book@100ask:~$ curl -O https://www.libsdl.org/release/SDL2-2.0.12.tar.gz
book@100ask:~$ tar xzf SDL2-2.0.12.tar.gz && cd SDL2-2.0.12
book@100ask:~$ mkdir tmp 
book@100ask:~$./configure --prefix=`pwd`/tmp --host=arm-buildroot-linux-gnueabihf 
book@100ask:~$ make
book@100ask:~$ make install
book@100ask:~$ cp /home/book/test/SDL2-2.0.12/tmp/lib/* /home/book/100ask_stm32mp157_pro-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/lib

最后需要将“/home/book/test/SDL2-2.0.12/tmp/lib/”下所有文件,复制到开发板的“/lib”目录下

2.添加 OpenSSL
在Ubuntu执行以下命令:

book@100ask:~$ cd ~/test
book@100ask:~$ curl -O https://www.openssl.org/source/old/1.1.1/openssl-1.1.1k.tar.gz
book@100ask:~$ tar xzf openssl-1.1.1k.tar.gz && cd openssl-1.1.1k
book@100ask:~$ mkdir tmp 
book@100ask:~$ setarch i386 ./config no-asm shared --prefix=`pwd`/tmp --cross-compile-prefix=arm-buildroot-linux-gnueabihf-
book@100ask:~$ make
book@100ask:~$ make install

最后需要将“/home/book/test/openssl-1.1.1k/tmp/lib”下所有文件,复制到开发板的“/lib”目录下。

3.添加 curl
在Ubuntu执行以下命令:

book@100ask:~$ cd ~/test
book@100ask:~$ curl -O https://curl.se/download/curl-7.80.0.tar.gz
book@100ask:~$ tar xzf curl-7.80.0.tar.gz && cd curl-7.80.0
book@100ask:~$ mkdir tmp 
book@100ask:~$ ./configure --prefix=`pwd`/tmp --host=arm-buildroot-linux-gnueabihf  --with-ssl=/home/book/test/openssl-1.1.1k/tmp
book@100ask:~$ make
book@100ask:~$ make install

最后需要将“/home/book/test/curl-7.80.0/tmp/lib”下所有文件,复制到开发板的“/lib”目录下。

4.添加 ntpdate
在Ubuntu执行以下命令:

book@100ask:~$ cd ~/test
book@100ask:~$ curl -O https://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-4.2/ntp-4.2.8p15.tar.gz
book@100ask:~$ tar xzf ntp-4.2.8p15.tar.gz && cd ntp-4.2.8p15
book@100ask:~$ mkdir tmp 
book@100ask:~$ ./configure --prefix=`pwd`/tmp --host=arm-buildroot-linux-gnueabihf --with-yielding-select=yes
book@100ask:~$ make
book@100ask:~$ make install

最后需要将“/home/book/test/ntp-4.2.8p15/tmp/bin”下所有文件,复制到开发板的“/bin”目录下。

5,编译 DS18B20 驱动
打开“DS18B20驱动源码”,将驱动文件“ds18b20_drv.c”和“Makefile”都复制到Ubuntu,执行“make”编译,得到“ds18b20_drv.ko”

6.编译显示程序
打开“APP工程源码”,将所有文件都复制到Ubuntu,执行“make”编译,得到“yiQingDisplayV1”。

7.设置本地经纬度
创建“qlbs.txt”,内容如下:



+QLBS: 0,114.130996,22.654713



OK

其中,“114.130996,22.654713”为经纬度信息,使用https://www.toolnb.com/tools/gps.html等类似在线工具,可获取当前地区经纬度替换。

最后,参考前面“4.快速体验”里“app.tar”解压的内容和“install.sh”的配置。

7.改进展望

1.GPS 数据
本设计的经纬度信息由手动设置,后期可由GPS模块获取改进。

2.温度传感器
本设计使用DS18B20温度传感器获取环境温度,可尝试其它传感器,比如红外获取人体温度,兼具温度采集显示的功能。

完整演示和资料下载:基于LVGL智能疫情监控项目

1 个赞