1.5inch OLED Module

来自丢石头百科
1.5inch OLED Module
1.5inch OLED Module
{{{name2}}}
{{{name3}}}
基本信息
分类: OLED模块
{{{userDefinedInfo1}}}: {{{userdefinedvalue1}}}
{{{userDefinedInfo2}}}: {{{userdefinedvalue2}}}
{{{userDefinedInfo3}}}: {{{userdefinedvalue3}}}
品牌: Waveshare
功能简介
特性 无特性,不解释
显示尺寸 1.5英寸
分辨率 128×128
' 无特性,不解释
' 无特性,不解释
接口 OLED I2C SPI
相关产品

{{{Product2}}}

{{{Product3}}}

{{{Product4}}}

{{{Product5}}}

{{{Product6}}}

产品概述

提供树莓派、STM32、Arduino、Jetson nano例程

产品参数

  • 驱动芯片:SSD1327
  • 支持接口:4-wire SPI / I2C
  • 分辨率 :128 * 128
  • 显示尺寸:1.5inch
  • 外形尺寸:44.5mm * 37mm
  • 显示颜色:16位灰度
  • 工作电压:3.3V / 5V

管脚配置

引脚 描述
VCC 电源正
GND 电源地
DIN 数据输入
CLK 时钟输入
CS 片选
DC 数据/命令选择
RST 复位

硬件配置

1.5inch oled module.png

模块出厂默认使用4线SPI通信,即BS0默认接0(1和0不全代表电平,只是电阻接的焊接方式,具体硬件连接见下表);
注:上图为硬件上的焊接,下表为实际的硬件连接。

通信协议 BS CS DC DIN CLK
4Wire SPI 0 片选 DC MOSI SCK
I2C 1 悬空 0/1 SDA SCL

具体硬件配置,如下:
使用4线SPI:即出厂设置,BS接0连接到GND,DIN接控制引脚MOSI, CLK接控制引脚SCK;
使用I2C: BS接1连接至VCC, DIN接控制引脚SDA, CLK接控制引脚SCL, CS可不接,但不要将DC悬空,此引脚为配置I2C从设备地址,接高电平OLED设备地址为0X3D, 接低电平OLED设备地址为0X3C。

工作原理

SSD1327是一款128*128像素的OLED控制器,而本产品使用的OLED内置了次控制器,同时控制器能够支持16位灰度显示,这样就可以显示一些16位灰度以内的图片了;
该OLED支持8bit 8080并行、8bit 6800并行、三线SPI、四线SPI以及I2C控制,由于并行控制会浪费IO口,三线SPI不常用,因此模块可选择四线SPI以及I2C控制。
控制器可以支持16位深度图片,而16位深度可以用4个bit控制,控制器在硬件上也是这样处理:1byte控制两个像素点,因此若控制器使用的是水平扫描,则控制难度最低。(具体请见数据手册:page30)

1.5inch oled module data.png

SPI协议

1.5inch oled module spi.png

注:与传统的SPI协议不同的地方是:由于是只需要显示,故而将从机发往主机的数据线进行了隐藏,该表格详见Datasheet Page 21。
CS#为从机片选, 仅当CS为低电平时,芯片才会被使能。
D/C#为芯片的数据/命令控制引脚,当DC = 0时写命令,当DC = 1时写数据
SDIN为传输的数据,即16位灰度图片;
SCLK为SPI通信时钟。
对于SPI通信而言,数据是有传输时序的,即时钟相位(CPHA)与时钟极性(CPOL)的组合:
CPOL的高低决定串行同步时钟的空闲状态电平,CPOL = 0,为低电平。CPOL 对传输协议没有很多的影响;
CPHA的高低决定串行同步时钟是在第一时钟跳变沿还是第二个时钟跳变沿数据被采集,当CPHL = 0,在第一个跳变沿进行数据采集;
这两者组合就成为四种SPI通信方式,国内通常使用SPI0,即CPHL = 0,CPOL = 0

I2C协议

1.5inch oled module I2C.png

详见Datasheet Page 23
首先发送一个7个字节的从设备地址+一个字节的读写位,然后等待从设备的响应,这个与大部分的I2C通信是类似的,改7位地址可以通过DC管脚来控制;
然后再发送一个数据位+一个命令数据位+6个控制自己字节,实际上有用的就是命令数据为,该位设置为0就是写命令,设置为1就是写数据;
然后再发送8位的数据。这样一次控制传输就算完成了。
注:该控制器使用串口通信时是无法读取OLED数据。

树莓派

提供C语言与python例程

开启SPI接口

  • 打开树莓派终端,输入以下指令进入配置界面
sudo raspi-config
选择Interfacing Options -> SPI -> Yes 开启SPI接口

RPI open spi.png
然后重启树莓派:

sudo reboot

请确保SPI没有被其他的设备占用,你可以在/boot/config.txt中间检查

打开I2C接口

在终端执行:

sudo raspi-config 
选择 Interfacing Options -> I2C ->yes 启动 i2C 内核驱动

RPI open i2c.png
然后重启树莓派:

sudo reboot

安装库

  • 安装BCM2835, 打开树莓派终端,并运行一下指令
wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.60.tar.gz
tar zxvf bcm2835-1.60.tar.gz 
cd bcm2835-1.60/
sudo ./configure
sudo make
sudo make check
sudo make install
# 更多的可以参考官网:http://www.airspayce.com/mikem/bcm2835/
  • 安装wiringPi
sudo apt-get install wiringpi
#对于树莓派4B可能需要进行升级:
cd /tmp
wget https://project-downloads.drogon.net/wiringpi-latest.deb
sudo dpkg -i wiringpi-latest.deb
gpio -v
# 运行gpio -v会出现2.52版本,如果没有出现说明安装出错

#Bullseye分支系统使用如下命令:
git clone https://github.com/WiringPi/WiringPi
cd WiringPi
./build
gpio -v
# 运行gpio -v会出现2.70版本,如果没有出现说明安装出错
  • python
sudo apt-get updata
sudo apt-get install python-pip 
sudo pip install RPi.GPIO
sudo apt-get install python-smbus
sudo pip install spidev

下载例程

在树莓派终端运行:

sudo apt-get install p7zip-full
wget http://wiki.diustou.com/w/upload/9/9d/1.5inch_OLED_Moudle.7z
7z x 1.5inch_OLED_Moudle.7z
sudo chmod 777 -R  1.5inch_OLED_Moudle
cd 1.5inch_OLED_Moudle/Raspberry/

硬件连接

1.5inch-oled-module-rpi-connet.jpg

LCD 树莓派BCM
VCC 5V
GND GND
DIN MOSI
CLK SCK
CS CE0
DC 24
RST 25

SPI例程(默认例程)

  • C语言
cd C
make clean
make
sudo ./main
  • python
#python2
cd python2
sudo python main.py
#python3
cd python3
sudo python3 main.py

I2C控制

  • 默认使用的4线SPI,如果硬件上修改成I2C的,需要修改程序
OLED 树莓派
DIN SDA
CLK SCL

C语言

打开C\obj\DEV_Config.h,把如下:

#define USE_SPI 1
#define USE_IIC 0

改成

#define USE_SPI 0
#define USE_IIC 1

然后重新执行:

make clean
make
sudo ./main

python

打开python2/config.py,把如下:

Device_SPI = 1
Device_I2C = 0

改成

Device_SPI = 0
Device_I2C = 1

然后重新执行:

sudo python main.py

python3同理

STM32使用

  • 本例程使用的开发板为 XNUCLEO-F103RB,程序是基于HAL库

硬件连接

LCD XNUCLEO-F103RB
VCC 5V
GND GND
DIN PA7
CLK PA5
CS PB6
DC PA8
RST PA9

SPI与I2C切换

在DEV_Config.h中定义了两个宏:USE_SPI_4W和USE_IIC。若使用I2C控制,则将USE_IIC配置为1,USE_SPI_4W配置为0;若使用四线SPI控制,则将USE_IIC配置为0,USE_SPI_4W配置为1;
同样的硬件上的连接就需要改成连接至I2C接口。
DIN-PB9
CLK-PB8

预期效果

打开串口调试工具并配置正确,复位开发板后,会打印相关信息,OLED首先会刷屏,然后展示常见的画点,画线,画框,画图,显示字等功能2s,然后再显示位图,16位灰度图,同时显示时间(动态模拟时钟)

Arduino使用

  • 本例程使用的开发板为Arduino UNO

硬件连接

LCD UNO
VCC 5V
GND GND
DIN D11
CLK D13
CS D10
DC D7
RST D8
BL D9

SPI与I2C切换

在DEV_Config.h中定义了两个宏:USE_SPI_4W和USE_IIC。若使用I2C控制,则将USE_IIC配置为1,USE_SPI_4W配置为0;若使用四线SPI控制,则将USE_IIC配置为0,USE_SPI_4W配置为1;
同样的硬件上的连接就需要改成连接至I2C接口。
DIN-D14
CLK-D15

使用

  • 配置通信方式:

在DEV_Config.h中定义了两个宏:USE_SPI_4W和USE_IIC; 若使用I2C控制,则将USE_IIC配置为1,USE_SPI_4W配置为0;若使用四线SPI控制,则将USE_IIC配置为0,USE_SPI_4W配置为1;

  • 配置RAM:

在OLED_Driver.h中定义了三个宏来选择控制方式, 可以找到如下:

#define USE_INT_RAM 1
#define USE_EXT_RAM 0
#define USE_OLED_RAM 0

分别是使用控制器内部RAM,使用外接RAM,以及使用OLED的RAM
内部RAM根据Arduino的型号有区别:
例程使用的是UNO控制,因此OLED_BUFSIZ只有64 * 16字节,占1K大小,如果要显示全屏,OLED_BUFSIZ需要8K大小; 若使用外部RAM控制,只需要将USE_EXT_RAM 设置成 1其他两个配置成0即可; 关于使用OLED RAM的,因为OLED控制器在使用串口通信时,是无法读取缓存中数据的,这里的定义只是为了兼容其它OLED,无其他特殊意义

现象

编译并下载至开发板
打开串口调试工具并配置正确,复位开发板后,会打印相关信息,OLED首先会刷屏,然后展示常见的画点,画线,画框,画图,显示字等功能2s,然后再显示位图,16位灰度图,同时显示时间(动态模拟时钟)

Jetson nano

安装库

安装函数库

  • 打开终端界面,输入以下指令安装相应的函数库
sudo apt-get update
sudo apt-get install python3-pip
sudo pip3 install Jetson.GPIO
sudo groupadd -f -r gpio
sudo usermod -a -G gpio your_user_name
sudo cp /opt/nvidia/jetson-gpio/etc/99-gpio.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules && sudo udevadm trigger

【注意】your_user_name 是你使用的用户名

  • 安装I2C
sudo apt-get install python-smbus
  • 安装图像处理库:
sudo apt-get install python3-pil
sudo apt-get install python3-numpy

下载程序

sudo apt-get install p7zip
wget http://wiki.diustou.com/w/upload/9/9d/1.5inch_OLED_Moudle.7z
7zr x 1.5inch_OLED_Moudle.7z -r -o./1.5inch_OLED_Moudle
sudo chmod 777 -R  1.5inch_OLED_Moudle
cd 1.5inch_OLED_Moudle/Jetson\ Nano/

硬件连接

LCD Jetson nano(BCM)
VCC 5V
GND GND
DIN MOSI
CLK SCK
CS CE0
DC 24
RST 25

I2C控制

  • Jetson nano目前只支持I2C控制,修改对应的硬件连接方式
OLED Jetson nano
DIN SDA
CLK SCL

C语言

打开C\obj\DEV_Config.h,把如下:

#define USE_SPI 1
#define USE_IIC 0

改成

#define USE_SPI 0
#define USE_IIC 1

然后重新执行:

make clean
make
sudo ./main

python

打开python2/config.py,把如下:

Device_SPI = 1
Device_I2C = 0

改成

Device_SPI = 0
Device_I2C = 1

然后重新执行:

sudo python main.py

python3同理

FAQ

问题:
OLED模块接上电源为什么不亮?
答复:

OLED是没有背光的,显示属于自发光方式。只接VCC和GND,OLED是不会亮的。 必须用程序控制才能亮点OLED。



问题:
使用该OLED模块,有什么需要注意的?
答复:

1.注意电源不要接反。

2.不能长时间显示同一画面,否则将产生残影,导致OLED损坏。




Icon-mail.png 联系 丢石头

我们的工作时间是: 09:00-18:00 (UTC+8 周一到周六)