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 逻辑图界面 一、前言 在一个设计中,有时因定位或其他原因需要去查…

【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;与施工生产过程相融合。 一、什么是智慧工地 智慧工地是指利用移动互联、物联网、智能算法、地理信…

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

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

【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 安装…

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 …

C# Blazor 学习笔记(0.1):如何开始Blazor和vs基本设置

文章目录 前言资源推荐环境如何开始Blazor个人推荐设置注释快捷键热重载设置 前言 Blazor简单来说就是微软提供的.NET 前端框架。使用 WebAssembly的“云浏览器”&#xff0c;集成了Vue,React,Angular等知名前端框架的特点。 资源推荐 微软官方文档 Blazor入门基础视频合集 …

vscode无法连接远程服务器的可能原因:远程服务器磁盘爆了

vscode输入密码后一直等待&#xff0c;无法进入远程服务器终端&#xff1a; 同时Remote-SSH输出包含以下内容 在日志中的以下几个部分&#xff1a; [17:15:05.529] > wget download failed 这表明VS Code尝试在远程服务器上下载VS Code服务器时失败了。> Cannot write…

【vue】vue 里面使用 v-html 插入的文本带有换行符‘\n‘不换行

最近开发vue2 项目 &#xff0c;接口返回的是类似于这样的数据&#xff1a;我是第一行的哦\n我是第二行的哦 我是直接这样渲染的&#xff0c; //html <p v-htmltext></p>//渲染值 this.text "我是第一行的哦\n我是第二行的哦"但结果却是不如意&#x…

Linux系统部署Python语言开发运行环境

目录 Ubuntu自带python Debian安装python 安装 pip 库列表 安装第三方库 使用国内镜像站 实装 tkinter 库 编写运行代码 测试代码1 1. 创建项目 2. 创建源码文件 3. 写入源代码 4. 修改权限 5. 运行代码 测试代码2 本文的使用环境是Windows的Linux 子系统&…

ChatGPT: 人机交互的未来

ChatGPT: 人机交互的未来 ChatGPT背景ChatGPT的特点ChatGPT的应用场景结论 ChatGPT ChatGPT是一种基于大数据和机器学习的人工智能聊天机器人模型。它由国内团队发明、开发&#xff0c;并被命名为Mental AI。ChatGPT的目标是通过模拟自然对话的方式&#xff0c;提供高效、智能…