ESP32 / ESP8266 & BME280 / SHT2x sensor with InfluxDB support
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

main.cpp 4.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. #include <Arduino.h>
  2. #include <Wire.h>
  3. #include <ESP8266WiFi.h>
  4. #include <InfluxDb.h>
  5. #include <ESP8266WebServer.h>
  6. #include <ESP8266mDNS.h>
  7. #include <Adafruit_BME280.h>
  8. #include <SHT2x.h>
  9. const char* sensor_location = "SENSOR_NAME_GOES_HERE";
  10. const char* ssid = "YOUR_SSID_HERE";
  11. const char* password = "YOUR_PASS_HERE";
  12. #define INFLUXDB_HOST "INFLUX_DB_SERVER_IP_HERE"
  13. #define INFLUXDB_PORT 8086
  14. #define INFLUXDB_DATABASE "INFLUX_DB_DATABASE_NAME_HERE"
  15. #define SENSOR_HOSTNAME_PREFIX "ESP-"
  16. Influxdb influx(INFLUXDB_HOST, INFLUXDB_PORT);
  17. ESP8266WebServer server(80);
  18. TwoWire Wire2;
  19. SHT2x sht(HTDU21D_ADDRESS, &Wire2);
  20. Adafruit_BME280 bme;
  21. bool found_bme = false;
  22. bool found_sht = false;
  23. void handleRoot() {
  24. String message = "ESP8266 BME280 Sensor";
  25. message += "\n\nLocation: ";
  26. message += sensor_location;
  27. message += "\nMAC: ";
  28. message += WiFi.macAddress();
  29. if (found_bme) {
  30. message += "\n\nBME280:";
  31. message += "\nTemperature: ";
  32. message += String(bme.readTemperature());
  33. message += "\nHumidity: ";
  34. message += String(bme.readHumidity());
  35. message += "\nPressure: ";
  36. message += String(bme.readPressure());
  37. }
  38. if (found_sht) {
  39. message += "\n\nSHT21:";
  40. message += "\nTemperature: ";
  41. message += String(sht.GetTemperature());
  42. message += "\nHumidity: ";
  43. message += String(sht.GetHumidity());
  44. }
  45. if ((!found_bme) && (!found_sht)) {
  46. message += "\n\nNo Sensor available!";
  47. }
  48. message += "\n";
  49. server.send(200, "text/plain", message);
  50. }
  51. void setup() {
  52. pinMode(1, OUTPUT);
  53. digitalWrite(1, LOW); // LED on
  54. delay(500);
  55. digitalWrite(1, HIGH); // LED off
  56. delay(500);
  57. digitalWrite(1, LOW); // LED on
  58. delay(500);
  59. digitalWrite(1, HIGH); // LED off
  60. delay(500);
  61. Wire2.begin(2, 0);
  62. found_bme = (!bme.begin(0x76, &Wire2)) ? false : true;
  63. found_sht = sht.GetAlive();
  64. if ((!found_bme) && (!found_sht)) {
  65. // no sensor available
  66. while (1) {
  67. digitalWrite(1, !digitalRead(1));
  68. delay(100);
  69. }
  70. }
  71. String hostname = SENSOR_HOSTNAME_PREFIX;
  72. hostname += sensor_location;
  73. WiFi.hostname(hostname);
  74. WiFi.mode(WIFI_STA);
  75. WiFi.begin(ssid, password);
  76. MDNS.begin(hostname);
  77. while (WiFi.status() != WL_CONNECTED) {
  78. delay(250);
  79. digitalWrite(1, !digitalRead(1));
  80. }
  81. influx.setDb(INFLUXDB_DATABASE);
  82. server.on("/", handleRoot);
  83. server.begin();
  84. }
  85. #define SERVER_HANDLE_INTERVAL 10 // in ms
  86. #define DB_WRITE_INTERVAL (30 * 1000) // in ms
  87. #define LED_BLINK_INTERVAL (2 * 1000) // in ms
  88. unsigned long last_server_handle_time = 0;
  89. unsigned long last_db_write_time = 0;
  90. unsigned long last_led_blink_time = 0;
  91. void loop() {
  92. unsigned long time = millis();
  93. if ((time - last_server_handle_time) >= SERVER_HANDLE_INTERVAL) {
  94. last_server_handle_time = time;
  95. server.handleClient();
  96. MDNS.update();
  97. }
  98. if ((time - last_db_write_time) >= DB_WRITE_INTERVAL) {
  99. last_db_write_time = time;
  100. if (found_bme) {
  101. InfluxData measurement("environment");
  102. measurement.addTag("location", sensor_location);
  103. measurement.addTag("device", WiFi.macAddress());
  104. measurement.addTag("sensor", "bme280");
  105. measurement.addValue("temperature", bme.readTemperature());
  106. measurement.addValue("pressure", bme.readPressure());
  107. measurement.addValue("humidity", bme.readHumidity());
  108. boolean success = influx.write(measurement);
  109. if (!success) {
  110. digitalWrite(1, !digitalRead(1));
  111. }
  112. }
  113. if (found_sht) {
  114. InfluxData measurement("environment");
  115. measurement.addTag("location", sensor_location);
  116. measurement.addTag("device", WiFi.macAddress());
  117. measurement.addTag("sensor", "sht21");
  118. measurement.addValue("temperature", sht.GetTemperature());
  119. measurement.addValue("humidity", sht.GetHumidity());
  120. boolean success = influx.write(measurement);
  121. if (!success) {
  122. digitalWrite(1, !digitalRead(1));
  123. }
  124. }
  125. }
  126. if ((time - last_led_blink_time) >= LED_BLINK_INTERVAL) {
  127. last_led_blink_time = time;
  128. digitalWrite(1, !digitalRead(1));
  129. }
  130. }