【MicroPython教程】SSD1306 oled

文章目录

  • 前言
  • 一、OLED的介绍
  • 二、下载ssd1306驱动
  • 三、ssd1306驱动的使用
  • 3.1 oled屏连线
  • 3.2 初始化oled
    • 3.3 画图函数
      • 填充整个屏幕
      • 显示
      • 画点
      • 滚动
      • 写字
      • 画圆形
      • 画弧
      • 画无填充的矩形
      • 画填充矩形
      • 画线
      • 画xbm图像
  • 四、示例代码——正弦函数
  • 总结


前言

SSD1306 OLED 是一种常见的小型显示屏,广泛应用于各种微控制器项目中。它具有低功耗、高对比度和快速响应的特点,适合于嵌入式系统中的信息显示和用户界面设计。MicroPython 提供了对 SSD1306 OLED 的驱动支持,使得用户可以方便地在 MicroPython 环境中控制 OLED 显示器,实现各种自定义的图形和文字显示。


一、OLED的介绍

当提到 OLED(Organic Light Emitting Diode,有机发光二极管)模块时,通常是指一种显示技术,它使用有机薄膜层作为发光材料,可以制造出高对比度、高亮度、高分辨率的显示屏。OLED 模块在各种电子设备中被广泛应用,包括智能手机、平板电脑、电视、监视器、可穿戴设备以及嵌入式系统中的小型显示屏。

下面是一些 OLED 模块的常见特点和优势:
高对比度:OLED 屏幕能够产生非常深的黑色,因为在黑色显示时,相应像素可以完全关闭,而不会发出任何光。这导致 OLED 屏幕具有极高的对比度,使得显示内容更加清晰和易于阅读。
快速响应时间:与传统的液晶显示屏相比,OLED 屏幕的响应时间更快。这意味着在切换图像或响应用户输入时,OLED 屏幕能够提供更平滑和更灵敏的体验。
薄型轻便:OLED 技术的特点使得 OLED 模块可以制造得非常薄,这使得它们非常适合用于移动设备和便携式电子产品。
广视角:OLED 屏幕在广泛的视角范围内都能提供清晰的图像,而不会出现颜色失真或亮度下降的情况。
低功耗:OLED 屏幕只有在需要时才会点亮像素,这意味着它们可以在显示静态图像时节省电能,从而延长设备的电池寿命。
OLED 模块通常由驱动芯片、显示面板和连接接口组成。驱动芯片负责控制像素的点亮和关闭,以及处理显示数据。显示面板由一系列的 OLED 像素组成,每个像素可以发光或关闭。连接接口则允许模块与其他电子设备进行通信,以接收要显示的图像或文本数据。
在嵌入式系统中,如微控制器或单片机项目中,常用的 OLED 模块会集成一些简化接口,使得与主控制器的通信更加容易。通常,这些模块提供了一些基本的方法和函数,允许用户在屏幕上绘制图形、显示文本或执行其他

二、下载ssd1306驱动

大家可以在我们的博客中资源里找到我们的ssd1306驱动进行下载使用

三、ssd1306驱动的使用

3.1 oled屏连线

我们把线通过下图连接好线即可:
在这里插入图片描述

3.2 初始化oled

对于我们的oled,他是使用I2C进行通信的,他需要先初始化一个I2C对象:

from machine import Pin, I2Ci2c = I2C(0, scl=Pin(22), sda=Pin(21))

接下来我们初始化我们的oled即可,我们使用的是I2C进行通信,屏幕尺寸是128*64:

import ssd1306oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)

3.3 画图函数

填充整个屏幕

我们可以使用下面这个函数来填充整个屏幕:

SSD1306.fill(col)

当参数1为1时,代表整个屏幕为白色,如果为0则是黑色

显示

我们可以使用下面这个函数来显示屏幕上的信息:

SSD1306.show()

画点

我们可以使用下面这个函数来画点:

SSD1306.pixel(x, y)

参数为你需要显示点的坐标

滚动

我们可以使用下面这个函数来滚动:

SSD1306.scroll(dx, dy)

他的参数为你要滚动的x,y偏移值

写字

我们可以使用下面这个函数来写字:

SSD1306.text(string, x, y, col=1)

参数1为你要显示的字,参数2和3为字的左上角坐标,col为字显示是白色还是黑色

画圆形

我们可以使用下面这个函数来画圆形:

SSD1306.draw_circle(x0, y0, r, color=1)

参数1和2为圆心的坐标,r为半径长度,color为字显示是白色还是黑色

画弧

我们可以使用下面这个函数来画弧:

SSD1306.draw_arc(x0, y0, r, start_angle, end_angle, color=1)

参数1和2为圆心的坐标,r为半径长度,start_angle与end_angle为开始和结束的角度,color为字显示是白色还是黑色

画无填充的矩形

我们可以使用下面这个函数来画无填充的矩形:

SSD1306.draw_rect(x0, y0, width, height, col=1)

参数1和2为矩形左上角的坐标,width和height为矩形的宽度和高度,color为字显示是白色还是黑色

画填充矩形

我们可以使用下面这个函数来画填充矩形:

SSD1306.draw_fill_rect(x, y, width, height, col=1):

参数1和2为矩形左上角的坐标,width和height为矩形的宽度和高度,color为字显示是白色还是黑色

画线

我们可以使用下面这个函数来画线:

SSD1306.draw_line(x0, y0, x1, y1, col=1)

参数1和2为矩形左上角的坐标,width和height为矩形的宽度和高度,color为字显示是白色还是黑色

画xbm图像

我们可以使用下面这个函数来画xbm图像:

SSD1306.draw_xbm(x, y, xbm_data, width, height, col=1):

参数1和2为xbm左上角的坐标,xbm_data为xbm图像存储的数据,width和height为矩形的宽度和高度,color为字显示是白色还是黑色

四、示例代码——正弦函数

from machine import Pin, I2C
import ssd1306
import time
import math# ESP32 Pin assignment 
i2c = I2C(0, scl=Pin(22), sda=Pin(21))WIDTH = 128
HEIGHT = 64
oled = ssd1306.SSD1306_I2C(WIDTH, HEIGHT, i2c)def draw_sine():amplitude = 30  # 正弦函数振幅frequency = 2   # 正弦函数频率phase_shift = 0 # 正弦函数相位偏移# 清除屏幕oled.fill(0)# 绘制坐标轴oled.draw_line(0, HEIGHT // 2, WIDTH, HEIGHT // 2, 1)oled.draw_line(WIDTH // 2, 0, WIDTH // 2, HEIGHT, 1)# 绘制正弦函数曲线for x in range(WIDTH):y = int(HEIGHT // 2 - amplitude * math.sin(2 * math.pi * frequency * x / WIDTH + phase_shift))oled.pixel(x, y, 1)draw_sine()oled.show()

在这里插入图片描述


总结

通过本文,我们简要介绍了 MicroPython 中 SSD1306 OLED 的使用方法。SSD1306 OLED 是一种常见的小型显示屏,具有低功耗、高对比度和快速响应的特点,适合于各种微控制器项目中的信息显示和用户界面设计。MicroPython 提供了对 SSD1306 OLED 的驱动支持,用户可以通过简单的代码,轻松地控制 OLED 显示器,实现各种自定义的图形和文字显示。

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

​MPV,汽车产品里一个特殊品类的进化过程

「汽车」可能是整个工业革命以来,所诞生出的最有趣的工业产品。 它不仅能产生工业的机械美,还诞生了一个独立的文化体系,在汽车的发展过程中,我们也能看到一些本来应功能而诞生的产品,最终走向了千家万户。 MPV 就是…

【王道数据结构】【chapter8排序】【P371t6】

试设计一个算法&#xff0c;判断一个数据序列是否构成一个小根堆&#xff08;下面代码中的堆排序的部分仅仅是为了方便设计测试用例&#xff09; #include <iostream> #include<time.h> #include<stdlib.h>int * buildarray(int size) {int* tmp(int *) mall…

Java毕业设计-基于springboot开发的家政服务管理平台系统-毕业论文+答辩PPT(有源代码)

文章目录 前言一、毕设成果演示&#xff08;源代码在文末&#xff09;二、毕设摘要展示1.开发说明2.需求分析3、系统功能结构 三、系统实现展示1、前台模块设计2、后台功能模块2.1管理员功能模块2.2用户功能模块2.3服务人员功能模块 四、毕设内容和源代码获取总结 Java毕业设计…

P2040 打开所有的灯

题目传送门&#xff1a;P2040 打开所有的灯 用深度优先搜索实现的一个填色题。 题目步骤&#xff1a; 1..dfs 首先dfs要判断是否符合题意&#xff0c;如果符合题意就更新最短路&#xff1b; 如果不符合题意就枚举 如果是关的就把周围四个包括 给标记上和原来相反的&#xf…

文件怎么减小内存?4个简单的方法~

随着我们在电脑或移动设备上创建、下载和收集越来越多的文件&#xff0c;存储空间的管理变得尤为重要。有时&#xff0c;文件太大会占用过多的内存&#xff0c;导致存储空间不足的问题。但别担心&#xff0c;本文将向您介绍五种简单有效的方法&#xff0c;帮助您轻松减小文件的…

SpringBoot启动扩展应用:干预优化+加快启动时间(干货典藏版)

一、SpringBoot启动过程干预 Spring Boot启动过程中我们可以实现以下干预工作&#xff1a; 修改Spring Boot默认的配置属性。使用ConfigurationProperties和EnableConfigurationProperties注解&#xff0c;可以获取和修改Spring Boot的配置属性。 加载配置文件。Spring Boot会…

深度伪造,让网络钓鱼更加难以辨别

网络钓鱼一直是安全领域的一个突出话题&#xff0c;尽管这类诈骗形式已经存在了几十年&#xff0c;依旧是欺诈攻击或渗透组织的最有效方法之一。诈骗分子基于社会工程原理&#xff0c;通过邮件、网站以及电话、短信和社交媒体&#xff0c;利用人性&#xff08;如冲动、不满、好…

JavaWeb之 Web概述

目录 前言1.1 Web和 JavaWeb的概念1.2 JavaWeb技术栈1.2.1 B/S架构1.2.2 静态资源1.2.3 动态资源1.2.4 数据库1.2.5 HTTP协议1.2.6 Web服务器 1.3 JavaWeb 学习内容 前言 博主将用 CSDN 记录 Java 后端开发学习之路上的经验&#xff0c;并将自己整理的编程经验和知识分享出来&a…

2024年腾讯云服务器优惠活动,3月份价格曝光可领代金券

腾讯云优惠活动2024新春采购节活动上线&#xff0c;云服务器价格已经出来了&#xff0c;云服务器61元一年起&#xff0c;配置和价格基本上和上个月没什么变化&#xff0c;但是新增了8888元代金券和会员续费优惠&#xff0c;腾讯云百科txybk.com整理腾讯云最新优惠活动云服务器配…

[VNCTF2024]-PWN:preinit解析(逆向花指令,绕过strcmp,函数修改,机器码)

查看保护&#xff1a; 查看ida&#xff1a; 这边其实看反汇编没啥大作用&#xff0c;需要自己动调。 但是前面的绕过strcmp还是要看一下的。 解题&#xff1a; 这里是用linux自带的产生随机数的文件urandom来产生一个随机密码&#xff0c;然后让我们输入密码&#xff0c;用st…

C++ //练习 10.6 编写程序,使用fill_n将一个序列中的int值都设置为0。

C Primer&#xff08;第5版&#xff09; 练习 10.6 练习 10.6 编写程序&#xff0c;使用fill_n将一个序列中的int值都设置为0。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 /********************************************…

7.1.2 Selenium的用法1

目录 1. 初始化浏览器对象和访问页面 2. 查找节点及节点交互 2.1 查找单个节点 &#xff08;1&#xff09;获取方法1——特定方法 &#xff08;2&#xff09;通用方法 2.2 查找多个节点 2.3 节点交互 3. 动作链 4. 执行 JavaScript 之下拉进度条 5. 获取节点信息 5.…

集群分发脚本xsync

集群分发脚本xsync 一、简介二、环境准备三、添加到机器的 hosts 文件四、ping 命令测试五、SSH 配置5.1.本地先生成公钥和私钥5.2.将公钥拷贝到其他机器 六、xsync 脚本编写6.1.安装 rsync6.2.新建 xsync.sh6.3.xsync.sh脚本6.4.赋予脚本执行权限6.5.测试 endl 一、简介 配置…

java项目打包运行报异常:xxxxx-1.0-SNAPSHOT.jar中没有主清单属性

pom.xml中加入这段话即可 <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.4.4</version><executions><execution><…

又挖到宝了!国人团队研发的AI视频工具PixVerse,这么好用居然还完全免费!(强烈推荐)

昨天发了一款国产免费的 AI 绘画工具 Dreamina 的介绍&#xff1a; 居然才发现&#xff01;字节跳动旗下国产AI绘画工具Dreamina&#xff0c;这么好用居然还免费&#xff01;&#xff08;强烈推荐&#xff09; 发现大家对国产 AI 工具还挺感兴趣的。今天继续帮大家挖国产的 A…

从入门到精通的Android进阶学习笔记整理,你有过迷茫吗

面试题 一般Android面试分为两部分&#xff1a;Java部分和Android部分&#xff0c;下面说一下自己面试过程遇到的一些具体题目和一些相关知识点。 一 JAVA相关 1&#xff09;JAVA基础 1.java基本数据类型有哪些&#xff0c;int&#xff0c; long占几个字节 2. 和 equals有什…

MySQL-MHA搭建、故障测试

一、架构说明 MHA&#xff08;Master High Availability&#xff09;是一个用于 MySQL 主从复制管理和自动故障转移的开源工具集。MHA 的主要目的是提供 MySQL 环境的高可用性和自动故障转移功能&#xff0c;确保在主库发生故障时能够快速切换到备库&#xff0c;降低业务中断时…

map和set例题应用

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 目录 第一题 第二题 第三题 第一题 随机链表的复制https://leetcode.cn/problems/copy-list-with-random-pointer/description/ 思路 首先遍历旧链表&#xff0c;并创建新节点&#xff0c;同时用map将旧节点与新节点…

lv20 QT 常用控件 2

1 QT GUI 类继承简介 布局管理器 输出控件 输入控件 按钮 容器 2 按钮示例 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QCheckBox> #include <QLineEdit> #include <QPushButton>class Widget : public QWidget {Q_OBJECTpublic…

LeetCode142. 环形链表 II刷题详解

今天力扣刷到了一个特别有意思的题目&#xff0c;于是就写了下面的题解来加深以下理解。 142. 环形链表 II - 力扣&#xff08;LeetCode&#xff09; 这个可以分为两大步去写&#xff0c;首先要判断链表是否有环&#xff0c;然后如果有环就去找到环的入口&#xff0c;没有环返…