[air105]简单ui设计

in luatOS开发 with 0 comment

还记得上次我们简单体验了luatOS的摄像头和屏幕吗?今天,我们美化亿下...

0.增加

  1. 开机界面
  2. 加载动画
  3. 使用更大的屏幕(1.8寸,128*160,ST7735S)

提示 luatOS支持几乎所有ST7735主控芯片的屏幕,放心买!
写在前面 例子luatOS官方写的明明白白的,你可以请访问 这里

1.lvgl?go!

lvgi优势 lvgi_latOS官网

LVGL是一个开源的图形库,它提供了创建嵌入式GUI所需的一切,具有易于使用的图形元素、漂亮的视觉效果和低内存占用。

  1. 强大的构建基块:按钮、图表、列表、滑块、图像等
  2. 高级图形引擎:动画、抗锯齿、不透明、平滑滚动、混合模式等
  3. 支持各种输入设备:触摸屏、鼠标、键盘、编码器、按钮等
  4. 支持多个显示器
  5. 硬件独立,可与任何微控制器和显示器一起使用
  6. 可扩展,可在小内存下操作(64 kB 闪存,16 kB RAM)
  7. 具有 UTF-8 处理、CJK、双向和阿拉伯语脚本支持的多语言支持
  8. 通过类似CSS样式的完全可自定义的图形元素
  9. 支持操作系统、外部内存和 GPU,但不是必需的
  10. 即使单帧缓冲区也具有平滑渲染
  11. 用 C 书写,与C++兼容

来自https://wiki.luatos.com/appDevelopment/lvgl/LVGL_for_LuatOS/LVGL_for_LuatOS.html#lvgl

2.lvgl简单!

不用急,我们可以书写简单的代码验证这个观点

_G.sys = require("sys")
--添加硬狗防止程序卡死
if wdt then
    wdt.init(15000)--初始化watchdog设置为15s
    sys.timerLoopStart(wdt.feed, 10000)--10s喂一次狗
end

spi_lcd = spi.deviceSetup(5,pin.PC14,0,0,8,48*1000*1000,spi.MSB,1,1)

lcd.init("st7735s",{
    port = "device",
    pin_dc = pin.PE08 ,
    pin_rst = pin.PC12,
    pin_pwr = pin.PE09,
    direction = 0,
    w = 128,
    h = 160,
    xoffset = 0,
    yoffset = 0
},spi_lcd)


--lcd.invoff()
sys.taskInit(function()
    --------------------------------------------------------
    lvgl.init()--lvgl初始化
    local bar1 = lvgl.bar_create(lvgl.scr_act(), nil);
    lvgl.obj_set_size(bar1, 88, 28);
    lvgl.obj_align(bar1, nil, lvgl.ALIGN_CENTER, 0, 0);
    lvgl.bar_set_anim_time(bar1, 2000);
    lvgl.bar_set_value(bar1, 100, lvgl.ANIM_ON);
    ---------------------------------------------------------

end)
sys.run()

demo.png

2.lvgl说明

由于air103太 弱鸡 存储太小导致lvgl根本塞不进去:)因此我编译的固件只有air105可用
air105绝对性价比之王!!买它!!(摄像头也很好用)

3.简单说明:

完整手册:点我!
这里有详细的说明,建议熟读 并打印 以开发很好的UI界面

2.摄像头(camera)

air105专属,这也是我为什么推荐买Air105的理由。
手册:点我!
只有30万像素,但是够了!!可以拍照、扫描二维码,还是很好用的...
不过由于是外设需要驱动,我已经为大家准备好了,这里!
位于 {资源包}/chips/air105/reg.txt
用法也很简单:
local GC032A_InitReg =

{
    zbar_scan = 0,--是否为扫码
    draw_lcd = 1,--是否向lcd输出
    i2c_id = 0,
    i2c_addr = 0x21,
    pwm_id = 5;
    pwm_period  = 12*1000*1000,
    pwm_pulse = 0,
    sensor_width = 640,
    sensor_height = 480,
    color_bit = 16,
    init_cmd ="/reg.txt"--此方法将初始化指令写在外部文件,支持使用 # 进行注释
}

local camera_pwdn = gpio.setup(pin.PD06, 1, gpio.PULLUP) -- PD06 camera_pwdn引脚
local camera_rst = gpio.setup(pin.PD07, 1, gpio.PULLUP) -- PD07 camera_rst引脚

camera_rst(0)

-- 拍照, 如果为lcd输出则启用输出功能
local camera_id = camera.init(GC032A_InitReg)--屏幕输出rgb图像
camera.capture(camera_id, "/test.jpg", 1) --拍摄

3.最后

那我们组合亿下不就大功告成了吗?
资料位于{资源包}/chips/air105/demo.lua
看好了!!

disp

Responses