基于树莓派的空气监测系统(3)PM2.5模块程序
来源:互联网 发布:国家发改委贵州大数据 编辑:程序博客网 时间:2024/04/29 23:36
基于树莓派的空气监测系统(3)PM2.5模块程序
PM2.5模块(SHARP 灰尘传感器GP2Y1051AU0F)
灰尘传感器的主要参数
- 光学原理,能够探测1微米以上的粉尘粒子;
- 5VDC供电;
- 串口通信(5V);
原理:微粒和分子在光的照射下会产生光的散射现象,和此同时,还吸收部分照射光的能量。当一束平行单色光入射到被测颗粒场时,会受到颗粒周围散射和吸收的影响,光强将被衰减。如此一来便可求得入射光通过待测浓度场的相对衰减率。而相对衰减率的大小基本上能线性反应待测场灰尘的相对浓度。光强的大小和经光电转换的电信号强弱成正比,通过测得电信号就可以求得相对衰减率。
树莓派3B串口设置
树莓派串口说明
树莓派从大的方向来说一共出了3代,每一代的CPU外设基本相同,但内核不同,外设里面一共包含两个串口,一个称之为硬件串口(/dev/ttyAMA0),一个称之为mini串口(/dev/ttyS0)。
硬件串口由硬件实现,有单独的波特率时钟源,性能高、可靠,mini串口性能低,功能也简单,并且没有波特率专用的时钟源而是由CPU内核时钟提供,因此mini串口有个致命的弱点是:波特率受到内核时钟的影响。
对于树莓派3 B+ 来说,它的uart 功能有三种: 1、内部蓝牙使用 2、控制终端使用 3、与其他设备进行串口通信;
树莓派 3 只提供一个硬件 uart,对应硬件接口 GPIO14-Tx/GPIO15-Rx。硬件串口被默认分配给与蓝牙模块通信了,而把那个mini串口默认分配给了排针引出的GPIO Tx Rx。
树莓派3串口默认映射对换
1.查看/boot/overlays/目录下是否有pi3-miniuart-bt-overlay.dtb(或者pi3-miniuart-bt.dtbo)文件。
(这个文件的功能是将树莓派3的蓝牙切换到mini串口(ttyS0),并且恢复硬件串口(ttyAMA0)到GPIO 14&15脚中。并且给出了载入的方法。)
2.编辑/boot目录下的config.txt文件
sudo vim /boot/config.txtdtoverlay=pi3-miniuart-bt-overlay
保存文件,重启树莓派使之生效。
- 默认映射
- 修改后的映射
禁用串口的控制台功能
编辑/boot目录下的cmdline.txt文件,把console=serial0,115200删掉console=serial0,115200。
串口程序
#include <unistd.h>#include <stdio.h>#include <fcntl.h>#include <stdlib.h>#include <string.h>#include <termios.h>//串口初始化void init_tty(int fd){ struct termios newtio; struct termios oldtio; bzero(&newtio,sizeof(struct termios)); tcgetattr(fd,&oldtio); newtio.c_cflag |= CLOCAL | CREAD; cfsetispeed(&newtio,B2400); cfsetospeed(&newtio,B2400); printf("c_cflag=%x\n",newtio.c_cflag); newtio.c_cflag &= ~CSIZE; printf("c_cflag=%x\n",newtio.c_cflag); newtio.c_cflag |= CS8; printf("c_cflag=%x\n",newtio.c_cflag); newtio.c_cflag &= ~PARENB; newtio.c_iflag &= ~INPCK; newtio.c_cflag &= ~CSTOPB; newtio.c_cc[VTIME] = 0; newtio.c_cc[VMIN] = 0; //设置原始模式 newtio.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); /*Input*/ newtio.c_oflag &= ~OPOST; /*Output*/ //设置终端模式 //newtio.c_lflag |= (ICANON | ECHO | ECHOE | ISIG); /*Input*/ //newtio.c_oflag |= OPOST; /*Output*/ tcflush(fd,TCIOFLUSH); tcsetattr(fd,TCSANOW,&newtio);}//PM2.5模块数据处理int da_pro(char* da_buf){ unsigned char crr; double vout; int ud,i; if(da_buf==NULL) return -1; for(i=0;i<10;i++){ if(da_buf[i]==0xAA) break; } if(da_buf[i+0] != 0xAA || da_buf[i+6]!= 0xFF) return -1; crr = da_buf[i+1] + da_buf[i+2] + da_buf[i+3] + da_buf[i+4]; if(da_buf[i+5] != crr) return -1; vout = (da_buf[i+1]*256+da_buf[i+2])/1024.0*8.0; ud = 800 * vout; return ud;}int main(){ int i; int fd = -1; int ret = -1; int pm; char buf[16]; fd = open("/dev/ttyAMA0",O_RDWR); if(fd < 0){ printf("没有串口设备/dev/ttyAMA0\n"); exit(1); } printf("fd=%d\n",fd); init_tty(fd); while(1){ bzero(buf,16); if(read(fd,buf,15)>0){ for(i=0;i<15;i++){// printf(" %X ",buf[i]); } pm = 0; pm=da_pro(buf); if(pm==-1) printf("recv data err...\n"); else printf("PM2.5 = %d\n",pm); } usleep(300*1000); } close(fd);}
- 基于树莓派的空气监测系统(3)PM2.5模块程序
- 基于树莓派的空气监测系统(4)DHT11模块程序
- Qt实现天气预报与PM2.5监测系统(3)PM2.5模块程序
- 基于树莓派的空气监测系统(1)项目介绍
- 基于树莓派的空气监测系统(2)Qt开发环境
- Android毕设相关PM2.5,空气监测的谁有代码啊
- Qt实现天气预报与PM2.5监测系统(4)DHT11模块驱动
- PM2.5遥感监测系统
- PM2.5遥感监测系统
- PM2.5遥感监测系统
- 科普:关于PM2.5(危险的北京空气)
- 【应用实例】单片机PM2.5空气监测仪--攀藤G5激光PM2.5传感器
- 空气颗粒度PM2.5的检测设计与实现
- 空气中PM2.5问题的建模和分析
- Qt实现天气预报与PM2.5监测系统(6)系统界面设计
- Qt实现天气预报与PM2.5监测系统(10)系统设置
- Qt实现天气预报与PM2.5监测系统(5)天气预报接口
- Qt实现天气预报与PM2.5监测系统(1)项目介绍
- python/pip /conda 不是内部或外部的命令
- Code资格赛2
- 爆炸
- CST时间转换出现的误差问题
- 『pandas』pandas查漏补缺
- 基于树莓派的空气监测系统(3)PM2.5模块程序
- 解决ssd训练时出的问题
- CentOS安装FastDFS单节点分布式文件系统
- ios9.0及以上系统使用ReplayKit实现应用内录屏功能
- 分布式与集群、负载均衡
- 用VS2012或VS2013在win7下编写的程序在XP下运行就出现“不是有效的win32应用程序
- 点击图片放大
- 6-16-ZZL日常
- centos安装软件的两种命令rpm,yum