--- 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) - [Link to code git repo](https://git.node5.net/firmware/vfd/) ![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) ```cpp #include #include #include 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 } ```