HaaS100 OLED信息屏显示案例

此文转载自:https://blog.csdn.net/HaaSTech/article/details/110792528

1、前言

本文主要为了手把手教会大家如何用HaaS100打造一款OLED信息显示系统。

眼见为实,眼睛能看见的才是最直观、最真实、最有体感的。

OLED信息显示屏案例可以指引开发者通过OLED显示展现其智能硬件的信息,像温湿度传感器设备、日历系统等设备都可以通过OLED显示。

2、OLED介绍

OLED,即有机发光二极管(Organic Light-Emitting Diode)。OLED 由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性。

与LCD相比,LCD需要背光,同样的显示,OLED 效果要来得好一些。但是,OLED 的尺寸还难以大型化,不过OLED分辨率确可以做到很高。

2.1、OLED模块引脚

image.pngimage.png

OLED模块引脚

GND:电源地

VDD:电源正3V3-5V

SCK/D0 :SPI时钟线

SDA/D1 :SPI数据线

RES:OLED在上电的时候需要复位一次

DC:SPI数据/命令选择脚

CS:SPI片选引脚,低电平有效

2.2、OLED显存

1.3寸OLED屏驱动IC为SSD1106(与0.96寸OLED稍有不同,SSD1306),SSD1106点阵132*64,SSD1306点阵128*64,都是8页的显存,SSD1106每页132字节,SSD1306每页128字节。

下面看一下其对应关系(SSD1106 1.3寸OLED为例)

3、HaaS OLED信息屏开发

3.1、HaaS100与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接地

3.2、OLED开发

3.2.1、初始化配置

#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进行配置
    ...
}

3.2.2、字库选择

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*/
    ... 
    ...
    ...
};

3.2.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)
{
	//
    ...
}

3.3、示例效果

image.png

后续会有用Javascript 以及 小程序开发 嵌入式界面开放出来哦,敬请关注

4、开发者技术支持

如需更多技术支持,可加入钉钉开发者群

更多技术与解决方案介绍,请访问阿里云AIoT首页https://iot.aliyun.com/

原文地址:https://www.cnblogs.com/phyger/p/14108781.html