Compare commits

...

3 Commits

Author SHA1 Message Date
0458adb949 Added missing pms library to instructions 2024-01-06 09:14:40 +07:00
f51203f754 Added config menu item to switch off LED bar 2023-12-13 18:37:36 +07:00
33520c18fe Fixed persistent WiFi issue 2023-11-25 08:37:56 +07:00
2 changed files with 82 additions and 50 deletions

View File

@ -12,6 +12,7 @@ The codes needs the following libraries installed:
“U8g2” by oliver tested with version 2.32.15
"Sensirion I2C SGP41" by Sensation Version 0.1.0
"Sensirion Gas Index Algorithm" by Sensation Version 3.2.1
“pms” by Markusz Kakl version 1.1.0
"Arduino-SHT" by Johannes Winkelmann Version 1.2.2
"Adafruit NeoPixel" by Adafruit Version 1.11.0
@ -173,16 +174,17 @@ void setup() {
pinMode(9, INPUT_PULLUP);
buttonConfig = String(EEPROM.read(addr)).toInt();
if (buttonConfig > 3) buttonConfig = 0;
if (buttonConfig > 7) buttonConfig = 0;
delay(400);
setConfig();
Serial.println("buttonConfig: " + String(buttonConfig));
updateOLED2("Press Button", "Now for", "LED Test");
updateOLED2("Press Button", "for LED test &", "offline mode");
delay(2000);
currentState = digitalRead(9);
if (currentState == LOW) {
ledTest();
return;
}
updateOLED2("Press Button", "Now for", "Config Menu");
@ -196,28 +198,13 @@ void setup() {
inConf();
}
if (connectWIFI) {
WiFi.begin("airgradient", "cleanair");
int retries = 0;
while ((WiFi.status() != WL_CONNECTED) && (retries < 15)) {
retries++;
delay(500);
Serial.print(".");
}
if (retries > 14) {
Serial.println(F("WiFi connection to SSID airgradient failed"));
if (connectWIFI) connectToWifi();
}
if (connectWIFI) connectToWifi();
if (WiFi.status() == WL_CONNECTED) {
if (WiFi.SSID() == "airgradient") {
ledTest();
}
sendPing();
Serial.println(F("WiFi connected!"));
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
}
updateOLED2("Warming Up", "Serial Number:", String(getNormalizedMac()));
}
@ -231,21 +218,6 @@ void loop() {
sendToServer();
}
void ledTest() {
updateOLED2("LED Test", "running", ".....");
setRGBledColor('r');
delay(1000);
setRGBledColor('g');
delay(1000);
setRGBledColor('b');
delay(1000);
setRGBledColor('w');
delay(1000);
setRGBledColor('n');
delay(1000);
//LED Test
}
void updateTVOC() {
uint16_t error;
char errorMessage[256];
@ -369,7 +341,7 @@ void inConf() {
long pressDuration = releasedTime - pressedTime;
if (pressDuration < 1000) {
buttonConfig = buttonConfig + 1;
if (buttonConfig > 3) buttonConfig = 0;
if (buttonConfig > 7) buttonConfig = 0;
}
}
@ -395,26 +367,52 @@ void inConf() {
void setConfig() {
Serial.println("in setConfig");
if (buttonConfig == 0) {
updateOLED2("Temp. in C", "PM in ug/m3", "Long Press Saves");
u8g2.setDisplayRotation(U8G2_R0);
updateOLED2("T:C, PM:ug/m3", "LED Bar: on", "Long Press Saves");
inF = false;
inUSAQI = false;
}
if (buttonConfig == 1) {
updateOLED2("Temp. in C", "PM in US AQI", "Long Press Saves");
useRGBledBar = true;
} else if (buttonConfig == 1) {
u8g2.setDisplayRotation(U8G2_R0);
updateOLED2("T:C, PM:US AQI", "LED Bar: on", "Long Press Saves");
inF = false;
inUSAQI = true;
useRGBledBar = true;
} else if (buttonConfig == 2) {
updateOLED2("Temp. in F", "PM in ug/m3", "Long Press Saves");
u8g2.setDisplayRotation(U8G2_R0);
updateOLED2("T:F PM:ug/m3", "LED Bar: on", "Long Press Saves");
inF = true;
inUSAQI = false;
useRGBledBar = true;
} else if (buttonConfig == 3) {
updateOLED2("Temp. in F", "PM in US AQI", "Long Press Saves");
u8g2.setDisplayRotation(U8G2_R0);
updateOLED2("T:F PM:US AQI", "LED Bar: on", "Long Press Saves");
inF = true;
inUSAQI = true;
useRGBledBar = true;
} else if (buttonConfig == 4) {
updateOLED2("T:C, PM:ug/m3", "LED Bar: off", "Long Press Saves");
inF = false;
inUSAQI = false;
useRGBledBar = false;
} else if (buttonConfig == 5) {
u8g2.setDisplayRotation(U8G2_R0);
updateOLED2("T:C, PM:US AQI", "LED Bar: off", "Long Press Saves");
inF = false;
inUSAQI = true;
useRGBledBar = false;
} else if (buttonConfig == 6) {
u8g2.setDisplayRotation(U8G2_R0);
updateOLED2("T:F PM:ug/m3", "LED Bar: off", "Long Press Saves");
inF = true;
inUSAQI = false;
useRGBledBar = false;
} else if (buttonConfig == 7) {
u8g2.setDisplayRotation(U8G2_R0);
updateOLED2("T:F PM:US AQI", "LED Bar: off", "Long Press Saves");
inF = true;
inUSAQI = true;
useRGBledBar = false;
}
}
@ -641,63 +639,63 @@ void setRGBledColor(char color) {
case 'g':
for (int i = 0; i < 11; i++) {
pixels.setPixelColor(i, pixels.Color(0, 255, 0));
delay(100);
delay(30);
pixels.show();
}
break;
case 'y':
for (int i = 0; i < 11; i++) {
pixels.setPixelColor(i, pixels.Color(255, 255, 0));
delay(100);
delay(30);
pixels.show();
}
break;
case 'o':
for (int i = 0; i < 11; i++) {
pixels.setPixelColor(i, pixels.Color(255, 128, 0));
delay(100);
delay(30);
pixels.show();
}
break;
case 'r':
for (int i = 0; i < 11; i++) {
pixels.setPixelColor(i, pixels.Color(255, 0, 0));
delay(100);
delay(30);
pixels.show();
}
break;
case 'b':
for (int i = 0; i < 11; i++) {
pixels.setPixelColor(i, pixels.Color(0, 0, 255));
delay(100);
delay(30);
pixels.show();
}
break;
case 'w':
for (int i = 0; i < 11; i++) {
pixels.setPixelColor(i, pixels.Color(255, 255, 255));
delay(100);
delay(30);
pixels.show();
}
break;
case 'p':
for (int i = 0; i < 11; i++) {
pixels.setPixelColor(i, pixels.Color(153, 0, 153));
delay(100);
delay(30);
pixels.show();
}
break;
case 'z':
for (int i = 0; i < 11; i++) {
pixels.setPixelColor(i, pixels.Color(102, 0, 0));
delay(100);
delay(30);
pixels.show();
}
break;
case 'n':
for (int i = 0; i < 11; i++) {
pixels.setPixelColor(i, pixels.Color(0, 0, 0));
delay(100);
delay(30);
pixels.show();
}
break;
@ -709,6 +707,40 @@ void setRGBledColor(char color) {
}
}
void ledTest() {
updateOLED2("LED Test", "running", ".....");
for (int i = 0; i < 11; i++) {
pixels.setPixelColor(i, pixels.Color(255, 0, 0));
delay(30);
pixels.show();
}
delay(500);
for (int i = 0; i < 11; i++) {
pixels.setPixelColor(i, pixels.Color(0, 255, 0));
delay(30);
pixels.show();
}
delay(500);
for (int i = 0; i < 11; i++) {
pixels.setPixelColor(i, pixels.Color(0, 0, 255));
delay(30);
pixels.show();
}
delay(500);
for (int i = 0; i < 11; i++) {
pixels.setPixelColor(i, pixels.Color(255, 255, 255));
delay(30);
pixels.show();
}
delay(500);
for (int i = 0; i < 11; i++) {
pixels.setPixelColor(i, pixels.Color(0, 0, 0));
delay(30);
pixels.show();
}
delay(500);
}
// Calculate PM2.5 US AQI
int PM_TO_AQI_US(int pm02) {
if (pm02 <= 12.0) return ((50 - 0) / (12.0 - .0) * (pm02 - .0) + 0);

View File

@ -1,5 +1,5 @@
name=AirGradient Air Quality Sensor
version=2.4.11
version=2.4.13
author=AirGradient <support@airgradient.com>
maintainer=AirGradient <support@airgradient.com>
sentence=ESP8266 library for an air quality sensor featuring PM2.5, CO2, Temperature, TVOC and Humidity with OLED display.