summary refs log tree commit diff
path: root/VFD clock/index.md
diff options
context:
space:
mode:
Diffstat (limited to 'VFD clock/index.md')
-rw-r--r--VFD clock/index.md88
1 files changed, 88 insertions, 0 deletions
diff --git a/VFD clock/index.md b/VFD clock/index.md
new file mode 100644
index 0000000..56e6546
--- /dev/null
+++ b/VFD clock/index.md
@@ -0,0 +1,88 @@
+---
+description: "Vacuum fluorescent display with an ESP"
+created: 2025-08-21
+---
+
+## Resources
+
+- [WD202 User manual](https://www.touchdynamic.com/wp-content/uploads/2021/06/wd202.pdf)
+- [WD202A User manual (contains RJ45 pinout)](https://manualzz.com/doc/html/11817581/digipos-wd-202a-customer-display-user-s-manual)
+
+![VFD from the front, one line showing a UNIX timestamp and another line showing a human readable datetime](main.webp)
+
+Got an old VFD from a Point Of Sale device. The kind found in price tally displays in supermarkets.
+
+It uses RS232 to communicate,
+so you need a TTL to RS232 converter for the display to recognise the signal from a micro controller.
+Which convents the ESPs from 3.3v logic -> -15 to 15 volt.
+
+## --> Attribution: oliver@labitat.dk made the hardware awesome <--
+
+![](back%20pcb%20full%20view.webp)
+![](backside.webp)
+![](barrel%20jack.webp)
+![](dip%20switches.webp)
+![](esp-01%20connection.webp)
+![](modules.webp)
+![](modules%20top.webp)
+![](rj45.webp)
+
+![](circuit_image.svg)
+
+[Link to circuit diagram - cirkitdesigner.com](https://app.cirkitdesigner.com/project/05cf3635-211d-451e-8c80-614e9fb4ede3)
+
+[Link to code git repo](https://git.node5.net/firmware/vfd/)
+
+```cpp
+#include <FastLED.h>
+#include <ESP8266WiFi.h>
+#include <ezTime.h>
+
+Timezone CopenhagenTime;
+
+void setup() {
+  Serial.begin(9600);
+
+  Serial.write(0x0C); // Clear display
+  Serial.print("VFD display\n");
+  Serial.print("Starting\n");
+
+  WiFi.setHostname(HOSTNAME);
+  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
+
+  Serial.write(0x0C); // Clear display
+  Serial.printf("Hostname: %s\n", HOSTNAME);
+  Serial.printf("Connecting to: %s\n", WIFI_SSID);
+  while (WiFi.status() != WL_CONNECTED)
+  {
+    delay(1000);
+    Serial.print('.');
+  }
+
+  Serial.write(0x0C); // Clear display
+  Serial.println("Connected, IP address: ");
+  Serial.println(WiFi.localIP());
+  delay(1000);
+
+  waitForSync();
+  CopenhagenTime.setLocation("Europe/Copenhagen");
+
+  Serial.write(0x0C); // Clear display
+}
+
+void loop() {
+  // Get Unix epoch timestamp
+  char buffer [3];
+  sprintf(buffer,"%03d",ms());
+  String milliEpoch = String(now()) + buffer;
+  Serial.println(milliEpoch);
+
+  delay(50);
+  // https://github.com/ropg/ezTime#getting-date-and-time
+  // 16;36;15 Sat 16 Aug 33
+  String time_formatted = CopenhagenTime.dateTime("H:i:s D d M");
+  Serial.println(time_formatted);
+
+  events(); // Needed to update time continuously
+}
+```