TVOC_SGP30.ino 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. /*
  2. Description: The screen will display TVOC and CO2.
  3. Note: SGP30 needs 15 seconds to initialize calibration after power on.
  4. */
  5. #include <M5Stack.h>
  6. #include "Adafruit_SGP30.h"
  7. Adafruit_SGP30 sgp;
  8. int i = 15;
  9. long last_millis = 0;
  10. void header(const char *string, uint16_t color)
  11. {
  12. M5.Lcd.fillScreen(color);
  13. M5.Lcd.setTextSize(1);
  14. M5.Lcd.setTextColor(TFT_WHITE, TFT_BLACK);
  15. M5.Lcd.fillRect(0, 0, 320, 30, TFT_BLACK);
  16. M5.Lcd.setTextDatum(TC_DATUM);
  17. M5.Lcd.drawString(string, 160, 3, 4);
  18. }
  19. void setup() {
  20. M5.begin(true, false, true, true);
  21. header("SGP30 TEST",TFT_BLACK);
  22. Serial.begin(115200);
  23. Serial.println("SGP30 test");
  24. if (! sgp.begin()){
  25. Serial.println("Sensor not found :(");
  26. while (1);
  27. }
  28. M5.Lcd.drawString("TVOC:", 50, 40, 4);
  29. M5.Lcd.drawString("eCO2:", 50, 80, 4);
  30. Serial.print("Found SGP30 serial #");
  31. Serial.print(sgp.serialnumber[0], HEX);
  32. Serial.print(sgp.serialnumber[1], HEX);
  33. Serial.println(sgp.serialnumber[2], HEX);
  34. M5.Lcd.drawString("Initialization...", 140, 120, 4);
  35. }
  36. void loop() {
  37. while(i > 0) {
  38. if(millis()- last_millis > 1000) {
  39. last_millis = millis();
  40. i--;
  41. M5.Lcd.fillRect(198, 120, 40, 20, TFT_BLACK);
  42. M5.Lcd.drawNumber(i, 20, 120, 4);
  43. }
  44. }
  45. M5.Lcd.fillRect(0, 120, 300, 30, TFT_BLACK);
  46. if (! sgp.IAQmeasure()) {
  47. Serial.println("Measurement failed");
  48. return;
  49. }
  50. M5.Lcd.fillRect(100, 40, 220, 90, TFT_BLACK);
  51. M5.Lcd.drawNumber(sgp.TVOC, 120, 40 , 4);
  52. M5.Lcd.drawString("ppb", 200, 40, 4);
  53. M5.Lcd.drawNumber(sgp.eCO2, 120, 80, 4);
  54. M5.Lcd.drawString("ppm", 200, 80, 4);
  55. Serial.print("TVOC "); Serial.print(sgp.TVOC); Serial.print(" ppb\t");
  56. Serial.print("eCO2 "); Serial.print(sgp.eCO2); Serial.println(" ppm");
  57. delay(1000);
  58. }