硬接口模式实现显示

#  0.96英寸 ssd1306 液晶显示屏
#  Esp8266的Pin5一般指芯片上的D1针脚、Pin4一般是指D2针脚
# I2C interface:
# https://docs.micropython.org/en/latest/esp8266/tutorial/ssd1306.html
from machine import Pin, I2C
import ssd1306# using default address 0x3C
i2c = I2C(sda=Pin(4), scl=Pin(5))
display = ssd1306.SSD1306_I2C(128, 64, i2c, addr=0x3c)display.text('Hello, World!', 0, 0, 1)
display.show()

软接口模式实现显示

# Software I2C
#  0.96英寸 ssd1306 液晶显示屏
#  Esp8266的Pin5一般指芯片上的D1针脚、Pin4一般是指D2针脚from machine import SoftI2C,Pin         #从machine模块导入I2C、Pin子模块
from ssd1306 import SSD1306_I2C     #从ssd1306模块中导入SSD1306_I2C子模块i2c = SoftI2C(scl=Pin(5), sda=Pin(4))   #SoftI2C初始化:scl--> 5, sda --> 4
oled = SSD1306_I2C(128, 64, i2c, addr=0x3c) #OLED显示屏初始化:128*64分辨率,OLED的I2C地址是0x3coled.text("Hello World!", 0,  0)      #写入第1行内容
oled.text("MicroPython",  0, 20)      #写入第2行内容
oled.text("By 01Studio",  0, 50)      #写入第3行内容oled.show()   #OLED执行显示#i2c.scan()  扫码确认地址0x3c

下面代码保存为:ssd1306.py

# 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)

上传1306.py到lib文件夹。import 即可

Esp8266+ssd1306液晶屏+microPython相关推荐

  1. micropython lcd12864_Esp8266+ssd1306液晶屏+microPython(2020-09-25)

    image.png image.png ssd1306_test.py 保存后上传到芯片根文件夹就可 # 0.96英寸 ssd1306 液晶显示屏 # Esp8266的Pin5一般指芯片上的D1针脚. ...

  2. ESP8266 ST7735S液晶屏像数偏移的解决方法

    最近学习ESP8266驱动SPI接口液晶屏,购买的是 1.77寸液晶屏,分辨率是120*160. 使用Arduino编程,使用编译环境是VScode+Prduino.驱动库使用的是Adafruit_S ...

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

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

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

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

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

    一.目的 这一节我们学习如何使用我们的ESP32开发板来学习通过I2C控制0.91寸OLED液晶屏. 二.环境 ESP32 + Thonny + 0.91寸 OLED显示液晶屏模块 + 几根杜邦线 + ...

  6. 联盛德 HLK-W806 (八): 4线SPI驱动SSD1306/SSD1315 128x64 OLED液晶屏

    目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...

  7. 物联网开发笔记(84)- 使用Micropython开发ESP32开发板之控制LCD12864液晶屏和AHT10温度传感器

    一.目的 这一节我们学习如何使用我们的ESP32开发板来学习LCD12864液晶屏和AHT10温度传感器的操作.  二.环境 ESP32 + Thonny + LCD12864液晶屏 + AHT10温 ...

  8. MicroPython实现ESP8266 控制电子墨水屏(SPI)

    最近15元淘了一块电子墨水屏,合宙家的产品.看评论是可以用微雪的代码驱动,于是找了微雪的代码,顺便翻了下读取BMP的代码,做了个小DEMO玩玩.手头几个ESP32都用了,只好翻了个旧的8266去写代码 ...

  9. 简单明了操作——ESP8266 NodeMCU驱动TFT LCD液晶屏(制作透明小电视前奏)

    简单明了操作--ESP8266 NodeMCU驱动TFT LCD液晶屏(制作透明小电视前奏) 前言 准备材料 esp8266 NodeMCU(串口WiFi模块) 1.44inch SPI Arduin ...

  10. 联盛德 HLK-W806 (六): I2C驱动SSD1306 128x64 OLED液晶屏

    目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...

最新文章

  1. python注入_python的常见命令注入威胁
  2. OSPF被隔离的区域
  3. js操作元素节点对象innerHTML
  4. MapReduce排序-实现比较器和序列化代码
  5. linux apache 安装 rewrite,Linux主机下Apache如何使用rewrite模块
  6. 3d vision可以卸载吗_金属粉末可以用于3D打印,但这些知识你了解吗?
  7. leetcode 131. 分割回文串 思考分析
  8. css中英文混排 标点,浅析css中英文混排时行高不一样的原因及其解决方法
  9. 记一次被自己DDOS攻击
  10. 【深入浅出精华版视频】-刘意day13思维导图整理
  11. linux redis 调优,关于redis状态监控和性能调优详解
  12. Arduino Uno 实验11——MQ-3酒精乙醇传感器模块
  13. [概念]像素,分辨率
  14. 大华linux密码,Linux用户和组的实战练习
  15. 2012网易校园招聘笔试试题
  16. JavaWeb学习笔记(狂神版)--- 第九节 Cookie与Session
  17. 计算机网络(期末复习1~3章)
  18. c语言编码2018新年快乐,c语言代码,输入年月日计算离2018年春节(2019年2月5日)还有多少天?...
  19. android 控制POS机图文打印(二)
  20. 序列包含一个以上的元素_小疯谈python:(五)数据类型之序列类型(中)

热门文章

  1. java 子网掩码 位数_java实现子网掩码转换为网络标识位
  2. VS中javascript注释快捷键
  3. 如何利用TFTP服务器上传文件到真机交换机?可使用SecureCRT和3CDaemon工具
  4. 在 Web 浏览器中运行(PowerApps)应用
  5. 苏教版六年级上册计算机教案,苏教版六年级数学上册最新全册教案
  6. 新大一C语言程序设计与算法入门学习路线
  7. 计算机自己创作游戏,说说自己做的数据库:我不爱玩电脑游戏,自己做数据库自己欣赏...
  8. 在linux下MySQL的常用操作命令
  9. amos里CFA可行性辨别结果怎么看_本科毕业论文做问卷和数据分析应该怎么着手?(1)...
  10. iTextSharp