树莓派Pico开发板I2C OLED显示模块接口与MicroPython编程

首先简要介绍I2C接口及I2C接口OLED显示模块,然后讲述Pico开发板I2C总线引脚及其与I2C总线OLED SSD1306显示模块的接口原理,最后给出Pico开发板控制OLED屏显示文字/图形的MicroPython程序实例。
一、I2C接口简介
I2C/IIC/I2C(Inter-Integrated Circuit,集成电路互连)总线是由PHILIPS针对微控制器需要而研制的一种两线式串行总线,适用于微控制器与外围设备芯片之间的接口连接。
I2C总线的主要特点如下:
•I2C总线最主要的优点是其简单性和有效性。
•由于接口直接在组件之上,因此I2C总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。
•总线的长度可高达25英尺(约7.6m),并且能够以100Kbps的最大传输速率支持40个组件。
•I2C总线的另一个优点是支持多主机,其中任何能够进行发送和接收的设备都可以成为主机。一个主机能够控制信号传输和时钟频率。当然,在任何时间点上只能有一个主机。
I2C接口是嵌入式系统中常用的网络接口之一,它采用串行通信方式将微控制器连接到系统总线,它能以100Kbps的标准传输速率支持40个组件,全速传输速率400Kbps,高速传输速率达3.2Mbps。
关于I2C接口技术的详细介绍,可参阅本人博文“树莓派I2C接口技术及Python SMBus串行I2C EEPROM应用编程”,这里不再赘述。
二、OLED显示器简介
OLED显示器(Organic Light-Emitting Diode,有机发光二极管显示器)在手机、平板、电脑等智能硬件显示领域有着广泛应用,被誉为“梦幻显示器”。当电流流过有机材料时,OLED就会发光。相比于传统的LCD显示技术,OLED显示技术具有如下主要优点:OLED屏厚度可以控制在1mm以内,而LCD屏厚度通常在3mm左右,OLED屏重量更加轻盈;OLED屏幕显示视角大,功耗更低;OLED屏具有良好的低温性能,即使零下40度也能正常显示;OLED使用自发光二极管,不需要背景光源;OLED使用低压直流驱动,可以用电池点亮;OLED具有高亮度,达300流明(Lumen)以上。
三、树莓派Pico开发板I2C总线引脚
树莓派Pico开发板有2个I2C总线,它们分别是为I2C0和I2C1,图1是Pico开发板I2C总线引脚配置。从图1可以看出,Pico开发板I2C总线引脚都是重复同名的,我们只能同时使用重复同名的I2C总线中的一个。
在这里插入图片描述
图1 Pico I2C总线引脚
Pico开发板默认I2C总线接口及引脚如下:
•I2C0:I2C0 SCL(GP9)、I2C0 SDA(GP8);
•I2C1:I2C1 SCL(GP7)、I2C1 SDA(GP6)。
四、Pico开发板I2C OLED显示模块接口与MicroPython编程实践
实践实例:采用Pico开发板与I2C总线OLED SSD1306显示模块接口;分别编制OLED屏显示一串英文文字“Life is short, I need Pico.”并绘制几何图形的MicroPython程序。
1.硬件材料清单
(1)Pico开发板×1
(2)Micro-USB数据线×1
(3)SSD 1306 OLED显示模块×1
(4)面包板×1
(5)公对母杜邦线×4
2.Pico开发板与I2C总线OLED SSD1306显示模块接口电路原理
SSD1306显示模块是一块包含SSD1306控制驱动芯片和OLED显示屏的模块,该模块可采用3.3V或5V电源供电。其中,OLED显示屏为一块单色屏,其分辨率为128×64像素;SSD1306控制芯片为一款OLED驱动芯片,它用于控制驱动OLED屏显示并提供I2C总线接口。Pico开发板与I2C总线OLED SSD1306模块接口电路原理如图2所示。
在这里插入图片描述
图2 Pico开发板与SSD1306显示模块接口电路原理
3.使用MicroPython编制OLED屏显示程序示例
采用MicroPython编制OLED屏显示程序要用到第三方SSD1306库。运行Thonny,选择[Tools]→[Manage Packages…]安装OLED屏SSD1306库,安装成功后,SSD1306.py模块文件会保存到Thonny的LIB库文件夹。
(1)OLED屏显示文字串程序示例
Pico开发板控制OLED屏显示文字串程序清单(程序名:I2C_1.py)如下:

# Filename: I2C_1.py
'''
Pico控制I2C OLED屏显示文字串
'''
from machine import I2C, Pin
# 加载ssd1306模块SSD1306_I2C类
from ssd1306 import SSD1306_I2C
# 使用Pico I2C0总线接口创建i2c对象
i2c = I2C(0, sda=Pin(0), scl=Pin(1), freq=100000)
# 创建oled对象:初始化OLED屏(分辨率为128×64),使用I2C总线接口
oled = SSD1306_I2C(128, 64, i2c)
oled.fill(0)   # 清除OLED屏(0:背景黑色,1:背景白色)
oled.text('Life is short,', 0, 0)   # 在(0,0)像素坐标显示文字串
oled.text('I need Pico.', 0, 30)  # 在(0,30)像素坐标显示文字串
oled.show()   # OLED执行显示

将I2C_1.py程序代码复制粘贴到Thonny IDE,点击[播放]按钮或按[F5]键执行程序后,OLED显示情况如图3所示。
在这里插入图片描述
图3 Pico控制OLED显示文字串
(2)OLED屏绘制几何图形程序示例
Pico开发板控制OLED屏显示几何图形程序清单(程序名:I2C_2.py)如下:

# Filename: I2C_2.py
'''
Pico控制I2C OLED屏绘制几何图形
'''
from machine import I2C, Pin
# 加载ssd1306模块SSD1306_I2C类
from ssd1306 import SSD1306_I2C  
# 使用Pico IC20总线接口创建i2c对象:I2C0 SDA(GP0),I2C0 SCL(GP1),I2C总线传输频率100Kbps
i2c = I2C(0,sda=Pin(0),scl=Pin(1), freq=100000)
# 创建oled对象:初始化OLED屏(分辨率为128x64),使用I2C总线接口
oled = SSD1306_I2C(128, 64, i2c)
oled.fill(0)   # 清除OLED屏
oled.pixel(63,31,1)    # 在(63,31)像素坐标处画一个点
oled.line(0, 0, 31, 31, 1)   # 将(0,0)像素坐标点和(31,31)像素坐标点连成直线
oled.line(0, 63, 31, 31, 1)   # 将(0,63)像素坐标点和(31,31)像素坐标点连成直线
# 以OLED屏左上角(0,0)像素坐标和右下角(127,63)像素坐标绘制一个矩形
oled.rect(0,0,127,63,1)
oled.show()   # OLED执行显示

将I2C_2.py程序代码复制粘贴到Thonny IDE,点击[播放]按钮或按[F5]键执行程序后,OLED显示情况如图4所示。
在这里插入图片描述
图4 Pico控制OLED绘制几何图形

发布日期:2023年3月24日

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/3100.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux内核Socket通信原理和实例讲解

关于对 Socket 的认识,大致分为下面几个主题,Socket 是什么,Socket 是如何创建的,Socket 是如何连接并收发数据的,Socket 套接字的删除等。Socket 是什么以及创建过程一个数据包经由应用程序产生,进入到协议…

平板触控笔哪些品牌好?ipad触控笔推荐平价

苹果电容笔与平替电容笔两者需要根据我们的预算以及需求去选择,要是日常多用于用于绘画,建议可以用Apple Pencil,而对于日常仅仅用于学习与记笔记,可以用平替电容笔,由于平替电容笔的品质与表现都非常优秀。小编整理了…

初识进程

文章目录一、进程的概念1. 进程是什么及进程的管理2. Linux 下的 pcb3. 系统调用接口 getpid 和 getppid4. 系统调用接口 fork一、进程的概念 1. 进程是什么及进程的管理 在 Linux下 ./binaryfile 运行一个程序或者在 Windows下双击运行一个程序时,程序就变成了一个…

【百面成神】spring基础12问,你能坚持到第几问

前 言 🍉 作者简介:半旧518,长跑型选手,立志坚持写10年博客,专注于java后端 ☕专栏简介:java面试宝典,特点:全、精、深、简,力求每个核心知识点1分钟回答好。 &#x1f3…

RK3588平台开发系列讲解(视频篇)RTP H264 码流打包详解

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、单 NALU 封包方式二、组合封包方式三、分片封包方式沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 H264 码流是放在 RTP 的有效载荷部分的。因此有效载荷前面的 RTP 头部跟码流本身是没有关系的,所以我…

Python|蓝桥杯进阶第六卷——搜索

欢迎交流学习~~ 专栏: 蓝桥杯Python组刷题日寄 蓝桥杯进阶系列: 🏆 Python | 蓝桥杯进阶第一卷——字符串 🔎 Python | 蓝桥杯进阶第二卷——贪心 💝 Python | 蓝桥杯进阶第三卷——动态规划 ✈️ Python | 蓝桥杯进阶…

mysql数据库介绍

💜今天对mysql的一些基础概念进行讲诶横扫,如概念、特点、优势、发展历史等等。对之前内容感兴趣的同学可以参考👇: 链接: mysql学习之数据系统概述 🎾让我们开始今日份的学习吧! 目录1. mysql的基本概念…

十七、网上商城项目(5)

本章概要 购物车 购物车状态管理配置购物车组件 结算页面用户管理 用户状态管理配置用户注册组件用户登录组件 17.8 购物车 在一个电商网站中,购物车在很多页面都需要用到,因此非常适合放在 Vuex 的 store 中进行集中管理。在本项目中,采…

【北大青鸟天府校区的Java专业怎么样?】

北大青鸟天府校区是北大青鸟总部在西南投资兴办的重点校区,拥有极为强大的外部教育资源和就业资源,使咱们的学员能够享受更好、更完善的教学资源。超过23年的办学经验,培养了超过10000位学员,保障就业,学员就业率达到9…

[入门必看]数据结构2.3:线性表的链式表示

[入门必看]数据结构2.3:线性表的链式表示第二章 线性表2.3 线性表的链式表示知识总览2.3.1 单链表的定义2.3.2_1 单链表的插入删除2.3.2_2 单链表的查找2.3.2_3 单链表的建立2.3.3 双链表2.3.4 循环链表2.3.5 静态链表2.3.6 顺序表和链表的比较2.3.1 单链表的定义单…

JUC高级四:Java内存模型之JMM

JUC高级四:Java内存模型之JMM 1. 计算机硬件存储体系(JMM为什么诞生) 因为有这么多级的缓存(cpu和物理主内存的速度不一致的),CPU的运行并不是直接操作内存而是先把内存里边的数据读到缓存,而内存的读和写操作的时候就会造成不一致的问题 在我们cpu寄存…

WebRTC开源库内部调用abort函数引发程序发生闪退问题的排查

目录 1、初始问题描述 2、使用Process Explorer工具查看到处理音视频业务的rtcmpdll.dll模块没有加载起来 3、使用Dependency Walker工具查看到rtcmpdll.dll依赖的库有问题 4、更新库之后Debug程序启动时就发生异常,程序闪退 5、VS调试时看不到有效的函数调用堆…

十大Python可视化工具,太强了

今天介绍Python当中十大可视化工具,每一个都独具特色,惊艳一方。 Matplotlib Matplotlib 是 Python 的一个绘图库,可以绘制出高质量的折线图、散点图、柱状图、条形图等等。它也是许多其他可视化库的基础。 import matplotlib.pyplot as p…

OpenCV入门(二十)快速学会OpenCV 19 对象测量

OpenCV入门(二十)快速学会OpenCV 19 对象测量1.对象测量2.多边形拟合3.计算对象中心作者:Xiou 1.对象测量 opencv 中对象测量包括: 如面积,周长,质心,边界框等。 弧长与面积测量; …

《LKD3粗读笔记》(4)进程调度

1、多任务 什么是多任务操作系统? 能同时并发地交互执行多个进程。注意是并发而不是并行。特别地,在多处理机机器上可以实现真正意义上的并行,因为它长了多个脑子多任务操作系统有哪些分类? 非抢占式多任务(cooperati…

【云原生】Kubernetes(k8s)部署 MySQL+Dubbo+Nacos服务

一、说明二、部署 MySQL三、部署 Nacos四、部署 Dubbo 服务4.1. 创建镜像仓库的密钥4.2. 部署 provider 服务4.3. 部署 consumer 服务五、测试一、说明 本文介绍基于 Kubernetes(k8s) 环境集成阿里云 私有镜像仓库 来部署一套 Dubbo Nacos 的微服务系统,并使用 Ku…

7个最好的PDF编辑器,帮你像编辑Word一样编辑PDF

PDF 是具有数字思维的组织的重要交流工具。提供高效的工作流程和更好的安全性,可以创建重要文档并与客户、同事和员工共享。文档的布局已锁定,因此无论在什么设备上查看,格式都保持不变。这是让每个人保持一致的好方法——尤其是那些使用Micr…

C++中的引用

个人主页:平行线也会相交 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【C】 接下来就要开始进行C的学习路线了,听说这块的内容稍微难一些,不过我相信只要自己好好学习,态度…

java与Spring的循环依赖

java与Spring的循环依赖一、循环依赖是什么有什么危害二、循环依赖在Spring中的体现和类型三、Spirng如何解决循环依赖四、总结一、循环依赖是什么有什么危害 什么是循环依赖 java中循环依赖用一张图来说就是下图:在对象的创建过程中多个对象形成了依赖闭环&#xf…

初识linux之管道

一、进程间通信的概念大家都知道,进程是具有独立性的,因为一个程序运行起来生成进程时,也会生成它的进程结构体,即PCB,然后然后通过进程结构体中的结构体指针找到它的虚拟地址空间,然后再通过它的页表映射到…