Skip to content

Instantly share code, notes, and snippets.

@zbicin
Created December 9, 2020 16:52
Show Gist options
  • Save zbicin/b6adbde900375c02b5a21975560acc6c to your computer and use it in GitHub Desktop.
Save zbicin/b6adbde900375c02b5a21975560acc6c to your computer and use it in GitHub Desktop.
SDS011 dust sensor + DHT11 + Blynk
#include <Arduino.h>
/* Comment this out to disable prints and save space */
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include "SdsDustSensor.h"
#include "DHT.h"
#define DHTPIN D7
#define DHTTYPE DHT22
#define SDSRXPIN D1
#define SDSTXPIN D2
#define DEFAULT_WORKING_PERIOD 30
char auth[] = "xxxxxxxxxxxxxxxxxxxxxx";
char ssid[] = "xxxxx";
char pass[] = "xxxxx";
int uploadIntervalHandler = -1;
SdsDustSensor sds(SDSRXPIN, SDSTXPIN);
DHT dht(DHTPIN, DHTTYPE);
BlynkTimer uploadTimer;
void measureAndUpload()
{
Serial.println("Measuring and doing upload");
PmResult pm = sds.queryPm();
if (pm.isOk())
{
Blynk.virtualWrite(V5, pm.pm25);
Blynk.virtualWrite(V6, pm.pm10);
}
Serial.println(pm.toString());
float h = dht.readHumidity();
float t = dht.readTemperature();
if (!isnan(h))
{
Blynk.virtualWrite(V8, h);
}
if (!isnan(t))
{
Blynk.virtualWrite(V9, t);
}
}
void setWorkingPeriod(int newWorkingPeriod)
{
Serial.println("Setting working period");
if (uploadIntervalHandler == -1)
{
uploadIntervalHandler = uploadTimer.setInterval(newWorkingPeriod * 60 * 1000L, measureAndUpload);
}
else
{
uploadTimer.changeInterval(uploadIntervalHandler, newWorkingPeriod * 60 * 1000L);
}
WorkingPeriodResult workingPeriodResult = sds.setCustomWorkingPeriod(newWorkingPeriod);
Serial.println(workingPeriodResult.toString());
}
BLYNK_WRITE(V7)
{
int newWorkingPeriod = param.asInt();
setWorkingPeriod(newWorkingPeriod);
}
BLYNK_CONNECTED()
{
Blynk.syncAll();
}
void setup()
{
Serial.begin(9600);
Serial.println("Hello sir");
sds.begin();
delay(3000);
FirmwareVersionResult firmwareResult = sds.queryFirmwareVersion();
Serial.println(firmwareResult.toString());
if (!firmwareResult.isOk())
{
Serial.println(firmwareResult.toString());
return;
}
WorkingPeriodResult workingPeriodResult = sds.setCustomWorkingPeriod(DEFAULT_WORKING_PERIOD);
if (!workingPeriodResult.isOk())
{
Serial.println(workingPeriodResult.toString());
return;
}
ReportingModeResult queryModeResult = sds.setQueryReportingMode();
if (!queryModeResult.isOk())
{
Serial.println(queryModeResult.toString());
return;
}
setWorkingPeriod(DEFAULT_WORKING_PERIOD);
dht.begin();
Blynk.begin(auth, ssid, pass);
}
void loop()
{
Blynk.run();
uploadTimer.run();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment