本文主要为了手把手教会大家如何用HaaS100打造一款OLED信息显示系统。
眼见为实,眼睛能看见的才是最直观、最真实、最有体感的。
OLED信息显示屏案例可以指引开发者通过OLED显示展现其智能硬件的信息,像温湿度传感器设备、日历系统等设备都可以通过OLED显示。
OLED,即有机发光二极管(Organic Light-Emitting Diode)。OLED 由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性。
与LCD相比,LCD需要背光,同样的显示,OLED 效果要来得好一些。但是,OLED 的尺寸还难以大型化,不过OLED分辨率确可以做到很高。
OLED模块引脚
GND:电源地
VDD:电源正3V3-5V
SCK/D0 :SPI时钟线
SDA/D1 :SPI数据线
RES:OLED在上电的时候需要复位一次
DC:SPI数据/命令选择脚
CS:SPI片选引脚,低电平有效
1.3寸OLED屏驱动IC为SSD1106(与0.96寸OLED稍有不同,SSD1306),SSD1106点阵132*64,SSD1306点阵128*64,都是8页的显存,SSD1106每页132字节,SSD1306每页128字节。
下面看一下其对应关系(SSD1106 1.3寸OLED为例)
HaaS100 |
OLED |
说明 |
GND |
GND |
电源地 |
3V3 |
VDD |
接HaaS电源正3V3 |
GPIO05 |
SCK/D0 |
HaaS模拟SPI CLK,上升沿有效 |
GPIO40 |
SDA/D1 |
HaaS模拟SPI SDA |
GPIO41 |
RES |
复位引脚,初始化低电平脉冲(1S) |
GPIO27 |
DC |
0-命令 1-数据 |
GND |
CS |
CS接地 |
代码路径在:/application/example/oled_display_demo目录下,就是对应的HaaS100设备端OLED信息屏案例代码,如下所示:
#define OLED_CLK_PIN HAL_IOMUX_PIN_P0_5
#define OLED_SDA_PIN HAL_IOMUX_PIN_P4_0
#define OLED_RES_PIN HAL_IOMUX_PIN_P4_1
#define OLED_DC_PIN HAL_IOMUX_PIN_P2_7
static gpio_dev_t oled_gpio;
int oled_gpio_init(void)
{
//对各个PIN进行初始化
oled_gpio.port = OLED_CLK_PIN;
oled_gpio.config = OUTPUT_PUSH_PULL;
hal_gpio_init(&oled_gpio);
oled_gpio.port = OLED_SDA_PIN;
oled_gpio.config = OUTPUT_PUSH_PULL;
hal_gpio_init(&oled_gpio);
oled_gpio.port = OLED_RES_PIN;
oled_gpio.config = OUTPUT_PUSH_PULL;
hal_gpio_init(&oled_gpio);
oled_gpio.port = OLED_DC_PIN;
oled_gpio.config = OUTPUT_PUSH_PULL;
hal_gpio_init(&oled_gpio);
}
void OLED_Init(void)
{
//正对OLED驱动IC进行配置
...
}
SSD1106不带字库,本示例给出ASCII显示字符,需要中文显示,可以进一步探索,原理都是一样的。
下面是ASCII字符集点阵的数组库,一个字符占用12*6点阵,即高度12位*宽度6位,占用12个字节。
/*
ASCII字符集-》!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJ
KLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
*/
const unsigned char asc2_1206[95][12]={
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/
{0x00,0x00,0x00,0x00,0x3F,0x40,0x00,0x00,0x00,0x00,0x00,0x00},/*"!",1*/
{0x00,0x00,0x30,0x00,0x40,0x00,0x30,0x00,0x40,0x00,0x00,0x00},/*""",2*/
{0x09,0x00,0x0B,0xC0,0x3D,0x00,0x0B,0xC0,0x3D,0x00,0x09,0x00},/*"#",3*/
...
...
...
};
/*
x->点阵列起点
y->点阵行起点
p->显示字符串内容
size->字库中每个字符的高度,本例为12
mode-> 0-反显 1-正常显示
*/
void OLED_Show_String( uint8_t x,
uint8_t y,
const uint8_t *p,
uint8_t size,
uint8_t mode)
{
//
...
}
后续会有用Javascript 以及 小程序开发 嵌入式界面开放出来哦,敬请关注
如需更多技术支持,可加入钉钉开发者群
更多技术与解决方案介绍,请访问阿里云AIoT首页https://iot.aliyun.com/