In immer mehr Supermärkten sieht man sie: Elektronische Preisschilder mit E-Ink-Displays (ESL, electronic shelf labels). Ausrangierte Schilder bekommt für 2 bis 3 Euro pro Stück. Für bestimmte Typen gibt es alternative Firmware, die dann drahtlos über Zigbee mit neuen Inhalten versorgt werden können.
Zur Verwendung werden zwei Komponenten benötigt:
- Access Point (AP): Nimmt Daten von außen über WLAN an und sendet sie über Zigbee an die Tags.
- Tags: Die eigentlichen Preisschilder. Werden über Zigbee mit Daten versorgt.
Wir werden als Tag hier:
- ZBS 243 / SEM9110 8051 based core, 64kbyte flash, 8kbyte XRAM, 256 bytes iRAM 16 MHz, 802.15.4 2.4Ghz radio
- 2.9” E-Paper SSD1619 or UC8151 (BWR) 296x128px
- 1MByte SPI Flash
- 2x CR2450 Knopfzellen
Access Point (AP)
Der Access Point (AP) nimmt die Anfrage über WLAN an und überträgt sie mit Zigbee an die eigentlichen Tags. Für den WLAN-Teil wird ein ESP32-S3 mit Display verwendet, für den Zigbee-Teil ein ESP32-C6. Damit der AP zuverlässig läuft, sollte der ESP32-C6 aus den 5 Volt des ESP32-S3 gespeist werden.
Wir verwenden als Firmware für den AP den oben beschriebenen Yellow AP. Den Source dafür findet man unter [1]. Zum Kompilieren und Flashen der Firmware wird PlatformIO benötigt. Der Prozess ist unter [2] beschrieben.
Den ESP32-S2 haben wir mit dem OpenEpaperLink web installer geflasht (direkt aus dem Browser 😯).
Den ESP32-C6 konnte mit dem Webtool nicht geflasht werden. Wir haben es mit dem esptool
geschafft.
- Link zur Firmware
- Flashen der Firmware
esptool --port /dev/ttyACM0 write_flash 0 OpenEPaperLink_esp32_C6_AP_beta.bin
Verbindung zwischen den beiden ESPs:
ESP32-S3 | ESP32-C6 |
---|---|
GND | GND |
5V | 5V |
17 | 2 |
18 | 3 |
19 | TX |
20 | RX |
21 | 9 |
47 | RST |
Tag
Die Firmware für die Tags liegt in einem extra Repository: Tag_FW_ZBS243. Zum Flashen der Tags wird die Software ZBS_Flasher verwendet.
Mapping Pogo-Pins - ZBS_Flasher
Funktion | Board-Pin | Board Reihe | Farbe des Kabels | Pin ESP32 |
---|---|---|---|---|
3V3 | 1 | 1 | Grün | Irgend |
MOSI | 2 | 1 | Orange | 5 |
SS | 3 | 1 | Blau | 23 |
UART TX | 4 | 1 | Rot | |
SPI CLK | 5 | 2 | Gelb | 18 |
MISO | 6 | 2 | Rot | 17 |
GND | 7 | 3 | Gelb | Irgendeinen |
RST | 8 | 3 | Blau | 19 |
UART RX | 9 | 3 | Weis | |
Test P1.0 | 10 | 3 | Schwarz |
Schritt für Schritt
Auf Grund der verfügbaren Hardware wurde ein ESP32 genommen und darum ein Fork von https://github.com/atc1441/ZBS_Flasher genutzt: https://github.com/Arctic-git/ZBS_Flasher Siehe ESP32_Flasher-Unterordner.
Erst einmal die Eigenschaften des Displays wegschreiben
python3 zbs_flasher.py -p /dev/ttyUSB0 read-infopage infopage.hex
Es muss kontrolliert werden, ob die MAC-Adresse ab Offset 0x10 in der Infopage steht. Bei Tags mit der Original-Firmware ist das nicht der Fall. Für die Tag-Adresse 021B9EBF3B12 geht das mit:
echo -en "\x12\x3B\xBF\x9E\x1B\x02\x00\x00" | dd if=/dev/stdin of=infopage.hex bs=1 seek=16 conv=notrunc
Jetzt kann die Firmware geschrieben werden
python3 zbs_flasher.py -p /dev/ttyUSB0 write custom-firmware/demo_firmware_2.9_33_V1.9.0.0.bin
Die Eigenschaften müssen wieder gesetzt werden:
python3 zbs_flasher.py -p /dev/ttyUSB0 write-infopage infopage.hex
Ein Reset
python3 zbs_flasher.py -p /dev/ttyUSB0 reset
und man sieht
Booting ... Associate Read
Neustart des Tags
- Beide Batterien entfernt werden
- Die Batterieanschlüsse kurzgeschlossen werden (mehrere Minuten liegen lassen reicht nicht)
- Mindestens eine Batterie wieder einlegen. Es empfiehlt sich die Batterie beim Einlegen auf den Deckel zu legen und mit dem Deckel ins Tag zu bringen. Sonst wird die Stromversorgung kurz unterbrochen und der Tag fährt nicht hoch.