├── README.md └── Shields └── OLED_Shields └── oled_test.lua /README.md: -------------------------------------------------------------------------------- 1 | # D1_mini_Examples_lua 2 | D1 & D1 mini examples for nodemcu 3 | -------------------------------------------------------------------------------- /Shields/OLED_Shields/oled_test.lua: -------------------------------------------------------------------------------- 1 | 2 | -- setup I2c and connect display 3 | function init_i2c_display() 4 | -- SDA and SCL can be assigned freely to available GPIOs 5 | local sda = 2 -- GPIO14 6 | local scl = 1 -- GPIO12 7 | local sla = 0x3c -- 0x3c or 0x3d 8 | i2c.setup(0, sda, scl, i2c.SLOW) 9 | disp = u8g.ssd1306_64x48_i2c(sla) 10 | end 11 | 12 | 13 | -- graphic test components 14 | function prepare() 15 | disp:setFont(u8g.font_6x10) 16 | disp:setFontRefHeightExtendedText() 17 | disp:setDefaultForegroundColor() 18 | disp:setFontPosTop() 19 | end 20 | 21 | function box_frame(a) 22 | disp:drawStr(0, 0, "drawBox") 23 | disp:drawBox(5, 10, 20, 10) 24 | disp:drawBox(10+a, 15, 30, 7) 25 | disp:drawStr(0, 30, "drawFrame") 26 | disp:drawFrame(5, 10+30, 20, 10) 27 | disp:drawFrame(10+a, 15+30, 30, 7) 28 | end 29 | 30 | function disc_circle(a) 31 | disp:drawStr(0, 0, "drawDisc") 32 | disp:drawDisc(10, 18, 9) 33 | disp:drawDisc(24+a, 16, 7) 34 | disp:drawStr(0, 30, "drawCircle") 35 | disp:drawCircle(10, 18+30, 9) 36 | disp:drawCircle(24+a, 16+30, 7) 37 | end 38 | 39 | function r_frame(a) 40 | disp:drawStr(0, 0, "drawRFrame/Box") 41 | disp:drawRFrame(5, 10, 40, 30, a+1) 42 | disp:drawRBox(50, 10, 25, 40, a+1) 43 | end 44 | 45 | function stringtest(a) 46 | disp:drawStr(30+a, 31, " 0") 47 | disp:drawStr90(30, 31+a, " 90") 48 | disp:drawStr180(30-a, 31, " 180") 49 | disp:drawStr270(30, 31-a, " 270") 50 | end 51 | 52 | function line(a) 53 | disp:drawStr(0, 0, "drawLine") 54 | disp:drawLine(7+a, 10, 40, 55) 55 | disp:drawLine(7+a*2, 10, 60, 55) 56 | disp:drawLine(7+a*3, 10, 80, 55) 57 | disp:drawLine(7+a*4, 10, 100, 55) 58 | end 59 | 60 | function triangle(a) 61 | local offset = a 62 | disp:drawStr(0, 0, "drawTriangle") 63 | disp:drawTriangle(14,7, 45,30, 10,40) 64 | disp:drawTriangle(14+offset,7-offset, 45+offset,30-offset, 57+offset,10-offset) 65 | disp:drawTriangle(57+offset*2,10, 45+offset*2,30, 86+offset*2,53) 66 | disp:drawTriangle(10+offset,40+offset, 45+offset,30+offset, 86+offset,53+offset) 67 | end 68 | 69 | function ascii_1() 70 | local x, y, s 71 | disp:drawStr(0, 0, "ASCII page 1") 72 | for y = 0, 5, 1 do 73 | for x = 0, 15, 1 do 74 | s = y*16 + x + 32 75 | disp:drawStr(x*7, y*10+10, string.char(s)) 76 | end 77 | end 78 | end 79 | 80 | function extra_page(a) 81 | disp:drawStr(0, 12, "setScale2x2") 82 | disp:setScale2x2() 83 | disp:drawStr(0, 6+a, "setScale2x2") 84 | disp:undoScale() 85 | end 86 | 87 | 88 | -- the draw() routine 89 | function draw(draw_state) 90 | local component = bit.rshift(draw_state, 3) 91 | 92 | prepare() 93 | 94 | if (component == 0) then 95 | box_frame(bit.band(draw_state, 7)) 96 | elseif (component == 1) then 97 | disc_circle(bit.band(draw_state, 7)) 98 | elseif (component == 2) then 99 | r_frame(bit.band(draw_state, 7)) 100 | elseif (component == 3) then 101 | stringtest(bit.band(draw_state, 7)) 102 | elseif (component == 4) then 103 | line(bit.band(draw_state, 7)) 104 | elseif (component == 5) then 105 | triangle(bit.band(draw_state, 7)) 106 | elseif (component == 6) then 107 | ascii_1() 108 | elseif (component == 7) then 109 | extra_page(bit.band(draw_state, 7)) 110 | end 111 | end 112 | 113 | function graphics_test() 114 | 115 | disp:firstPage() 116 | repeat 117 | draw(draw_state) 118 | until disp:nextPage() == false 119 | 120 | if (draw_state <= 7 + 8*8) then 121 | draw_state = draw_state + 1 122 | else 123 | print("--- Restarting Graphics Test ---") 124 | draw_state = 0 125 | end 126 | 127 | print("Heap: " .. node.heap()) 128 | -- retrigger timer to give room for system housekeeping 129 | tmr.start(0) 130 | end 131 | 132 | draw_state = 0 133 | 134 | init_i2c_display() 135 | --init_spi_display() 136 | 137 | -- set up timer 0 with short interval, will be retriggered in graphics_test() 138 | tmr.register(0, 100, tmr.ALARM_SEMI, function() graphics_test() end) 139 | 140 | print("--- Starting Graphics Test ---") 141 | tmr.start(0) 142 | --------------------------------------------------------------------------------