|
@@ -0,0 +1,73 @@
|
|
|
+------------------------------------------------------------------------------
|
|
|
+-- u8glib example which shows how to implement the draw loop without causing
|
|
|
+-- timeout issues with the WiFi stack. This is done by drawing one page at
|
|
|
+-- a time, allowing the ESP SDK to do its house keeping between the page
|
|
|
+-- draws.
|
|
|
+--
|
|
|
+-- This example assumes you have an SSD1306 display connected to pins 4 and 5
|
|
|
+-- using I2C and that the profont22r is compiled into the firmware.
|
|
|
+-- Please edit the init_display function to match your setup.
|
|
|
+--
|
|
|
+-- Example:
|
|
|
+-- dofile("u8g_drawloop.lua")
|
|
|
+------------------------------------------------------------------------------
|
|
|
+
|
|
|
+local disp
|
|
|
+local font
|
|
|
+
|
|
|
+function init_display()
|
|
|
+ local sda = 4
|
|
|
+ local sdl = 5
|
|
|
+ local sla = 0x3c
|
|
|
+ i2c.setup(0,sda,sdl, i2c.SLOW)
|
|
|
+ disp = u8g.ssd1306_128x64_i2c(sla)
|
|
|
+ font = u8g.font_profont22r
|
|
|
+end
|
|
|
+
|
|
|
+local function setLargeFont()
|
|
|
+ disp:setFont(font)
|
|
|
+ disp:setFontRefHeightExtendedText()
|
|
|
+ disp:setDefaultForegroundColor()
|
|
|
+ disp:setFontPosTop()
|
|
|
+end
|
|
|
+
|
|
|
+-- Start the draw loop with the draw implementation in the provided function callback
|
|
|
+function updateDisplay(func)
|
|
|
+ -- Draws one page and schedules the next page, if there is one
|
|
|
+ local function drawPages()
|
|
|
+ func()
|
|
|
+ if (disp:nextPage() == true) then
|
|
|
+ node.task.post(drawPages)
|
|
|
+ end
|
|
|
+ end
|
|
|
+ -- Restart the draw loop and start drawing pages
|
|
|
+ disp:firstPage()
|
|
|
+ node.task.post(drawPages)
|
|
|
+end
|
|
|
+
|
|
|
+function drawHello()
|
|
|
+ setLargeFont()
|
|
|
+ disp:drawStr(30,22, "Hello")
|
|
|
+end
|
|
|
+
|
|
|
+function drawWorld()
|
|
|
+ setLargeFont()
|
|
|
+ disp:drawStr(30,22, "World")
|
|
|
+end
|
|
|
+
|
|
|
+local drawDemo = { drawHello, drawWorld }
|
|
|
+
|
|
|
+function demoLoop()
|
|
|
+ -- Start the draw loop with one of the demo functions
|
|
|
+ local f = table.remove(drawDemo,1)
|
|
|
+ updateDisplay(f)
|
|
|
+ table.insert(drawDemo,f)
|
|
|
+end
|
|
|
+
|
|
|
+-- Initialise the display
|
|
|
+init_display()
|
|
|
+
|
|
|
+-- Draw demo page immediately and then schedule an update every 5 seconds.
|
|
|
+-- To test your own drawXYZ function, disable the next two lines and call updateDisplay(drawXYZ) instead.
|
|
|
+demoLoop()
|
|
|
+tmr.alarm(4, 5000, 1, demoLoop)
|