TTGO T-Watch 2020

Vorstellung

Die Tage ist bei mir die TTGO T-Watch in der Version 2020 angekommen. Das Design ist sehr ähnlich wie bei einer Apple Watch, aber mit ca. 48 x 40,5 mm zu 38 mm x 34 mm, etwas größer. Trotzdem ist die Smartwatch von der Größe her durchaus tragbar und es gibt viele, wesentlich fettere, Armbanduhren auf dem Markt. Auch das Design ist für meinen Geschmack durchaus wohlgefällig. In einem rechteckigen Rahmen mit abgerundeten Ecken aus Metall sitzt eine, angeblich kratzfeste, Scheibe. Die Rückseite ist allerdings aus Kunststoff. Im Rahmen sind auf der rechten Seite Aussparungen für einen Taster und einen USB-Anschluss.

Unter dem Display ist ein quadratisches, leuchtstarkes Farb-Display mit 240 x 240 Pixeln eingebaut. Das mag nicht unbedingt Retina-like sein, bietet aber eine, für den normalen Augenabstand, genügend hohe Auflösung und ist auch aus nicht frontalen Winkeln gut abzulesen. Das Display, oder die darüber liegende Glasschicht ist kapazitiv touchempfindlich, mit ebenfalls einer Auflösung von 240 x 240 Pixeln!

Bis hierhin ist das alles eine relativ normale Smartwatch, allerdings ohne spezielle Features wie bei Garmin die Kartennavigation oder bei Apple der Pulssensor. Dafür kostet sie im Moment bei Banggood auch nur ca. 22 Euro!

Der eigentliche Clou dieser Smartwatch ist aber etwas völlig anderes: Die Basis basiert auf dem weit verbreiteten Mikrocontroller ESP32! Dadurch ist es möglich, diese Smartwatch mit einer Arduino IDE zu programmieren. Ich kann mir also eine völlig eigene Smartwatch programmieren!

Das ist so cool!

Kritik:

  • Das schlichte (ist ok so) Armband lässt sich leider nur sehr schlecht anlegen. Dies ist im Moment mein größter Kritikpunkt an der Smartwatch.

  • Die USB Abdeckung ist aus Kunststoff und hat bei meinem Modell kleine Macken, die vermutlich schon bei der Herstellung entstanden sind.

  • Leider ist die Smartwatch nicht wasserdicht.

Extras

Mit einem ESP32 pur kann ich zwar vieles machen, aber für eine Smartwatch bedarf es einiges an Zusatzkomponenten, die die Firma LILYGO alle noch in das kleine Gehäuse gebracht hat.

Stromversorgung

Wichtig ist natürlich ein Akku, mit angeblich 350 mAh, denn wie sollte die Smartwatch sonst überhaupt am Handgelenk laufen können? Der Akku wiederum benötigt eine Ladeelektronik, die mit dem AXP202 Chip realisiert wird.

Echtzeituhr

Obwohl der ESP32 eigentlich eine RTC eingebaut hat, ist mit dem PCF8563 noch eine zusätzliche Echtzeituhr dazu gekommen. Ich kann im Moment nur vermuten, was die Gründe dafür sind. Zwei Dinge fallen mir ein: Der PCF8563 ist genauer oder er verbraucht weniger Strom.

Info:

https://www.nxp.com/docs/en/data-sheet/PCF8563.pdf

https://tronixstuff.com/2013/08/13/tutorial-arduino-and-pcf8563-real-time-clock-ic/

Beschleunigungssensor

Es ist ein BMA423 von Bosch verbaut. Der besitzt an sich schon so Features wie das Detektieren von Doppelklicks, dem Zählen von Schritten und möglicherweise auch das automatische Aktivieren des ESP32 bei Bewegung, so dass ich als Entwickler das gar nicht selbst machen muss. Und ich kann damit viele andere Dinge programmieren, wie zum Beispiel die Lage im Raum zu detektieren oder den Schlaf zu überwachen.

Vermutlich dienen Echtzeituhr und Beschleunigungsmesser dazu die Laufzeit der Smartwatch deutlich zu erhöhen. Theoretisch erlauben es die beiden Komponenten den ESP32 Mikrocontroller komplett abzuschalten, denn die Uhrzeit wird ja in der Echtzeituhr weiter laufen und der Sensor kann die Bewegung der Uhr am Handgelenk detektieren und daraufhin den ESP32 wieder aktivieren, so dass dieser die Zeit aus der Echtzeituhr holen und auf dem Display darstellen kann.

Klangausgabe

Möchte man einen Wecker in die Smartwatch programmieren, so bedarf es auf jeden Fall einer Klangausgabe, dazu hat die Smartwatch einen Class-D Verstärker und einen Lautsprecher auf, vermutlich, Piezo-Basis integriert.

Vibrationsmotor

Da der ESP32 über Wifi und Bluetooth die Möglichkeit hat mit anderen Geräten zu kommunizieren, ist es natürlich auch denkbar, dass man nur durch Vibration auf im Smartphone eingetroffene Nachrichten aufmerksam macht. Dazu ist ein Vibrationsmotor vorhanden.

Infrarotsensor

Wenn ich von vorne auf die Glasscheibe sehe, kann ich am unteren Rand unter dem Glas eine Aussparung erkennen. Was darunter zu sehen ist, ähnelt einer kleinen SMD LED. Dies könnte der auf machen Seiten angegebene Infrarotsensor sein. Als Anwendung fällt mir da als erstes eine in die Smartwatch integrierte, lernfähige Fernbedienung, als Ersatz für zahlreichen häuslichen Fernbedienungen, ein.

16 MB QSPI Flash

Hier bin ich mir im Moment nicht sicher. Ich fasse es so auf: Dies ist Speicher, der normalerweise nicht bei einem ESP32 Mikrocontroller dabei ist und darum zusätzlich in der Uhr eingebaut wurde. Er ist auch nicht direkt über Adressleitungen ansprechbar, sondern über das serielle SPI Protokoll. Und damit wesentlich langsamer im Zugriff.

Ich habe meine TTGO T-Watch von Banggood:

https://www.banggood.com/LILYGO-TTGO-T-Watch-2020-ESP32-Main-Chip-1_54-Inch-Touch-Display-Programmable-Wearable-Environmental-Interaction-Watch-p-1671427.html?rmmds=search&cur_warehouse=CN

Hinweise zur Programmierung

Von der Firma LILYGO gibt es eine Seite zu ihren T-Watch Produkten. Dort finden sich viele Informationen, wie auch viele Datenblätter zu den einzelnen elektronischen Komponenten der Smartwatch:

https://t-watch-document-en.readthedocs.io/en/latest/download/index.html#id1

Erste Programmierversuche lassen sich relativ einfach vornehmen. Einfach wie üblich die zugehörige Bibliothek

https://github.com/Xinyuan-LilyGO/TTGO-T-Watch

installieren und dann in den Bibliotheksbeispielen stöbern. Als Board unbedingt ‚TTGO T-Watch‘ auswählen! Sonst kann es zu Problemen kommen.

Viele Beispiele sind Bestandteil der Bibliothek, so dass man mit der Installation der Bibliothek auch schon viele für die Programmierung mit der Arduino IDE verwendbare Programmierbeispiele besitzt. Alle Beispiele finden sich in der Arduino IDE unter Datei->Beispiele->TTGO Twatch Library. Einfach aufrufen, sie öffnen sich dann in einem neuen Fenster der IDE. Dort das Tab ‚config.h‘ suchen und die Kommentarzeichen am Anfang der Zeile

// #define LILYGO_WATCH_2020_V1

entfernen.

Achtung: Um die Beispiele schnell auszuprobieren sollte man nicht speichern. Einfach in der Arduino IDE die Änderungen vornehmen und anschließend auf den nach rechts zeigenden Pfeil klicken. Erst wenn man ein Beispiel findet, an dem man gerne weiter arbeiten möchte, ist es notwendig das Arduino Projekt zu speichern.

Anschließend kann der Code kompiliert und auf die Smartwatch geladen werden. Aber Achtung: Viele der Beispiele funktionieren noch nicht mit dieser Smartwatch. Es gibt zwar oft einen ‚define‘-Eintrag für die Smartwatch, der ist aber bei vielen Beispielen noch einmal mit ‚// NOT SUPPORT …‘ umgeben und meine Tests zeigen, dass diese Beispiele dann tatsächlich nur eingeschränkt oder gar nicht funktionieren.

Einige ausgewählte stelle ich hier vor.

Die in vielen Werbeanzeigen dargestellte Oberfläche der Smartwatch gibt es tatsächlich:

TTGO TWatch Library→LVGL→LilyGoGui

Auf der Angebotsseite von Banggood ist die Smartwatch mit diesem Screen abgebildet. Darum dachte ich anfangs, dass es sich beim Display um ein einfaches schwarz-weißes Flüssigkristall Display handelt. Aus gründen des Energieverbrauchs fand ich das sogar sinnvoll. Leider ist es ohne jegliche Funktionnalität, es könnte einfach ein Bild sein. Ein Blick in den Code offenbart aber, dass das nicht nur ein einfaches Bild ist. Es wird tatsächlich mit den Mitteln der Bibliothek jedes Element mit seinem Zeichensatz auf das Display gemalt. Allerdings funktioniert die suggerierte Interaktivität noch nicht. Trotzdem kann man so schon ein bisschen die Programmierung lernen oder versuchen sie zum Leben zu erwecken.

TTGO TWatch Library→LVGL→SimpleWatch

Wesentlich weiter geht dieses Beispiel. Hier erhält man eine Smartwatch, die sich durchaus dazu eignet, schon einmal am Handgelenk getragen zu werden, da sie einige grundsätzlich für solche Uhren wichtige Features unterstützt. Trotzdem ist sie noch sehr, sehr weit von einem aktuell verkauften Modell der großen Hersteller entfernt. Sie kann aber mit den ersten, Anfang der 70iger, erschienenen LED-Uhren mithalten! 🙂

So zeigt sie auf Knopfdruck oder nach einem Schwenk mit dem Arm die Uhrzeit an, zeigt links oben die gelaufenen Schritte und rechts oben die Restenergie des eingebauten Akkus an. Sie demonstriert die Verwendung eines Hintergrundbildes und des Touchscreens. Eine der durch den Touchscreen aktivierbaren Menüpunkte erlaubt das Scannen nach Wifi-Netzwerken in der Umgebung. Sie schaltet nach einigen Sekunden das Display ab, wo es durch einen Druck auf den Taster wieder aktiviert werden kann und ich könnte mir nach ersten Schätzungen vorstellen, dass sie so, im Standby, über 24 Stunden (mittlerweile würde ich sogar auf über 48 Stunden tippen) aktiv bleiben kann!

Die meisten Icons sind aber ohne Funktion. Trotzdem lassen sich vermutlich einige elementare Dinge über die Programmierung der Uhr damit lernen.

Um die bei uns aktuell richtige Zeit anzuzeigen, fügt am besten die Zeile

setenv(“TZ”, “AEST-10AEDT,M10.1.0,M4.1.0/3”, 1);

direkt nach der Zeile mit ‚Serial.begin‘ in der Funktion ‚setup ()‘ ein.

TTGO TWatch Library→LVGLBatmanDial

Dies ist eine simple Uhr, die nichts weiter kann als die Zeit auf einem Hintergrund mit einem Comic-Bild von Batman zeigen.

TTGO TWatch Library→BasicUnitTouchPad

Hier kann man die beim ‚Touchen‘ auf das Display erzeugten Koordinaten direkt auf dem Display ablesen! Das ist für erste Experimente mit dem Touchpad und für eine Vorstellung vom verwendeten Koordinatensystem sinnvoll.

TTGO TWatch Library→Shield→AlarmClock

Dies scheint ein Code zur Demonstration der Aktivierung der Smartwatch nach einer kurzen Phase der Inaktivität zu sein. Optisch gibt es hier nichts zu sehen, aber da nach dem Aufwachen eine Kinderstimme abgespielt wird, demonstriert es vor allem die Klangeigenschaften der Uhr.

AMIGA Workbench für die TTGO T-Watch

Stevelord hat auf Basis der T-Watch eine von der Amiga Workbench inspirierte Smartwatch programmiert. Leider konnte ich sie nicht zum Laufen bringen.

https://github.com/stevelord/AWatch/

Anfänger Framework für die TTGO T-Watch

Ein netter Ansatz kommt von Dan Geiger auf Instructables. Er hat ein Framework entwickelt, mit dem es für Anfänger leichter wird, eigene kleine Anwendungen in eine funktionierende Uhr zu bringen:

https://www.instructables.com/id/Lilygo-T-Watch-2020-Arduino-Framework/

Alle Eigenschaften der TTGO T-Watch im Kurzüberblick

  • ESP32
  • Speicher – 16MB QSPI Flash
  • Display – 1.54-inch LCD Kapazitives Touch Display
  • Audio – Class-D Verstärker, vermutlich auf Piezo Basis
  • Taster
  • Vibrationsmotor
  • 3.7V Lithium Batterie
  • AXP202 PMIC Ladeelektronik
  • PCF8563 Echtzeituhr
  • BMA423 Beschleunigungssensor
  • Infrarotsensor

Sonstiges:

  • Gewicht: 58,5 Gramm
  • Abmessungen: ca. 48 mm x 40,5 mm
  • Temperaturbereich: -40°C ~ +85°C (TBC…)

4 Kommentare

  1. Prima Bericht!!
    Auch ich dachte zuerst an ein sparsames, reflektives s/w-LCD aus den 80ern und war begeistert.
    Sehe ich diverse Webseiten (des Herstellers zumindest von Erweiterungsmodulen), scheint die Zielgruppe im Vor- oder Grundschulalter avisiert. Vielleicht ist das auch nur, um die unförmigen Module über Kabelanschluss zu rechtfertigen.
    Aber einen kleinen Sensor-Cluster in Jackentasche oder Rucksack mit esp32-Server und BT- oder WLAN- Verbindung der Uhr als Display am Handgelenk könnte auch ich mir gut vorstellen.
    So könnte man z.B. auch auf Wanderungen unauffällig neben Temperatur, Druck und Luftfeuchte und Kompass (über günstige Arduino-Sensoren) auch — jetzt wirklich sinnvoll — CO2-Werte im Raum anzeigen lassen, obwohl man aktuell besser draussen oder zuhause bleiben sollte, wenn man nicht gerade muss. ;-(
    Ich glaube, so eine Uhr mit Terminal-Option uvam. sollte ich mir unbedingt zulegen.

  2. Danke für das Lob!
    Man kann bei LilyGo sehen, wie sie diese Uhr aus diversen, einigermaßen mobilen, Vorgängern heraus abgeleitet haben. Ob sie dabei wirklich nur Kinder im Visier hatten? Ich denke dass hier alle Beteiligte, die Hersteller genauso wie die Anwender, einfach großen Spaß daran haben, herauszufinden, was man mit soviel Computerkapazität in so kleinem Raum alles machen kann. 🙂
    Thomas

  3. Der ESP32 hat keine Adressleitungen. In der CPU sind der Bootloader und BT-/WLAN-Funktionen inkl. einiger Standardbibliotheksfunktionen in einem Mask-ROM.
    Das Programm selbst liegt immer in einem seriellen Flash welches per QSPI über einen seperaten QSPI-Port angesprochen wird. Genauso wird falls erforderlich ein PSRAM mit bis zu 8MB RAM an einem weiteren seperaten QSPI-Port angebunden. Mit internem Cache wird versucht die Latenz auszugleichen. Ein Vorteil dieser Lösung ist, daß mehrere Unabhängige Programme vorgehalten werden können und OTA-Updates einfach zu realisieren sind.

  4. Hallo Dennis,
    danke für die Informationen! Das heißt, die komplette standardmäßig vorhandene Software wird schon bei der Chip-Erstellung erzeugt? Die kann dann vermutlich auch nicht mehr geupdatet werden, oder? Und bedeutet ein serieller Zugang zum RAM nicht auch einen erheblichen Geschwindigkeitsverlust? Reicht da der Cache, um das auszugleichen? Oder wie viel Unterschied gibt das bei der Geschwindigkeit?
    LG
    Thomas

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert