Oxocard

Auf dieser Website möchte ich einige in MicroPython geschrieben Programmbeispiele für die Oxocard vorstellen und zu eigenen Anwendungen anregen. Die hier gezeigten Programmbeispiele sind auf Github unter der URL https://github.com/ckuehnel/MicroPython/tree/main/OxoCard abgelegt.

Für die Entwicklung von Programmen für die Oxocard stehen mehrere Möglichkeiten zur Verfügung:

  • Entwicklungsumgebung TigerJython
  • Python IDE for beginners – Thonny
  • Online-Editor

TigerJython ist eine schülergerechte Entwicklungsumgebung mit einer ausgezeichneten Korrekturhilfe, die auch die Programmentwicklung für die Oxocard vollständig unterstützt. Die Vorgehensweise ist hier erklärt.

Thonny ist eine Python Entwicklungsumgebung für Anfänger, die eine komfortable Prorgammentwicklung für die Oxocard ermöglicht. Weitere Informationen zu Installation und Anwendung sind unter https://thonny.org/ zu finden.

Beim Online-Editor sind keine lokalen Installationen notwendig. Die Programmentwicklung erfolgt im Browser und über das WLAN kann das Programm auf die Oxocard geladen werden. Eine Anleitung zur Vorgehensweise ist hier erläutert.

Bevor MicroPython auf der Oxocard verwendet werden kann, muss die Laufzeit-Umgebung (Firmware) auf der Oxocard installiert (geflasht) werden. Zum Flashen kann TigerJython oder OxoFlash vewendet werden.

MicroPython Installation

Um die Oxocard mit der MicroPython Firmware zu flashen, bedarf es beispielsweise des Programms OxoFlash, dessen Windows-Installer unter http://www.tigerjython4kids.ch/download/OxoFlash.msi zu finden ist.

Die Oxocard wird über USB mit dem PC verbunden. Nach dem Programmstart kann die MicroPython Firmware selektiert werden und die Installation der Python-Firmware startet automatisch. Zusätzlich werden die von TigerJython entwickelten Bibliotheksmodule werden auf die Oxocard hinuntergeladen.

Python IDE Thonny

Thonny ist eine Python IDE (IDE = Integrated Development Environment), die auf dem PC installiert zur Programmierung der Oxocard und anderer Mikrocontroller eingesetzt werden kann.

Die grundlegende Entwicklung von Thonny erfolgte zwischen 2014 und 2018 am Institut für Computer Sciences der Universität Tartu in Estland. Seit 2018 wird die Entwicklung von Thonny teilweise durch die Fa. Cybernetica AS aus Tallin und die Raspberry Pi Foundation unterstützt.

Sie können Thonny für Windows, Mac oder Linux von der URL https://thonny.org/ herunterladen und installieren.  

Thonny kennt verschiedene Interpreter weshalb für die Arbeit mit der Oxocard auch der passende Interpreter (ESP32) selektiert werden muss. Die folgende Abbildung zeigt hierzu die Vorgehensweise.

Selektion des Interpreters

MicroPython Programmbeispiele

Ist Thonny installiert und der Interpreter für den ESP32 ausgewählt, dann kann mit der Programmierung der Oxocard begonnen werden.

Hello World

Ein Klick in das Shell-Fenster der Thonny IDE bringt den Cursor (>>>) hervor und es können MicroPython-Instruktionen eingegeben, zur Oxocard gesendet und dort bearbeitet werden. Diese Schleife wird REPL (oder Read-Eval-Print Loop) genannt.

Oberhalb des Cursors können Sie die nach dem Reset ausgegebene Versionszeile erkennen. Ich hatte hier die von TigerJython bereitgestellte Firmware v1.9 vom 13.01.2019 geflasht, was auch durch diese Ausgabe bestätigt wird. Die folgende Abbildung zeigt dann die von mir eingegebene  Instruktion print(‘Hello World’) und die darauffolgende Ausgabe „Hello World“ der Oxocard.

“Hello World”-Ausgabe in der Shell

Oxocard Internals

Mit dem „Hello World“ hatte ich gezeigt, dass die Funktion der Thonny IDE und der mit der entsprechenden Firmware versehenen Oxocard grundsätzlich gegeben war. Ein solches Programm baue ich gern etwas mehr aus, um gleichzeitig einige Funktionen der Hardware zu testen.

Das Programm Internals.py ist ein solches Beispiel. Die im folgenden Bild gezeigten Ausgaben zeigen die abgefragten Features. Ausserdem blinkt ein Neopixel des Matrix Displays gesteuert durch einen Timer im Sekundentakt.

Ausgabe Programmbeispiel Internals.py

I2C-Scan

Wollen Sie den I2C-Hub für Hardwareerweiterungen nutzen, dann ist es für die Inbetriebnahme vorteilhaft, ein Tool zum Test der angeschlossenen I2C-Devices zur Verfügung zu haben. Vergessene PullUp-Widerstände oder falsche Device-Adressen können die Fehlersuche schnell erschweren.

Das Programmbeispiel I2CScan.py ist ein solches Tool, welches den I2C-Bus nach angeschlossenen Devices abscannt und die Device-Adressen gefundener Devices ausgibt.

Bei den nächsten Programmbeispiele werde ich mit drei verschiedenen I2C-Devices arbeiten, die alle über den I2C-Hub mit der Oxocard verbunden sind.

Die ENV II Unit von M5Stack ist ein Sensor, der für die Messung von Temperatur, Luftfeuchtigkeit und Luftdruck verwendet werden kann. Verwendet werden hierzu ein SHT30 und ein BMP280. Der SHT30 von Sensirion ist ein hochgenauer Feuchte-Temperatursensor. Der BMP280 von Bosch ist ein absoluter barometrischer Drucksensor. Beide Sensoren weisen ein I2C-Interface auf (SHT30: 0x44; BMP280: 0x76).
Die TVOC/eCO2 Unit ist eine digitaler Multi-Gassensor mit integriertem SGP30 von Sensirion. Vom Sensor werden VOC (flüchtige organische Verbindungen) in der Luft gemessen. Der Sensor kann TVOC (flüchtige organische Verbindungen insgesamt) und eCO2 (äquivalenter Kohlendioxidmesswert) ausgeben, womit die Raumluftqualität bewertet werden kann.
Der Sensor weist ein I2C-Interface auf (SGP30: 0x58).
Detaillierte Informationen zur Messung der Raumluft finden Sie u.a. im Blogbeitrag https://ckarduino.wordpress.com/2021/02/04/luftqualitat-mit-ndir-und-mox-sensoren-messen/
Beim Grove – OLED Display 0.96″ handelt es sich um ein monochromes OLED-Modul mit 128 × 64 Bildpunkten. Das Display ist selbstemittierend und zeichnet sich durch große Helligkeit, hohes Kontrastverhältnis, schlankes Profil, breiten Betrachtungswinkel, weiten Temperaturbereich und geringe Energieaufnahme aus. Das OLED-Modul weist ein I2C-Interface auf (SGP30: 0x3C).
Eingesetzte I2C-Devices

Sind die o.a. I2C-Devices über den I2C-Hub mit der Oxocard verbunden, dann liefert der Aufruf des Programmbeispiels I2CScan.py die folgenden Ausgaben, die ich im nachhinein noch mit Text ergänzt habe.

Ausgabe Programmbeispiel I2CScan.py bei angeschlossenen I2C-Devices

Überwachung von Umgebungsbedingungen

Die Kontrolle und Überwachung der CO2-Konzentration in Innenräumen ist grundsätzlich ratsam, da sich die CO2-Konzentration auf Sicherheit, Gesundheit und sogar Energieeffizienz auswirken kann.

Diese Tatsachen sind seit Jahren bekannt und durch Untersuchungen an Schulen gestützt. Beispielsweise haben schon im Jahr 2008 veröffentliche Ergebnisse folgendes gezeigt: „Nur in den ersten Minuten einer Schulstunde herrschen optimale Luftverhältnisse. Dann steigen die Kohlendioxidwerte der Atemluft in der Regel schnell über das seit langem akzeptierte Maß von 1000 ppm (parts per million) hinaus an. Auch der gerade noch zu tolerierende Grenzwert von 1500 ppm wird häufig überschritten.“ (Quelle: Dicke Luft im Klassenzimmer).

Der für die Erkrankung an COVID-19 verantwortliche Virus SARS-CoV-2 wird vorrangig und mit hoher Ansteckungsrate über luftgetragene Tröpfchen (Aerosole) aus den Atemwegen Infizierter auf weitere Personen übertragen.

Aus allen diesen Erkenntnissen folgt, dass dem Lüften von Innenräumen eine herausragende Bedeutung auch zur Reduzierung des Infektionsgeschehens zukommt. Wie Schulen und Treffpunkte von Menschen darauf vorbereitet sind, können sicher nicht nur die Betroffenen ganz gut einschätzen. Übrigens, auch beim oft überfüllten öffentlichen Nahverkehr handelt es sich um geschlossene Räume.

Der Begriff Luftqualität ist leider wenig scharf umrissen ist. Schadstoffe, wie Feinstaub, Asbest, Formaldehyd, PCB, Radon, Reinigungsmittel, Schimmel, Staub, Tabakrauch und VOC (volatile organic compounds) beeinträchtigen neben dem bereits erwähnten CO2 die Luftqualität in Innenräumen.

Wie im o.a. Blogbeitrag beschrieben sind die Ergebnisse der breitbandiger messenden MOX-Sensoren, zu denen der SG30 gehört, als Maß für die Luftqualität sehr gut geeignet. Sie liefern ein gutes Indiz für die Belastung der Luftqualität durch unterschiedliche Schadstoffe einschließlich menschlicher Ausdünstungen und Gerüche darstellen. Will man eine wirkungsvolle Warnung vor zu hohen CO2-Konzentrationen vorsehen, dann kann die Messung durch Verwendung eines Sensors nach dem NDIR-Verfahren ergänzt werden.

Mit dem Programmbeispiel RoomConditionMonitor.py möchte ich die Überwachung der Umgebungsbedingungen in einem Innenraum hinsichtlich Temperatur, relativer Luftfeuchtigkeit und der Konzentration von TVOC und eCO2 vornehmen. Die verwendeten Sensoren und das zusätzliche OLED-Display hatte ich bereits erwähnt.

Nach der Initialisierung des SGP30 Sensors ist 15 Sekunden zu warten bis dass der erste Messwert abgefragt werden kann. Danach wiederholt sich die Abfrage der beiden Sensoren, die Anzeige der Messwerte auf OLED Display und über die Console sowie die Ansteuerung des Matrix Displays im Takt von 10 Sekunden.

Ausgabe OLED-Display

Für die Ansteuerung des Matrix Display ist die Funktion showLED() verantwortlich, in der auch die Grenzwerte der Bereiche gesetzt sind. Die Grenzen können Sie nach Ihren Bedürfnissen anpassen.

# LED pattern for air quality indicator
def showLED(val):
if val < 800: 
    fillRectangle(3, 3, 2, 2, GREEN) 
if val >= 800 and val < 1200: 
    fillRectangle(2, 2, 4, 4, YELLOW) 
if val >= 1200:
    fillRectangle(1, 1, 6, 6, RED)

Die Anzeige der verschiedenen Konzentrationsbereiche erfolgt farblich mit unterschiedlichen Grössen der angezeigten Fläche. Rot signalisiert hier eCO2-Werte von über 1200 ppm, die als kritisch angesehen werden. Lüften ist in dieser Situation dann unbedingt angezeigt.

Pushover

Wir kennen es alle aus dem Alltag – Push-Nachrichten auf Smartphone oder Tablet liefern Informationen zu aktuellen Events, Marketing- oder Servicehinweise und vieles andere mehr.

Bei der Entwicklung von Embedded Systems oder IoT-Knoten, zu denen nach der Inbetriebnahme nicht immer direkter Kontakt bestehen kann, können Push-Nachrichten Statusmitteilungen übertragen, die Rückschlüsse auf den Zustand des Systems erlauben und ggf. ein frühzeitiges Eingreifen in kritischen Situationen ermöglichen. Es gibt verschiedene Services, die für den Versand von Push-Nachrichten geeignet sind. Eine sehr einfache Möglichkeit, den Versand von Push-Nachrichten in ein Anwendungsprogramm zu integrieren, ist Pushover (https://pushover.net/).

Im Programmbeispiel pushover.py wird der Sensor SHT30 von Sensirion zur Messung von Temperatur und relativer Feuchte verwendet. Hierzu habe ich den ENV. II Sensor von M5Stack verwendet und über den I2C-Hub mit der Oxocard verbunden.

Unter https://www.tigerjython4kids.ch/index.php?inhalt_links=robotik/navigation.inc.php&inhalt_mitte=robotik/iot/push.inc.php ist das Einrichten von Pushover ausführlich beschrieben, weshalb ich hier darauf verzichte.

Nach der Abfrage der Messwerte werden diese nacheinander als gerundeter, zweistelliger Integerwert auf dem Matrix Display angezeigt und anschliessend in eine zu versendende Mitteilung verpackt. Auf dem Matrix Display wird der Text ‚Send message…‘ als Laufschrift ausgegeben und die Pushover Mitteilung versendet. Am Ende signalisiert der grüne Punkt den Abschluss des betreffenden Messzyklus und das Warten auf den nächsten.

Vom Mobilphone werden nun im 15 Minuten Zyklus Pushover Mitteilungen mit Angaben zur gemessener Temperatur und relativen Luftfeuchte empfangen.


2021-04-05/ck