WordClock mit WS2812
Einleitung
Dieser Artikel ist der Nachfolger der beiden Projekte Word_Clock und WordClock24h. Diese Projekte werden hier zusammengefasst und mit derselben Hard- und Software realisiert. Es ist damit der Bau einer 12-Stunden WordClock und einer minutengenauen 24-Stunden WordClock möglich.
Um die beiden Varianten zu unterscheiden, wird die 12-Stunden-Variante im folgenden WordClock12h und die 24-Stunden-Variante WordClock24h genannt.
Zugehöriger Thread im Forum: (TODO)
Bilder:
Software
Die Software ist sowohl auf dem STM32F401RE oder STM32F411RE Nucleo Board als auch auf einem STM32F103 Mini-Development Board lauffähig.
Features
Die Software wird ständig weiterentwickelt. Folgende Punkte wurden bereits umgesetzt:
- Lauffähig auf STM32F401 Nucleo, STM32F411 Nucleo und STM32F103C8T6 Mini-Development Board
- Anbindung IR-Fernbedienung mittels IRMP
- Monitoring/Benutzeroberfläche mittels MCURSES
- Einstellen des Anzeigemodus ("Sprache") und der Farbe per IR-Fernbedienung
- Anbindung von LED-Stripes des Typs WS2812 und WS2812B
- Sanftes Überblenden der Uhrzeiten auf den LEDs
- Wählbare Animationen bei Uhzeitwechsel
- Automatische Helligkeitsregelung mittels LDR (optional)
- Anbindung einer externen DS3231-RTC
- Anbindung eines externen I2C-EEPROM
- Optionale Anbindung eines DCF77-Moduls
- Optionale Anbindung eines ESP8266-WLAN-Moduls
- Holen der Uhrzeit per TIME- oder NTP-Protokoll aus dem Internet
- Optionale Temperaturmessung und -Anzeige mit DS18xx-Sensor
- Fernsteuerung per Android App
- Ambilight
Download
EM::Blocks-Projekt, Version 1.6.0 vom 29.12.2015: Tarball
SVN hier auf mikrocontroller.net: svn://mikrocontroller.net/wordclock24h/
Repo-Browser: WordClock24h im SVN
Hex-Dateien, wenn man - ohne zu compilieren - direkt flashen will:
Version 1.6.0 Nucleo401-Board: Datei:Wclock24-nucleo401.hex
Version 1.6.0 Nucleo411-Board: Datei:Wclock24-nucleo411.hex
Android App 1.5: Datei:WC24h.apk (NEU!)
Eine ältere Android-App kann nur noch die unteren 32 Helligkeitsstufen ansteuern. Setzt man die STM32-Software-Version 1.4. oder höher ein, ist ein Update der App auf 1.4 oder höher sinnvoll.
Wie man diese APK unter Android installiert, kann man hier nachlesen:
Am einfachsten erlaubt man die Installation von Apps "aus unbekannten Quellen" und klickt anschließend direkt auf dem Android-Gerät auf den Download-Link. Dann kann man das Programm direkt nach dem Download installieren.
Letzte Änderungen
Version 1.6.0:
- Neben dem TIME-Protokoll (TCP) wird nun auch NTP (UDP) unterstützt - für ESP-Firmware-Versionen ab 0018000902.
Version 1.5.9:
- Unterstützung der neueren ESP Versionen 0020000903 und AT 0.21.0.0
- Vergrößerung der UART-FIFOs
- Verallgemeinerung der UART-Funktionen zwecks besserer Konfiguration
- Überarbeitung der MCURSES-Monitor-Oberfläche
Version 1.5.8:
- Bugfix: Fehler in 1.5.7 (Falsche Behandlung des DMA-Buffers) wurde behoben
- Neu: Bis zu 100 weitere LEDs hinter der Buchstabenkette werden als Ambilight angesteuert
Version 1.5.7:
- Bug in uart-Code für STM32F103 beseitigt - irrelevant für Nucleo STM324xx
- Timing für WS2812B angepasst, es werden nun WS2812 und WS2812B unterstützt
- Anzahl der möglichen WS2812-LEDs ist nun variabel gehalten. Das ist Voraussetzung für das demnächst verfügbare Ambilight.
Version 1.5.6:
- Unterstützung von ESP8266 mit neuerer Firmware, welche \r\n statt \r erwartet
- Unterstützung von verschiedenen Baudraten des ESP8266-Moduls
- Automatische Umschaltung von 9600Bd auf 115200Bd beim ESP8266
Version 1.5.5:
- Optimierungen im LED-Display-Code
- Diverse Anpassungen an STM32F103
Version 1.5.4:
- Automatische IR-Anlernroutine in den ersten 3 Sekunden ab Programmstart
- Kleiner Bugfix bei den möglichen Helligkeitsstufen (Dimmer)
Version 1.5.2:
- Anzeige der Firmware-Version des ESP8266-Moduls im MCURSES-Monitor
- Korrektur in den Worttabellen für die Wörter ACHT und VIER in der zehnten Reihe
Version 1.5.1:
- Manuelle Helligkeitsregelung per MCURSES-Monitor / IR-Fernbedienung / Android-App eingebaut
- Automatische Helligkeitsregelung per LDR nun über MCURSES-Monitor / IR-Fernbedienung / Android-App ein-/ausschaltbar
Version 1.4.2:
- Die geladenen aus dem EEPROM RGB-Werte wurden nach dem Boot nicht mehr sofort übernommen. Ist korrigiert.
Version 1.4.1:
- Initialisierung des ADC korrigiert
- Automatische Helligkeitsregelung dunkelt nicht mehr so stark ab.
Version 1.4.0:
- Automatische Helligkeitsregelung mittels LDR
- Helligkeitsstufen von 32 auf 64 erhöht
- LED-Testprogramm eingebaut (Taste 'T' im MCURSES-Monitor)
- Anzeige des DS18xx-Typs im MCURSES-Monitor)
- Unterstützung für Status-LED (beachte geändertes LED-Anschluss-Schema!)
- Android App an 64 Helligkeitsstufen angepasst
Version 1.3.1:
- Sporaisches Hangup-Problem nach Auslesen der Temperatur behoben
- Fehler bei der Erkennung des Family-Codes für DS18xx beseitigt
- Optimierung des Zeitverhaltens beim Zugriff auf OneWire-Bus
- Optimierung des WS2812-Codes
Version 1.3.0:
- Unterstützung von DS18xx-Temperatursensoren
- Temperatur-Anzeige innerhalb +10°C und 39,5°C
- Korrektur Sommerzeitumstellung
- Keine Unterstützung mehr von STM32F4-Discovery
Version 1.2.0:
- IRMP-Konfigurationsfehler behoben
Version 1.1.0:
- Animationen hinzugefügt
- Neue Tabellen für Uhrzeit und Temperatur
Version 1.0.0:
- Test auf verschiedene Adressen des I2C-EEPROMs
- EEPROM-Speicherplatzverbrauch minimiert
- RTC DS3231-Routinen auf DS1307 verallgemeinert
- Network Listener (UDP) zum Fernsteuern der Uhr über WLAN
- Android App zum Fernsteuern der Uhr (Ein/Aus, Farben, Anzeigemodus)
Version 0.9.1:
- EEPROM-Hexdump im MCURSES-Monitor eingebaut
- Zusätzliche Waitstates beim Beschreiben des EEPROMs
Version 0.9:
- Zusätzlicher Anschluss von RST und CH_PD des ESP8266-Moduls
- Verbesserung der ESP8266-Konfiguration dank Hardware-Reset
- Nutzung des Stromsparmodus im ESP8266, wenn die Anzeige abgeschaltet wird
- Konfiguration der Zeitzone über MCURSES-Monitor
- Test und Überarbeitung der EEPROM und RTC-Funktionen
- Synchronisation der RTC-Zeit mit dem µC-Timer
- Speichern folgender Daten im EEPROM:
EEPROM-Version
IRMP-Daten einer angelernten IR-Fernbedienung
Aktuell eingestellte Farben und Anzeigemodus
IP-Adresse des Timeservers
Zeitzone
Version 0.8:
- Neue IR-Fernbedienungs-Tasten POWER und OK
- Einbau einer konfigurierbaren "Nachtzeit", in der sich die Uhr selbstständig abschaltet
- Konfiguration des Timeservers über MCURSES-Monitor
- Speichern/Laden sämtlicher Konfigurations-Daten in externem EEPROM
- Initialisierung des ESP8266 verbessert (warten, bis nach PowerOn eine WLAN-Verbindung besteht)
- Aufteilung der Anzeige-Logik und des MCURSES-Monitors auf dsp.c und monitor.c
- Aufteilung der ESP8266-Routinen auf esp8266.c (low-level) und timeserver.c (high-level)
- Diverse Optimierungen - u.a. durch Einsatz von uint_fast8_t
- Diverse Bugfixes
Version 0.7.1:
- Portierung der Software auf STM32F411RE Nucleo Board
Version 0.7:
- Portierung der Software auf STM32F401RE Nucleo Board
- uart2.c generalisiert auf uart.c (verschiedene UARTs möglich)
- Bugfix im UART-Ringbuffer-Code (Interrupt-Sperre)
- Anzeige der Online-Devices (ESP8266, DCF77, EEPROM, RTC) im Terminal
- Verschiedene Optimierungen
Version 0.6:
- Konfiguration des WLAN-Moduls (SSID & Key) nun über Terminal statt fest im Code verdrahtet.
- Einstellung der Zeitzone möglich. Standard ist GMT+1, also mitteleuropäische Zeit.
- DCF77- und ESP8266-Modul-Aktivierung automatisch - keine Einstellung mehr im Code notwendig.
- I2C-Lib hinzugefügt (noch ungetestet und daher noch nicht verwendet).
- I2C-EEPROM-Modul hinzugefügt (noch ungetestet und daher noch nicht verwendet).
- I2C-RTC-Modul (DS3231) hinzugefügt (noch ungetestet und daher noch nicht verwendet).
Software für Windows
- EM::Blocks IDE, siehe http://www.emblocks.org/, nur notwendig, wenn man selber die Sources übersetzen möchte!
- ST-Link/V2 Software zum Flashen, siehe: http://www.st.com/web/catalog/tools/FM146/CL1984/SC724/SS1677/PF251168
- STM32 Virtual COM Port Driver: http://www.st.com/web/en/catalog/tools/PF257938
- PuTTY (http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html) oder andere Terminal-Emulation
Hardware
- STM32F401RE Nucleo und STM32F411RE Nucleo
Es kann sowohl das 401er als auch das 411er Nucleo-Board verwendet werden. Beide werden
identisch genutzt.
Damit das Board später für den Einbau nur noch (incl. Shield) 2cm hoch ist, sollte
man die überstehenden Enden der Steckerleisten auf der Unterseite mit einer
Kneifzange kürzen. Die beiden Jumper auf der Unterseite (beim ST-Link-Device-Teil)
können dabei auf die Oberseite gesteckt werden.
Es gibt zwei verschiedene Revisionen von den Nucleo-Boards:
- "MB1136 C01": Der STM32F4x1 läuft nur mit dem ungenauen internen Oszillator
- "MB1136 C02": Der STM32F4x1 erhält seinen 8MHz Takt vom ST-Link-Devices
Damit auch das Board mit der Revision "MB1136 C01" zuverlässig im HSE-Modus mit
84MHz läuft, sind folgende Hardware-Änderungen notwendig:
- Lötbrücken SB54 und SB55 entfernen (mit Lötkolben erhitzen und wegschnippen)
- Lötbrücken SB16 und SB50 entfernen (dito)
- R35 und R37 jeweils mit einem Stück Draht oder 0R-Widerstand bestücken
- Quarz X3 (8 MHz) einlöten
- C33 und C34 mit jeweils 22pF bestücken. Diese können auch normale THT-Bauteile sein,
wenn man die Drähte vorher kürzt. Ich habe sie auf der Unterseite direkt an den Quarz-
Anschlüssen angebracht, siehe Foto rechts. Es geht aber auch auf der Oberseite direkt
an den dafür vorgesehenen Lötstellen - dann aber vorzugsweise mit 0603 SMD-Kondensatoren.
Man sollte auf jeden Fall erst die beiden Drahtbrücken R35 & R37 einlöten, bevor
man den Quarz bestückt. Dann hat man wesentlich mehr Platz für den Lötkolben ;-)
Es emfiehlt sich jedoch, diese Änderungen auch mit dem Board der Revision "MB1136 C02"
durchzuführen, da wir später für die endgültige Uhr den ST-Link-Teil der Platine absägen
werden. Dafür ist extra eine Bruchstelle vorgesehen. Nur so ist das Board dann schmal
genug, damit es hinter den 7,5cm schmalen Rand der Frontplatte passt.
Nicht wundern: Je nach Revision des Boards sind einige der oben genannten Lötbrücken erst
gar nicht bestückt. Dann braucht da auch nichts entfernt zu werden. Das hier beschriebene
stellt also den gewünschten Endzustand dar.
Diese Arbeit ist in ca. 10 Minuten erledigt. Besondere SMD-Lötkenntnisse benötigt man dafür nicht.
- TSOP31238
Anschlüsse: TSOP-Pin1 an Nucleo-Board GND, TSOP-Pin2 an Nucleo-Board 5V, TSOP-Pin3 an Nucleo PC10
- WS2812 LED-Streifen mit 288 LEDs, pro Zeile 18 LEDs. Zum Test reicht erstmal ein Streifen mit 18 LEDs
Anschlüsse: Stripe +5V an externe Stromversorgung +5V
Stripe DI über einen Serienwiderstand von 220 Ohm an Nucleo PC6
Stripe GND an externe Stromversorgung GND und(!) an Nucleo GND
- Optional: DS18xx als Temperatur-Sensor
Es werden unterstützt:
- DS1820
- DS18S20
- DS1822
- DS18B20
Anschlüsse: DS18xx-GND (Pin 1) an Nucleo GND
DS18xx-DQ (Pin 2) an Nucleo PD2 und über Pullup 4,7k an DS18xx-VDD
DS18xx-VDD (Pin 3) an Board-interne oder externe 3,3V
- Optional: LDR zur Messung der Umgebungshelligkeit
Anschlüsse:
AGND -----+
|
R = 1K
|
PC4 ------+
|
LDR (Reichelt: "LDR 07")
|
3,3V -----+
Wird kein LDR benutzt, sollte PC4 per 10k-Pullup auf 3,3V gelegt werden
- Optional: DCF77 Modul
Anschlüsse: DCF77 GND an Nucleo GND
DCF77 V+ an Nucleo 3,3V
DCF77 Out an Nucleo PC11
Getestet wurde die Software mit dem Reichelt-DCF77-Modul, das aber lediglich ein
befriedigendes Empfangsverhalten hat.
Wird ein DCF77-Modul benutzt, welches einen Open-Collector-Ausgang
verwendet, muss an PC11 noch ein 100k Pullup (zu 3,3V) angeschlossen werden.
Wird KEIN DCF-Modul verwendet, sollte PC11 per 100k Pullup auf 3,3V gelegt werden!
- Optional: ESP8266 ESP-01: WLAN Modul
Anschlüsse: ESP8266 GND an Nucleo GND
ESP8266 VCC an externe 3,3V (Vorsicht: Modul zieht bis zu 200mA!)
ESP8266 CH_PD an Nucleo PA6 (NEU AB VERSION 0.9!)
ESP8266 RST an Nucleo PA7 (NEU AB VERSION 0.9!)
ESP8266 TXD an Nucleo USART6 RX (PA12)
ESP8266 RXD an Nucleo USART6 TX (PA11)
Wird KEIN ESP8266-Modul verwendet, ist nichts weiter zu beachten, da die Erkennung automatisch erfolgt.
- I2C-Modul mit DS3231 als RTC und EEPROM
Dieses Modul (siehe auch Foto rechts) findet man bei eBay oder Amazon ab ca. 2 EUR, wenn man als
Suchbegriff "DS3231 EEPROM" eingibt.
Anschlüsse: I2C GND an Nucleo GND
I2C VCC an Board-interne oder externe 3,3V
I2C SCL an Nucleo PA8
I2C SDA an Nucleo PC9
NEU: AB Version 1.0 werden auch RTC/EEPROM-Module mit DS1307 korrekt erkannt.
Da die Module aus China teilweise auch ohne bestückte Batterien gesendet werden, sollte man sich
genau überlegen, ob man die Batterie CR2032 oder den Akku LiR2032 einbaut.
-----------------------------------
(Edit jar) LiR hier nachkaufen ist aber viel teurer als gleich welche mit LiR zu bestellen
LiR Einzelpreis ab 3€ + Versand, da war es billiger neue Module zu kaufen bei einem Händler
der LiR bestückt mitliefert 1,74€. Ob nun die CR oder LiR langlebiger ist kann ich nicht abschätzen.
-----------------------------------
Sind sowohl die Diode 1N4148 als auch der Widerstand neben dem RTC-IC bestückt, dann kann man
auch den Akku (relativ teuren) LiR2032 einsetzen. In diesem Fall muss man das Modul aber mit
+5V statt 3,3V betreiben, damit überhaupt geladen wird.
Möchte man das Modul mit einer CR2032 betreiben, sollte man sicherheitshalber die Diode
oder den Widerstand (neben der Diode) auf dem Modul entfernen (falls vorhanden, siehe Bild),
damit keine Ladung der Batterie passiert. Das ist zwar eigentlich erst ab einer Betriebsspannung
von ca. 3,7V möglich, aber sicher ist sicher. Im Normalfall reicht auch eine CR2032 für 5-10 Jahre.
Es ist wenig ratsam, ein DCF77- und das ESP8266-Modul gleichzeitig einzusetzen, da das ESP8266-WLAN-Modul den DCF77-Empfänger stören kann. Im Zweifel sollte man sich für eine der beiden Möglichkeiten entscheiden.
Anschlusstabelle
| Device | STM32F4x1 Nucleo |
|---|---|
| TSOP38238 (IRMP) | GPIO: PC10 |
| DS18xx | GPIO: PD2 |
| DCF77 | GPIO: PC11 |
| LDR | GPIO: PC4 |
| MCURSES terminal (USB) | USART2: TX=PA2 RX=PA3 |
| ESP8266 | USART6: TX=PA11 RX=PA12 |
| ESP8266 | GPIO: RST=PA7 CH_PD=PA6 |
| I2C DS3231 & EEPROM | I2C3: SCL=PA8 SDA=PC9 |
| WS2812 | DMA1: PC6 |
Start
Dieses Kapitel beschreibt den Download der Software auf das verwendete Board und die erstmalige Prüfung und Konfiguration.
Geflasht wird mit dem ST-Link-Programm, siehe oben.
Zur Überprüfung sämtlicher Funktionen und zur Konfiguration dienst der MCURSES-Monitor. Dazu benötigt man ein Terminal-Emulationsprogramm (wie zum Beispiel PuTTY) und ein Mini-USB-Kabel für das Nucleo-Board.
Laut http://www.mikrocontroller.net/topic/356203#3979181 sollte man dabei die "blauen" USB3.0-Buchsen möglichst meiden.
Ablauf für STM32F401RE und STM32F411RE Nucleo:
- Nucleo-Board und PC mit Mini-USB-Kabel verbinden (zum Flashen, Debuggen und als COM-Schnittstelle)
- Wenn man die EM::Blocks-IDE einsetzt: Projekt auf "Nucleo401-Release" bzw. "Nucleo411-Release" einstellen, dann compilieren
- wclock24-nucleo401.hex bzw. wclock24-nucleo411.hex (aus dem Ordner wclock24h\bin\Release oder direkt hier herunterladen) flashen
- PuTTY starten
- PuTTY einstellen: Auswahl "Serial", Serial Line: COM11 (kann abweichen, s.u.), Speed: 115200
- Einen Session-Namen eingeben, z.B. "Nucleo"
- Auf SAVE klicken, dann kann man die Session später wieder auswählen
- Open anklicken
- RESET-Button am Nucleo-Board drücken
Wichtig für Nucleo Board:: Die COM-Schnittstelle ist immer aktiv, egal, ob das Programm gerade läuft oder nicht. Wird PuTTY erst nach dem Programmstart gestartet, sieht man im Terminal nur die Änderungen, also im allgemeinen nur die Uhrzeit. Mit der ENTER-Taste sollte man dann einen kompletten Bildschirm-Refresh erzwingen.
Sollte man Probleme mit dem Finden der richtigen COM-Schnittstelle haben, hilft der Geräte-Manager aus der Systemsteuerung weiter.
MCURSES-Monitor
Der Monitor dient zur Überprüfung sämtlicher Funktionen und der Konfiguration des WLAN-Moduls.
Dafür ist es sinnvoll, noch den Zeichensatz auf ISO8858-1 umzustellen. das geht folgendermaßen:
Change Settings -> Window -> Translation -> ISO-8859-1:1998 (Latin-1, West Europe) Anschließend zurück über "Session" oben links und: "Save".
Dann klappts auch mit den Sonderzeichen.
Möchte man lieber schwarz auf weiß statt weiß auf schwarz, kann man das folgendermaßen umstellen:
Change Settings -> Window -> Colours:
Default Foreground: 2 2 2
Default Bold Foreground: 0 0 0
Default Background: 245 245 245
Default Bold Background: 255 255 255
Cursor Text: 0 0 0
Cursor Color: 255 0 0
(Rest kann man so lassen)
Anschließend zurück über "Session" oben links und: "Save".
Dann sollte das Ergebnis so aussehen wie rechts im Bild.
| Taste | Funktion |
|---|---|
| d/D | Anzeigemodus +/- |
| a/A | Animation +/- |
| h/H | Stunden +/- |
| m/M | Minuten +/- |
| r/R | Helligkeit Rot +/- |
| g/G | Helligkeit Grün +/- |
| b/B | Helligkeit Blau +/- |
| w/W | Grundhelligkeit +/- (NEU!) |
| q | Automatische Helligkeitsregelung ein/aus (NEU!) |
| n | Zeit von einem Timeserver holen |
| t | Temperatur-Anzeige für 5 Sekunden (NEU!) |
| T | LED-Testprogramm (NEU!) |
| i | IR-Anlernroutine |
| c | Konfiguration (WLAN, Timeserver und LDR) |
| o | Okay, Save. Damit werden die Einstellungen im EEPROM gespeichert. |
| e | EEPROM-Hexdump zur Kontrolle des Inhalts |
| p | Power On/Off. Hiermit kann man die Anzeige ein- und ausschalten. |
| l | Logout. Die Ausgabe über das Terminal wird eingestellt, bis zur nächsten ENTER-Taste |
| ENTER | Login. Der komplette Bildschirm-Inhalt wird dabei neu geschrieben |
Die Uhrzeit wird jede Sekunde in Real Time hochgezählt. Desweiteren erscheinen Infos über empfangene Uhrzeiten per RTC, DCF77 und ESP8266. Ebenso lassen sich die Farben der LEDs und der Anzeigemodus einstellen. Außerdem unterstützt der MCURSES-Monitor beim Anlernen einer IR-Fernbedienung.
Konfiguration des WLAN-Moduls
Access-Point
2 Sekunden nach dem Start wird von der STM32-Software getestet, ob ein ESP8266-WLAN-Modul angeschlossen ist. Wird das Modul gefunden, erscheint im MCURSES-Monitor die Meldung "ESP8266 up".
25 Sekunden nach dem Start wird davon ausgegangen, dass das ESP8266-WLAN-Modul mittlerweile eine Verbindung zu einem Access-Point ("AP") hat. Wenn dies der Fall ist, wird im MCURSES-Monitor die Meldung "ESP8266 online" ausgegeben.
Sobald die Up-Meldung ausgegeben wurde, kann man die Access-Point-Einstellungen für das (optionale) WLAN-Modul folgendermaßen konfigurieren:
- Taste 'c' (klein!) drücken
Nach Eingabe von "1" für "Configure Network Module ESP8266" erscheint dann folgenes Menü:
1. Configure access to AP 2. Configure time server 3. Configure time zone 0. Exit
- Taste 1 drücken
- SSID eingeben (oder durch leere Eingabe per ENTER abbrechen)
- Key eingeben (oder durch leere Eingabe per ENTER abbrechen)
Es wird jetzt für eine gewisse Zeit versucht, eine Verbindung mit dem AP aufzunehmen. fehlerhaft. Hat das Modul nach ca. 30 Sekunden immer noch keine stabile Verbindung, sollte man das Modul einmal komplett vom Strom trennen. Die Einstellungen sind aber im ESP8266-Modul gespeichert und sollten nach dem Wiedereinschalten der Spannung automatisch funktionieren. Eine erneute Konfiguration ist also in der Regel nicht mehr erforderlich.
Timeserver
Den Timeserver kann man nun auch konfigurieren:
- Taste 'c' (klein!), danach '1' drücken
Es erscheint dann folgendes Menü:
1. Configure access to AP 2. Configure time server 3. Configure time zone 0. Exit
- Taste 2 drücken
- IP-Adress des neuen Timeservers eingeben oder ausgegebene IP-Adresse wiederholen (leere Eingabe bricht ab)
Der Timeserver muss ein RFC 868 konformer Timeserver oder NTP-Server sein. Voreingestellt ist ntp3.ptb.de (192.53.103.103). Dieser kann sowohl über TIME (RFC 868) oder NTP angesprochen werden. Da dieser Server oft ausgelastet ist, kann man auch auf time.nist.gov (216.229.0.179) ausweichen. Als Zeitzone ist standardmäßig GMT+1 gesetzt.
Eine Liste von Timeservern, welche RFC 868 genügen, findet man u.a. hier: http://tf.nist.gov/tf-cgi/servers.cgi
Nach der Eingabe der IP-Adresse des Timeservers wird zunächst geprüft, ob der Timeserver das NTP-Protokoll beherrscht und ob die Firmware des ESP8266 eine dafür nötige UDP-Verbindung aufnehmen kann. Wenn nicht, wird von NTP auf TIME (TCP) gewechselt.
Die aktuelle Uhrzeit wird einmal pro Stunde vom Timeserver geholt, nämlich immer um xx:10:17 Uhr. Im MCURSES-Monitor kann man aber auch jederzeit die Taste 'n' drücken, um ad hoc die Zeit zu holen. Das funktioniert auch mit einer angelernten IR-Fernbedienung.
Zeitzone
Die Einstellung der Zeitzone geht folgendermaßen:
- Taste 'c' (klein!) gefolgt von '1' drücken
Es erscheint dann wieder das bekannte Menü:
1. Configure access to AP 2. Configure time server 3. Configure time zone 0. Exit
- Taste 3 drücken
- Zeitzone eingeben, z.B. GMT+1 für mitteleuropäische Zeit.
Konfiguration des LDR (Umgebungslicht-Messer)
Die automatische Helligkeitsregelung muss explizit konfiguriert werden.
- Im MCURSES-Monitor Taste 'c' (klein!) drücken
Es erscheint dann ein Menü:
1. Configure Network Module ESP8266 2. Configure LDR 0. Exit
- Taste 2 drücken
Dann kann man den LDR ein- oder ausschalten:
Current configuration: LDR connected
1. LDR connected 2. LDR not connected 0. Exit
Mit '1' wird der LDR aktiviert, mit 2 wird er deaktiviert. Die Einstellung wird im EEPROM gespeichert.
Geplant ist hier später noch eine Kalibrierung, d.h. Anpassung an die Gegebenheiten der Umgebung.
IR-Fernbedienung
In den ersten 3 Sekunden leuchtet die Status-LED mit der Farbe weiß, um zu signalisieren, dass nun eine IR-Fernbedienung angelernt werden kann. Wird währenddessen irgendein gültiger IR-Code empfangen, wechselt die Status-LED für eine Sekunde auf rot (FB-Knopf loslassen!) und es wird in die Anlernroutine gesprungen. Wird kein IR-Signal empfangen, startet das Programm wie gewohnt.
Die Anlernroutine kann man auch mit dem blauen User-Button auf dem Nucleo-Board aktivieren. Desweiteren ist dies auch mit der Taste 'i' möglich, wenn man den MCURSES-Monitor nutzt. Dort wird man dann aufgefordert, folgende FB-Tasten zu drücken:
| Taste | Funktion | LED | Buchstabe |
|---|---|---|---|
| Power | Anzeige ein/aus | LED1 | E |
| OK | Speichern der Einstellungen | LED2 | S |
| MODE- | Anzeigemodus erniedrigen | LED3 | A |
| MODE+ | Anzeigemodus erhöhen | LED4 | I |
| ANIM- | Animation erniedrigen | LED5 | S |
| ANIM+ | Animation erhöhen | LED6 | T |
| HOUR- | Stunde erniedrigen | LED7 | O |
| HOUR+ | Stunde erhöhen | LED8 | V |
| MIN- | Minute erniedrigen | LED9 | I |
| MIN+ | Minute erhöhen | LED10 | E |
| RED- | Helligkeit der Farbe Rot erniedrigen | LED11 | R |
| RED+ | Helligkeit der Farbe Rot erhöhen | LED12 | T |
| GREEN- | Helligkeit der Farbe Grün erniedrigen | LED13 | E |
| GREEN+ | Helligkeit der Farbe Grün erhöhen | LED14 | L |
| BLUE- | Helligkeit der Farbe Blau erniedrigen | LED15 | E |
| BLUE+ | Helligkeit der Farbe Blau erhöhen | LED16 | I |
| BRIGHT- | Grundhelligkeit erniedrigen | LED17 | N |
| BRIGHT+ | Grundhelligkeit erhöhen | LED18 | S |
| AUTO+ | Automatische Helligkeitsregelung ein/aus | LED19 | D (2. Zeile) |
| TEMP | Anzeige der Temperatur für 5 Sekunden | LED20 | R (2. Zeile) |
Dabei leuchtet die oben angegebene LED hinter dem jeweiligen Buchstaben auf dem Display in der obersten Zeile (ES#IST#VIERTELEINS), damit der Anlernvorgang auch ohne MCURSES-Monitor vorgenommen werden kann. Sind die FB-Tasten angelernt, kann man die Uhrzeit, den Anzeigemodus und auch die Farben mittels IR-Fernbedienung einstellen.
Es sind nur die gebräuchlichsten IR-Protokolle aktiviert, nämlich:
- SIRCS (Sony)
- NEC (Viele Hersteller, sehr verbreitet)
- SAMSUNG
- MATSUSHITA
- KASEIKYO
IRMP "versteht" jedoch bis zu 40 Protokolle. Braucht man weitere - wie RC5 oder RC6 - kann man sie in irmp/irmp-config.h freischalten. Bei Problemen empfiehlt sich die Lektüre des IRMP-Artikels.
Android App
Für die STM32-Software-Version 1.5.0 muss die Android-App mindestens die Version 1.4 oder höher haben!
Ist ein ESP8266-Modul angeschlossen und korrekt konfiguriert, kann die Uhr ab Software-Version 1.0 per Android App ferngesteuert werden.
Momentan können folgende Einstellungen vorgenommen werden:
- Ein-/Ausschalten der Uhr
- Einstellen der Farben
- Manuelle Einstellung einer Grundhelligkeit (Neu)
- Automatische Helligkeitsregelung per LDR ein/aus (Neu)
- Einstellung des Anzeigemodus
- Einstellung der Animation (Überblenden, Rollen, Explosion etc.)
Weitere Features werden folgen.
Bevor man mit der App Daten senden kann, muss man die IP-Adresse, die das ESP8266-Modul bekommen hat, in der App einstellen. Dies geht über den Menü-Eintrag "Server".
Geplante Features
Die nächsten geplanten Punkte sind:
- Konfiguration der Nachtzeit(en)
- Farbprogramme (Wählen der Farbe, optional automatisches Wechseln)