adc_esp8266.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. '''Analog to Digital sensor (in ADC0) for the esp8266 microcontroller'''
  2. # author: Daniel Mizyrycki
  3. # license: MIT
  4. # repository: https://github.com/mzdaniel/micropython-iot
  5. from machine import ADC
  6. class ADCSensor:
  7. def __init__(self, sensor_id='adc', min_rd=0, max_rd=1024,
  8. min_val=0, max_val=1):
  9. '''Initialize sensor
  10. min_rd and max_rd are used in sample for sensor calibration
  11. min_val and max_val are the sample limits
  12. '''
  13. self.sensor_id = sensor_id
  14. self.min_rd = min_rd
  15. self.max_rd = max_rd
  16. self.min_val = min_val
  17. self.max_val = max_val
  18. self.coef = (max_val - min_val) / (max_rd - min_rd)
  19. self.adc = ADC(0)
  20. def read(self) -> int:
  21. '''Get a sensor reading using Micropython API
  22. Return 0-1024 direct ADC (0~3.3v) reading
  23. '''
  24. return self.adc.read()
  25. def sample(self) -> float:
  26. '''Get an ADC interpolated reading using ThingFlow sensor API
  27. Return min_val~max_val
  28. '''
  29. reading = self.read()
  30. return self.min_val + (reading - self.min_rd) * self.coef
  31. def __repr__(self):
  32. return "ADCSensor('%s')" % self.sensor_id