create new tag
view all tags

Exercise 5: The I2C bus and the SHT30 Temperature and Humidity Sensor


While the DHT11 uses a proprietary protocol the SHT30 make use of a standardized protocol: the I2C protocol, invented by Philips at the beginning of the 1980's. To get you going with I2C please have a look at https://learn.sparkfun.com/tutorials/i2c/all where the protocol is nicely described.

Exercise 1: I2C Bus Scan

I2C is supported by a driver in the MicroPython binary.

The ESP32 has 2 hardware I2C interfaces (bus 0 and bus 1) with GPIO 21 connected to SDA and GPIO 22 connected to SCL of bus1.

Write a script that scans the I2C bus and prints all available I2C addresses in the following form:


In the example above only the SHT30 with its address B: 0x45 is connected to the I2C bus.

Exercise 2: Read out the SHT30

First of all let's have a look at the SHT30 documentation.


This time we are going to be lazy (?) and just use a pure Python driver written by 'Roberto Sánchez which you can find on github at https://github.com/rsc1975/micropython-sht30/blob/master/sht30.py. The most interesting documents are

Clone the sht30 repository:

git clone https://github.com/rsc1975/micropython-sht30.git

Upload the driver to the ESP32 /lib directory:

ampy put sht30.py /lib/sht30.py

Now you can import the class with:

from sht30 import SHT30

Once this is done you can try the examples from the repository README.md.

I will give no further explication on how to use the driver other than what is given in the README.md file. Please read the source code and find out yourself which methods are implemented and how to use the driver. Does it work out of the box or do we have to make some modifications? Do you find bugs? Try the code snippets given in the README.md file and make sure they do work.

Exercise 3: Can you do better? (Bonus point)

Sensirion provides a driver written in C for the STM32-Discovery board (Sample Code Humidity Sensor SHT3x). Can you port this driver to the ESP32 and translate it into Python? Make a list of all functions the SHT30 provides and mark down, which of them are accessible by Sanchez’ driver. Can you write a driver that implements all functions the SHT30 provides?

Solving this exercise requires quite some effort but you will learn how to read and analyze a data sheet and how to convert its information into working code. Finally you can integrate your code into MicroPython and make it available to others.

The exercise sheet in odt format:


-- Uli Raich - 2020-05-14


Topic attachments
I Attachment History Action Size Date Who Comment
PDFpdf SHT30Datasheet.pdf r1 manage 919.8 K 2020-05-14 - 15:18 UliRaich  
PDFpdf Sensirion_Humidity_Sensors_SHT3x_Application_Note_Alert_Mode_DIS.pdf r1 manage 334.6 K 2020-05-21 - 21:08 UliRaich  
Unknown file formatodt exercise_5.odt r1 manage 231.9 K 2020-08-09 - 08:54 UliRaich  
PNGpng i2cscan.png r1 manage 40.4 K 2020-05-14 - 15:01 UliRaich  
PNGpng sht30-1.png r1 manage 168.2 K 2020-05-17 - 18:59 UliRaich  
Texttxt sht30.py.txt r1 manage 6.5 K 2020-05-14 - 15:29 UliRaich  
Edit | Attach | Watch | Print version | History: r10 < r9 < r8 < r7 < r6 | Backlinks | Raw View | Raw edit | More topic actions
Topic revision: r10 - 2020-08-09 - UliRaich
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2020 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback