TigerJython4Kids | HomeTurtlegrafikRobotikDatenbanken |
Sensirion mit Sitz im schweizerischen Stäfa ist einer der führenden Hersteller digitaler Mikrosensoren. Die Produktpalette des Unternehmens umfasst Gas- und Flüssigkeitssensoren sowie Differenzdruck- und Umweltsensoren zur Messung von Temperatur, Feuchtigkeit, CO2 und Feinstaub. Als Beitrag zur Technikförderung der Jugendlichen hat die Firma 500 hochpräzise Sensirion Temperatur-/Feuchtigkeit Sensoren SHT85 im Wert von über Fr. 10 000.- für den Einsatz in der Ausbildung gesponsert. |
Dieser digitale HighTech-Sensor ist samt Carrier Pin nur 17.8 mm hoch und 4.9 mm breit und liefert die Temperatur im Messbereich -40° bis +105°C und die relative Feuchtigkeit im Bereich 0 - 100%, beides auf 4 Dezimalstellen genau. |
Um die Verwendung zu vereinfachen, haben wir einen IoT-Set bestehend aus dem Sensirion Sensor SHT85, Microcontroller ESP32, SensorLink von Oxon, Didel-mbHub für den Anschluss am micro:bit und drei Verbindungskabel zusammengestellt. SensorLink und mbHub verfügen neben dem Anschluss für den Sensirion-Sensor, über einige weitere Stecker und können auch für den Anschluss von anderen I2C Sensoren und Elektronikkomponenten verwendet werden. Eine genaue Beschreibung findet man unten auf dieser Webseite. |
TJ Group-IoT-Set
|
BESTELLUNG:Das IoT-Set kann für Fr. 32.- (inkl. Versand) bei der TigerJython Group (TJ Group) einzeln oder im Klassensatz (max. 10 Stück) bestellt werden. Der Preis beinhaltet die Materialkosten für den ESP32 Microcontroller, Sensirion Temperatur- und Feuchtigkeitssensor, die beiden Steckplatinen und Verbindungskabel. Die Steckplatinen können auch für Anschluss von anderen I2C-Komponenten (z.B. CO2-Sensor) verwendet werden. Die Bestellung erfolgt mit einem EMail an |
Es gibt mehrere Möglichkeiten, das IoT-Set zu verwenden. Wir beschreiben den Anschluss des Sensirion-Sensors an einen micro:bit und mbRobot und im letzten Abschnitt die allgemeinen Anschlussmöglichkeiten für andere Sensoren und Elektronik-Komponenten. |
• | Der Didel-mbHub wird mit zwei mitgelieferten Schrauben am micro:bit an den Pins GND und 3V angeschraubt (Schraubenkopf hinten, fest anziehen). Wenn der micro:bit am PC oder an einer Stromquelle angeschlossen ist, wird auch der Hub mit Strom versorgt. Falls man einen neuen micro:bit verwendet, muss man eine Firmware installieren. Man wählt im TigerJython unter Tools/Devices microbit/Calliope aus und klickt unter Tools auf Flash Target (ausführliche Anleitung findet man im Kapitel Einrichtung). |
• | Sensirion-Sensor vorsichtig in die kleine 4-Pin Buchse am SensorLink einstecken. Der Sensor-Chip muss im nebenstehenden Bild gegen rechts, im unteren Bild nach vorne schauen. Achtung: Für den Transport empfiehlt sich, den Sensor jeweils wegzunehmen, da die Pins leicht beschädigt werden können. |
#ShtEx1.py from microbit import * import sht while True: temp, humi = sht.getValues() print(temp, humi) display.scroll(str(temp)) sleep(200) |
Anzeige im Terminalfenster |
import sht: Importiert das Modul sht | |
temp, humi = sht.getValues(): Gibt die Messwerte des Sensirion-Sensors zurück | |
display.scroll(str(temp)): Zeigt die Temperaturwerte als Scrolltext auf dem micro:bit-Display an |
Für Anwendungen mit WLAN-Kommunikation muss am micro:bit der ESP32 Microcontroller angeschlossen werden. Der ESP32 ist WLAN-fähig und erweitert wie ein Coprozessor die knappen Ressourcen des micro:bits. Ausserdem kann auf dem ESP32 ein einfacher Webserver eingerichtet werden, der auf HTTP-Requests von einem Smartphone oder PC reagiert. |
|
Beispiel 2: Die Temperaturwerte im Browser auf einem Smartphone oder PC anzeigen. Der ESP32 und der Smartphone bzw. PC müssen Zugang zum gleichen Accesspoint haben. Auf dem micro:bit wird zuerst das Programm SaveHTMLShtEx2.py ausgeführt. Dabei wird der HTML-Code einer einfachen Webseite auf den ESP32 hochgeladen. |
# SaveHTMLShtEx2.py from linkup import * html = """<!DOCTYPE html> <html> <head> <title>Sensirion</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta http-equiv="refresh" content="5"> </head> <body> <h1>Sensirion</h1> Current temperature: %s<br> </body> </html> """ print("Saving HTML...") saveHTML(html) print("Done") |
|
Mit dem Programm ShtEx2.py wird eine Verbindung zum Accesspoint erstellt und ein Webserver gestartet. Die SSID und Passwort des Accesspoints werden im Programm eingegeben. Nach dem Programmstart wird die zugeteilte IP-Adresse des ESP32 mit Scrolltext auf dem micro:bit-Display angezeigt. Wählt man im Browser diese IP-Adresse, so wird ein HTTP-GET Request an den Server gesendet und die die Callbackfunktion onRequest() aufgerufen. Der Rückgabewert dieser Funktion ist ein Tupel mit den gemessenen Sensorwerten für die Temperatur und Feuchtigkeit. Auf der Webseite wird nur die Temperatur angezeigt und die Anzeige alle 5 Sekunden aktualisiert. |
# ShtEx2.py from linkup import * from microbit import * import sht def onRequest(clientIP, filename, params): temp, humi = sht.getValues() return [temp] ipAddress = connectAP(ssid = "MySSID", password = "pw") display.scroll(ipAddress, wait = False) startHTTPServer(onRequest) |
connectAP() : Erstellt eine Verbindung zum Accesspoint (mit SSID und Passwort) und gibt die erhaltene IP-Adresse zurück | |
temp, humi = sht.getValues(): Messwerte des Sensirion-Sensors | |
startHTTPServer(onRequest): Startet einen HTTP-Servers, der die GET-Requests mit der Callbackfunktion onRequest() behandelt | |
meta http-equiv="refresh" content="5": Die Webseite wird alle 5 Sekunden aktualisiert | |
Current temperature: %s: Der HTML-Code enthält einen Format-Parameter %s, der durch den Messwert ersetzt wird |
Hat man bereits einen mbRobot mit LinkUp zusammengebaut, kann der SensorLink mit dem Sensirion-Sensor direkt am mbRobot (Maqueen) angeschlossen werden.
|
Wird beim mbRobot der ESP32 aus dem IoT-Set verwendet, schliest man den ESP an einer der weissen I2C Buchsen am SensorLink an. |
Zuerst wird, wie im Beispiel 2, einer Webseite hochgeladen. Mit dem Programm ShtEx3.py wird auf dem ESP32 ein Webserver und gleichzeitig auch ein Accesspoint mit der SSID = "mbRobot" und leerem Password eingerichtet. Will man mit einem Smartphone oder PC die Temperaturwerte anzeigen, muss mann in den WLAN-Einstellungen auf dem Smartphone/ PC den Accesspoint "mbRobot" wählen (Passwort leer) und im Browser die IP-Adresse 192.168.4.1 eingeben. Der ESP32 benötigt wieder eine zusätzliche USB-Stromversorgung. |
# SaveHTMLShtEx3.py from linkup import * html = """<!DOCTYPE html> <html> <head> <title>Sensirion</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta http-equiv="refresh" content="5"> </head> <body> <h1>Sensirion</h1> Temperature, humi: %s,%s<br> </body> </html> """ print("Saving HTML...") saveHTML(html) print("Done")
# ShtEx3.py from linkup import * from microbit import * import sht def onRequest(clientIP, filename, params): temp, humi = sht.getValues() return [temp, humi] createAP(ssid="mbRobot", password="") startHTTPServer(onRequest) |
createAP("mbRobot", password="") : Erzeugt einen Accesspoint mit der SSID="mbRobot" und leerem Passwort |
Beim Maqueen Plus steckst du den Grove-Stecker an die PINs 3V3 (rot), GND, SCL und SDA.. Diese PINs sind mit den PINs des micro:bits verbunden. |
Der Didel-mbHub und SensorLink sind so konzipiert, dass sie für den Anschluss von weiteren I2C-Sensoren und Elektronik-Komponenten verwendet werden können. Sie verfügen über drei I2C-Grove-Stecker und über weitere 4-Pin Headers (Stecker und Buchsen, 2.54 mm Norm). Die Grove-Stecker haben immer 4 Pin-Anschlüsse (GND, VCC, SDA, SCL). |
Kabelfarben: | Anschlussbezeichnung | Anschlussbelegung beim I2C-Grove |
schwarz rot weiss gelb |
GND ( -) VCC (+ , 3.3V, 3V) SDA ( D) SCL (C) |
Beispiel 4: Werte des Sensirion-Sensors am Oled-Display anzeigen
Das Oled-Display kann entweder an der 4-Pin Buchse oder mit einem Grove-Stecker angeschlossen werden. Das Modul oled ist ein Zusatzmodul und muss zuerst an den micro:bit heruntergeladen werden. Dabei geht man wie folgt vor:
|
#ShtEx4.py from microbit import * import sht import oled oled.init() while True: temp, humi = sht.getValues() print(temp, humi) oled.text(0, 0, "Temp:" + str(temp)) oled.text(0, 1, "Humi:" + str(humi)) sleep(500) |
Erklärungen zum Programmcode:
oled.init() : initialisiert den Oled-Display | |
oled.text(x, y, s) : schreibt den Text s (Zeile x, Spalte y) |