ESP32 / ESP8266 & BME280 / SHT2x sensor with InfluxDB support
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

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. }