树莓派2.23寸OLED扩展板使用教程

产品简介

提供树莓派、STM32、Arduino示例程序,并实现常用屏幕操作功能:画点、画线、画矩形、画圆,可以控制它们的大小、宽度、填充,可以显示字符串。

产品参数

  • 驱动芯片: SSD1305
  • 支持接口: I2C、SPI、OLED
  • 分辨率: 128*32
  • 显示尺寸: 2.23inch
  • 像素大小: 0.41 x 0.39(mm)
  • 显示颜色: 白色
  • 工作电压: 3.3V
  • 工作温度:-40~70℃

功能引脚

功能引脚描述
VCC电源正
GND电源地
DIN数据输入
CLK时钟输入
CS片选(低有效)
DC寄存器/数据选择
RST复位(低有效)

硬件配置




模块出厂默认使用SPI通信模式, 即BS1,BS2,DIN,CLK,CS,DS默认将0R电阻接上方两个焊盘。如上图所示的焊接方式,则是选择I2C的通信方式,具体硬件连接见下表:
注:上图为硬件上的焊接, 下表为实际的硬件连接

通信方式BS1BS2DINCLKCSDC
SPIGNDNCMOSISCLKCSDC
I2C3V3DINSDASCLGNDGND

工作原理:

  • SSD1305是一款132*64像素的OLED控制器,但该OLED只有128*32个像素点,所以该屏只用到了SSD1305缓存区的前一部分;
  • 该OLED支持8bit 8080并行、SPI和I2C等通信方式,但考虑到该模块的尺寸,以及节省微控制器宝贵的IO资源,故舍弃了8bit 8080并行方式,支持I2C与SPI的通信方式。

I2C通信协议


  • 在I2C通信时,先发送一个7bit的从设备地址+1bit的读写位,等待设备的响应。
  • 在从设备应答后,接着发送一个控制字节,该字节决定了后面发送的字节是命令还是数据,然后再等待从设备应答。
  • 在从设备再次应答之后,若发送命令,则只发送一字节的命令。若发送数据,可以只发送一个字节,也可以多个字节的数据连着发送,视情况而定。
  • 详见Datasheet Page22 Figure 8-6。

SPI通信协议


  • 如上图所示,SDIN 上的数据按 MSB 在前 LSB 在后为次序在每个 SCLK 的上升沿到来时被移入一个 8-bit 移位寄 存器。
  • D/C#在每第 8 个时钟被采样,并且移位寄存器里的数据被写入图形显示内存(GDDRAM) 或者命令寄存器,在同样的计数时钟下。
  • 在串行模式下,仅允许写操作。 在 4-wireSPI 模式下的写操作过程。.
  • 详见Datasheet Page21 Figure 8-5。


树莓派

提供C语言与python例程

开启SPI接口

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



然后重启树莓派:

  1. sudo reboot

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

打开I2C接口

在终端执行:

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



然后重启树莓派:

  1. sudo reboot

安装库

  • 安装BCM2835, 打开树莓派终端,并运行以下指令
  1. wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.60.tar.gz
  2. tar zxvf bcm2835-1.60.tar.gz
  3. cd bcm2835-1.60/
  4. sudo ./configure && sudo make && sudo make check && sudo make install
  5. # 更多的可以参考官网:http://www.airspayce.com/mikem/bcm2835/
  • 安装wiringPi
  1. sudo apt-get install wiringpi
  2. #对于树莓派2019年5月之后的系统(早于之前的可不用执行),可能需要进行升级:
  3. wget https://project-downloads.drogon.net/wiringpi-latest.deb
  4. sudo dpkg -i wiringpi-latest.deb
  5. gpio -v
  6. # 运行gpio -v会出现2.52版本,如果没有出现说明安装出错
  • python
  1. #python2
  2. sudo apt-get update
  3. sudo apt-get install python-pip
  4. sudo apt-get install python-pil
  5. sudo apt-get install python-numpy
  6. sudo pip install RPi.GPIO
  7. sudo pip install spidev
  8. sudo pip install Adafruit-PureIO
  9. #python3
  10. sudo apt-get update
  11. sudo apt-get install python3-pip
  12. sudo apt-get install python3-pil
  13. sudo apt-get install python3-numpy
  14. sudo pip3 install RPi.GPIO
  15. sudo pip3 install spidev
  16. sudo pip3 install Adafruit-PureIO

下载例程

在树莓派终端运行:

  1. sudo apt-get install p7zip-full
  2. wget http://www.waveshare.net/w/upload/c/c5/2.23inch-OLED-HAT-Code.7z
  3. 7z x 2.23inch-OLED-HAT-Code.7z -r -o./2.23inch-OLED-HAT-Code
  4. sudo chmod 777 -R 2.23inch-OLED-HAT-Code
  5. cd 2.23inch-OLED-HAT-Code/Raspberry\ Pi/

树莓派例程使用(以下SPI例程为例)

  1. cd SPI/
  • 1.基于BCM2835的使用
  • (1) 安装BCM2835函数库
  • (2) 在树莓派终端进入例程目录:
  1. cd bcm2835
  • (3) 运行BCM2835例程:
  1. make clean
  2. make
  3. sudo ./oled
  • 2.基于WiringPi的使用
  • (1) 安装WiringPi函数库
  • (2) 在树莓派终端进入例程目录:
  1. cd wiringPi
  • (3) 运行WiringPi例程:
  1. make clean
  2. make
  3. sudo ./oled
  • 3.基于Python的使用
  • (1) 安装Python函数库
  • (2) 在树莓派终端进入例程目录:
  1. cd python
  • (3) 可运行Python例程:
  1. sudo python stats.py
  • 4.例程使用的注意事项

WiringPi和Python例程是通过读写linux系统的设备文件操作,而BCM2835则是树莓派cpu芯片的库函数,操作的为寄存器,因此若先使用了BCM2835库,WiringPi和Python的例程则会使用失败,此时重启系统可以运行。

arduino的使用

  • 1. 硬件配置
  • 该例程使用的开发板为:UNO PLUS
  • 2. IIC连接方式:
功能引脚开发板
VCC3V3
GNDGND
DINSDA/D14
CLKSCL/D15
  • 3. SPI连接方式:
功能引脚开发板
VCC3V3
GNDGND
DIND11 (MOSI)
CLKD13 (SCK)
CSD10
DCD8
RSTD9

数组制作

  • 请使用Image2Lcd打开黑白图片,并配置如下:
  • 输出数据类型:C语言数据(*.c)
  • 扫描方式:水平扫描
  • 输出灰度:单色
  • 最大宽度和高度:128 32 (这两个为OLED的最大分辨率)
  • 例程效果演示:

屏幕使用注意事项

由于屏幕玻璃属于易碎品,且屏幕比较靠近板子的边缘,请注意防止强烈碰撞,防止割伤,必要时可外加保护壳