写在最前面

华清远见教育集团
15年专注高端IT培训
做良心教育,做专业教育,做受人尊敬的职业教育

创客学院官网:http://www.makeru.com.cn/
华清远见创客学院嵌入式课程链接:http://www.makeru.com.cn/emb
华清远见创客学院物联网课程链接:http://www.makeru.com.cn/iot

正文

底层实现对数据的采集、分类、打包、发送,同时还要可以接收并解析上位机传递下来的命令。这意味不是仅仅采集到数据就OK了的,还要把数据表述成上位机想要的格式。这里使用STM32F407的芯片实现的程序,由于原理上是一样的,所以不论用什么芯片来设计都不影响。还有就是由于笔者能力和时间比较仓促的缘故,还不能实现对多个数据源的采集。以后有机会的话可以多多学做下程序移植。

本文的重点从程序上分析,分析整个程序对数据采集-上报过程中的设计思想。

硬件资源

  • LED灯 DS0(PF9) DS1(PF10)
  • 定时器3(TIM3),配置为10ms中断一次,实现对不同时间段的标记
  • 串口1 PA9(TX) PA10(RX)  用于输出程序运行时的提示信息
  • 串口2 PA2(TX) PA3(RX)   用于完成与上位机的交互
  • 按键  KEY0 PE4     KEY1 PE3     KEY2 P32    WK_UP PA0  作为输入设备,直接控制底层硬件(还没有实现控制环)
  • 温度湿度传感器 DHT11(PG9)   作为输入设备,采集数据上传
  • 光敏传感器 LSENS(PF7 - ADC3)   作为输入设备,采集数据上传
  • 六轴姿态传感器 MPU6050(通过IIC读取)  作为输入设备,采集x-y-z轴陀螺仪(姿态角)原始数据上传

对上报数据的格式进行构造

参考这一篇的介绍:https://mp.csdn.net/postedit/84898279

数据头+数据类型+仓库号+温度+湿度+光度

typedef struct storage_goods_info
{unsigned char goods_type; // Goods type for example: APPLE, BANANA, PEAR, ...unsigned int goods_count; // Number of goods of each type.
} __attribute__((packed)) GOODS;typedef struct storage_info
{char index[2];unsigned char storage_status; // Storage No.unsigned char led_status;  // Device status.unsigned char buzzer_status;  // Device status.unsigned char key_status;  // Device status.float temperature; // The current temperature of curtain reposity.float temperatureMIN; // The lowest limit to temperature for curtain reposity.float temperatureMAX; // The highest limit to temperature for curtain reposity.float humidity; // The current humidity of curtain reposity.float humidityMIN; // The lowest limit to humidity for curtain reposity.float humidityMAX; // The highest limit to humidity for curtain reposity.float illumination; // The strength of lightnss.float illuminationMIN; // The lowest limit to strength of lightnss for curtain reposity.float illuminationMAX; // The highest limit to strength of lightnss for curtain reposity.struct storage_goods_info goods_info[GOODS_NUM]; // Goods info for all types of goods.
} __attribute__((packed)) REPO_ENV;

主程序思路

在main中进行轮询,当标记变量被触发的时候,开始对传感器进行数据采集。通过定时器计时触发标记符来管理这个过程。

数据采集到变量

这里利用的第三方库函数来实现采集,分别采集的是温度湿度值和光强度,数据通过传感器被直接采集到相关变量上。

变量中的数据封装到结构体

按照预先定义的数据格式,将数据打包成一个数据包。

结构体中的数据串口发送

定时器1s触发一次To1SFlag标记,主程序的循环中实时判断这个标记。每隔1s上报一次,这里通过串口来实现,将结构体变量中的信息发送出去

最后通过串口助手捕获数据包

然后我们就可以在串口助手,查看程序上报的数据流了

数据采集--实现串口数据的上传相关推荐

  1. 利用串口网络助手上传数据、图片到OneNet平台以及获取数据(HTTP)

    利用串口网络助手上传数据.图片到OneNet平台以及获取数据(HTTP) 使用网络助手连接OneNet服务器 HTTP上传数据至OneNet 获取数据 上传图片至OneNet 使用网络助手连接OneN ...

  2. 硬件采集数据怎么上传服务器,如何使用4G蓝牙网关进行数据采集和数据上传

    原标题:如何使用4G蓝牙网关进行数据采集和数据上传 从技术效果上看,WiFi拥有宽带高.传输速度快等优点主要用于电脑.智能手机等的通信.蓝牙通信技术拥有功耗低,传输速率快等优点,是目前适用于数据采集和 ...

  3. 工业物联网网关可以采集哪些RS485传感器数据并上传到MQTT云平台?

    RS485是一种串行数据通信协议,具备结构简单.成本低廉.易于安装调试等特点和较好的抗干扰能力,因此成为各类型传感器的主流接口,是实现远程监控的首选通讯方式. 工业领域遍布各种各样的传感器,在工业物联 ...

  4. 实时传输文件到服务器,如何将数据实时上传到云服务器

    如何将数据实时上传到云服务器 内容精选 换一换 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助您快速上手使用华为云服务. 华 ...

  5. 怎么把数据文件上传云服务器,如何将数据上传到云服务器上

    如何将数据上传到云服务器上 内容精选 换一换 您可以通过导出SQL语句的方式将数据库备份到弹性云服务器上.弹性云服务器不限制存放哪些数据,但是数据必须符合国家法律法规.您可以在弹性云服务器上存放数据库 ...

  6. 飞翔的红蜻蜓(浙理体育)——生成跑步数据并上传

    目录 前言 一.抓包 二.分析数据 1.解码请求主体 2.分析数据 三.生成数据 1.时间数据 2.跑步数据 3.打包封装 四.上传数据 总结 前言 基本思路:抓包获取http包,分析数据格式,生成数 ...

  7. java问卷导入excel,将Excel数据直接上传到问卷星

    一.什么样的数据可以上传 1.如果您已经有了一批报名者的数据,需要使用到问卷星的签到功能.可以将整理好的报名者数据,上传到系统中. 2.如果您有一批数据需要针对个人公开,可以先将数据上传到问卷星,再设 ...

  8. 富芮坤FR801xH蓝牙协议栈启动流程和notify实现温度数据主动上传

    文章目录 一.蓝牙协议栈启动流程 1.1 初始化代码 1.2 初始化流程 1.3 回调函数里的初始化 二.notify实现 2.1 notify介绍 2.2 notify实现 2.3.1 定义数据 2 ...

  9. Word数据批量上传

    Word数据批量上传 这里我们实现把大量的数据从Excel中移动显示在网页上,实现一个数据批量上传. 页面这里我们这里是一个点击事件,触发文件选择页面点击事件,进入选择页面,选择文件就触发input标 ...

最新文章

  1. C语言的链表—完整代码
  2. 【网址收藏】linux namespace和cgroup
  3. 同一个硬盘装多个linux系统,在一个硬盘上安装两个Linux操作系统方法
  4. 用VisualStudio2010学习WCF服务编程总结(1)操作重载
  5. HDU - 4300 Clairewd’s message(扩展KMP)
  6. 五一好礼70份免费送:示波器、开发板、焊台等!
  7. STM32 MDK编译后生成的 .map文件深入分析
  8. 深度学习之图像识别基础篇——神经元与感知机
  9. RocketMQ Message hasn‘t been sent. Caused by No route info of this topic, Pr
  10. try catch finally的理解
  11. 史上最全面的深度学习硬件指南
  12. Java实现文件批量重命名
  13. LInux终端中Ctrl+S卡死
  14. ps钢笔工具的一些快捷键操作(小白请进)
  15. 鼠标右键打开命令行cmd(管理员身份)
  16. 一文读懂量子计算的原理、分类与发展
  17. arduino中的serial .available()和serial.read()是区别
  18. v-if 和 v-show的区别是什么? 什么时候使用v-if更好? 什么时候用v-show更好?
  19. Django7-4.模板系统常用知识点(4)
  20. HashMap 是如何工作的?图文详解,一起来看看!

热门文章

  1. 路程c语言,求最短路程(Prim算法)求C语言代码的解题
  2. 国产手游在日本是如何破除“加拉帕戈斯效应”的
  3. python 项目:名片管理系统 之如何运用随机数生成一个名片系统
  4. 下载安装MySQL数据库ODBC驱动和配置MySQL ODBC数据源
  5. 软件测试一般什么时候招聘人多,软件测试工程师能做到多少岁?
  6. 上海网管联盟2003系统反馈
  7. 机械制造行业ERP解决方案
  8. 分享未注册淘宝热卖域名
  9. Qt--Access数据库
  10. VB程序设计教程(第四版)龚沛曾-实验8-1