合宙Air103

2023-11-03

基础资料

基于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很快得到解决。原因很简单,没有使用高通的字体芯片,手边没有,就不测试了,应该没问题,记录一下。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

合宙Air103 的相关文章

  • 欧拉计划问题五matlab实现

    Problem 5 Smallest multiple 2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without
  • HDLBits练习(五)锁存器和DFF

    1 创建具有高电平有效同步复位的8 D触发器 触发器必须重置为0x34而不是零 所有DFF应由clk的负边缘触发 module top module input clk input reset input 7 0 d output 7 0
  • nvprof 使用笔记

    1 nvprof metrics gld efficiency gst efficiency myproc 检测内存加载存储效率 2 nvprof query metrics 查看所有能用的参数命令 3 nvprof metrics sta
  • java mail 报错550 Mailbox not found or access denied

    运行了几年的发邮件程序 最近集体发邮件报错 org springframework mail MailSendException Failed messages javax mail SendFailedException Invalid
  • 力扣刷题记录 (七)动态规划(五)子序列系列

    题号300 最长递增子序列 给你一个整数数组 nums 找到其中最长严格递增子序列的长度 子序列是由数组派生而来的序列 删除 或不删除 数组中的元素而不改变其余元素的顺序 例如 3 6 2 7 是数组 0 3 1 6 2 2 7 的子序列

随机推荐

  • vue 权限按钮显示隐藏 (自定义指令法)

    咱们做后台管理系统 肯定避免不了 权限菜单 权限按钮的显示与隐藏 我分享一下 我的实现 import Vue from vue Vue directive auth inserted function el binding vnode co
  • 如何算根号2

    大家都应该背过公式 2 1 414 5 2 236 3 1 732 可是大家有没有想过没有计算器这些值是否还能退出来 答案我告诉你们可以的 如果你们感兴趣 那就看看接下来的内容 设x 2 那么x就是 2 由于数学公式比较难写 所以本小编用纸
  • leetcode刷题:加一

    题目描述 给定一个由整数组成的非空数组所表示的非负整数 在该数的基础上加一 最高位数字存放在数组的首位 数组中的每个元素只存储单个数字 你可以假设除了整数0之外 这个整数不会以零开头 示例 输入 digits 1 2 3 输出 1 2 4
  • 【Locomotor运动模块】瞬移

    文章目录 一 原理 二 两种类型 1 Instant 立刻 2 Dash 猛冲 三 瞬移区域 瞬移点 1 瞬移区域 2 瞬移点 一 原理 抛物线指针选择好目标位置 然后告诉瞬移预设体 你想法把游戏区域弄到目标位置来 解释 抛物线指针选择 S
  • Mysql基础之你我他(二)——Binlog

    一 Binlog简介 Binlog是二进制日志文件 用于记录mysql的数据更新或者潜在更新 比如DELETE语句执行删除而实际并没有符合条件的数据 在mysql主从复制中就是依靠的binlog 可以通过语句 show binlog eve
  • Python—发送json格式数据

    当我们发送POST请求的时候 一般会携带数据 POST请求 可以通过给data赋值 从而能够完成传递form表单数据 例如 requests post url data kw python 但有很多时候 要向服务器发送的是json数据 此时
  • score在Java的意思_使用Cross_Val_score的原因

    我对使用cross val score的原因感到困惑 根据我的理解 cross val score告诉我的模型是 overfitting 还是 underfitting 而且 它不训练我的模型 因为我只有1个特征 所以它是tfidf 稀疏矩
  • 暗影精灵5风扇怎么调_暗影精灵5首月使用总结,强悍体验升级不止一点

    PConline单机评测 即将走进社会 大学勤工俭学四年艰苦攒下的钱来之不易 得好好思考一下究竟怎么花 恰好英特尔九代酷睿高性能处理器面世 这段时间我可是做了不少功课 最后决定入手采用九代酷睿i7 9750H处理器和一系列强大硬件的惠普暗影
  • c++的引用

    include
  • 模糊数学学习笔记 2:贴近度

    个人博客地址 Glooow 欢迎光临 文章目录 1 贴近度 2 内外积 2 1 定义 2 2 性质 3 格贴近度 1 贴近度 给定 A B C
  • springboot日志的级别

    gt All lt Trace lt DEBUG lt INFO lt WARN lt ERROR lt Fatal lt OFF OFF 关闭 最高级别 不打印日志 FATAL 致命 指明非常严重的可能会导致应用终止执行错误事件 ERRO
  • gflags简单应用

    描述 一些利用gflag的小代码 参考文章https www cnblogs com myyan p 4798679 html 代码 gflags ParseCommandLineFlags argc argv false 用于解析命令行参
  • MyBatis之insert——主键自增和自定义主键

    一 实现描述 我们在写程序时 时常会遇到这样的问题 插入一条数据 但因有主键的存在 而有时候会报 违反唯一性约束 的错误 下面呢 我们就来利用MyBatis来解决这个问题 二 此文使用的数据库为MySQL 如需要使用其他数据库 请做适当更改
  • day_01_Spring_IOC(1~24)

    Spring spring 核心组成部分 IOC AOP 轻量级 依赖包少 开源 框架 IOC 控制反转 将创建对象的操作交给Spring AOP 面向切面 不修改源码实现功能的拓展 Spring的优点 通过IOC解耦 简化开发 支持AOP
  • 大厂面试快问快答,10分钟搞定MySQL夺命20问,你都能接住吗?

    号外号外 死磕 Java 并发编程 系列连载中 大家可以关注一波 死磕 Java 并发编程05 阿里面试失败后 一气之下我图解了Java中18把锁 死磕 Java 并发编程04 说说Java Atomic 原子类的实现原理 死磕 Java
  • = =和equals的区别是什么

    一 Java基础 和equals的区别是什么 该问题是Java中最基本的小白问题 但是很多人不去注意 就会导致之后编写代码的时候出现一些最基本的错误 却总是找不到错误来源 其实很简单 只要了解了之后就会觉得 哎呦 一般般了 在Java中是操
  • Burpsuite的抓包过程

    学习笔记 Burpsuite的抓包过程 原理 web数据包 gt burpsuite gt 服务器 cycle 数据的请求和响应过程 web端用户请求 服务端数据响应称之为一个cycle Burpsuite抓包需要和浏览器接通 配置浏览器的
  • VMware虚拟机(v17)安装macOS Monterey图文教程(超详细)

    说起虚拟机安装macOS 其实也挺简单的 但对于大多数没接触过Mac系统的朋友来说 可能不知道从何入手 今天就给大家出一个最详细的图文安装教程 我们选择安装的是macOS的Monterey版 其它版本安装也一样 第一步 虚拟机的选择 目前在
  • Java 重写:使用方法重写实现多态性

    Java 重写 使用方法重写实现多态性 在Java编程中 方法重写是一种实现多态性的重要方式 方法重写允许子类重新定义父类中已经声明的方法 并且在运行时根据对象的实际类型来调用相应的方法 这篇文章将详细介绍Java中方法重写的概念 语法和使
  • 合宙Air103

    基础资料 基于Air103开发板 Air103 LuatOS 文档 上手 开发上手 LuatOS 文档 探讨重点 对官方DISP OLED demo中功能的复现 进行相关内容的学习及探讨 实现功能 功能 lua快速驱动0 96寸OLED i