前言
简单记录华清远见STM32MP157这片开发板的学习经历,项目内容为智能猫眼,实现:
路线基本上是构建嵌入式Linux系统Buildroot、利用Qt设计嵌入式平台猫眼软件、利用微信小程序开发者工具设计手机端软件
开发环境
Vmware Ubuntu Xshell Stm32CubeProgrammer
华清远见STM32MP157开发板+智能猫眼源码
内容介绍
实现基本功能:
1.人脸识别: 区分主人和其他人
2.智能报警: 实时检测非法闯入,能够远程通知
3.红外侦测: 利用红外感应器辅助监测
4.物联网云端接入
1.Biludroot框架介绍
buildroot是一个开源项目,提供简化和自动化嵌入式Linux系统构建的框架。他允许用户根据特定需求定制并构建自己的嵌入式Linux系统,包括根文件、内核、引导加载程序和交叉编译工具链等。
-灵活和定制化
-自动化构建
-跨平台和交叉编译支持
-轻量和高效
-大量软件包支持
-活跃的社区支持
2.Buildboot目录结构介绍
-arch:存放和cpu架构相关的配置脚本,在制作交叉编译工具链 uboot 内核时起到重要作用;配置一般已经配置好
-board:存放与硬件相关的文件,如启动脚本、硬件相关配置文件
-boot:各种boot软件自动构建的脚本,比如uboot
-configs:已经定义好的配置文件,可以选择需要的配置文件构建Linux系统,通过makemenuconfig可以自己选配想要的内容,生成定制的配置文件
-dl:所有下载的软件包存储位置,如python gst
-docs:可以参考的配置文档
-fs:文件系统自动构建的脚本
-linux:内核自动构建的脚本
-output:make完生成文件都在output,比如生成的交叉编译工具链、uboot、根文件系统、内核镜像
-package:每个软件包构建规则和makefile文件,每个软件都是根据软件包命名
-support:固定的流程脚本
-system:文件系统目录和设备节点模板,会在编译时拷贝到output目录下制作成根文件系统root fs
-toolchain:构建交叉编译工具链,编译时会从这个文件夹调用交叉编译工具构建buildroot
3.编译buildroot源码
导入默认配置
make stm32mp157a_fsmp1a_V3.8_defconfig
编译buildroot,进入根目录操作
make
编译交叉编译工具
make sdk
大致完成整体构架,查看一下output文件夹
-build:如果需要添加新内容需要在build中删除需要改动的文件夹,已经存在的不会二次编译
-host:构造系统时生成的工具,构建目标系统的辅助工具
-images:各种压缩包,有交叉编译工具的,根文件系统的,设备树、镜像、uImage
-staging:暂存目录,头文件、库文件
-target:最后在开发板上生成的根文件系统,烧录后在开发板能看到相同内容
经过编译以后在output/images下可以找到可烧录镜像文件
4.安装交叉编译工具链
安装arm板交叉编译工具
复制arm-fsmp1x-linux-gnueabihf_sdk-buildroot.tar.gz到虚拟机,解压并到解压好的根目录下重定向编译工具:./reloctate-sdk.sh
这样,在解压文件根目录的bin文件夹下可以看到各种编译工具,其中常用的是gcc和g++编译工具
安装qt编译工具
把meta-toolchain-qt5-openstlinux-eglfs-fsmp1a-x86_64-toolchain-3.1-snapshot.sh文件复制ubuntu中,先给权限后安装:
sudo chmod a+x meta-toolchain-qt5-openstlinux-eglfs-fsmp1a-x86_64-toolchain-3.1-snapshot.sh
sudo ./meta-toolchain-qt5-openstlinux-eglfs-fsmp1a-x86_64-toolchain-3.1-snapshot.sh
安装完后要source一下
source /opt/st/fsmp1a/3.1-snapshot/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi
最后输入指令就可以查看交叉编译工具链的信息
$CC --version
5.配置Qt
ubuntu安装qt
导入sdk(解压缩后记得重定向 ./relocate-sdk.sh),通过sdk可以让x86架构写出来的代码给arm使用
这里将arm-fsmp1x-linux-gnueabihf_sdk-buildroot.tar.gz文件拷贝至Ubuntu,解压;解压出来bin/文件夹中gcc和g++便是接下来要用的编译器文件;进入qt,option-compiler-Add添加编译工具的路径
6.镜像烧写
将开发板拨码开关置000,插上mini线,镜像一般在buildroot下output文件夹中,烧写过程和信息可以在串口调试助手看到
-在windows下烧录:上电连接电脑后打开stm32cubeprogrammer;连接connect后选择烧写镜像,注意检查路径;利用串口调试工具可以在xshell中检查数据传输的过程;在stm32cubeprogrammer点击download开始烧录;
-在ubuntu下烧录:(待补充
这个镜像里已经带有本次项目—智能猫眼的一些代码和必备的前置
烧录完后断开电源和mini线,拨码开关置010(sdcard就101)
7.创建第一个qt程序 hello
在ubuntu中打开qtcreator,新建Application,在代码界面可以点击Debug查看是否选择了正确的交叉编译工具;点击锤子完成编译,然后就可以在编译文件目录中看到hello文件夹和build-hello文件夹,在build-hello文件夹中有一个名称为hello的可执行文件,将这个文件拷贝到开发板中
-利用网线将电脑和开发板进行连接(具体来连接参考:https://www.rstk.cn/news/746754.html?action=onClick
在ubuntu中输入 scp hello root@192.168.0.100:~ 就将hello文件输入到文件夹下,在Xshell路径下输入./hello发现屏幕变成白色,第一个Qt程序开发成功。
8.微信小程序设计
##############################
智能猫眼项目内容
1.取消默认桌面
vi /usr/share/applications/desktopsystem/desktopstart.sh
将desktopstart.sh文件中默认桌面代码注释
2.同步系统时间
(1)要实现猫眼首先时间应该同步时区,要利用利用ntp协议。首先复制Ubuntu中ntp.conf到开发板上,然后发送时区文件Shanghai到开发板的/usr/share/zoneinfo/下
scp Shanghai root@192.168.0.100:/usr/share/zoneinfo/Asia/
此时文件已准备,接下来实现开发板联网
(2)后发现联网后可以直接修改时区达到更新时间的目的,应该是因为烧录镜像内ntp已经做好修改ntp.conf的操作:
timedatectl set-timezone Asia/Shanghai
3.开发板联网
常见开发板联网有两种方法,一个是利用网线直连路由器,实现IP自动分配从而达到联网的效果;第二个是利用开发板上的wifi模块,因为没有路由器直接选择wifi模块。
首先写一份脚本用于调用wifi模块:
#!/bin/bash
wpa_supplicant -D nl80211 -i wlan0 -c /etc/wpa_supplicant.conf -B
wpa_cli -i wlan0 scan
wpa_cli -i wlan0 add_network
wpa_cli -i wlan0 set_network 1 ssid '"Magic5"'
wpa_cli -i wlan0 set_network 1 psk '"123456788"'
wpa_cli -i wlan0 select_network 1
udhcpc -i wlan0
echo "nameserver 114.114.114.114" > /etc/resolv.conf
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
~
start_wifi.sh [+] 6,47 All
-- INSERT --
在ssid和psk输入wifi名称以及密码即可
把文件传到开发板家目录下:scp start_wifi.sh root@192.168.101.200:~
启动脚本:./start_wifi.sh
(不行就重试几次
4.用例程代码试跑一下先
来到提前写好的代码路径:
cd /usr/share/applications/smartfirealarm/