实战microPython(06)-OLED屏的使用(2)

2023-05-16

实战microPython(06)-OLED屏的使用(2)

David Zou 2018-11-27

大家好,上次介绍了OLED显示屏的相关知识,今天,我们进入实战,学习如何使用OLED显示屏。

如前所述,OLED显示屏的价格还是比较高的,因此我们实验用的OLED屏选用了一个0.96寸的单色小屏,像素数为128x64。大家可以在淘宝上搜索“0.96寸oled”,就可以搜到一大堆。几十元大家货比三家吧。但要注意两点:
1 要买带底板的显示屏,如下图:
在这里插入图片描述
蓝色的板子就是底板。

2 注意底板接口,要买7脚接口的。目前市面有两种,除这种7脚的,还有一种4脚的版本,这两个版本的区别是,7脚的接口可使用I2C或SPI来传输显示内容,而4脚的只支持I2C接口。为以后这块显示屏能够用在更多的场合,这里我们选用7脚的底板。
在这里插入图片描述在这里插入图片描述
好了,选购好OLED屏,我们这里默认是7脚的OLED屏,其背面如下:
在这里插入图片描述
需要说明的一点,以上图,都是淘宝随意找的商品图,仅作参考。由此商品的背面图可以看出,如果使用SPI接口,需要焊接上R3,R4电阻,如果使用I2C接口,要改焊R1,R4,R6,R7,R8电阻。板子默认是SPI口。今天我们使用的就是SPI口,因此,不需要做任何焊接工作。
接下来我们需要讲显示屏连接到uPyBoard板上,由前面的图中看到显示屏的7个引脚分别是:GND,VCC,DO,DI,RES,DC,CS。

信号描述
1.GND电源地
2.VCC电源正(2.8-5.5V)
3.D0SPI时钟 - SCLK
4.D1SPI数据 - MOSI
5.RES显示屏复位
6.DC数据/命令选择
7.CS片选

查看,uPYB的引脚图:
在这里插入图片描述
一共有两个SPI口,这里我们使用SPI1口。再将其他引线(RES, DC, CS)连接到GPIO上,这里可以随意选择IO,我的连接如下:

显示屏引脚描述uPyBoard连接
1.GND电源地GND
2.VCC电源正(2.8-5.5V)3.3V
3.D0SPI时钟 - SCLKX6
4.D1SPI数据 - MOSIX8
5.RES显示屏复位Y11
6.DC数据/命令选择Y12
7.CS片选X5

在这里插入图片描述
连接好后,要反复检查确认无误后(尤其是VCC和GND引脚),下面就可以编写程序了。使用OLED显示屏,要用到两个官方的库:machine库中的SPI接口以及ssd1306库中的SSD1306-SPI设备。
machine库和之前我们一直使用的pyb库一样,是整个uPyBoard板的接口驱动库,它是官方新出的用来取代pyb库的新版本库。官方推荐使用这个machine库来取代之前的pyb库,但由于machine库和pyb库中相同设备的使用方法不同,而且,machine库目前尚不算完善。因此,之前我们一值在使用pyb库,而这次,我们要使用machine库,因为ssd1306库是基于machine库的。
那么另一个SSD1306是什么?SSD1306是OLED显示屏的驱动芯片。上次已经讲过,显示屏上的像素排列成行阵列,当我们要显示内容时,必须要一个个的设置屏上的像素,128x64点阵像素逐个访问我们的处理器即没有那么多的外部引脚,也不能把所有时间都花在不停的更新像素上。因此,必须要一个芯片专门处理此事,我们只需要讲要显示的数据传递给它,有这个芯片将我们的数据转换为实际的像素去显示出来。这个芯片就是显示驱动芯片,而我们选用的OLED屏使用的显示芯片的型号就是SSD1306。下图显示了这3者的关系:
在这里插入图片描述
uPyBoard将要显示的内容通过SPI(或I2C)接口提供给SDD1306驱动芯片,SSD1306芯片将这些数据转换为OLED屏幕上对应的发光点显示出来。

好了现在,我们就来看看我们的程序吧:这是源码

from micropython import const
from machine import SPI
from pyb import Pin
from ssd1306 import SSD1306_SPI

spi = SPI(1);

oled = SSD1306_SPI(128, 64, spi, pyb.Pin('Y12'), pyb.Pin('Y11'), pyb.Pin('X5'));

#test
buf = bytearray(5);
buf[0] = 0x55;
buf[1] = 0x55;
buf[2] = 0x55;
buf[3] = 0x55;
buf[4] = 0x55;
oled.write_data(buf);

为方便讲解,我们还是使用截屏的方式:
在这里插入图片描述
19-22行是导入相应的库,我想大家都应该知道了,特别说明一下22行的ss1306库中含有两种接口SPI和I2C,如果你的显示屏配置的是I2C的接口,就需要引入SSD1306_I2C驱动库。这里我们使用的是SPI接口。
25行,实例化SPI1,因为我的显示屏接到SPI1口上了。
27行,实例化SSD1306_SPI设备,也就是具有SPI接口的OLE显示屏设备,也就是前面显示屏框图中右侧的部分。创建这个设备时需要指定相应的参数,SSD1306_SPI的参数如下:
SSD1306_SPI(width, height, spi, dc, res, cs, external_vcc=False)
width: 显示屏像素矩阵的宽度,我们使用的是128x64像素矩阵,因此这里值是128。
height: 显示屏像素矩阵的高度,这里值是64
spi: spi接口实例,25行已经创建好,直接带入。
dc: 7脚接口中6脚DC信号使用的GPIO,我这里连接到Y12。
res: 7脚接口中5脚RES信号使用的GPIO,我这里连接到Y11。
cs: 7脚接口中7脚CS信号使用的GPIO,我这里连接到X5。
external_vcc=False: 显示屏是否使用外部电源,默认为否。我的显示屏VCC直接使用uPyBoard的电源。因此,不需要特别指定此参数。
30-35行,是要构建一个需要显示的内容,这个内容存在字节数组中。
36行,将显示数据发给显示屏显示出来。
好了,将上面的程序拷贝并粘贴到控制台软件的输入区,并发送到uPyBoard板上去执行:
在这里插入图片描述
如果你的接线没问题的话,可以看到显示结果:
在这里插入图片描述
显示会始终保持在屏幕上,如果要清掉屏幕上的内容:

oled.fill(0);
oled.show();

如果要显示英文信息:

oled.text("Hello", 10, 10, 1);
oled.show();

搜索并关注#公#众#号: MakerDIY-Park,获取更多资料。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实战microPython(06)-OLED屏的使用(2) 的相关文章

随机推荐

  • Python中如何查看(打印输出)变量的数据类型

    1 致谢 感谢网友IT技术随笔提供的帮助 链接如下 xff1a https www cnblogs com wushuaishuai p 7739728 html 2 问题描述 今天在学习如何用OpenCV获取摄像头的视频信息时 遇到了一个
  • Anaconda中如何查看已经安装的包

    1 前言 感谢网友 流风 xff0c 飘然的风 提供的帮助 原文链接如下 xff1a https www cnblogs com zdz8207 p ai Anaconda html 2 问题描述 今天学习计算机视觉的时候 xff0c 遇到
  • STM32的HAL库开发系列 - 串口发送

    STM32的HAL库开发系列 串口发送 基本知识 USART xff1a 通用同步和异步收发器 UART xff1a 通用异步收发器 当进行异步通信时 这两者是没有区别的 区别在于USART比UART多了同步通信功能 单工 xff1a 数据
  • 完美解决调用“sudo rosdep init“命令时的报错

    在安装完毕Ubuntu系统后 xff0c 我们执行命令sudo rosdep init时往往会遇到如下报错 xff1a sudo rosdep init ERROR cannot download default sources list
  • Yolo算法详解

    Yolo原理 yolo v1 Yolo是一种目标检测算法 xff0c 目标检测的任务是从图片中找出物体并给出其类别和位置 xff0c 对于单张图片 xff0c 输出为图片中包含的N个物体的每个物体的中心位置 x y 宽 w 高 h 以及其类
  • 解决“fatal error: dynlink_nvcuvid.h: 没有那个文件或目录#include <dynlink_nvcuvid.h>“问题

    问题描述 系统 Ubuntu18 04 安装OpenCV 3 4 0 报错 In file included from home zpj CLionProjects linuxidcbuild modules cudacodec openc
  • winform实现控件透明(实现真透明)

    使用BackColor 61 Color Translate这种方法只能实现和背景色一样但是不是真的透明 xff0c 控件后面的控件还是看不到 1 首先写一个基类 using System using System Collections
  • Python模拟SSH登录字符图形菜单

    本文说明如何使用Python模拟SSH登录字符图形菜单 xff08 不知道这种菜单叫啥名字 xff0c 姑且这么叫 xff09 xff0c 并选择相应的菜单项进行操作 以下图为例 xff0c 在SSH成功登录后 xff0c 选择第7行的改密
  • 安全产品,如何从idea到可落地实现

    安全产品 xff0c 如何从idea到可落地实现 前言Step1 xff1a 用一句话描述产品要解决的问题 xff08 What xff09 Step2 xff1a 给出用户故事 xff08 Why xff09 Step3 xff1a 分析
  • LDAP认证

    注 xff1a 本文由网络公开资料整理而来 xff0c 如有错误 xff0c 欢迎指正 LDAP xff08 Lightweight Directory Access Protocol xff09 是目录服务 xff08 DAP xff09
  • 计算机博弈大赛参赛程序算法总结

    背景 前两年的全国计算机博弈大赛的爱恩斯坦棋棋种赛我都有参加 14年采用的是极大极小算法 xff0c 那个时候还不太懂搜索算法的优化 xff0c 所以算法就是最原始的极大极小搜索 xff0c 没有做任何剪枝 15年我在上一年的算法基础上加入
  • 常见硬件通信协议总结

    xff08 正好手上的nodemcu支持UART SPI I2C协议 xff0c 所以这篇文章干脆就用nodemcu来分析协议了 xff09 UART 用逻辑分析仪捕捉nodemcu init lua给上位机发送 A xff1a span
  • 我们都被监控了?揭秘全球电信网络7号信令(SS7)漏洞

    From xff1a https www ithome com html it 278270 htm 最近 xff0c 一篇报道 黑客可以通过电话号码监控你的一举一动 xff0c 里面描述因为全球电信网络7号信令 xff08 SS7 xff
  • 使用route add添加路由,使两个网卡同时访问内外网

    route add命令格式 xff1a route f p Command Destination mask Netmask Gateway metric Metric if Interface 通过配置电脑的静态路由来实现同时访问内外网的
  • 手机自动访问generate_204

    近来写WiFi钓鱼demo xff0c 需要让手机连接 WiFi 后自动跳转到指定网页 xff0c 于是对手机进行dns拦截 在对手机的流量分析中发现一件很神奇的事 xff0c 手机接入WiFi后会自动访问 generate 204 以下是
  • MT7621方案 LED 灯控制 (基于OpenWrt平台)

    注 xff1a 出处不明 xff0c 最开始是在这里看到的 xff0c 图竟然没有 没有 相关资料也几乎木有 datasheet里也没有寄存器配置说明 MT7621还真是坑爹啊 xff01 目前市面上大部分路由器方案是基于MT7620的 x
  • ROS分布式通信,Jetson Nano 与PC机通信

    Jetson Nano 与PC机通信 1 环境2 SSH安装3 修改hosts文件4 修改环境变量文件 xff5e bashrc5 测试 1 环境 PC笔记本 xff1a Ubuntu 18 04 5 LTS Jetson Nano Ubu
  • .Net6.0系列-6 .Net 6LinQ(二)常用扩展方法

    一 本节学习LinQ的扩展方法 LinQ的where返回的IEnumerable 所有的括号中都可以写lamada表达式 list 数组等都可以用LinQ 以下这些方法都是可以和Where一起使用的 Count 返回的是满足条件的个数 An
  • postman简单上手教程

    1 xff1a postman浏览器已经停止更新了 xff0c 所以下面介绍的是app版本 2 xff1a 打开postman xff0c 创建自己的测试目录 xff0c 点加号创建 xff0c 这里我创建了test project 3 x
  • 实战microPython(06)-OLED屏的使用(2)

    实战microPython 06 OLED屏的使用 2 David Zou 2018 11 27 大家好 xff0c 上次介绍了OLED显示屏的相关知识 xff0c 今天 xff0c 我们进入实战 xff0c 学习如何使用OLED显示屏 如