In early 2013, I must’ve been left unsupervised for too long since I made The Quite Rubbish Clock:
Written in (Owen Wilson voice) kind of an obsolete vernacular and running on hardware that’s now best described as “quaint”, it was still absurdly popular at the time. Raspberry Pis were still pretty new, and people were looking for different things to do with them.
I happened across the JASchilz/uQR: QR Code Generator for MicroPython the other day, and remembered I had some tiny OLED screens that were about the same resolution as the old Nokia I’d used in 2013. I wondered: could I …?
The board is a LOLIN S2 Mini with a OLED 0.66 Inch Shield on top, all running MicroPython. One limitation I found in the MicroPython QR library was that it was very picky about input formats, so it only displays the time as HHMMSS with no separators.
Source, of course:
# -*- coding: utf-8 -*- # yes, the Quite Rubbish Clock rides again ... # scruss, 2022-06-30 # MicroPython on Lolin S2 Mini with 64 x 48 OLED display # uses uQR from https://github.com/JASchilz/uQR # - which has problems detecting times with colons from machine import Pin, I2C, RTC import s2mini # on Lolin ESP32-S2 Mini import ssd1306 from uQR import QRCode WIDTH = 64 # screen size HEIGHT = 48 SIZE = 8 # text size r = RTC() # set up and clear screen i2c = I2C(0, scl=Pin(s2mini.I2C_SCL), sda=Pin(s2mini.I2C_SDA)) oled = ssd1306.SSD1306_I2C(WIDTH, HEIGHT, i2c) oled.fill(0) def snazz(): marquee = [ " **", " **", " **", " **", " **", "********", " ******", " ****", " **", " quite", "rubbish", " clock", " mk.2", "<scruss>", " >2022<" ] for s in marquee: oled.scroll(0, -SIZE) # scroll up one text line oled.fill_rect(0, HEIGHT-SIZE, WIDTH, SIZE, 0) # blank last line oled.text("%-8s" % s, 0, HEIGHT-SIZE) # write text oled.show() time.sleep(0.25) time.sleep(5) oled.fill(1) oled.show() snazz() # tedious crowd-pleasing intro qr = QRCode() while True: qr.add_data("%02d%02d%02d" % r.datetime()[4:7]) qr.border = 1 # default border too big to fit small screen m = qr.get_matrix() oled.fill(1) for y in range(len(m)): for x in range(len(m)): # plot a double-sized QR code, centred, inverted oled.fill_rect(9 + 2*x, 1 + 2*y, 2, 2, not m[y][x]) oled.show() time.sleep(0.05) qr.clear()
If your output is glitchy, you might need to put the following in boot.py:
import machine machine.freq(240000000)
This increases the ESP32-S2’s frequency from 160 to 240 MHz.