Exercise 5: The I2C bus and the SHT30 Temperature and Humidity Sensor
Introduction
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.
The most interesting documents are
Using a driver from github
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.
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:
https://iotworkshop.africa/pub/IoT_Course_English/TheI2CBusAndTheSHT30TemperatureAndHumiditySensorexercise_5.odt
--
Uli Raich - 2020-05-14
Comments