DeepSleep and SHT31-D alarm
-
hello everybody,
I read all the discusion about the deep sleep mode, I have temperature sensor SHT31-D https://www.adafruit.com/product/2857 and it has alarm pin, I want to make my Lopy in deepsleep and when the tempareture will be at 30° my lopy should wake up, until now without success first juste with deepsleep,
I'm using this code :
n = 1 while (n > 0): pycom.rgbled(0xff0000) # red time.sleep(0.4) line = CreateDataLine(n) logfiledata(line) ds.go_to_sleep(10) pycom.rgbled(0x7f7f00) # green time.sleep(0.4) n += 1I update the last firmware, and the SHT31 pins use P10, P9 , GND, 3V3
I hope to have an help or orientationkind regards
Maamar -
@maamar said in DeepSleep and SHT31-D alarm:
P10, P9 , GND, 3V3
A few questions:
- can you communicate with the SHT31 via I2C and get some actual readings?
- did you program the device to use the alert pin?
- to which xxPy Pin is the alert Pin of the SHT31 connected?
The code snippet you show is not very complete and has inconsistent indentation.
-
[1_1501939070055_sht31.py](Uploading 100%) [0_1501939070054_main-rev3.py](Uploading 100%)
this my code and the driver SHT31-D
-
@maamar Somehow the code did not upload. I have sent you two reputation ticks, maybe that enables it.
-
@robert-hh said in DeepSleep and SHT31-D alarm:
@maamar said in DeepSleep and SHT31-D alarm:
P10, P9 , GND, 3V3
A few questions:
- can you communicate with the SHT31 via I2C and get some actual readings?
yes and I store the Data on SD card
- did you program the device to use the alert pin?
not yet, I am strugling with driver
- to which xxPy Pin is the alert Pin of the SHT31 connected?
The code snippet you show is not very complete and has inconsistent indentation.
I will post again the code
-
from machine import I2C from machine import RTC from machine import SD from deepsleep import DeepSleep import machine import os import sht31 import time import pycom import math # to add in the boot.py the two lines #sd = SD() #os.mount(sd, '/sd') FILE_NAME = '/sd/datalog2.txt' #CURRENT_DATE_TIME = (2017, 8, 5, 00, 00, 00, 0, 0) def logfiledata (line): f = open(FILE_NAME, 'a') f.write(line) f.close() def CreateDataLine(i): th = sensor.get_temp_humi() dataCSV = 'TH'+str(i) +"\t" # point number #dataCSV += str(rtc.now()) + "\t" dataCSV += str(rtc.now()[0]) + "/" #year dataCSV += str(rtc.now()[1]) + "/" #month dataCSV += str(rtc.now()[2]) + " " #day dataCSV += str(rtc.now()[3]) + ":" # hour dataCSV += str(rtc.now()[4]) + ":" #min dataCSV += str(rtc.now()[5]) + "\t " #sec dataCSV += str(round(th[0],1)) + "\t " #Temperature dataCSV += str(round(th[1],1)) +"\n" #humidity return dataCSV pycom.heartbeat(False) #i2c = I2C(0) #i2c.init(I2C.MASTER, baudrate=100000, pins=("P9", "P19")) ds = DeepSleep() i2c = I2C(0, I2C.MASTER, baudrate=100000) sensor = sht31.SHT31(i2c, addr=0x44) th = sensor.get_temp_humi() time.sleep(0.6) pycom.rgbled(0xff007f) # magenta print("rev code 3") print("\n the Temperature SHT31 %0.2f C" % round(th[0],2)) print("\n the Humidity SHT31 %0.2f h" % round(th[1],2)) time.sleep(1) print("\n the Temperature SHT31 %0.3f C" % th[0]) print("\n the Humidity SHT31 %0.2f h" % th[1]) #print 'Temp = {0:0.3f} deg C'.format(th[0]) #print 'Humidity = {0:0.2f} h'.format(th[1]) time.sleep(1) rtc = machine.RTC() #lopy 7eca rtc.init((2017, 8, 5, 00, 00, 00, 0, 0)) print(rtc.now()) n = 1 while (n > 0): pycom.rgbled(0xff0000) # red time.sleep(0.4) line = CreateDataLine(n) logfiledata(line) ds.go_to_sleep(10) pycom.rgbled(0x7f7f00) # green time.sleep(0.4) n += 1 time.sleep(5.2) print("fin de programme ! maamar") pycom.heartbeat(True) -
@maamar
sh31 lib
from machine import I2C
import timeR_HIGH = const(1)
R_MEDIUM = const(2)
R_LOW = const(3)class SHT31(object):
"""
This class implements an interface to the SHT31 temprature and humidity
sensor from Sensirion.
"""# This static map helps keeping the heap and program logic cleaner _map_cs_r = { True: { R_HIGH : b'\x2c\x06', R_MEDIUM : b'\x2c\x0d', R_LOW: b'\x2c\x10' }, False: { R_HIGH : b'\x24\x00', R_MEDIUM : b'\x24\x0b', R_LOW: b'\x24\x16' } } def __init__(self, i2c, addr=0x44): """ Initialize a sensor object on the given I2C bus and accessed by the given address. """ if i2c == None or i2c.__class__ != I2C: raise ValueError('I2C object needed as argument!') self._i2c = i2c self._addr = addr def _send(self, buf): """ Sends the given buffer object over I2C to the sensor. """ self._i2c.writeto(self._addr, buf) def _recv(self, count): """ Read bytes from the sensor using I2C. The byte count can be specified as an argument. Returns a bytearray for the result. """ return self._i2c.readfrom(self._addr, count) def _raw_temp_humi(self, r=R_HIGH, cs=True): """ Read the raw temperature and humidity from the sensor and skips CRC checking. Returns a tuple for both values in that order. """ if r not in (R_HIGH, R_MEDIUM, R_LOW): raise ValueError('Wrong repeatabillity value given!') self._send(self._map_cs_r[cs][r]) time.sleep_ms(50) raw = self._recv(6) return (raw[0] << 8) + raw[1], (raw[3] << 8) + raw[4] def get_temp_humi(self, resolution=R_HIGH, clock_stretch=True, celsius=True): """ Read the temperature in degree celsius or fahrenheit and relative humidity. Resolution and clock stretching can be specified. Returns a tuple for both values in that order. """ t, h = self._raw_temp_humi(resolution, clock_stretch) if celsius: temp = -45 + (175 * (t / 65535)) else: temp = -49 + (315 * (t / 65535)) return temp, 100 * (h / 65535)
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login