ESP8266 and Dust Sensor - no serial communication?
Posted: Sun Nov 12, 2017 1:46 am
Hi folks,
This project will be monitoring temp, humidity, particulates, and airflow. I’ve been able to get a Sanyo IR dust sensor running on this unit - but the values from the Sanyo don’t have the accuracy for the job.
I bought a dfrobot SEN0177 Laser dust sensor. I’m trying to read the sensor values from it and just simply display them in the serial window in the arduino IDE.
No luck.
I have the SEN0177 connected to its sensor adaptor board. The board is connected to 5v off the breadboard rail, TX and RX from there are connected to RX and TX on the GeekCreit ESP8266 board. It’s the bare minimum I think (although I’ve read I could leave the ESP8266’s TX pin disconnected). The ESP is connected to the same power rail on the breadboard (to VIN and GND).
The SEN0177 itself seems alive - the fan powers up and spins. The adaptor board has a green light on the RX light and a red light for the “ON” led.
But that is it.
The TX light never really seems to do anything?
I have tried so many different code examples off the web - I just can’t seem to get any values out of this sensor.
I’m hoping I can get some guidance? I’m not a real coder, not a real Engineer - but I’m bloody determined!
Thanks folks,
Brendan
PS - Code follows
This project will be monitoring temp, humidity, particulates, and airflow. I’ve been able to get a Sanyo IR dust sensor running on this unit - but the values from the Sanyo don’t have the accuracy for the job.
I bought a dfrobot SEN0177 Laser dust sensor. I’m trying to read the sensor values from it and just simply display them in the serial window in the arduino IDE.
No luck.
I have the SEN0177 connected to its sensor adaptor board. The board is connected to 5v off the breadboard rail, TX and RX from there are connected to RX and TX on the GeekCreit ESP8266 board. It’s the bare minimum I think (although I’ve read I could leave the ESP8266’s TX pin disconnected). The ESP is connected to the same power rail on the breadboard (to VIN and GND).
The SEN0177 itself seems alive - the fan powers up and spins. The adaptor board has a green light on the RX light and a red light for the “ON” led.
But that is it.
The TX light never really seems to do anything?
I have tried so many different code examples off the web - I just can’t seem to get any values out of this sensor.
I’m hoping I can get some guidance? I’m not a real coder, not a real Engineer - but I’m bloody determined!
Thanks folks,
Brendan
PS - Code follows
Code: Select all
//******************************
//*Abstract: Read value of PM1,PM2.5 and PM10 of air quality
//*Product Link: http://www.dfrobot.com.cn/goods-1113.html
//*
//*
//*The TX pin on the sensor connects to pin 10 on the Arduino
//*The RX pin on the sensor connects to pin 11 on the Arduino
// DIFFERENT ON ESP!!
//
//*Version:V3.1
//*Author:Zuyang @ HUST
//*Date:March.25.2016
//******************************
#include <Arduino.h>
#include <SoftwareSerial.h>
#define LENG 31 //0x42 + 31 bytes equal to 32 bytes
unsigned char buf[LENG];
int PM01Value=0; //define PM1.0 value of the air detector module
int PM2_5Value=0; //define PM2.5 value of the air detector module
int PM10Value=0; //define PM10 value of the air detector module
SoftwareSerial PMSerial(3, 1); // RX, TX - ESP specific pins
String data = "";
void setup()
{
PMSerial.begin(9600);
PMSerial.setTimeout(1500);
Serial.begin(9600);
}
void loop()
{
Serial.println("Looking for val ");
if(PMSerial.available()>0 ){
Serial.println("PMSerial avail");
// try to debug if there is any content
char ch=PMSerial.read();
data.concat(ch);
Serial.println((int)ch, HEX);
if(PMSerial.find(0x42)){
Serial.println("found 0x42");
PMSerial.readBytes(buf,LENG);
if(buf[0] == 0x4d){
if(checkValue(buf,LENG)){
PM01Value=transmitPM01(buf); //count PM1.0 value of the air detector module
PM2_5Value=transmitPM2_5(buf);//count PM2.5 value of the air detector module
PM10Value=transmitPM10(buf); //count PM10 value of the air detector module
}
}
}
}
static unsigned long OledTimer=millis();
if (millis() - OledTimer >=1000)
{
OledTimer=millis();
Serial.print("PM1.0: ");
Serial.print(PM01Value);
Serial.println(" ug/m3");
Serial.print("PM2.5: ");
Serial.print(PM2_5Value);
Serial.println(" ug/m3");
Serial.print("PM1 0: ");
Serial.print(PM10Value);
Serial.println(" ug/m3");
Serial.println();
}
}
char checkValue(unsigned char *thebuf, char leng)
{
char receiveflag=0;
int receiveSum=0;
for(int i=0; i<(leng-2); i++){
receiveSum=receiveSum+thebuf[i];
}
receiveSum=receiveSum + 0x42;
if(receiveSum == ((thebuf[leng-2]<<8)+thebuf[leng-1])) //check the serial data
{
receiveSum = 0;
receiveflag = 1;
}
return receiveflag;
}
int transmitPM01(unsigned char *thebuf)
{
int PM01Val;
PM01Val=((thebuf[3]<<8) + thebuf[4]); //count PM1.0 value of the air detector module
return PM01Val;
}
//transmit PM Value to PC
int transmitPM2_5(unsigned char *thebuf)
{
int PM2_5Val;
PM2_5Val=((thebuf[5]<<8) + thebuf[6]);//count PM2.5 value of the air detector module
return PM2_5Val;
}
//transmit PM Value to PC
int transmitPM10(unsigned char *thebuf)
{
int PM10Val;
PM10Val=((thebuf[7]<<8) + thebuf[8]); //count PM10 value of the air detector module
return PM10Val;
}