ESP32-S2-SAOLA-1MI – erste Tests

Der ESP32-S2 ist ein Single-Core-System mit einer Harvard Architecture Xtensa® LX7-CPU mit einer umfangreichen Peripherie.

ESP32-S2 Blockdiagramm

ESP32-S2-Saola-1 ist ein kleines ESP32-S2-basiertes Entwicklungsboard von Espressif, von der Bauform her mit den ESP32-DevKits vergleichbar. Die technischen Daten können in der 764 Seite umfassenden Technical Reference nachgelesen werden.

ESP RainMaker ist eine End-to-End-Plattform, mit der Hersteller ihre IoT-Ideen mit dem ESP32-S2-SoC von Espressif schneller umsetzen können, ohne die an diesem Prozess beteiligte Infrastruktur verwalten zu müssen. ESP RainMaker bietet ein Geräte-SDK, selbstanpassende Telefon-Apps, transparente Cloud-Middleware und Host-Dienstprogramme, die die Komplexität der Entwicklung reduzieren.

Die Installation in der Arduino-Umgebung ist zur Zeit noch etwas umständlich. Folgen Sie der Anleitung von Adafruit, dann ist eine erfolgreiche Installation sicher.

Einen Vergleich der ESP8266, ESP32-S2 und ESP32 finden Sie unter https://maker.pro/esp8266/tutorial/a-comparison-of-the-new-esp32-s2-to-the-esp32.

Auf Github sind unter https://github.com/ckuehnel/Arduino2020/tree/master/ESP32-S2 erste Programmbeispiele für die RGB-Led und die serielle Ausgabe zu finden.

Da im ESP32-S2 eine Xtensa LX7-CPU zum Einsatz kommt, habe ich die Performance mit einigen Benchmarks untersucht und folgende Resultate erreicht.

Resultat CoreMark
Resultat Dhrystone
Resultat Whetstone
Resultat Sieve of Erastosthenes

Die Resultates der Benchmarktests sind in der vergleichenden Darstellung nachgetragen.

2020-12-20/ck

M5Paper

M5Paper ist das jüngste Mitglied der M5Stack-Familie. Gesteuert wird M5Paper durch einen ESP32-DOWDQ6-V3 (16 MB Flash und 8 MB PS-RAM). Das 4.7″ 4-Bit-Graustufen-eINK-Display mit einer Auflösung von 540 x 960 Pixeln ermöglich eine komfortable und stromsparende Anzeige. Darüber hinaus steuert ein GT911-Chip die Touchscreen-Funktionalität. Ein 1150-mAh-Lipo-Akku hält das Gerät über lange Zeit in Betrieb und die Akkulaufzeit kann RTC-gesteuert (BM8563) in den Tiefschlaf versetzt und bei Bedarf wieder aktiviert werden. Das folgende Diagramm zeigt die zur Verfügung stehenden Ressourcen.

M5Paper Ressourcen.

Technische Detail sind auf der M5Stack Website zu finden.

Aktuell teste ich die Laufzeit des LiPo-Akkus mit einem Programm, welches im Takt von 30 min den internen SHT30 Sensor abfragt, eine WiFi-Verbindung zum Router aufbaut und eine Meldung mit den Messwerten an einen Telegram Bot sendet.

M5Paper Userinterface
Ausgabe Telegram Bot

21020-12-05/ck

M5Stack CoreInk

CoreInk ist ein neuer M5Stack Core mit einem 1,54 „s/w-E-Ink-Display. Ein ESP32-PICO-D4 steuert ein umfangreiche On-Board Peripherie. Über den Bus Connector kann der CoreInk erweitert werden. CoreInk ist mit einem LiPo-Akku mit 390 mAh ausgestattet, der in einem gewissen Rahmen den Aufbau eines batteriebetriebenen Controllers ermöglicht. Ist die Kapazität nicht ausreichend, dann kann über den USB-Anschluss auch eine Nachladung über Solar erfolgen.

CoreInk Block Diagram

Die CoreInk Rückseite weist alle erforderlichen Beschriftungen für die einzelnen Komponenten des CoreInk sowie der Interfaces nach aussen auf.

Das 200 x 200 Pixel umfassende E-Ink-Display erhält seine darzustellenden Informationen auch im stromlosen Zustand. Alle weiteren Informationen sind unter https://docs.m5stack.com/#/en/core/coreink?id=coreink zu finden.

Um die Eignung des CoreInk als batteriebetriebenen IoT-Knoten zu untersuchen, habe ich eine ENV II Unit über das Grove-Port mit dem CoreInk verbunden und messe Temperatur und relative Feuchte über diesen Sensor und die interne Batteriespannung. Die Batteriespannung ist nicht direkt zugänglich. Die Spannungsmessung erfolgt offenbar nach dem SY7088 und liegt bei etwa 4.8 V. Diese Spannung kann aber als Indikator für eine ausreichende Batteriespannung angesehen werden.

Die erhobenen Daten werden durch das E-Ink-Display angezeigt und als Message an einen Telegram Bot gesendet. Nach einer solchen Messung wird CoreInk für 30 min schlafen gelegt, um danach den Vorgang zu wiederholen.

CoreInk Messwertanzeige

Ausgaben Telegram Bot

Während der Testphase können die Daten auf @CoreInk_message_bot verfolgt werden.

Das Programm CoreInk_EnvII_Node.ino ist auf Github unter https://github.com/ckuehnel/Arduino2020/tree/master/M5Stack/CoreInk_EnvII_Node abgelegt.

Ankündigungen & Rezensionen

zum Buch „Arduino – Das umfassende Handbuch“

Gesehen bei Twitter
Gesehen in der MagPi 6/2020

»Besticht nicht nur durch Fachkompetenz und enormen Umfang, sondern auch durch die Ausstattung.« MagPi, 11/2020

Gesehen in der Zeitschrift Design & Elektronik 12/2020
Buchempfehlung am Ende des Beitrags „Arduino zielt auf »Pro«-Kunden
Bewertungen bei Amazon.de

2021-01-22/ck

CO2-Monitor mit M5StickC Plus & Sensirion SGP30

Sensirion SGPxx ist eine digitale Multi-Pixel-Gassensorplattform, die für die einfache Integration in Luftreiniger, bedarfsgesteuerte Belüftung und IoT-Anwendungen entwickelt wurde. Der SGP30 verfügt über zwei kalibrierte Luftqualitätssignale und On-Chip-Feuchtigkeitskompensation.

Das CO2eq-Ausgangssignal basiert auf einer Wasserstoffmessung. Der SGP30 ist deshalb nicht für Anwendungen geeignet, bei denen eine echte CO2-Detektion erforderlich ist, wohl aber die Luftqualität bewertet werden soll.

CO2-Monitor mit M5StickC Puls und M5Stack M5Stack TVOC/eCO2 Gas Sensor Unit SGP30

Den SGP30 Sensor gibt es als M5Stack TVOC/eCO2 Gas Sensor Unit SGP30 wodurch mit einem M5StickC Plus sehr einfach ein CO2-Monitor aufgebaut werden kann. Die oben genannten Einschränkungen gelten natürlich weiter. Will man den CO2-Monitor im Sinne einer CO2-Ample zur bedarfsgerechten Lüftung einsetzen, dann spielt die Genauigkeit des absoluten CO2-Werts aber eine untergeordnete Rolle.

Die folgenden Bilder demonstrieren das Verhalten des CO2-Monitors bei Unterschreiten resp. Überschreiten eines vorgebbaren Limits. Die blinkende Anzeige „Ventilation required!“ wird durch einen Piepton ergänzt.

Das Programm für den CO2-Monitor finden Sie im Repository Arduino 2020.

Eine Anpassung an den genaueren, nach dem Non-Dispersive Infrared (NDIR) Verfahren arbeitende CO2-Sensor SCD30 von Sensirion folgt. Die Grundlagen waren bereits im Beitrag CO2-Ampel beschrieben.

Erstellt: 2020-10-28

Grafiken für M5StickC/C Plus

Sparsam ausgestattet Mikrocontroller mit kleinen Grafikdisplays müssen nicht auf die Darstellung von Bildern o.ä. verzichten.

Das Anzeigen eines Eröffnungsscreens beim Programmstart oder eines Bilds als Hintergrund ist bei der Gestaltung eines grafischen User-Interfaces (GUI) sehr verbreitet. Die Libraries zu den beliebten M5StickC/C Plus unterstützten die Darstellung von Bitmaps. Die folgende Abbildung zeigt ein Beispiel für den Eröffnungsscreen eines Programms zur Messung der Wassertemperatur.

In meinem Blogbeitrag Messung der Wassertemperatur habe mit einem M5StickC und einem wasserdichten DS18B20-Temperatursensor mit einer Zuleitungslänge von 1 m ein portables Messgerät aufgebaut, mit dem die Wassertemperatur in 1 m Tiefe gemessen werden kann.

Neben einer numerischen Anzeige der gemessenen Wassertemperatur ist es schön, wenn sich auf der Anzeige des Thermometers nach dem Einschalten ein sogenannter Eröffnungsscreen zeigt, der beispielsweise die Initialisierung o.ä. überbrückt.

Anzeige des Temperaturmesswertes und des Batteriestatus

Was ist also zu tun, um das nebenstehende Bild als Eröffnungsscreen auf dem M5StickC/C Plus zur Verfügung zu stellen?

Komplexer ausgestattete Mikrocontroller haben oft eine microSD-Card, auf die Grafikdateien als BMP oder JPG ausgelagert werden können. Der M5StickC/C Plus weist keine solche microSD-Card auf, weshalb das darzustellende Bild im Codebereich gespeichert werden muss. Hierzu gibt es mit dem LCD Image Converter ein sehr komfortables Tool, welches die Bilddaten in Quelltext konvertiert.

Anhand des oben gezeigten Bildes möchte ich das Vorgehen schrittweise erläutern. Das Bild selbst habe ich als JPG-Datei mit einem Bildverarbeitungsprogramm in der Dimension 80 x 160 Pixel, also passend für das LCD des M5StickC erstellt. Beim M5StickC Plus wären hier 135 x 240 Pixel möglich. Die Unterschiede in der grafischen Darstellung der beiden Displays können Sie unter M5StickC Plus vs. M5StickC betrachten.

Nach dem Herunterladen und Entpacken des LCD Image Converters kann dieser gestartet werden. Nach dem Start öffnet sich das folgende Fenster und die Option New Image ist auszuwählen.

Im nächsten Schritt ist dem neu zu erzeugenden Bild ein Name zu geben. Der Einfachheit halber nenne ich das Bild image.

Durch den Import der vorgängig erzeugten JPG-Datei werden dem LCD Image Converter die zu bearbeitenden Daten zur Verfügung gestellt.

Mit der Darstellung des geladenen Bilds im LCD Image Converter sind alle Vorkehrungen getroffen und die Konvertierung kann noch konfiguriert werden.

Nach Auswahl des Menus Options>Conversion sind im Tab Prepare die ersten Schritte der Konfiguration zu sehen. Ich habe die zu setzenden Optionen eingerahmt.

Im Tab Image werden die nächsten Schritte der Konfiguration vorgenommen. Ich habe die zu setzenden Optionen wiederum eingerahmt. Die Einhaltung dieser Optionen ist wichtig, da sonst die im M5StickC-Anwendungsprogramm verwendete Funktion drawBMP() nicht erwartungsgemäß arbeiten kann.

Nach diesen Vorbereitungen kann die Konvertierung gestartet und das Ergebnis als Datei image.c abgespeichert werden.

Die erzeugte Datei ist stark gekürzt im folgenden Listing wiedergegeben. Für uns von weiterem Interesse sind nur die im Array image_data_image[12800] abgelegten Bilddaten, die nun in das M5StickC-Anwendungsprogramm eingearbeitet werden können.

/*******************************************************************************
* image
* filename: unsaved
* name: image
*
* preset name: Color R5G6B5
* data block size: 16 bit(s), uint16_t
* RLE compression enabled: no
* conversion type: Color, not_used not_used
* bits per pixel: 16
*
* preprocess:
*  main scan direction: top_to_bottom
*  line scan direction: forward
*  inverse: no
*******************************************************************************/
/*
 typedef struct {
     const uint16_t *data;
     uint16_t width;
     uint16_t height;
     uint8_t dataSize;
     } tImage;
*/

#include <stdint.h>

static const uint16_t image_data_image[12800] = {
0xe73c, 0xe73c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe73c, 0xe75c, 0xef5d, 0xef5d, 0xf75e, 0xef5d, 0xef7c, 0xef9d, 0xf77e, 0xef7e, 0xef9d, 0xef5e, 0xf77e, 0xef7e, 0xef7e, 0xef7d, 0xef7e, 0xef7e, 0xef7e, 0xef7e, 0xf79e, 0xef7e, 0xef7e, 0xef7e, 0xef7e, 0xef7e, 0xef7e, 0xef7e, 0xef7d, 0xef7d, 0xef7d, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xef7d, 0xef7d, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xef7d, 0xef7d, 0xf79e, 
…
0xf79d, 0xef9d, 0xf79e, 0xf79e, 0xf7bd, 0xf7be, 0xf79d, 0xf79e, 0xf7be, 0xf7be, 0xf7be, 0xf7be, 0xf7be, 0xf7be
};

const tImage image = { image_data_image, 80, 160, 16 };

Im Anwendungsprogramm ist die Integration der Bilddaten selbst sehr einfach. Wie der folgende Quelltext zeigt, sind nach der Initialisierung nur zwei Instruktionen dafür vorhanden. Mit der ersten Instruktion M5.Lcd.fillScreen(TFT_BLACK) wird der Bildschirm gelöscht. Die zweite Instruktion M5.Lcd.drawBitmap(0, 0, image_width, image_height, image) stellt die Bilddaten beginnend oben links auf dem LCD dar. Die Bilddaten sind in der Datei bmp.h abgelegt, die in der ersten Zeile eingebunden wurde.

#include "bmp.h"             // Sketch tab header for bmp image
#include <M5StickC.h>

void setup() 
{
  M5.begin();

  M5.Lcd.fillScreen(TFT_BLACK);
  M5.Lcd.drawBitmap(0, 0, image_width, image_height, image);
  ...
}
 
void loop() 
{
  ...
}

In der Datei bmp.h sind die durch den LCD Image Converter erzeugten Bilddaten im Array image[] abgelegt. Diese umfangreichen statischen Daten werden durch PROGMEM im Flash abgelegt. Außerdem sind noch die Dimensionen des Bildes in den beiden #defines abgelegt. Damit sind in der Datei bmp.h alle für die Instruktion M5.Lcd.drawBitmap(0, 0, image_width, image_height, image) erforderlichen Daten vorhanden.

#include <pgmspace.h>  // PROGMEM support header

#define image_width 80
#define image_height 160

PROGMEM static const uint16_t image[12800] = {
0xe73c, 0xe73c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe73c, 0xe75c, 0xef5d, 0xef5d, 0xf75e, 0xef5d, 0xef7c, 0xef9d, 0xf77e, 0xef7e, 0xef9d, 0xef5e, 0xf77e, 0xef7e, 0xef7e, 0xef7d, 0xef7e, 0xef7e, 0xef7e, 0xef7e, 0xf79e, 0xef7e, 0xef7e, 
…
0xf79d, 0xef9d, 0xf79e, 0xf79e, 0xf7bd, 0xf7be, 0xf79d, 0xf79e, 0xf7be, 0xf7be, 0xf7be, 0xf7be, 0xf7be, 0xf7be
};

Zum Abschluss möchte ich noch das ausgegebene Bild vorstellen, das in der Realität durchaus besser als im Screenshot ausschaut.

Erstellt: 2020-10-25

AZ-Touch ESP32 Grafiktest

Mit den ESP8266- und ESP32-basierten Mikrocontrollermodulen lassen sich wegen der vorhandenen WiFi-Konnektivität recht schnell die unterschiedlichsten IoT-Anwendungen erstellen.

AZ-Touch ist ein Touchscreen-Gehäuseset, das speziell für die Wandmontage entwickelt wurde. Der interne Print ist vorbereitet für NodeMCU Amica (ESP8266), AZ-Delivery D1 Mini (ESP8266) and ESP32 DEV KIT C.

AZ-Touch wird in einem schönen Gehäuse für die Wandmontage zusammen mit einem resistiven 2,4-Zoll-Touchscreen geliefert und ermöglicht es Ihnen, Ihr Projekt dauerhaft im Wohnbereich oder Büro zu montieren.

Auf der Seite des Herstellers Zihatec finde Sie alle erforderlichen Informationen für die Bestellung und die Inbetriebnahme des AZ-Touch.

Um die Eigenschaften der Kombination ESP32-Mikrocontroller und ILI9341-TFT-Display habe ich die Anzeige mit dem Programm TFT_graphictest_PDQ.ino aus der TFT_eSPI-Library von Bodmer getestet. Das Programm steht auf Github zum Download bereit.

TFT Benchmark ESP32-ILI9341

Der TFT-Benchmark ist controller- und library-spezifisch und hier nicht weiter optimiert. Aus den einzelnen Zeiten wird aber deutlich, dass Display und zugehörige Library eine sehr ordentliche Performance in dieser Leistungsklasse aufweisen. Um eine bessere Vorstellung zu bekommen, zeigt das Video weiter unten die Bildinhalte des TFT-Benchmarks.

Messung von Umweltdaten

Für den Aufbau einer CO2-Ampel oder anderer Anwendungen zur Messwerterfassung von Umweltdaten sind zuverlässige Sensoren erforderlich.

Mit dem SCD30 von Sensirion habe ich bereits Messwerte für Temperatur, relative Luftfeuchtigkeit und CO2 erfasst und zur Anzeige gebracht.

Für kompakte Anzeigemodule habe ich den Sensor CCS811 von AMS/ScioSense ausprobiert, der von verschiedenen Herstellern als Breakout Board angeboten wird. Das DFRobot Environmental Module ist eine Kombination mit einem BME280 als Breakout Board, was ich einem ersten Test unterzogen habe.

Von Sensirion ist der SCD40 angekündigt, den ich ebenfalls einem Test unterziehen werde.

2020-10-11

Neues OLED-Shield für Hutschienen-Gehäuse von Zihatec

Im Arduino Handbuch stelle ich Ihnen u.a. die Hutschienen-Gehäuse für den Arduino von Zihatec sowie ein passendes OLED-Shield vor. Zihatec bietet nun eine Weiterentwicklung des OLED-Shields an.

Das OLED-Shield weist drei Taster und drei LEDs auf. Die Größe des OLED-Displays wurde auf 1.3 Zoll erhöht. Darüber hinaus enthält das Shield jetzt auch einen Summer, um eine akustische Ausgabe zu ermöglichen.

OLED-Shield (Quelle: Zihatec)

Aktualisiert am 15.09.2020