匿名
未登录
登录
丢石头百科
搜索
查看“1.5inch OLED Module”的源代码
来自丢石头百科
名字空间
页面
讨论
更多
更多
页面选项
查看
查看源代码
历史
←
1.5inch OLED Module
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
<div class="tabber"> {{外围模块|colorscheme=blue |name = 1.5inch OLED Module |img=[[File:1.5inch-OLED-Module-intro.jpg|360px |alt=1.5inch OLED Module | 1.5inch OLED Module]] |category1=OLED |category2=显示屏 |brand=Waveshare |feature-name1= 显示尺寸 |feature-value1=1.5英寸 |feature-name2= 分辨率 |feature-value2=128×128 | interface1 =SPI | interface2 =I2C | interface3 =OLED |Product1 = {{OLED-Related}} }} <div class="tabbertab" title="说明"> =产品概述= '''提供树莓派、STM32、Arduino、Jetson nano例程''' ==产品参数== *驱动芯片:SSD1327 *支持接口:4-wire SPI / I2C *分辨率 :128 * 128 *显示尺寸:1.5inch *外形尺寸:44.5mm * 37mm *显示颜色:16位灰度 *工作电压:3.3V / 5V ==管脚配置== {|border=1; style="width:700px;" align="center" |-style="background:#0000ff; color:white;" align="center" |引脚||描述 |-align="center" |VCC||电源正 |-align="center" |GND||电源地 |-align="center" |DIN||数据输入 |-align="center" |CLK||时钟输入 |-align="center" |CS||片选 |-align="center" |DC||数据/命令选择 |-align="center" |RST||复位 |} ==硬件配置== [[file:1.5inch_oled_module.png|center|900px]]<br /> 模块出厂默认使用4线SPI通信,即BS0默认接0(1和0不全代表电平,只是电阻接的焊接方式,具体硬件连接见下表);<br /> <font color="#FF0000"> 注:上图为硬件上的焊接,下表为实际的硬件连接。<br /> </font> {|border=1; style="width:700px;" align="center" |-style="background:#0000ff; color:white;" align="center" |通信协议||BS||CS||DC||DIN||CLK |-align="center" |4Wire SPI||0||片选||DC||MOSI||SCK |-align="center" |I2C||1||悬空||0/1||SDA||SCL |} 具体硬件配置,如下:<br /> '''使用4线SPI''':即出厂设置,BS接0连接到GND,DIN接控制引脚MOSI, CLK接控制引脚SCK;<br /> '''使用I2C''': BS接1连接至VCC, DIN接控制引脚SDA, CLK接控制引脚SCL, CS可不接,但不要将DC悬空,此引脚为配置I2C从设备地址,接高电平OLED设备地址为0X3D, 接低电平OLED设备地址为0X3C。<br /> ==工作原理== SSD1327是一款128*128像素的OLED控制器,而本产品使用的OLED内置了次控制器,同时控制器能够支持16位灰度显示,这样就可以显示一些16位灰度以内的图片了;<br /> 该OLED支持8bit 8080并行、8bit 6800并行、三线SPI、四线SPI以及I2C控制,由于并行控制会浪费IO口,三线SPI不常用,因此模块可选择四线SPI以及I2C控制。<br /> 控制器可以支持16位深度图片,而16位深度可以用4个bit控制,控制器在硬件上也是这样处理:1byte控制两个像素点,因此若控制器使用的是水平扫描,则控制难度最低。(具体请见数据手册:page30)<br /> [[file:1.5inch_oled_module_data.png|center|900px]]<br /> ==SPI协议== [[file:1.5inch_oled_module_spi.png|center|900px]]<br /> 注:与传统的SPI协议不同的地方是:由于是只需要显示,故而将从机发往主机的数据线进行了隐藏,该表格详见Datasheet Page 21。<br /> CS#为从机片选, 仅当CS为低电平时,芯片才会被使能。<br /> D/C#为芯片的数据/命令控制引脚,当DC = 0时写命令,当DC = 1时写数据<br /> SDIN为传输的数据,即16位灰度图片;<br /> SCLK为SPI通信时钟。<br /> 对于SPI通信而言,数据是有传输时序的,即时钟相位(CPHA)与时钟极性(CPOL)的组合:<br /> CPOL的高低决定串行同步时钟的空闲状态电平,CPOL = 0,为低电平。CPOL 对传输协议没有很多的影响;<br /> CPHA的高低决定串行同步时钟是在第一时钟跳变沿还是第二个时钟跳变沿数据被采集,当CPHL = 0,在第一个跳变沿进行数据采集;<br /> 这两者组合就成为四种SPI通信方式,国内通常使用SPI0,即CPHL = 0,CPOL = 0<br /> ==I2C协议== [[file:1.5inch_oled_module_I2C.png|center|900px]]<br /> 详见Datasheet Page 23<br /> 首先发送一个7个字节的从设备地址+一个字节的读写位,然后等待从设备的响应,这个与大部分的I2C通信是类似的,改7位地址可以通过DC管脚来控制;<br /> 然后再发送一个数据位+一个命令数据位+6个控制自己字节,实际上有用的就是命令数据为,该位设置为0就是写命令,设置为1就是写数据;<br /> 然后再发送8位的数据。这样一次控制传输就算完成了。<br /> <font color="#FF0000"> 注:该控制器使用串口通信时是无法读取OLED数据。<br /> </font> =树莓派= 提供C语言与python例程 {{RPI_open_spi}} {{RPI_open_i2c}} ==安装库== {{RPI_C_lib}} *python <pre> 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 </pre> ==下载例程== 在树莓派终端运行:<br /> <pre> sudo apt-get install p7zip-full wget http://{{SERVERNAME}}/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/ </pre> ==硬件连接== {|border=1; style="width:700px;" align="center" |-style="background:#0000ff; color:white;" align="center" |LCD||树莓派BCM |-align="center" |VCC||5V |-align="center" |GND||GND |-align="center" |DIN||MOSI |-align="center" |CLK||SCK |-align="center" |CS||CE0 |-align="center" |DC||24 |-align="center" |RST||25 |} ==SPI例程(默认例程)== *C语言 <pre> cd C make clean make sudo ./main </pre> *python <pre> #python2 cd python2 sudo python main.py #python3 cd python3 sudo python3 main.py </pre> ==I2C控制== *默认使用的4线SPI,如果硬件上修改成I2C的,需要修改程序<br /> {|border=1; style="width:700px;" |-align="center" |OLED||树莓派 |-align="center" |DIN||SDA |-align="center" |CLK||SCL |} ===C语言=== 打开C\obj\DEV_Config.h,把如下:<br /> <pre> #define USE_SPI 1 #define USE_IIC 0 </pre> 改成<br /> <pre> #define USE_SPI 0 #define USE_IIC 1 </pre> 然后重新执行:<br /> <pre> make clean make sudo ./main </pre> ===python=== 打开python2/config.py,把如下:<br /> <pre> Device_SPI = 1 Device_I2C = 0 </pre> 改成<br /> <pre> Device_SPI = 0 Device_I2C = 1 </pre> 然后重新执行:<br /> <pre> sudo python main.py </pre> python3同理<br /> =STM32使用= *本例程使用的开发板为 XNUCLEO-F103RB,程序是基于HAL库 ==硬件连接== {|border=1; style="width:700px;" align="center" |-style="background:#0000ff; color:white;" align="center" |LCD||XNUCLEO-F103RB |-align="center" |VCC||5V |-align="center" |GND||GND |-align="center" |DIN||PA7 |-align="center" |CLK||PA5 |-align="center" |CS||PB6 |-align="center" |DC||PA8 |-align="center" |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;<br /> 同样的硬件上的连接就需要改成连接至I2C接口。<br /> DIN-PB9<br /> CLK-PB8<br /> ==预期效果== 打开串口调试工具并配置正确,复位开发板后,会打印相关信息,OLED首先会刷屏,然后展示常见的画点,画线,画框,画图,显示字等功能2s,然后再显示位图,16位灰度图,同时显示时间(动态模拟时钟)<br /> =Arduino使用= *本例程使用的开发板为Arduino UNO ==硬件连接== {|border=1; style="width:700px;" align="center" |-style="background:#0000ff; color:white;" align="center" |LCD||UNO |-align="center" |VCC||5V |-align="center" |GND||GND |-align="center" |DIN||D11 |-align="center" |CLK||D13 |-align="center" |CS||D10 |-align="center" |DC||D7 |-align="center" |RST||D8 |-align="center" |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;<br /> 同样的硬件上的连接就需要改成连接至I2C接口。<br /> DIN-D14<br /> CLK-D15<br /> ==使用== *配置通信方式: 在DEV_Config.h中定义了两个宏:USE_SPI_4W和USE_IIC; 若使用I2C控制,则将USE_IIC配置为1,USE_SPI_4W配置为0;若使用四线SPI控制,则将USE_IIC配置为0,USE_SPI_4W配置为1;<br /> *配置RAM: 在OLED_Driver.h中定义了三个宏来选择控制方式, 可以找到如下:<br /> <pre> #define USE_INT_RAM 1 #define USE_EXT_RAM 0 #define USE_OLED_RAM 0 </pre> 分别是使用控制器内部RAM,使用外接RAM,以及使用OLED的RAM<br /> 内部RAM根据Arduino的型号有区别:<br /> <font color="#FF0000"> 例程使用的是UNO控制,因此OLED_BUFSIZ只有64 * 16字节,占1K大小,如果要显示全屏,OLED_BUFSIZ需要8K大小; 若使用外部RAM控制,只需要将USE_EXT_RAM 设置成 1其他两个配置成0即可; </font> 关于使用OLED RAM的,因为OLED控制器在使用串口通信时,是无法读取缓存中数据的,这里的定义只是为了兼容其它OLED,无其他特殊意义<br /> ==现象== 编译并下载至开发板<br /> 打开串口调试工具并配置正确,复位开发板后,会打印相关信息,OLED首先会刷屏,然后展示常见的画点,画线,画框,画图,显示字等功能2s,然后再显示位图,16位灰度图,同时显示时间(动态模拟时钟)<br /> =Jetson nano= ==安装库== {{JetsonNano python lib}} ==下载程序== <pre> sudo apt-get install p7zip wget http://{{SERVERNAME}}/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/ </pre> ==硬件连接== {|border=1; style="width:700px;" align="center" |-style="background:#0000ff; color:white;" align="center" |LCD||Jetson nano(BCM) |-align="center" |VCC||5V |-align="center" |GND||GND |-align="center" |DIN||MOSI |-align="center" |CLK||SCK |-align="center" |CS||CE0 |-align="center" |DC||24 |-align="center" |RST||25 |} ==I2C控制== *Jetson nano目前只支持I2C控制,修改对应的硬件连接方式<br /> {|border=1; style="width:700px;" |-align="center" |OLED||Jetson nano |-align="center" |DIN||SDA |-align="center" |CLK||SCL |} ===C语言=== 打开C\obj\DEV_Config.h,把如下:<br /> <pre> #define USE_SPI 1 #define USE_IIC 0 </pre> 改成<br /> <pre> #define USE_SPI 0 #define USE_IIC 1 </pre> 然后重新执行:<br /> <pre> make clean make sudo ./main </pre> ===python=== 打开python2/config.py,把如下:<br /> <pre> Device_SPI = 1 Device_I2C = 0 </pre> 改成<br /> <pre> Device_SPI = 0 Device_I2C = 1 </pre> 然后重新执行:<br /> <pre> sudo python main.py </pre> python3同理<br /> </div> <div class="tabbertab" title="资料"> ===文档=== *[http://{{SERVERNAME}}/w/upload/c/ce/1.5inch_OLED_Moudule.pdf 原理图]<br> ===视频=== *[[1.5inch-OLED-Module-Video|演示视频]][[File:video-logo.png|23px|link=1.5inch-OLED-Module-Video]] ===程序=== *[http://{{SERVERNAME}}/w/upload/9/9d/1.5inch_OLED_Moudle.7z 示例程序]<br> ===软件=== {{OLED_Software}} ===数据手册=== *[http://{{SERVERNAME}}/w/upload/a/ac/SSD1327-datasheet.pdf SDD1327数据手册] *[http://{{SERVERNAME}}/w/upload/c/c3/1.5inch_OLED_Specification.pdf 1.5inch OLED 规格书] ===3D图纸=== *[http://{{SERVERNAME}}/w/upload/f/f3/1in5_OLED_Drawing.zip 1.5inch OLED Module 3D图纸] ===应用笔记=== *[[OLED_Draw|显示图片]] <br /><big>批量下载教程——请戳<big><big><big>☛</big></big></big></big>[[File:download-icon.png|link=批量下载教程]] <!--{{Join_us}}--> </div> <div class="tabbertab" title="FAQ"> {{FAQ|OLED模块接上电源为什么不亮?| OLED是没有背光的,显示属于自发光方式。只接VCC和GND,OLED是不会亮的。 必须用程序控制才能亮点OLED。 |||}} {{FAQ|使用该OLED模块,有什么需要注意的?| 1.注意电源不要接反。 2.不能长时间显示同一画面,否则将产生残影,导致OLED损坏。 |||}} </div> <div class="tabbertab" title="售后"><br />{{Service08}}</div>
该页面使用的模板:
模板:FAQ
(
查看源代码
)
模板:JetsonNano python lib
(
查看源代码
)
模板:OLED Software
(
查看源代码
)
模板:OLED-Related
(
查看源代码
)
模板:RPI C lib
(
查看源代码
)
模板:RPI open i2c
(
查看源代码
)
模板:RPI open spi
(
查看源代码
)
模板:Service00
(
查看源代码
)
模板:Service08
(
查看源代码
)
模板:Tipbox
(
查看源代码
)
模板:外围模块
(
查看源代码
)
返回至
1.5inch OLED Module
。
导航
导航
首页
最近更改
随机页面
MediaWiki帮助
首页
首页
树莓派
主机
配件包
外壳
键鼠
电源
扩展板
显示屏
墨水屏
摄像模块
通信模块
继电器
电机驱动板
游戏机
产品分类
树莓派
Arduino
micro:bit
STM32
Espressif
WiFi模块
蓝牙模块
无线模块
LoRa模块
4G模块
GSM
GPRS
以太网
导航模块
北斗卫星
GPS
LCD
墨水屏
OLED
摄像头
USB模块
串口模块
RS232
RS485
CAN
传感器
温度模块
湿度模块
气压模块
继电器
电机模块
指纹模块
电平转换
音频模块
编程器
Wiki工具
Wiki工具
特殊页面
页面工具
页面工具
用户页面工具
更多
链入页面
相关更改
页面信息
页面日志