main.lua 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. --- 模块功能:u8g2demo
  2. -- @module u8g2
  3. -- @author Dozingfiretruck
  4. -- @release 2021.01.25
  5. -- LuaTools需要PROJECT和VERSION这两个信息
  6. PROJECT = "u8g2demo"
  7. VERSION = "1.0.1"
  8. log.info("main", PROJECT, VERSION)
  9. -- sys库是标配
  10. _G.sys = require("sys")
  11. --[[
  12. I2C0
  13. I2C0_SCL (5)
  14. I2C0_SDA (4)
  15. ]]
  16. --添加硬狗防止程序卡死
  17. wdt.init(9000)--初始化watchdog设置为9s
  18. sys.timerLoopStart(wdt.feed, 3000)--3s喂一次狗
  19. local rtos_bsp = rtos.bsp()
  20. -- hw_i2c_id,sw_i2c_scl,sw_i2c_sda,spi_id,spi_res,spi_dc,spi_cs
  21. function u8g2_pin()
  22. if rtos_bsp == "AIR101" then
  23. return 0,pin.PA01,pin.PA04,0,pin.PB03,pin.PB01,pin.PB04
  24. elseif rtos_bsp == "AIR103" then
  25. return 0,pin.PA01,pin.PA04,0,pin.PB03,pin.PB01,pin.PB04
  26. elseif rtos_bsp == "AIR105" then
  27. return 0,pin.PE06,pin.PE07,5,pin.PC12,pin.PE08,pin.PC14
  28. elseif rtos_bsp == "ESP32C3" then
  29. return 0,5,4,2,10,6,7
  30. elseif rtos_bsp == "ESP32S3" then
  31. return 0,12,11,2,16,15,14
  32. elseif rtos_bsp == "EC618" then
  33. return 0,10,11,0,1,10,8
  34. elseif string.find(rtos_bsp,"EC718") then
  35. return 0,14,15,0,14,10,8
  36. else
  37. log.info("main", "bsp not support")
  38. return
  39. end
  40. end
  41. local hw_i2c_id,sw_i2c_scl,sw_i2c_sda,spi_id,spi_res,spi_dc,spi_cs = u8g2_pin()
  42. -- 日志TAG, 非必须
  43. local TAG = "main"
  44. -- 初始化显示屏
  45. log.info(TAG, "init ssd1306")
  46. -- 初始化硬件i2c的ssd1306
  47. u8g2.begin({ic = "ssd1306",direction = 0,mode="i2c_hw",i2c_id=hw_i2c_id,i2c_speed = i2c.FAST}) -- direction 可选0 90 180 270
  48. -- 初始化软件i2c的ssd1306
  49. -- u8g2.begin({ic = "ssd1306",direction = 0,mode="i2c_sw", i2c_scl=sw_i2c_scl, i2c_sda=sw_i2c_sda})
  50. -- 初始化硬件spi的ssd1306
  51. -- u8g2.begin({ic = "ssd1306",direction = 0,mode="spi_hw_4pin",spi_id=spi_id,spi_res=spi_res,spi_dc=spi_dc,spi_cs=spi_cs})
  52. -- u8g2.begin({ic = "st7565",direction = 0,mode="spi_hw_4pin",spi_id=spi_id,spi_res=spi_res,spi_dc=spi_dc,spi_cs=spi_cs})
  53. -- 初始化硬件spi的自定义命令屏幕
  54. -- u8g2.begin({ic = "custom",direction = 0,mode="spi_hw_4pin",spi_id=spi_id,spi_res=spi_res,spi_dc=spi_dc,spi_cs=spi_cs},
  55. -- {
  56. -- width = 128, --分辨率宽度,128像素;用户根据屏的参数自行修改
  57. -- height = 64, --分辨率高度,64像素;用户根据屏的参数自行修改
  58. -- --初始化命令
  59. -- -- 0001 delay 延时, 例如 00010002 , 延时2ms
  60. -- -- 0002 cmd 发命令, 例如 0002004, dc设置为CMD模式, SPI发送 0x04
  61. -- -- 0003 data 发数据, 例如 0003004, dc设置为DATA模式, SPI发送 0x04
  62. -- initcmd =
  63. -- {
  64. -- 0x000200ae,
  65. -- 0x000200d5,
  66. -- 0x00020080,
  67. -- 0x000200a8,
  68. -- 0x0002003f,
  69. -- 0x000200d3,
  70. -- 0x00020000,
  71. -- 0x00020040,
  72. -- 0x0002008d,
  73. -- 0x00020014,
  74. -- 0x00020020,
  75. -- 0x00020000,
  76. -- 0x000200a1,
  77. -- 0x000200c8,
  78. -- 0x000200da,
  79. -- 0x00020012,
  80. -- 0x00020081,
  81. -- 0x000200cf,
  82. -- 0x000200d9,
  83. -- 0x000200f1,
  84. -- 0x000200db,
  85. -- 0x00020040,
  86. -- 0x0002002e,
  87. -- 0x000200a4,
  88. -- 0x000200a6,
  89. -- },
  90. -- --休眠命令
  91. -- sleepcmd = 0xAE,
  92. -- --唤醒命令
  93. -- wakecmd = 0xAF,
  94. -- }
  95. -- ) -- direction 可选0 90 180 270
  96. u8g2.SetFontMode(1)
  97. u8g2.ClearBuffer()
  98. u8g2.SetFont(u8g2.font_opposansm8)
  99. u8g2.DrawUTF8("U8g2+LuatOS", 32, 22)
  100. if u8g2.font_opposansm12_chinese then
  101. u8g2.SetFont(u8g2.font_opposansm12_chinese)
  102. elseif u8g2.font_opposansm10_chinese then
  103. u8g2.SetFont(u8g2.font_opposansm10_chinese)
  104. elseif u8g2.font_sarasa_m12_chinese then
  105. u8g2.SetFont(u8g2.font_sarasa_m12_chinese)
  106. elseif u8g2.font_sarasa_m10_chinese then
  107. u8g2.SetFont(u8g2.font_sarasa_m10_chinese)
  108. else
  109. print("no chinese font")
  110. end
  111. u8g2.DrawUTF8("中文测试", 40, 38) -- 若中文不显示或乱码,代表所刷固件不带这个字号的字体数据, 可自行云编译一份. wiki.luatos.com 有文档.
  112. u8g2.SendBuffer()
  113. --主流程
  114. sys.taskInit(function()
  115. sys.wait(1000)
  116. u8g2.ClearBuffer()
  117. u8g2.DrawUTF8("屏幕宽度", 0, 24)
  118. u8g2.DrawUTF8("屏幕高度", 0, 42)
  119. u8g2.DrawUTF8(":"..u8g2.GetDisplayWidth(), 80, 24)
  120. u8g2.DrawUTF8(":"..u8g2.GetDisplayHeight(), 80, 42)
  121. u8g2.SendBuffer()
  122. sys.wait(1000)
  123. u8g2.ClearBuffer()
  124. u8g2.DrawUTF8("画线测试:", 30, 24)
  125. for i = 0, 128, 8 do
  126. u8g2.DrawLine(0,40,i,40)
  127. u8g2.DrawLine(0,60,i,60)
  128. u8g2.SendBuffer()
  129. sys.wait(100)
  130. end
  131. sys.wait(1000)
  132. u8g2.ClearBuffer()
  133. u8g2.DrawUTF8("画圆测试:", 30, 24)
  134. u8g2.DrawCircle(30,50,10,15)
  135. u8g2.DrawDisc(90,50,10,15)
  136. u8g2.SendBuffer()
  137. sys.wait(1000)
  138. u8g2.ClearBuffer()
  139. u8g2.DrawUTF8("椭圆测试:", 30, 24)
  140. u8g2.DrawEllipse(30,50,6,10,15)
  141. u8g2.DrawFilledEllipse(90,50,6,10,15)
  142. u8g2.SendBuffer()
  143. sys.wait(1000)
  144. u8g2.ClearBuffer()
  145. u8g2.DrawUTF8("方框测试:", 30, 24)
  146. u8g2.DrawBox(30,40,30,24)
  147. u8g2.DrawFrame(90,40,30,24)
  148. u8g2.SendBuffer()
  149. sys.wait(1000)
  150. u8g2.ClearBuffer()
  151. u8g2.DrawUTF8("圆角方框:", 30, 24)
  152. u8g2.DrawRBox(30,40,30,24,8)
  153. u8g2.DrawRFrame(90,40,30,24,8)
  154. u8g2.SendBuffer()
  155. sys.wait(1000)
  156. u8g2.ClearBuffer()
  157. u8g2.DrawUTF8("三角测试:", 30, 24)
  158. u8g2.DrawTriangle(30,60, 60,30, 90,60)
  159. u8g2.SendBuffer()
  160. -- qrcode测试
  161. sys.wait(1000)
  162. u8g2.ClearBuffer()
  163. u8g2.DrawDrcode(4, 4, "https://wiki.luatos.com", 30);
  164. u8g2.SendBuffer()
  165. --sys.wait(1000)
  166. log.info("main", "u8g2 demo done")
  167. end)
  168. -- 主循环, 必须加
  169. sys.run()