一、目的

这一节我们学习如何使用我们的ESP32开发板来学习通过I2C控制0.91寸OLED液晶屏。

二、环境

ESP32 + Thonny + 0.91寸 OLED显示液晶屏模块 + 几根杜邦线 + Win10

接线方法:

  三、SSD306 oled驱动代码

SSD306 oled驱动:

# MicroPython SSD1306 OLED driver, I2C and SPI interfacesfrom micropython import const
import framebuf# register definitions
SET_CONTRAST = const(0x81)
SET_ENTIRE_ON = const(0xA4)
SET_NORM_INV = const(0xA6)
SET_DISP = const(0xAE)
SET_MEM_ADDR = const(0x20)
SET_COL_ADDR = const(0x21)
SET_PAGE_ADDR = const(0x22)
SET_DISP_START_LINE = const(0x40)
SET_SEG_REMAP = const(0xA0)
SET_MUX_RATIO = const(0xA8)
SET_COM_OUT_DIR = const(0xC0)
SET_DISP_OFFSET = const(0xD3)
SET_COM_PIN_CFG = const(0xDA)
SET_DISP_CLK_DIV = const(0xD5)
SET_PRECHARGE = const(0xD9)
SET_VCOM_DESEL = const(0xDB)
SET_CHARGE_PUMP = const(0x8D)# Subclassing FrameBuffer provides support for graphics primitives
# http://docs.micropython.org/en/latest/pyboard/library/framebuf.html
class SSD1306(framebuf.FrameBuffer):def __init__(self, width, height, external_vcc):self.width = widthself.height = heightself.external_vcc = external_vccself.pages = self.height // 8self.buffer = bytearray(self.pages * self.width)super().__init__(self.buffer, self.width, self.height, framebuf.MONO_VLSB)self.init_display()def init_display(self):for cmd in (SET_DISP | 0x00,  # off# address settingSET_MEM_ADDR,0x00,  # horizontal# resolution and layoutSET_DISP_START_LINE | 0x00,SET_SEG_REMAP | 0x01,  # column addr 127 mapped to SEG0SET_MUX_RATIO,self.height - 1,SET_COM_OUT_DIR | 0x08,  # scan from COM[N] to COM0SET_DISP_OFFSET,0x00,SET_COM_PIN_CFG,0x02 if self.width > 2 * self.height else 0x12,# timing and driving schemeSET_DISP_CLK_DIV,0x80,SET_PRECHARGE,0x22 if self.external_vcc else 0xF1,SET_VCOM_DESEL,0x30,  # 0.83*Vcc# displaySET_CONTRAST,0xFF,  # maximumSET_ENTIRE_ON,  # output follows RAM contentsSET_NORM_INV,  # not inverted# charge pumpSET_CHARGE_PUMP,0x10 if self.external_vcc else 0x14,SET_DISP | 0x01,):  # onself.write_cmd(cmd)self.fill(0)self.show()def poweroff(self):self.write_cmd(SET_DISP | 0x00)def poweron(self):self.write_cmd(SET_DISP | 0x01)def contrast(self, contrast):self.write_cmd(SET_CONTRAST)self.write_cmd(contrast)def invert(self, invert):self.write_cmd(SET_NORM_INV | (invert & 1))def show(self):x0 = 0x1 = self.width - 1if self.width == 64:# displays with width of 64 pixels are shifted by 32x0 += 32x1 += 32self.write_cmd(SET_COL_ADDR)self.write_cmd(x0)self.write_cmd(x1)self.write_cmd(SET_PAGE_ADDR)self.write_cmd(0)self.write_cmd(self.pages - 1)self.write_data(self.buffer)class SSD1306_I2C(SSD1306):def __init__(self, width, height, i2c, addr=0x3C, external_vcc=False):self.i2c = i2cself.addr = addrself.temp = bytearray(2)self.write_list = [b"\x40", None]  # Co=0, D/C#=1super().__init__(width, height, external_vcc)def write_cmd(self, cmd):self.temp[0] = 0x80  # Co=1, D/C#=0self.temp[1] = cmdself.i2c.writeto(self.addr, self.temp)def write_data(self, buf):self.write_list[1] = bufself.i2c.writevto(self.addr, self.write_list)class SSD1306_SPI(SSD1306):def __init__(self, width, height, spi, dc, res, cs, external_vcc=False):self.rate = 10 * 1024 * 1024dc.init(dc.OUT, value=0)res.init(res.OUT, value=0)cs.init(cs.OUT, value=1)self.spi = spiself.dc = dcself.res = resself.cs = csimport timeself.res(1)time.sleep_ms(1)self.res(0)time.sleep_ms(10)self.res(1)super().__init__(width, height, external_vcc)def write_cmd(self, cmd):self.spi.init(baudrate=self.rate, polarity=0, phase=0)self.cs(1)self.dc(0)self.cs(0)self.spi.write(bytearray([cmd]))self.cs(1)def write_data(self, buf):self.spi.init(baudrate=self.rate, polarity=0, phase=0)self.cs(1)self.dc(1)self.cs(0)self.spi.write(buf)self.cs(1)

 四、演示代码

提前使用取模软件PCtoLCD2002.exe,获得“元旦快乐”四个汉字的字模。使用方法大家百度下,或者看我前面文章,也有介绍。

软件下载地址:

链接: https://pan.baidu.com/s/1mHZANIGNZ1a67Plv31_eFQ 提取码: srkp

from machine import Pin,I2C
from ssd1306 import SSD1306_I2C
import timeaddr = 0x3c
i2c = I2C(0,scl = Pin(15),sda = Pin(4),freq = 1_000_000)
oled = SSD1306_I2C(128,32,i2c,addr)
#print(hex(i2c.scan()[0]))class Chine:chine = [0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x18,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x90,0xF0,0x30,0x10,0x10,0x10,0x10,0xF0,0xF0,0x10,0x10,0x10,0x10,0x10,0x10,0x18,0x18,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xF0,0x7F,0x0F,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x40,0x20,0x20,0x10,0x18,0x0C,0x06,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x1F,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1C,0x1F,0x0C,0x00,0x00,#元,0#0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xE0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xE0,0xF0,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x18,0x1C,0x18,0x10,0x00,0x00,#旦,1#0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF0,0x30,0x00,0xFF,0xFF,0x02,0x04,0x1C,0x38,0x01,0x01,0x01,0x01,0x01,0xFF,0xFF,0x01,0x01,0x01,0x01,0x01,0x01,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x82,0xF2,0x3F,0x07,0x02,0x1E,0xE2,0x82,0x02,0x02,0x03,0x03,0x02,0x03,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x3F,0x00,0x40,0x20,0x10,0x18,0x0C,0x06,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x0E,0x1C,0x38,0x70,0x30,0x10,0x00,0x00,#快,2#0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xC0,0x40,0x40,0x40,0x40,0x40,0x20,0x20,0x20,0x20,0x20,0x20,0x30,0x30,0x30,0x18,0x18,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFC,0xFF,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xFF,0xFF,0x82,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0xC0,0x60,0x38,0x18,0x10,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x08,0x10,0x20,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x08,0x04,0x06,0x03,0x01,0x00,0x00,0x00,0x08,0x10,0x10,0x30,0x70,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x0F,0x0F,0x00,0x00,0x00,0x00,#乐,3#]# 16x16汉字显示函数
def ByteOpera16x16(num,dat):byte= [0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80]if dat&byte[num]:return 1else:return 0def LcdShowCh_16x16(n, x_axis, y_axis):for i in range(2): for a in range(16): for b in range(8):if(ByteOpera16x16(b,Chine.chine[n*32+i*16+a])): oled.pixel(x_axis+a,y_axis+i*8+b,1)else:oled.pixel(x_axis+a,y_axis+i*8+b,0)# 32x32汉字显示函数
def ByteOpera16x16(num,dat):byte= [0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80]if dat&byte[num]:return 1else:return 0def LcdShowCh_32x32(n, x_axis, y_axis):for i in range(4): for a in range(32): for b in range(8):if(ByteOpera16x16(b,Chine.chine[n*128+i*32+a])): oled.pixel(x_axis+a,y_axis+i*8+b,1)else:oled.pixel(x_axis+a,y_axis+i*8+b,0)def main():oled.contrast(155) #0-255 #亮度调节函数#oled.text("HappyNewYear",0,0)#oled.show()while True:for i in range(4):LcdShowCh_32x32(i,i*32,0)oled.show()if __name__ == "__main__":main()

演示效果

五、购买地址

https://item.taobao.com/item.htm?spm=a1z09.2.0.0.51922e8d2uqrYB&id=562145367495&_u=1p01rch224dhttps://item.taobao.com/item.htm?spm=a1z09.2.0.0.51922e8d2uqrYB&id=562145367495&_u=1p01rch224d

0.91寸(4管脚)屏幕资料下载链接:

https://pan.baidu.com/s/1jZKWGmQdRcsto-OdbnPmbg                       提取码:386h

物联网开发笔记(85)- 使用Micropython开发ESP32开发板之通过I2C控制0.91寸OLED液晶屏相关推荐

  1. Wemos D1 R32 ESP32开发板OLED液晶屏显示

    目录 一.实验准备 二.实验代码 1.OLED液晶屏显示"Hello World" 2. OLED液晶满屏显示字符 3.OLED屏显示时钟 4.OLED屏显示矢量图片 5 OLED ...

  2. micropython stm32f429_[MicroPython]STM32F407开发板驱动OLED液晶屏

    1.实验目的 1.学习在PC机系统中扩展简单I/O 接口的方法. 2.进一步学习编制数据输出程序的设计方法. 3.学习 F407 Micropython开发板控制OLED显示字符. 2.所需元器件 F ...

  3. micropython 驱动oled0.91_[MicroPython]STM32F407开发板驱动OLED液晶屏

    1.实验目的 1.学习在PC机系统中扩展简单I/O 接口的方法. 2.进一步学习编制数据输出程序的设计方法. 3.学习 F407 Micropython开发板控制OLED显示字符. 2.所需元器件 F ...

  4. MLX90640开发笔记(一)概述及开发资料准备

    现在自己在做红外成像仪的越来越多了,两年前有个井下机电设备运行状态的科研项目,当时使用了AMG8833(8*8像素).前段时间因为公司生产电路板测试需要,打算买一台红外成像仪测量电路板发热是否正常,商 ...

  5. 全志H616开发板Orange Pi Zero2连接香橙派5寸TFT液晶屏的测试说明

    香橙派Zero2开发板采用全志H616 四核 64位处理器,拥有512MB/1GB 内存可选,集成千兆以太网卡.蓝牙5.0+双频WiFi(2.4GHz和5GHz).USB2.0.Micro-HDMI( ...

  6. ADI Blackfin DSP处理器-BF533的开发详解20:4.3寸LCD液晶屏的设计与应用(含源码)

    硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP++软件 硬件链接 硬件设计原理图 功能介绍 ADSP-EDU-B ...

  7. 物联网开发笔记(9)- 使用Wokwi仿真MicroPython on ESP32开发板实现温度和湿度检测并使用屏幕显示

    一.测试环境 我们同样使用在Wokwi网站上选择Micropython with ESP32进行仿真,来进行温度和湿度的检测. ESP32官方技术参考手册: https://www.espressif ...

  8. 基于MicroPython的ESP32开发

    很久前入手了一块ESP32 DEVKIT V1,当时基于C_SDK开发.最近想搞下MicroPython,就又把这块板子找出来了. 一.先下载支持MicroPython的ESP32固件 去MicroP ...

  9. Android开发笔记(一百六十)休眠模式下的定时器控制

    定时器AlarmManager常常用于需要周期性处理的场合,比如闹钟提醒.任务轮询等等.并且定时器来源于系统服务,即使App已经不在运行了,也能收到定时器发出的广播而被唤醒.似此回光返照的神技,便遭到 ...

最新文章

  1. 「Django」rest_framework学习系列-用户认证
  2. 图灵七月书讯【Cassandra权威指南将在7月末上市】
  3. [javascript] 看知乎学习js闭包
  4. 实验4 [BX]和loop指令
  5. mysql 字符串中取整_MySQL取整
  6. mysql myisam 支持事务吗_第三章(附)mysql表类型MyISAM和InnoDB区别(决定了是否支持事务)...
  7. 这些解决 Bug 的套路,你都会了不?
  8. 地理信息革命Geospatial Revolution
  9. android5.1蓝牙反向控制(Avrcp协议)流程
  10. 高等应用数学问题的matlab求解pdf,《高等应用数学问题的matlab求解》(薛定宇 陈阳泉)[PDF]...
  11. CF816B Karen and Coffee题解
  12. 3种方法教你PS快速去掉水印
  13. ardupilot 函数output_armed_stabilizing
  14. dex2oat程序参数总结
  15. 京东有多少钱可以重来?
  16. hbuilderx安装教程_HBuilderX安装使用教程
  17. 新一年级家长快查收,小学入学必备物品超强清单!
  18. 基础(待续)-BTT与STT导弹模型
  19. win2003遭受udp攻击导致带宽占用很大
  20. 斐波那契回调线怎么画_斐波那契回调线的正确画法概述

热门文章

  1. Java Comparator的使用
  2. 中断处理过程示意图_Linux中断处理
  3. js:获取当前周的开始和结束时间
  4. Flutter嵌入swift混合开发
  5. 如何更好地打印9页PPT
  6. socketio mysql_socketio server推送
  7. “羊了个羊”Java版本实现
  8. HSRP从工作原理出发!(这个我总结了HSRP的全部相关知识点,葱鸭!)
  9. 普元eos使用svn_普元DevOps给DevOps打上企业级最佳实践标签
  10. 数据从HDFS文件迁移到Hive