STM32的电动自行车信息采集上报系统(学习)

摘要

针对电动自行车实时监管不便的问题,设计了一种基于STM32的电动自行车信息采集系统,通过获取电池、位置和行驶状态信息并上报到服务器中,实现实时监管。

通过多路串口请求电池、行驶状态和位置信息,以并发方式进行数据接收、解析、模块控制和数据上报等操作;

为方便系统软件升级,将系统存储器分为Bootloader区、APP区、Download区和数据区,并设计了Bootloader,使系统具有在线升级功能。

引言

目前,电动自行车在我国市场上有很大的保有量,给人们的生产生活带来了便利,但也存在违规停放、超速、被盗等问题,因此如何实时监督电动自行车是当下亟待解决的问题。

监管电动自行车需要实时获取它们的位置、行驶状态、电池状态等信息由电池管理系统输出。

根据STM32单片机高性能、低功耗的特点,结合开源嵌入式操作系统RT-Thread上下文切换速度快、体积小、实时性好的优势,利用STM32搭载RT-Thread操作系统,以并发的方式采集和缓存位置、行驶状态、电池状态等相关数据后上报到服务器中并监测,实现了电动自行车的实时监管。

总体设计

系统可以分为主控模块、蓝牙广播模块、GPS模块、4G模块、内部电压监测模块。

主控模块包括单片机、外部FLASH和RS485接口电路,负责解析接收的数据,缓存后发送至上传模块,同时控制系统通过串口进行本地升级或通过4G网络进行在线升级。

行驶里程和登录服务器的账号密码是系统掉电后不能消失的数据,需要保存到外部Flash中。

单片机通过RS485串口发送请求帧,向控制器和电池管理系统请求数据,在接收到控制器和电池管理系统发送的数据帧后进行解码,获取行驶状态和电池状态等。

GPS模块使用GPS获取系统当前位置信息,通过串口发送至主控模块,主控模块将数据解码后获取电动自行车的位置信息。

由于系统每次上传的数据量少,场景变化大且要尽量节省流量,因此使用MQTT协议进行数据传输。
4G模块在4G网络下通过MQTT协议将主控模块发送的数据上传到服务器中,考虑功耗因素,每30s上报一次。

加入内部电池使系统在电动车停车或故障后依然可以工作。
ACC有效时,外部电池给系统供电,同时主控模块开启充电模块,内部电池充电;ACC无效时关闭充电模块。

电压监测模块负责监测内部电池电压,由单片机通过IIC接口控制,在内部电池电量低于20%时,关闭内部电池供电,防止内部电池过度放电。

在这里插入图片描述
分区设计
首先对存储程序和数据的Flash进行分区

在这里插入图片描述

Bootloader程序设计

Bootloader是一段被固化在内部Flash的APP区,是系统上电复位后最先执行的程序。

上电复位后,首先检查更新标志位,如果有更新标志,将程序从外部Flash的Download区复制到内部Flash的APP区,再关闭所有中断,防止由于静电干扰触发中断信号导致跳转失败,然后跳转到APP区的起始地址。

在这里插入图片描述

盲区缓存程序设计

如果设备进入网络盲区,采集到的数据便无法发出,影响电动自行车的监测,所以需要保存盲区中的数据并在离开网络盲区后依次发送。

考虑到电动自行车大多在有网络覆盖的区域行驶,进入盲区的时间很少,所以在盲区中保存200帧每种类型的数据,即保存100分钟的数据。当数据多于200帧后,从第1帧开始依次覆盖。设备离开盲区后依次发出缓存的数据,如果在发送过程中采集到了新的数据,则先将新数据保存,等盲区中的数据发送完成后再发送新数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/24207.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Podman Desktop安装与使用-Windows10

下载 containers/podman 地址 Podman Desktop Downloads 地址 我这里演示的是podman-v4.4.4.msi和podman-desktop-0.13.0-setup.exe 安装 先决条件:由于 Podman 使用 WSL,因此您需要最新版本的 Windows 10 或 Windows 11。在 x64 上,WSL…

centos 7 系统上重启 mysql 时报错 Failed to restart mysqld.service: Unit not found.

在 centos 7 系统上,使用常规命令:systemctl restart mysql 或 service mysqld restart 重启 mysql 时都会报如下错误: Failed to start mysqld.service: Unit not found. 根据所报错误,在网上搜罗了一圈,未果&#x…

【Unity3D应用案例系列】Unity3D中实现文字转语音的工具开发

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 在开发中,会遇到将文字转语音输出的需求&#xff0…

Stable Diffusion系列课程二:ControlNet

AUTOMATIC1111/stable-diffusion-webui参考B站Nenly视频《零基础学会Stable Diffusion》、视频课件推荐网站:stable-diffusion-art、Civitai(魔法) 、libilibi、AI艺术天堂推荐Stable Diffusion整合资料: NovelAI资源整合、《AI绘…

Vivado使用入门之一:Schematic图

目录 一、前言 二、Schematic类型 2.1 Schematic分类 2.2 RTL ANALYSIS 2.3 SYSTHESIS 2.4 IMPLEMENTATION 三、Schematic功能 3.1 界面工具栏 3.2 右键功能项对比 3.3 右键功能项说明 3.4 逻辑图界面 一、前言 在一个设计中,有时因定位或其他原因需要去查…

MySQL字段类型与存储空间的关系

在 MySQL 中,对于整数类型(如 INT)、字符类型(如 VARCHAR)、浮点数类型(如 DOUBLE)等,参数(括号中的数字或长度)通常用于限制数据的范围或精度,但…

【IMX6ULL驱动开发学习】22.IMX6ULL开发板读取ADC(以MQ-135为例)

IMX6ULL一共有两个ADC&#xff0c;每个ADC都有八个通道&#xff0c;但他们共用一个ADC控制器 1.设备树 在imx6ull.dtsi文件中已经帮我们定义好了adc1的节点部分信息 adc1: adc02198000 {compatible "fsl,imx6ul-adc", "fsl,vf610-adc";reg <0x0219…

【Java】智慧工地管理系统源码(SaaS模式)

智慧工地是聚焦工程施工现场&#xff0c;紧紧围绕人、机、料、法、环等关键要素&#xff0c;综合运用物联网、云计算、大数据、移动计算和智能设备等软硬件信息技术&#xff0c;与施工生产过程相融合。 一、什么是智慧工地 智慧工地是指利用移动互联、物联网、智能算法、地理信…

elementUi重置Select选择器样式、option、deep、vue3、plus

文章目录 前言select选框样式(element-plus)option选项面板样式(element-plus) 前言 样式标签属性为<style scoped lang"scss"></style> select选框样式(element-plus) // 设置选择框的背景样式 ::v-deep .el-input__wrapper {background: transparent;b…

向日葵远程情况下VS2019黑屏问题解决办法

文章目录 一. 电脑在身边情况下二. 只能远程情况下 一. 电脑在身边情况下 直接操作远程的电脑&#xff0c;打开vs&#xff0c;选择工具&#xff0c;点击选项 选择常规&#xff0c;取消勾选 二. 只能远程情况下 远程通过VS打开一个项目&#xff0c;可以看到一片空白 选中VS…

mysql的collations

在 MySQL 数据库中&#xff0c;Collation&#xff08;排序规则或字符集排序规则&#xff09;是用于指定字符集的字符比较和排序方式的一组规则。它决定了在比较和排序字符时&#xff0c;字符的顺序、大小写敏感性、重音符号等特性。 每个 MySQL 数据库都有一个默认的字符集和排…

数据库简介

1、数据库安装: rpm (redhat package manager) 也是个包管理工具: rpm -ivh 安装 rpm -e 表示卸载,卸载的时候有可能出现依赖的问题,可以用 --nodeps 忽略依赖卸载。 rpm -qa 搜索系统中安装的rpm的应用。 如果使用离线包,安装顺序不要乱。 m…

【java安全】CommonsBeanUtils1

文章目录 【java安全】CommonsBeanUtils1前言Apache Commons BeanutilsBeanComparator如何调用BeanComparator#compare()方法&#xff1f;构造POC完整POC 调用链 【java安全】CommonsBeanUtils1 前言 在之前我们学习了java.util.PriorityQueue&#xff0c;它是java中的一个优…

SpringIOC注入的两种方式讲解以及代码示例

Ioc是Spring全家桶各个功能模块的基础&#xff0c;创建对象的容器。 AOP也是以IoC为基础&#xff0c;AOP是面向切面编程&#xff0c;抽象化的面向对象 AOP功能&#xff1a;打印日志&#xff0c;事务&#xff0c;权限处理 AOP的使用会在下一篇文章进行介绍 IoC 翻译为控制反…

filebeat kibana elasticsearch 日志监控

解压三个压缩包 一、filebeat的安装部署 1、打开filebeat的配置文件 2、Filebeat inputs 处打开日志输入开关&#xff0c;设置要监控的路径 3、Outputs 输出中设置Elasticsearch output的输出地址 4、配置kibana 的地址 5、执行 ./filebeat setup -e 二、Elasticsearch 安装…

Debian 系列 Linux 的静态 DNS 、gateway 、IP 设置和网络重启

文章目录 DNS 设置DNS 配置文件DNS 配置文件内容 gateway、IP 设置网络适配器配置文件网络适配器配置文件内容 网络重启 各个 Linux 发行版的网络设置有很大不同。根据最近对 Debian 系列&#xff08;含 Debian 12、基于 Debian 12 的Proxmox 8.0-2 以及基于Debian 11 的 openm…

electron+vue3全家桶+vite项目搭建【25】使用electron-updater自动更新应用

文章目录 引入实现效果实现步骤引入依赖配置electron-buidler文件封装版本升级工具类主进程调用版本更新校验渲染进程封装方法调用 测试版本更新 引入 demo项目地址 electron-updater官网 我们不可能每次发布新的版本都让用户去手动下载安装最新的包&#xff0c;而是应用可以…

通过easyui实现动态控制表格字段显示、导出表格数据

前言 学过layui前端框架的都知道&#xff0c;layui默认帮我们实现了控制表格字段显示以及数据的导出功能。 1、控制表格字段显示 2、数据导出 3、导出为pdf&#xff1a;导出按钮的右边那个按钮就是打印pdf的 那么&#xff0c;easyui要怎么实现这些功能呢&#xff1f;这篇文章就…

vue2-vue项目中你是如何解决跨域的?

1、跨域是什么&#xff1f; 跨域本质是浏览器基于同源策略的一种安全手段。 同源策略&#xff08;sameoriginpolicy&#xff09;&#xff0c;是一种约定&#xff0c;它是浏览器最核心也是最基本的安全功能。 所谓同源&#xff08;即指在同一个域&#xff09;具有以下三个相同点…

学C的第三十二天【动态内存管理】

相关代码gitee自取&#xff1a;C语言学习日记: 加油努力 (gitee.com) 接上期&#xff1a; 学C的第三十一天【通讯录的实现】_高高的胖子的博客-CSDN博客 1 . 为什么存在动态内存分配 学到现在认识的内存开辟方式有两种&#xff1a; 创建变量&#xff1a; int val …