arduino接收串口数据 使用ESP8266 和YW51 A3C10 PM2.5传感器

arduino接收串口数据 使用ESP8266 和YW51 A3C10 PM2.5传感器

esp8266使用arduino接收YW51 A3C10 PM2.5传感器数据。

PM2.传感器

根据数据手册,得知传感器

项目名称数据
波特率2400
字节数7
起始位0xAA
结束位0xFF

传感器一共七位数据,分别是

名称功能
起始位0xAA
VoutH传感器输出电压高位
VoutL传感器输出电压地位
VrefH数据手册没写
VrefL数据手册没写
校验位用来校验
结束位0xFF

校验位计算方法: 校验位=VoutH+VoutL+VrefH+VrefL
灰尘浓度Ud=浓度系数k * (VoutH*256 + VoutL) * 2.5 / 1024
浓度系数根据数据手册填写。

Arduino代码

float GetPM25Data();		//定义PM2.5读取的函数
void setup() 
{    
	Serial.begin(2400);					//开启串口
	Serial.println("serial start");		//输出串口已打开
}

void loop() 
{
	int pm25=0;
	pm25 = GetPM25Data();		//调用函数  
	Serial.println(pm25);		//输出PM2.5的值
	delay(2000);
}

float GetPM25Data()//读取PM2.5传感器,波特率:2400; 校验位:无; 停止位:1 位; 数据位:8;数据包长度为7字节
{
	int cnt,pmval,readcmd[7];
	unsigned char gdata,eFlag,rbytes=0;
	float pm25;
	cnt=0;
	eFlag =0;
	while(Serial.available()>0)
		{
		gdata = Serial.read();//保存接收字符 
		if(gdata==0xAA&&eFlag==0)		//起始位是0xAA
		{
			eFlag=1;        
		}
		if(eFlag==1)
		{
			readcmd[rbytes++]=gdata;
		}    
		cnt++;
		if(cnt>100)
		{
			return 0;
		}

		if(rbytes==7)  //一共7位数据
		{
			break;
		}   
		}
		if(rbytes==0)
			return 0;
		if(readcmd[6]!=0xFF)		//结束位为OxFF
			return 0;
		pmval = readcmd[1];
  
		pmval<<=8;	//左移8位
		pmval+=readcmd[2];	//arduino里面16进制2进制自动转换的
  
		pm25 = pmval*5.0/1024.0;//计算PM2.5值 
		pm25*=800.0;	//系数800是随便用的值 真实值要根据数据手册写
		for (rbytes = 0; rbytes < 7;rbytes++ )
		{
			Serial.println(readcmd[rbytes]);	//输出原始读到的数据 用于检查数据是否正确 
												//println输出的数据是10进制数据
		}	
  return pm25;
}

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值