main.lua 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  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. --[[接线方式 780EPM开发板----------------------------------SSD1306
  12. LCD_VCC(LCD那组引脚以sim卡卡槽旁的LCD母排为1的第二个排母孔) ---(VCC)
  13. I2C1_SCL(CAMERA_SCL)----------------------------------------(SCL)
  14. I2C1_SDA(CAMERA_SDA)----------------------------------------(SDA)
  15. GND---------------------------------------------------------(GND)
  16. ]]
  17. -- 添加硬狗防止程序卡死
  18. wdt.init(9000) -- 初始化watchdog设置为9s
  19. sys.timerLoopStart(wdt.feed, 3000) -- 3s喂一次狗
  20. -- gpio.setup(14, nil) -- 关闭GPIO14,防止camera复用关系出问题
  21. -- gpio.setup(15, nil) -- 关闭GPIO15,防止camera复用关系出问题
  22. local rtos_bsp = rtos.bsp()
  23. -- hw_i2c_id,sw_i2c_scl,sw_i2c_sda,spi_id,spi_res,spi_dc,spi_cs
  24. function u8g2_pin()
  25. if string.find(rtos_bsp, "780EPM") or string.find(rtos_bsp, "718PM") then
  26. return 1, 14, 15, 0, 14, 10, 8
  27. else
  28. log.info("main", "你用的不是780EPM 请更换demo测试")
  29. return
  30. end
  31. end
  32. local hw_i2c_id, sw_i2c_scl, sw_i2c_sda, spi_id, spi_res, spi_dc, spi_cs = u8g2_pin()
  33. -- 日志TAG, 非必须
  34. local TAG = "main"
  35. local chinese =true
  36. -- 主流程
  37. sys.taskInit(function()
  38. gpio.setup(2, 1) -- GPIO2打开给camera电源供电
  39. gpio.setup(28, 1) -- 1.2版本 GPIO28打开给lcd电源供电
  40. gpio.setup(29, 1) -- 1.3硬件版本 GPIO29打开给lcd电源供电
  41. sys.wait(2000)
  42. -- 初始化显示屏
  43. log.info(TAG, "init ssd1306")
  44. -- 初始化硬件i2c的ssd1306
  45. log.info("setup SSD1306", u8g2.begin({
  46. ic = "ssd1306",
  47. direction = 0,
  48. mode = "i2c_hw",
  49. i2c_id = hw_i2c_id
  50. })) -- direction 可选0 90 180 270
  51. log.info("设置字体模式", u8g2.SetFontMode(1))
  52. log.info("清屏", u8g2.ClearBuffer())
  53. log.info("设置字体为 oppo字体", u8g2.SetFont(u8g2.font_opposansm8))
  54. log.info("在显示屏上展示U8G2+LUATOS", u8g2.DrawUTF8("U8G2+LUATOS", 32, 22))
  55. if u8g2.font_opposansm12_chinese then
  56. u8g2.SetFont(u8g2.font_opposansm12_chinese)
  57. elseif u8g2.font_opposansm10_chinese then
  58. u8g2.SetFont(u8g2.font_opposansm10_chinese)
  59. elseif u8g2.font_sarasa_m12_chinese then
  60. u8g2.SetFont(u8g2.font_sarasa_m12_chinese)
  61. elseif u8g2.font_sarasa_m10_chinese then
  62. u8g2.SetFont(u8g2.font_sarasa_m10_chinese)
  63. else
  64. print("没有中文字库")
  65. chinese = false
  66. end
  67. if chinese then
  68. log.info("在显示屏显示中文", u8g2.DrawUTF8("中文测试", 40, 38)) -- 若中文不显示或乱码,代表所刷固件不带这个字号的字体数据, 可自行云编译一份. wiki.luatos.com 有文档.
  69. end
  70. log.info("将存储器帧缓冲区的内容发送到显示器", u8g2.SendBuffer())
  71. sys.wait(2000)
  72. u8g2.ClearBuffer()
  73. if chinese then
  74. u8g2.DrawUTF8("屏幕宽度:" .. u8g2.GetDisplayWidth(), 40, 24)
  75. u8g2.DrawUTF8("屏幕高度:" .. u8g2.GetDisplayHeight(), 40, 42)
  76. else
  77. u8g2.DrawUTF8("width:" .. u8g2.GetDisplayWidth(), 40, 24)
  78. u8g2.DrawUTF8("height:" .. u8g2.GetDisplayHeight(), 40, 42)
  79. end
  80. sys.wait(5000)
  81. u8g2.SendBuffer()
  82. u8g2.ClearBuffer()
  83. u8g2.DrawUTF8("画线测试:", 30, 24)
  84. for i = 0, 128, 8 do
  85. u8g2.DrawLine(0, 40, i, 40)
  86. u8g2.DrawLine(0, 60, i, 60)
  87. u8g2.SendBuffer()
  88. sys.wait(100)
  89. end
  90. sys.wait(1000)
  91. u8g2.ClearBuffer()
  92. u8g2.DrawUTF8("画圆测试:", 30, 24)
  93. u8g2.DrawCircle(30, 50, 10, 15)
  94. u8g2.DrawDisc(90, 50, 10, 15)
  95. u8g2.SendBuffer()
  96. sys.wait(1000)
  97. u8g2.ClearBuffer()
  98. u8g2.DrawUTF8("椭圆测试:", 30, 24)
  99. u8g2.DrawEllipse(30, 50, 6, 10, 15)
  100. u8g2.DrawFilledEllipse(90, 50, 6, 10, 15)
  101. u8g2.SendBuffer()
  102. sys.wait(1000)
  103. u8g2.ClearBuffer()
  104. u8g2.DrawUTF8("方框测试:", 30, 24)
  105. u8g2.DrawBox(30, 40, 30, 24)
  106. u8g2.DrawFrame(90, 40, 30, 24)
  107. u8g2.SendBuffer()
  108. sys.wait(1000)
  109. u8g2.ClearBuffer()
  110. u8g2.DrawUTF8("圆角方框:", 30, 24)
  111. u8g2.DrawRBox(30, 40, 30, 24, 8)
  112. u8g2.DrawRFrame(90, 40, 30, 24, 8)
  113. u8g2.SendBuffer()
  114. sys.wait(1000)
  115. u8g2.ClearBuffer()
  116. u8g2.DrawUTF8("三角测试:", 30, 24)
  117. u8g2.DrawTriangle(30, 60, 60, 30, 90, 60)
  118. u8g2.SendBuffer()
  119. -- qrcode测试
  120. sys.wait(1000)
  121. u8g2.ClearBuffer()
  122. u8g2.DrawDrcode(4, 4, "https://wiki.luatos.com", 30);
  123. u8g2.SendBuffer()
  124. -- sys.wait(1000)
  125. log.info("main", "u8g2 demo done")
  126. end)
  127. -- 主循环, 必须加
  128. sys.run()