PMS7003颗粒度传感器数据采集

  • PMS7003采集
    • 整体介绍
    • PMS7003传感器介绍
      • 数据位介绍
      • 采集方法

PMS7003采集

整体介绍

树莓派+PMS7003+1.44寸TFT屏幕
20秒采集一次数据
60秒钟上传一次心跳
语言:python
接口:webapi post

PMS7003传感器介绍

Dust Sensor - PMS 5003/6003/7003: 数据链接.
PMS 7003: github链接.

数据位介绍

以下是PMS7003的数据位。

采集方法

由于PMS7003的传输过来数据需要先转换成16进制 才能被程序计算,所以前置步骤,需要进行转换。

# 字符转换16 进制
def hexShowNew(argv):  try:result = ''hLen = len(argv)for i in range(hLen):hvol = argv[i]hhex = '%02x' % hvolresult += hhex + ' '# print(result)return resultexcept:pass

同时数据传输过来的话可能异常数据,所以一定要计算校验位。
一共32个数据,前30个数据想加的值,是否等于后2个数据的值。
我这边图方便,全部转换成10进制数据来计算。

 for index in range(0,29) :checksum += int(strarr[index],16)

其中这些数据是我们要的:

pm1point0 = strarr[4] + strarr[5]#pm1.0
pm2point5 = strarr[6] + strarr[7]#pm2.5
pm10 = strarr[8] + strarr[9]#pm10
pm1point0air = strarr[10] + strarr[11]#pm1.0
pm2point5air = strarr[12] + strarr[13]#pm2.5
pm10air = strarr[14] + strarr[15]#pm10
um0point3 = strarr[16] + strarr[17]#0.3um颗粒
um0point5 = strarr[18] + strarr[19]#0.5um颗粒
um1point0 = strarr[20] + strarr[21#1.0um颗粒
um2point5 = strarr[22] + strarr[23]#2.5um颗粒
um5point0 = strarr[24] + strarr[25]#5.0um颗粒
um10 = strarr[26] + strarr[27]#10um颗粒

以下是程序源码:

# -*- coding: utf-8 -*
# python -u 启动,禁用stdout缓冲功能,不然打印有延时。
import serial
import time
import sys
import socket
import json
import requests#
class ParticleOutputModel:hostname = ''uuid = ''machinetype = '' flag = ''pm1point0 = 0pm2point5 = 0 pm10 = 0pm1point0air = 0 pm2point5air = 0 pm10air = 0 over0point3um = 0 over0point5um = 0 over1point0um = 0 over2point5um = 0 over5point0um = 0 over10um = 0def __init__(self,hostname,uuid,machinetype,flag,pm1point0,pm2point5,pm10,pm1point0air,pm2point5air,pm10air,over0point3um,over0point5um,over1point0um,over2point5um,over5point0um,over10um):self.hostname = hostnameself.uuid = uuidself.machinetype = machinetype self.flag = flagself.pm1point0 = pm1point0self.pm2point5 = pm2point5 self.pm10 = pm10self.pm1point0air = pm1point0air self.pm2point5air = pm2point5air self.pm10air = pm10air self.over0point3um = over0point3um self.over0point5um = over0point5um self.over1point0um = over1point0um self.over2point5um = over2point5um self.over5point0um = over5point0um self.over10um = over10um# 打开串口
ser = serial.Serial("/dev/ttyAMA0", 9600)def is_open(filename):try:vHandle =win32file.CreateFile(filename, GENERIC_READ, 0, None, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, None)if int(vHandle)==INVALID_HANDLE_VALUE:print("# file is already open")return True  # file is already openwin32file.CloseHandle(vHandle)except Exception as e:print(e)return True# 16 进制
def hexShowNew(argv): try:result = ''hLen = len(argv)for i in range(hLen):hvol = argv[i]hhex = '%02x' % hvolresult += hhex + ' '# print(result)return resultexcept:pass# main方法:
def main():host = 'localhost'port = 7002while True:try:print("create connection success")while True:count = ser.inWaiting()if count > 30:# 读取内容并回显recv = ser.read(count)strvalue = hexShowNew(recv)strarr = strvalue.split()if (len(strarr) == 32):print("################################")print("load data success")checksum=0for index in range(0,29) :checksum += int(strarr[index],16)print("checksum")print(checksum)print("systemchecksum")syschecksum = int(str(strarr[30])+str(strarr[31]),16)print(syschecksum)if checksum == syschecksum:print("checksum is success")pm1point0 = strarr[4] + strarr[5]pm2point5 = strarr[6] + strarr[7]pm10 = strarr[8] + strarr[9]pm1point0air = strarr[10] + strarr[11]pm2point5air = strarr[12] + strarr[13]pm10air = strarr[14] + strarr[15]um0point3 = strarr[16] + strarr[17]um0point5 = strarr[18] + strarr[19]um1point0 = strarr[20] + strarr[21]um2point5 = strarr[22] + strarr[23]um5point0 = strarr[24] + strarr[25]um10 = strarr[26] + strarr[27]resultstr = "<ParticleDetection><Flag>[Flag]</Flag><PM1.0>[PM1.0]</PM1.0><PM2.5>[PM2.5]</PM2.5><PM10>[PM10]</PM10><PM1.0air>[PM1.0air]</PM1.0air><PM2.5air>[PM2.5air]</PM2.5air><PM10air>[PM10air]</PM10air><over0.3um>[over0.3um]</over0.3um><over0.5um>[over0.5um]</over0.5um><over1.0um>[over1.0um]</over1.0um><over2.5um>[over2.5um]</over2.5um><over5.0um>[over5.0um]</over5.0um><over10um>[over10um]</over10um></ParticleDetection>"resultstr = resultstr.replace("[Flag]", "success")resultstr = resultstr.replace("[PM1.0]", str(int(pm1point0, 16)))resultstr = resultstr.replace("[PM2.5]", str(int(pm2point5, 16)))resultstr = resultstr.replace("[PM10]", str(int(pm10, 16)))resultstr = resultstr.replace("[PM1.0air]", str(int(pm1point0air, 16)))resultstr = resultstr.replace("[PM2.5air]", str(int(pm2point5air, 16)))resultstr = resultstr.replace("[PM10air]", str(int(pm10air, 16)))resultstr = resultstr.replace("[over0.3um]", str(int(um0point3, 16)))resultstr = resultstr.replace("[over0.5um]", str(int(um0point5, 16)))resultstr = resultstr.replace("[over1.0um]", str(int(um1point0, 16)))resultstr = resultstr.replace("[over2.5um]", str(int(um2point5, 16)))resultstr = resultstr.replace("[over5.0um]", str(int(um5point0, 16)))resultstr = resultstr.replace("[over10um]", str(int(um10, 16)))x = ParticleOutputModel("raspberry","sssss","machinetype","success",int(pm1point0, 16),int(pm2point5, 16),int(pm10, 16),int(pm1point0air, 16),int(pm2point5air, 16),int(pm10air, 16),int(um0point3, 16),int(um0point5, 16),int(um1point0, 16),int(um2point5, 16),int(um5point0, 16),int(um10, 16))#对象序列化x= x.__dict__json_str = json.dumps(x,ensure_ascii=False,indent=4)try:with open('./data.json', 'w') as file_object:file_object.write(json_str)except:print('error:') headers = {'Content-Type': 'application/json'}r = requests.post("http接口", data=json_str, headers=headers,timeout=5)print("send success")time.sleep(20)else:time.sleep(2)print("checksum is error")else:print("load data fail, no transaction")ser.flushInput()time.sleep(0.5)except:print("exception")time.sleep(20)if __name__ == '__main__':try:main()except KeyboardInterrupt:if ser != None:ser.close()

最后会先保存一份json文件在本地,同时调用Post接口传到接口,存到数据库中。
有另一个程序会把存在本地的json文件,读取出来,并显示在1.44寸的TFT屏幕界面上。

采集PMS7003 颗粒度传感器数据,显示在TFT屏幕上,并通过webapi上传(1/2)相关推荐

  1. matlab获取手机传感器,分享采集Android内置传感器数据到MATLAB的方法

    本方法能够实现安卓手机内置的加速度传感器.陀螺仪.磁场数据.角速度传感器及GPS数据采集到MATLAB. 1.硬件准备:安卓手机,电脑,且在同一局域网中: 2.软件准备:安卓手机安装MATLABmob ...

  2. 无代码:翔翼航空全面预算管理的最小颗粒度渗透

    预决算管理与日常业务以及内部的核心价值链紧耦合,如何"自如"地做到?翔翼航空将近200个预算科目的设计与设备调用.耗材使用.项目执行等共同构造成具体的业务场景,在管理上接近&quo ...

  3. 基于STM32采集CO2(MH-Z19C)传感器数据

    本文主要记录利用STM32的USART2串口采集CO2传感器数据,并通过USART1串口利用串口调试助手显示CO2数值. 一.实验器材 正点原子STM32MINI开发板,炜盛科技CO2(MH-Z19C ...

  4. ESP8266-Arduino编程实例-OLED显示DHT22传感器数据

    OLED显示DHT22传感器数据 1.应用实例介绍 本次实例将演示如何在OLED中显示DHT22温度湿度传感器的数据.实例主要分两步来完成: DHT22传感器驱动,采集温度和湿度 OLED驱动,显示采 ...

  5. STM32 BMP280模块 获取气压温度高度传感器数据 TFT显示

    STM32 BMP280模块 获取气压温度高度传感器数据 TFT显示 简介 BMP280是博世最新推出的数字气压传感器,具有卓越的性能和低廉的价格,相对精度为±0.12 hPa(相当于±1米),传感器 ...

  6. STM32CubeIDE开发(十六),I2C协议采集传感器数据(SHTC1、LTR-553ALS、BMP280、LSM6DSL、MMC3680KJ)

    目录 一.I2C总线协议 二.I2C协议的两种从机应对方式 三.传感器信息 四.工程创建及引脚配置 五.STCH1传感器实现 六.LTR_553ALS传感器(light sensor [ALS] an ...

  7. 基于STM32采集PM2.5(ZH03B)传感器数据实验

    本文主要记录利用STM32的USART2串口采集PM2.5传感器数据,并通过USART1串口利用串口调试助手显示PM2.5数值. 一.实验器材 正点原子STM32MINI开发板,炜盛科技PM2.5(Z ...

  8. ESP8266-Arduino编程实例-OLED显示电容式土壤湿度传感器数据

    OLED显示电容式土壤湿度传感器数据 本文将演示如何在OLED中显示土壤湿度传感器数据以及不同的数据值范围,使用不同的表情图片显示. 本次实例主要通过如下步骤来完成: 土壤湿度传感器数据采集 OLED ...

  9. 使用STM32F103采集Si7021温湿度传感器数据

    使用STM32F103采集Si7021温湿度传感器数据 2019.06.13 更新 最近弄了个GitHub仓库,想要下载源码但又不想弄积分的朋友可以直接到我的GitHub上克隆 https://git ...

  10. ESP8266采集多个传感器数据通过WIFI上传到本地数据库(风速、风向、CO、颗粒物)

    文章目录 1.数据库使用简介 1.Navicat premium连接 2.新建数据库 3.在数据库中新建表 2.代码实现 代码 1.数据库使用简介 建立数据库连接,在连接里新建数据库,在数据库里新建表 ...

最新文章

  1. #ifndef/#define/#endif
  2. android 8.0应用内安装包,Android 8.0 下载安装进入【安装未知应用】页面,两步简化一步...
  3. oracle utf8 varchar,Oracle中字符集的类型决定varchar2的字符长度
  4. 小程序获取微信用户绑定的手机号
  5. ASP.NET页生命周期介绍:阶段,事件及其他
  6. ubuntu如何删除刚添加的源?
  7. WIFI安全测试之WPS(PIN)加密暴力破解
  8. sap abap开发从入门到精通_云端的ABAP Restful服务开发
  9. 矩阵的初等变换与线性方程组
  10. 面向协议编程,灵丹妙药或是饮鸩止渴?
  11. 模糊数学Fuzzy Set第2讲——Fuzzy Logic Fuzzy Reasoning
  12. 锤子android 7,锤子新机坚果Pro配置放出:骁龙626处理器、Android 7.1.1系统
  13. 关于大数据技术原理与应用的学习(6)
  14. Matlab R2012a/b反复激活无效+license checkout failed解决方案
  15. 什么是驱动?驱动程序的工作原理?
  16. CSS overflow用法
  17. 滑坡的剖面图怎么用计算机绘制,利用AutoCAD绘制地质图的若干方法
  18. android高德地图绘制多边形_android 高德地图画多边形,已知中心点 宽高画矩形 ,实际距离 千米转地图坐标距离...
  19. OpenCV 获取摄像头并显示摄像头视频
  20. Apache POI 插入图片至 Excel 的两种方法

热门文章

  1. 项目管理知识体系指南(七)项目质量管理
  2. 蓝鸥iOS开发工程师职场提升路线图
  3. jena 查询 java_Jena搭建SPARQL查询RDF数据
  4. 莫队算法(最小曼哈顿生成树或者分块处理)
  5. 计数器+按钮控制数码管显示
  6. C++中圆周率Π的几种表示方法arccos(-1), 2arcsin(1), 4arctan(1)的用法
  7. 最强蜗牛换了手机找不到服务器,最强蜗牛服务器无响应怎么办 最强蜗牛进不去解决方法...
  8. (一)5G网络超低延迟背后的黑科技
  9. 科研热点|发一篇SCI吃半年土?为何国际期刊版面费越来越贵?
  10. 奇怪的sqlconnection.open错误