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.

moisture.cpp 2.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. /*
  2. * moisture.cpp
  3. *
  4. * ESP8266 / ESP32 Environmental Sensor
  5. *
  6. * ----------------------------------------------------------------------------
  7. * "THE BEER-WARE LICENSE" (Revision 42):
  8. * <xythobuz@xythobuz.de> wrote this file. As long as you retain this notice
  9. * you can do whatever you want with this stuff. If we meet some day, and you
  10. * think this stuff is worth it, you can buy me a beer in return. Thomas Buck
  11. * ----------------------------------------------------------------------------
  12. */
  13. #include <Arduino.h>
  14. #include "moisture.h"
  15. #if defined(ARDUINO_ARCH_ESP8266)
  16. int moisture_count(void) {
  17. return 0;
  18. }
  19. int moisture_read(int sensor) {
  20. return 0;
  21. }
  22. int moisture_max(void) {
  23. return 0;
  24. }
  25. void moisture_init(void) { }
  26. #elif defined(ARDUINO_ARCH_ESP32)
  27. #include <driver/adc.h>
  28. #define ADC_OVERSAMPLE 20
  29. #define ADC_BITWIDTH 12
  30. #define ADC_BITS ADC_WIDTH_BIT_12
  31. #define ADC_ATTENUATION ADC_ATTEN_DB_11
  32. #define SENSOR_COUNT 6
  33. adc1_channel_t sensor_pin[SENSOR_COUNT] = {
  34. ADC1_CHANNEL_0, ADC1_CHANNEL_3,
  35. ADC1_CHANNEL_6, ADC1_CHANNEL_7,
  36. ADC1_CHANNEL_4, ADC1_CHANNEL_5
  37. };
  38. static int adc_read_oversampled(adc1_channel_t pin) {
  39. uint32_t sample_sum = 0;
  40. for (int i = 0; i < ADC_OVERSAMPLE; i++) {
  41. sample_sum += adc1_get_raw(pin);
  42. }
  43. return sample_sum / ADC_OVERSAMPLE;
  44. }
  45. int moisture_count(void) {
  46. return SENSOR_COUNT;
  47. }
  48. int moisture_read(int sensor) {
  49. if ((sensor < 0) || (sensor > SENSOR_COUNT)) {
  50. return -1;
  51. }
  52. return adc_read_oversampled(sensor_pin[sensor]);
  53. }
  54. int moisture_max(void) {
  55. return (1 << ADC_BITWIDTH) - 1;
  56. }
  57. void moisture_init(void) {
  58. adc1_config_width(ADC_BITS);
  59. for (int i = 0; i < SENSOR_COUNT; i++) {
  60. adc1_config_channel_atten(sensor_pin[i], ADC_ATTENUATION);
  61. }
  62. }
  63. #elif defined(ARDUINO_ARCH_AVR)
  64. #define SENSOR_COUNT 6
  65. uint8_t sensor_pins[SENSOR_COUNT] = { A0, A1, A2, A3, A4, A5 };
  66. int moisture_count(void) {
  67. return 6;
  68. }
  69. int moisture_read(int sensor) {
  70. return (analogRead(sensor_pins[sensor]) << 2) | 3;
  71. }
  72. int moisture_max(void) {
  73. return 4095;
  74. }
  75. void moisture_init(void) {
  76. }
  77. #endif