main.lua 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. --- 模块功能:lvgldemo
  2. -- @module lvgl
  3. -- @author Dozingfiretruck
  4. -- @release 2021.01.25
  5. -- LuaTools需要PROJECT和VERSION这两个信息
  6. PROJECT = "lvgldemo"
  7. VERSION = "1.0.0"
  8. log.info("main", PROJECT, VERSION)
  9. -- sys库是标配
  10. _G.sys = require("sys")
  11. --[[
  12. SPI0
  13. SPI0_SCK (PB2)
  14. SPI0_MISO (PB3)
  15. SPI0_MOSI (PB5)
  16. ]]
  17. --添加硬狗防止程序卡死
  18. if wdt then
  19. wdt.init(9000)--初始化watchdog设置为9s
  20. sys.timerLoopStart(wdt.feed, 3000)--3s喂一次狗
  21. end
  22. -- UI带屏的项目一般不需要低功耗了吧, 设置到最高性能
  23. if mcu and (rtos.bsp():lower() == "air101" or rtos.bsp():lower() == "air103") then
  24. mcu.setClk(240)
  25. end
  26. log.info("main", "ask for help", "https://wiki.luatos.com/")
  27. spi_lcd = spi.deviceSetup(0,pin.PB04,0,0,8,20*1000*1000,spi.MSB,1,1)
  28. --[[ 此为合宙售卖的2.4寸TFT LCD 分辨率:240X320 屏幕ic:GC9306 购买地址:https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-24045920841.39.6c2275a1Pa8F9o&id=655959696358]]
  29. -- lcd.init("gc9a01",{port = "device",pin_dc = pin.PB01, pin_pwr = pin.PB00,pin_rst = pin.PB03,direction = 0,w = 240,h = 320,xoffset = 0,yoffset = 0},spi_lcd)
  30. --[[ 此为合宙售卖的1.8寸TFT LCD LCD 分辨率:128X160 屏幕ic:st7735 购买地址:https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-24045920841.19.6c2275a1Pa8F9o&id=560176729178]]
  31. -- lcd.init("st7735",{port = "device",pin_dc = pin.PB01, pin_pwr = pin.PB00,pin_rst = pin.PB03,direction = 0,w = 128,h = 160,xoffset = 2,yoffset = 1},spi_lcd)
  32. --[[ 此为合宙售卖的1.54寸TFT LCD LCD 分辨率:240X240 屏幕ic:st7789 购买地址:https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-24045920841.20.391445d5Ql4uJl&id=659456700222]]
  33. -- lcd.init("st7789",{port = "device",pin_dc = pin.PB01, pin_pwr = pin.PB00,pin_rst = pin.PB03,direction = 0,w = 240,h = 240,xoffset = 0,yoffset = 0},spi_lcd)
  34. --[[ 此为合宙售卖的0.96寸TFT LCD LCD 分辨率:160X80 屏幕ic:st7735s 购买地址:https://item.taobao.com/item.htm?id=661054472686]]
  35. lcd.init("st7735v",{port = "device",pin_dc = pin.PB01, pin_pwr = pin.PB00,pin_rst = pin.PB03,direction = 1,w = 160,h = 80,xoffset = 0,yoffset = 24},spi_lcd)
  36. --如果显示颜色相反,请解开下面一行的注释,关闭反色
  37. --lcd.invoff()
  38. --如果显示依旧不正常,可以尝试老版本的板子的驱动
  39. --lcd.init("st7735s",{port = "device",pin_dc = pin.PB01, pin_pwr = pin.PB00,pin_rst = pin.PB03,direction = 2,w = 160,h = 80,xoffset = 1,yoffset = 26},spi_lcd)
  40. sys.taskInit(function()
  41. sys.wait(100)
  42. log.info("lvgl", lvgl.init())
  43. if lvgl.theme_set_act then
  44. -- 切换主题
  45. -- lvgl.theme_set_act("default")
  46. -- lvgl.theme_set_act("mono")
  47. lvgl.theme_set_act("empty")
  48. -- lvgl.theme_set_act("material_light")
  49. -- lvgl.theme_set_act("material_dark")
  50. -- lvgl.theme_set_act("material_no_transition")
  51. -- lvgl.theme_set_act("material_no_focus")
  52. end
  53. local scr = lvgl.obj_create()
  54. local btn = lvgl.btn_create(scr)
  55. lvgl.obj_align(btn, lvgl.scr_act(), lvgl.ALIGN_CENTER, 0, 0)
  56. local label = lvgl.label_create(btn)
  57. lvgl.label_set_text(label, "LuatOS!")
  58. local font_16 = lvgl.font_load("/luadb/16_test_fonts.bin")
  59. local font_20 = lvgl.font_load("/luadb/20_test_fonts.bin")
  60. if font_16 == nil or font_20 == nil then
  61. log.warn("lvgl", "pls add font bins")
  62. return
  63. end
  64. lvgl.obj_set_style_local_text_font(scr, lvgl.LABEL_PART_MAIN, lvgl.STATE_DEFAULT, font_16)
  65. local qrcode = nil
  66. if lvgl.qrcode_create then
  67. qrcode = lvgl.qrcode_create(scr, 100)
  68. else
  69. log.warn("lvgl", "no qrcode for lvgl found")
  70. end
  71. lvgl.scr_load(scr)
  72. local qrcode_count = 1
  73. local qrcode_cnt = "https://qq.com/" .. tostring(qrcode_count)
  74. while 1 do
  75. qrcode_count = 1
  76. sys.wait(1000)
  77. lvgl.obj_set_style_local_text_font(scr, lvgl.LABEL_PART_MAIN, lvgl.STATE_DEFAULT, font_20)
  78. sys.wait(1000)
  79. lvgl.obj_set_style_local_text_font(scr, lvgl.LABEL_PART_MAIN, lvgl.STATE_DEFAULT, font_16)
  80. sys.wait(1000)
  81. if qrcode then
  82. qrcode_cnt = "https://qq.com/" .. tostring(qrcode_count)
  83. --lvgl.qrcode_update(qrcode, qrcode_cnt)
  84. end
  85. log.info("lvgl", "update complete")
  86. end
  87. end)
  88. sys.taskInit(function()
  89. uart.setup(1, 115200)
  90. uart.on (1, "receive", function(id, len)
  91. local data = uart.read(id, 512)
  92. if data then
  93. log.info("uart", "recv", #data, data:toHex())
  94. -- 演示一下回显
  95. uart.write(1, data)
  96. end
  97. end)
  98. -- 演示定时发送数据
  99. while 1 do
  100. log.info("uart", "repeat uart write OK")
  101. sys.wait(500)
  102. uart.write(1, "OK\r\n")
  103. end
  104. end)
  105. -- 演示通过topic接收需要发送的数据
  106. sys.subscribe("UART1_WRITE", function (data)
  107. uart.write(1, data)
  108. end)
  109. -- 演示fdb的使用
  110. if fdb then
  111. sys.taskInit(function()
  112. fdb.kvdb_init("onchip_flash")
  113. local count = 1
  114. while 1 do
  115. sys.wait(1000)
  116. fdb.kv_set("my_int", count)
  117. count = count + 1
  118. log.info("fdb", "my_int", fdb.kv_get("my_int"))
  119. end
  120. end)
  121. else
  122. log.info("fdb", "fdb lib not found")
  123. end
  124. -- sys.taskInit(function()
  125. -- while 1 do
  126. -- log.info("help", "https://wiki.luatos.com")
  127. -- sys.wait(500)
  128. -- end
  129. -- end)
  130. -- 用户代码已结束---------------------------------------------
  131. -- 结尾总是这一句
  132. sys.run()
  133. -- sys.run()之后后面不要加任何语句!!!!!