12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- ------------------------------------------------------------------------------
- -- 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)
|