/SSD1306_OLED_json

嵌入式linux驱动SSD1306芯片的OLED,采用json文件配置显示内容

Primary LanguageCGNU General Public License v3.0GPL-3.0

目录


简介

嵌入式linux驱动SSD1306芯片的OLED,采用json文件配置显示内容


配置文件

配置文件采用json格式,使用cJSON解析,语法遵循json语法,配置文件示例请看配置文件示例
配置文件以页面为基础,每个页面包含显示设置("seting")以及显示数据("display"),显示数据由若干显示元素组成,显示元素包含若干属性页面之间循环显示。

开始运行

方法1: 将config.json和二进制ssd放入同一目录,终端进入该目录执行

./ssd > /dev/null &

方法2: 将config.json放入/xxx目录,终端进入ssd所在目录执行

./ssd -c /xxx/config.json > /dev/null &

json简介

  • JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式
  • 其主要元素为符号
  • 基本语法规则:
    1. 数据在健/值对中
    2. 数据由逗号分隔
    3. 大括号保存对象
    4. 中括号保存数组
  • 必须是字符串,且用""引起来
  • 可以是
    1. 数字(整数或浮点数)
    2. 字符串(在双引号中)
    3. 逻辑值(true 或 false)
    4. 数组(在中括号中)
    5. 对象(在大括号中)
    6. null
      注:在本程序配置文件中只采用了数字字符串数组对象

整体结构

本程序使用分页的方式显示各种内容,json表现为多个页面数据在同一级。
配置文件整体结构如下:

{
	"seting":{},
	"eg1":{},
	"eg2":{}
}
值类型 说明
"seting" 对象 软硬件设置,包含了分辨率、地址以及驱动文件等信息
"eg1""eg2" 对象 页面,包含了页面相关数据,名称可以自定义。

软硬件设置

"seting":{
	"pixel":12864,
	"dev":"/dev/i2c-0",
	"addr":60
}
值类型 取值范围 默认值 说明
"pixel" 数字 1286412832 12864 OLED分辨率
"dev" 字符串 i2c驱动范围 "/dev/i2c-0" i2c驱动路径
"addr" 数字 i2c地址范围 60 OLED在i2c总线的地址,
60即十六进制0x3c(json不支持十六进制表示)

注:在配置文件中,可以省略软硬件设置"seting":{}

页面

"eg1":{
	"seting":{},
	"display":[]
}
值类型 说明
"seting" 对象 页面设置,包含了刷新周期、显示总时长等信息,每个页面的"seting"不可省略!
"display" 数组 显示数据,包含了频幕上的显示元素,
数组为对象数组,每一个对象都是页面上显示的一个元素。
"display"可省略,省略后OLED显示空白页面(什么都不显示)

注:页面"eg1"名称可自定义,符合json语法规则即可

1. 页面设置

"seting":{
	"cycle":1,
	"time":1,
	"page":0
},

此设置包含在页面之下,和显示数据"display"同级,主要设置本页面属性

值类型 取值范围 默认值 说明
"cycle" 数字 030000 1 显示周期,时间到则刷新屏幕,
实际周期 = cycle * 100ms,建议"cycle"取值5
"time" 数字 030000 1 显示时长,一个页面显示时间,
实际时间 = time * 100ms,建议取值50100
"page" 数字 030000 0 页码,决定显示顺序,
值为0时则不显示该页面,
两个页面页码相同时只显示配置文件靠前的页面,
中间断码则页面显示到断码页为止,后面页则不显示

"cycle"必须小于"time",当"cycle"大于"time"时页面将不刷新

2. 显示数据

"display":[
	{"type":"eg1","x0":0,"y0":0 ... },
	{"type":"eg2","x0":0,"y0":0 ... }
]
值类型 取值范围 默认值 说明
"display" 数组 显示元素 NONE 显示内容,属于页面
决定OLED显示内容,由多个元素构成。
内容可为空,内容为空时显示空白页面(什么都不显示)

显示元素

显示元素是显示数据"display":[]数组的值,决定OLED显示的具体元素,比如点、线、字符串等,元素包含各种属性,其中"type""x0""y0""color""en"属性必不可少

值类型 取值范围 默认值 说明
"type" 字符串 各个元素名 NONE 元素类型,告诉软件该显示什么
"x0" 数字 0最大横向像素减1 0 起始横向坐标,如果是12864,则最大值为127
"y0" 数字 0最大纵向像素减1 0 起始纵向坐标,如果是12864,则最大值为63
"color" 数字 02 0 显示颜色,决定元素显示颜色,0:黑;1:白;2:反色
"en" 数字 01 0 元素使能,0:不显示;0:显示

1. 内置基础元素

{"type":"base","func":0,"x0":0,"y0":0,"base":0,"class":"%Y-%m-%d","size":0,"color":0,"en":0}
  • 内置基础元素比较特殊,根据"func"属性取值不同,其它属性略有差异,其中,内置基础元素共用属性有以下几种:
值类型 取值范围 默认值 说明
"type" 字符串 "base" NONE 内置基础元素名称,只能是"base"
"func" 数字 请看下表 0 内置功能代号
"base" 数字 030000 0 显示的位数
"size" 数字 0255 0 字体放大比例,虽然上限可以到255,
但是没意义且取值太大不保证程序稳定性
  • "func"取值范围及含义:
说明
0 获取时间
1 CPU温度
2 CPU频率
3 获取IP
  • "func"3时,显示IP,需要添加"port"属性,该功能使用linux的ifconfig命令,经测试仅在openwrt有效
值类型 取值范围 默认值 说明
"port" 字符串 网口名 NONE 设置获取I的端口
  • "func"02时,需要添加"class"属性设置显示样式
"func"取值 "class"值类型 "class"值类型范围 "class"默认值 说明
0 字符串 时间格式化字符串 NONE 该格式化调用的strftime()函数,
其格式参照:时间格式
2 数字 01 0 获取到的频率单位,0:Mhz;1:Ghz

其他属性说明请看显示元素

3. 点

{"type":"pixel", "x0":0, "y0":0, "color":0, "en":0}
值类型 取值范围 默认值 说明
"type" 字符串 "pixel" NONE 线元素名称,只能是"pixel"

2. 线

{ "type":"line", "x0":0, "y0":0, "x1":0, "y1":0, "color":0, "en":0}
值类型 取值范围 默认值 说明
"type" 字符串 "line" NONE 线元素名称,只能是"line"
"x1" 数字 0最大横向像素 - 1 0 起始横向坐标,如果是12864,则最大值为127
"y1" 数字 0最大纵向像素 - 1 0 起始纵向坐标,如果是12864,则最大值为63

其他属性说明请看显示元素

4. 圆

{ "type":"circle", "x0":0, "y0":0, "r":0, "fill":0, "color":0, "en":0}
值类型 取值范围 默认值 说明
"type" 字符串 "circle" NONE 圆元素名称,只能是"circle"
"r" 数字 0127 0 圆半径,单位:像素
"fill" 数字 01 0 填充使能,0:失能;1:使能

其他属性说明请看显示元素

5. 矩形

{ "type":"rect", "x0":0, "y0":0, "w":0, "h":0, "fill":0, "color":0, "en":0}
值类型 取值范围 默认值 说明
"type" 字符串 "rect" NONE 矩形元素名称,只能是"rect"
"w" 数字 0127 0 矩形宽,单位:像素
"h" 数字 0127 0 矩形高,单位:像素
"fill" 数字 01 0 填充使能,0:失能;1:使能

其他属性说明请看显示元素

6. 圆角矩形

{"type":"r_rect", "x0":0, "y0":0, "w":0, "h":0, "r":0, "fill":0, "color":0, "en":0}
值类型 取值范围 默认值 说明
"type" 字符串 "r_rect" NONE 圆角矩形元素名称,只能是"r_rect"
"w" 数字 0127 0 矩形宽,单位:像素
"h" 数字 0127 0 矩形高,单位:像素
"r" 数字 0127 0 圆角半径,单位:像素
"fill" 数字 01 0 填充使能,0:失能;1:使能

其他属性说明请看显示元素

7. 三角形

{"type":"trle", "x0":0, "y0":0, "x1":0, "y1":0, "x2":0, "y2":0, "fill":0, "color":0, "en":0}
值类型 取值范围 默认值 说明
"type" 字符串 "trle" NONE 三角形元素名称,只能是"trle"
"x1" 数字 0最大横向像素 - 1 0 起始横向坐标,如果是12864,则最大值为127
"y1" 数字 0最大纵向像素 - 1 0 起始纵向坐标,如果是12864,则最大值为63
"x2" 数字 0最大横向像素 - 1 0 起始横向坐标,如果是12864,则最大值为127
"y2" 数字 0最大纵向像素 - 1 0 起始纵向坐标,如果是12864,则最大值为63
"fill" 数字 01 0 填充使能,0:失能;1:使能

其他属性说明请看显示元素

8. 数字

{"type":"num", "func":"ui", "data":0, "base":0, "x0":0, "y0":0, "size":0, "color":0, "en":0}

虽然数字是个可用选项,但是由于数字的种类多样,可能产生不稳定因素,所以建议使用字符串代替

值类型 取值范围 默认值 说明
"type" 字符串 "num" NONE 数字元素名称,只能是"num"
"func" 字符串 "ui""fl" NONE 数字种类,ui:无符号整形,即unsigned int;fl :浮点数
"data" 数字 无符号整形:032767,
浮点数:double范围
0 待显示数字,不建议使用,建议字符串代替
"base" 数字 030000 0 显示的位数,如果是浮点数,小数点也算在内
"size" 数字 0255 0 字体放大比例,虽然上限可以到255,
但是没意义且取值太大不保证程序稳定性

其他属性说明请看显示元素

9. 字符串

{"type":"str", "data":"String:", "x0":0, "y0":0, "size":0, "color":0, "en":0}
值类型 取值范围 默认值 说明
"type" 字符串 "str" NONE 字符串元素名称,只能是"str"
"data" 字符串 字符串 NONE 待显示字符串,
特殊符号需要转意,
具体查看json语法
"size" 数字 0255 0 字体放大比例,虽然上限可以到255,
但是没意义且取值太大不保证程序稳定性

其他属性说明请看显示元素

10. shell命令返回值

{"type":"cmd", "data":"ifconfig", "x0":0, "y0":0, "base":0, "size":0, "color":0, "en":0}
值类型 取值范围 默认值 说明
"type" 字符串 "cmd" NONE shell命令元素名称,只能是"cmd"
"data" 字符串 字符串 NONE 待执行命令,
特殊符号需要转意,
具体查看json语法
"base" 数字 030000 0 显示的位数
"size" 数字 0255 0 字体放大比例,虽然上限可以到255,
但是没意义且取值太大不保证程序稳定性

其他属性说明请看显示元素

引用