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.

moisture.cpp 1.8KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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. #endif