合宙Air103|DISP|OLED|u8g2|I2C|SSD1306|PCtoLCD2002|取模|正则|三目运算符|二维码|QRCode|JSON函数|官方demo|学习(6):DISP-OLED

基础资料

基于Air103开发板:Air103 - LuatOS 文档

上手:开发上手 - LuatOS 文档

探讨重点

对官方DISP-OLED demo中功能的复现,进行相关内容的学习及探讨。

实现功能

功能:lua快速驱动0.96寸OLED(i2c-SSD1306);

硬件准备

Air103开发板1块,面包板1块,0.96寸OLED(i2c-SSD1306),导线若干。

软件版本

AIR103:LuatOS@AIR103 base 22.10 bsp V0013

软件使用

接口文档可参考:u8g2库

-- disp库的所有API均已合并到u8g2库 -- disp库已经映射为u8g2库,所有API均代理到u8g2,请查阅u8g2库的API

初始化硬件

--[[
I2C0
I2C0_SDA(SDA,ADC1,GPIO04) (PA4,7#),黄色 D1(SDA)
I2C0_SCL(SCK,ADC0,GPIO01) (PA1,8#),绿色 D0(SCL)
--0.9寸优信电子i2c-SSD1306,蓝:3.3(较稳定)-5V,棕:GND,接线端向上,128*64
--0.9寸国立腾i2c-SPI兼容SSD1306,蓝:3.3(较稳定)-5V,棕:GND,灰:CS(不用时必须接地)。D0(SCL),D1(SDA)
]]

-- 初始化显示屏
log.info(TAG, "init ssd1306")
local setupRes =u8g2.begin({ic = "ssd1306",direction = 0,mode="i2c_hw",i2c_id=0,i2c_speed = i2c.FAST}) -- direction 可选0 90 180 270

字体相关代码

u8g2.SetFontMode(1)  --int	mode字体模式,启用(1)或禁用(0)透明模式
u8g2.SetDrawColor(1) --颜色值 0没有色(屏幕无显示) 1有色(默认值) 2与底色xor,出现间断虚线
u8g2.ClearBuffer()
--[2022-11-25 17:55:09.983] E/u8g2 no such font    无字体库
u8g2.SetFont(u8g2.font_opposansm8) --font, u8g2.font_opposansm8 为纯英文8号字体,还有font_opposansm10 font_opposansm12 font_opposansm16 font_opposansm18
                                   --font_opposansm20 font_opposansm22 font_opposansm24 font_opposansm32 可选 u8g2.font_opposansm12_chinese 为12x12全中文,
                                   --还有 font_opposansm16_chinese font_opposansm24_chinese --font_opposansm32_chinese 可选,
                                   --u8g2.font_unifont_t_symbols 为符号.

u8g2.DrawUTF8("U8g2+LuatOS", 32, 22) --在显示屏上画一段文字,在显示屏上画一段文字,要调用u8g2.SendBuffer()才会更新到屏幕

if u8g2.font_opposansm12_chinese then
    u8g2.SetFont(u8g2.font_opposansm12_chinese)
else
    u8g2.SetFont(u8g2.font_opposansm10_chinese)  --默认字体
end
--u8g2.SetFont(u8g2.font_opposansm12_chinese)
u8g2.DrawUTF8("中文测试", 40, 38) -- 

语句段显示代码及注释

 u8g2.ClearBuffer()
    u8g2.SetBitmapMode(1)   --定义位图函数是否将写入背景色,mode字体模式,启用(1)或禁用(0)透明模式

    t={

        string.char(0x00,0x04,0x00,0x04,0x1F,0x04,0xC4,0x7F,0x44,0x44,0x44,0x24,0x44,0x04,0xDF,0x3F),
        string.char(0x44,0x21,0x44,0x11,0x44,0x12,0x5C,0x0A,0x47,0x04,0x22,0x0A,0x20,0x11,0x90,0x60),--/*"玻0

        string.char(0x00,0x02,0x00,0x04,0xDF,0x7F,0x04,0x00,0x84,0x2A,0x84,0x24,0x84,0x2A,0x9F,0x3F),
        string.char(0x04,0x04,0xC4,0x7F,0x44,0x42,0x5C,0x49,0x47,0x5F,0x42,0x50,0x40,0x40,0x40,0x60),--/*"璃1

        string.char(0x80,0x00,0x80,0x00,0x80,0x3F,0x80,0x00,0xF8,0x1F,0x08,0x10,0xF8,0x1F,0x08,0x10),
        string.char(0xF8,0x1F,0x80,0x00,0xFF,0x7F,0xA0,0x02,0x90,0x04,0x8C,0x18,0x83,0x60,0x80,0x00),--/*"桌2

        string.char(0x00,0x00,0xFF,0x7F,0x40,0x00,0x40,0x00,0x20,0x00,0xFC,0x1F,0x24,0x12,0x24,0x12),
        string.char(0xE4,0x13,0x24,0x12,0x24,0x12,0xE4,0x13,0x24,0x12,0x24,0x12,0xFC,0x1F,0x04,0x10),--/*"面3

        string.char(0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00),
        string.char(0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x0C,0x00,0x08,0x00,0x04,0x00,0x00,0x00),--/*",4

        string.char(0x00,0x02,0x02,0x02,0xE4,0x3F,0x04,0x02,0xC0,0x1F,0x00,0x02,0xE7,0x7F,0x04,0x00),
        string.char(0xC4,0x1F,0x44,0x10,0xC4,0x1F,0x44,0x10,0xD4,0x1F,0x4C,0x10,0x44,0x14,0x40,0x08),--/*"请5

        string.char(0x10,0x00,0x10,0x00,0x10,0x00,0xF8,0x3F,0x48,0x22,0x44,0x22,0x42,0x22,0x21,0x22),
        string.char(0x20,0x22,0x10,0x21,0x08,0x21,0x84,0x20,0x42,0x20,0x20,0x20,0x10,0x14,0x08,0x08),--/*"勿6

        string.char(0x00,0x08,0x00,0x1F,0xFC,0x00,0x80,0x00,0xFF,0x7F,0x80,0x00,0xF8,0x0F,0x88,0x08),
        string.char(0xF8,0x0F,0x88,0x08,0xF8,0x0F,0x80,0x00,0xFC,0x1F,0x80,0x00,0xFF,0x7F,0x00,0x00),--/*"重7

        string.char(0x00,0x00,0xFC,0x7F,0x04,0x00,0x04,0x01,0x04,0x01,0x04,0x01,0x04,0x01,0xF4,0x3F),
        string.char(0x04,0x01,0x04,0x01,0x04,0x09,0x04,0x11,0x04,0x11,0x02,0x01,0xFA,0x7F,0x01,0x00),--/*"压8

        string.char(0x00,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00),
        string.char(0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00),--/*"!9

        string.char(0x04,0x00,0x84,0x3F,0x04,0x10,0x3F,0x08,0x02,0x0C,0x0A,0x12,0x09,0x21,0xFF,0x40),
        string.char(0x08,0x00,0x88,0x3F,0x38,0x04,0x0F,0x04,0x0A,0x04,0x08,0x04,0xC8,0x7F,0x08,0x00),--/*"轻10

        string.char(0x80,0x00,0x60,0x03,0x18,0x0C,0xF7,0x77,0x00,0x00,0xF8,0x0F,0x08,0x08,0xF8,0x0F),
        string.char(0x00,0x04,0xF8,0x03,0x80,0x00,0xFC,0x1F,0x80,0x00,0xFE,0x3F,0x80,0x00,0xC0,0x00),--/*"拿11

        string.char(0x04,0x00,0x84,0x3F,0x04,0x10,0x3F,0x08,0x02,0x0C,0x0A,0x12,0x09,0x21,0xFF,0x40),
        string.char(0x08,0x00,0x88,0x3F,0x38,0x04,0x0F,0x04,0x0A,0x04,0x08,0x04,0xC8,0x7F,0x08,0x00),--/*"轻12

        string.char(0x04,0x02,0x08,0x02,0x00,0x02,0x7F,0x01,0x04,0x7F,0x84,0x10,0x7C,0x11,0x24,0x11),
        string.char(0x24,0x11,0x24,0x0A,0x24,0x0A,0x24,0x04,0x22,0x0A,0x2A,0x11,0x91,0x20,0x40,0x40),--/*"放13

        string.char(0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00),
        string.char(0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x0C,0x00,0x08,0x00,0x04,0x00,0x00,0x00),--/*",14

        string.char(0x00,0x01,0x04,0x02,0x08,0x00,0xE8,0x3F,0x01,0x02,0x02,0x02,0x02,0x02,0x08,0x02),
        string.char(0xC8,0x3F,0x04,0x02,0x07,0x02,0x04,0x02,0x04,0x02,0x04,0x02,0xF4,0x7F,0x00,0x00),--/*"注15

        string.char(0x80,0x00,0xFC,0x1F,0x10,0x04,0x20,0x02,0xFF,0x7F,0x00,0x00,0xF8,0x0F,0x08,0x08),
        string.char(0xF8,0x0F,0x08,0x08,0xF8,0x0F,0x40,0x00,0x8A,0x20,0x8A,0x48,0x09,0x48,0xF0,0x0F),--/*"意16

        string.char(0x40,0x00,0x80,0x00,0xFC,0x3F,0x04,0x20,0x42,0x10,0x40,0x00,0x40,0x00,0xFF,0x7F),
        string.char(0x20,0x04,0x10,0x04,0x18,0x02,0x60,0x02,0x80,0x01,0x40,0x06,0x30,0x08,0x0E,0x10),--/*"安17

        string.char(0x80,0x00,0x80,0x00,0x40,0x01,0x20,0x02,0x10,0x04,0x08,0x08,0xF4,0x17,0x83,0x60),
        string.char(0x80,0x00,0x80,0x00,0xF8,0x0F,0x80,0x00,0x80,0x00,0x80,0x00,0xFE,0x3F,0x00,0x00),--/*"全18

        string.char(0x00,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00),
        string.char(0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00),--/*"!19

        string.char(0x40,0x00,0x40,0x00,0xE0,0x0F,0x10,0x04,0x1C,0x02,0x20,0x01,0xC0,0x02,0x30,0x01),
        string.char(0x8E,0x1F,0x40,0x10,0x30,0x08,0x4C,0x04,0x80,0x02,0x80,0x01,0x70,0x00,0x0E,0x00),--/*"多20

        string.char(0x80,0x10,0x42,0x10,0xE4,0x11,0x24,0x11,0xE0,0x7D,0x20,0x11,0xE7,0x11,0x24,0x13),
        string.char(0x24,0x15,0xF4,0x15,0x84,0x11,0x54,0x11,0x2C,0x11,0x14,0x11,0x40,0x15,0x80,0x08),--/*"谢21

        string.char(0x00,0x00,0x7F,0x00,0x14,0x1F,0x14,0x10,0x7F,0x10,0x55,0x10,0x55,0x10,0x55,0x1F),
        string.char(0x75,0x11,0x43,0x01,0x41,0x01,0x7F,0x01,0x41,0x41,0x41,0x41,0x7F,0x7E,0x41,0x00),--/*"配22

        string.char(0x80,0x00,0x80,0x00,0x40,0x01,0x20,0x02,0x10,0x04,0x0C,0x18,0xF3,0x67,0x00,0x00),
        string.char(0x00,0x00,0xF8,0x0F,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0xF8,0x0F,0x08,0x08),--/*"合23

        string.char(0x00,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00),
        string.char(0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00)--/*"!24


    }
    for i = 1, #t/2 do
        row=(math.ceil(2*i/#t[1])-1)   --取整数部分,得到需显示的行数
        col=i%(128/#t[1])
        --col= (col==0) and 8 or col --等同于 if col==0 then col=8 end
        col=(col==0 and {8} or {col})[1]  --通用三目运算符
        u8g2.DrawXBM((col-1)*#t[1],row*#t[2],#t[1],#t[2], t[i*2-1]..t[i*2])   --行数增加后,从0,0重新输出
        -- u8g2.SendBuffer()  --逐字输出,间隔100ms
        -- sys.wait(100)
    end
    -- u8g2.DrawXBM(0, 0, 16,16, t[1]..t[2])
    -- u8g2.DrawXBM(16, 0, 16,16, t[3]..t[4])
    u8g2.SendBuffer()   --一次性输出
    sys.wait(2000)

PCtoLCD2002设置

对应设置

正则表达式测试:正则表达式在线测试 | 菜鸟工具

缓冲区绘制QRCode

u8g2.DrawDrcode(x, y, str, size)
缓冲区绘制QRCode
参数
传入值类型	解释
int	x坐标
int	y坐标
string	二维码的内容
int	可选,显示大小,不可小于21,默认21
返回值
返回值类型	解释
nil	无返回值
例子

    -- qrcode测试
    sys.wait(1000)
    u8g2.ClearBuffer()
    u8g2.DrawUTF8("二维码",60,20)  --u8g2.font_opposansm10_chinese
    u8g2.DrawUTF8("测试",60,34)  --u8g2.font_opposansm10_chinese
    --二维码大小和链接地址的长度有关
    u8g2.DrawDrcode(0,0, "https://wiki.luatos.com/chips/air103/mcu.html",60); --35可显示,50稍放大,60向右侧移动,66满屏显示,但底部显示不全
    u8g2.SendBuffer()

PS:json函数示例

print(json.null)

local t = {
    string.char(0x00,0x04,0x00,0x04,0x1F,0x04,0xC4,0x7F,0x44,0x44,0x44,0x24,0x44,0x04,0xDF,0x3F),
        string.char(0x44,0x21,0x44,0x11,0x44,0x12,0x5C,0x0A,0x47,0x04,0x22,0x0A,0x20,0x11,0x90,0x60),--/*"玻0

        string.char(0x00,0x02,0x00,0x04,0xDF,0x7F,0x04,0x00,0x84,0x2A,0x84,0x24,0x84,0x2A,0x9F,0x3F),
        string.char(0x04,0x04,0xC4,0x7F,0x44,0x42,0x5C,0x49,0x47,0x5F,0x42,0x50,0x40,0x40,0x40,0x60),--/*"璃1

        string.char(0x80,0x00,0x80,0x00,0x80,0x3F,0x80,0x00,0xF8,0x1F,0x08,0x10,0xF8,0x1F,0x08,0x10),
        string.char(0xF8,0x1F,0x80,0x00,0xFF,0x7F,0xA0,0x02,0x90,0x04,0x8C,0x18,0x83,0x60,0x80,0x00),--/*"桌2

        string.char(0x00,0x00,0xFF,0x7F,0x40,0x00,0x40,0x00,0x20,0x00,0xFC,0x1F,0x24,0x12,0x24,0x12),
        string.char(0xE4,0x13,0x24,0x12,0x24,0x12,0xE4,0x13,0x24,0x12,0x24,0x12,0xFC,0x1F,0x04,0x10),--/*"面3

        string.char(0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00),
        string.char(0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x0C,0x00,0x08,0x00,0x04,0x00,0x00,0x00),--/*",4

        string.char(0x00,0x02,0x02,0x02,0xE4,0x3F,0x04,0x02,0xC0,0x1F,0x00,0x02,0xE7,0x7F,0x04,0x00),
        string.char(0xC4,0x1F,0x44,0x10,0xC4,0x1F,0x44,0x10,0xD4,0x1F,0x4C,0x10,0x44,0x14,0x40,0x08)--/*"请5

    }

local s = json.encode(t)

local st = json.decode(s)

print(s)

print(s[1])  --nil 序列化后的json字符串非table,只删除了注释部分,本质上还是string

print(#st)
--print(#st[1]())
print(#st[2])

print(st[1][1],st[3][3]) --将字符串反序列化为对象,按table方式访问

print(string.format("0x%02X",st[3][3])) --将字符串转化为16进制string

问题

u8g2.drawGtfontGb2312(str,size,x,y) 错误提示-已解决。

u8g2.drawGtfontUtf8(str,size,x,y) 错误提示-已解决。

main.lua:258: attempt to call a nil value (field ' drawGtfontGb2312')

该错误提示在官方仓库提了issue很快得到解决。原因很简单,没有使用高通的字体芯片,手边没有,就不测试了,应该没问题,记录一下。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

打酱油的工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值