Esp8266+ssd1306液晶屏+microPython
硬接口模式实现显示
# 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相关推荐
- micropython lcd12864_Esp8266+ssd1306液晶屏+microPython(2020-09-25)
image.png image.png ssd1306_test.py 保存后上传到芯片根文件夹就可 # 0.96英寸 ssd1306 液晶显示屏 # Esp8266的Pin5一般指芯片上的D1针脚. ...
- ESP8266 ST7735S液晶屏像数偏移的解决方法
最近学习ESP8266驱动SPI接口液晶屏,购买的是 1.77寸液晶屏,分辨率是120*160. 使用Arduino编程,使用编译环境是VScode+Prduino.驱动库使用的是Adafruit_S ...
- micropython stm32f429_[MicroPython]STM32F407开发板驱动OLED液晶屏
1.实验目的 1.学习在PC机系统中扩展简单I/O 接口的方法. 2.进一步学习编制数据输出程序的设计方法. 3.学习 F407 Micropython开发板控制OLED显示字符. 2.所需元器件 F ...
- micropython 驱动oled0.91_[MicroPython]STM32F407开发板驱动OLED液晶屏
1.实验目的 1.学习在PC机系统中扩展简单I/O 接口的方法. 2.进一步学习编制数据输出程序的设计方法. 3.学习 F407 Micropython开发板控制OLED显示字符. 2.所需元器件 F ...
- 物联网开发笔记(85)- 使用Micropython开发ESP32开发板之通过I2C控制0.91寸OLED液晶屏
一.目的 这一节我们学习如何使用我们的ESP32开发板来学习通过I2C控制0.91寸OLED液晶屏. 二.环境 ESP32 + Thonny + 0.91寸 OLED显示液晶屏模块 + 几根杜邦线 + ...
- 联盛德 HLK-W806 (八): 4线SPI驱动SSD1306/SSD1315 128x64 OLED液晶屏
目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...
- 物联网开发笔记(84)- 使用Micropython开发ESP32开发板之控制LCD12864液晶屏和AHT10温度传感器
一.目的 这一节我们学习如何使用我们的ESP32开发板来学习LCD12864液晶屏和AHT10温度传感器的操作. 二.环境 ESP32 + Thonny + LCD12864液晶屏 + AHT10温 ...
- MicroPython实现ESP8266 控制电子墨水屏(SPI)
最近15元淘了一块电子墨水屏,合宙家的产品.看评论是可以用微雪的代码驱动,于是找了微雪的代码,顺便翻了下读取BMP的代码,做了个小DEMO玩玩.手头几个ESP32都用了,只好翻了个旧的8266去写代码 ...
- 简单明了操作——ESP8266 NodeMCU驱动TFT LCD液晶屏(制作透明小电视前奏)
简单明了操作--ESP8266 NodeMCU驱动TFT LCD液晶屏(制作透明小电视前奏) 前言 准备材料 esp8266 NodeMCU(串口WiFi模块) 1.44inch SPI Arduin ...
- 联盛德 HLK-W806 (六): I2C驱动SSD1306 128x64 OLED液晶屏
目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...
最新文章
- python注入_python的常见命令注入威胁
- OSPF被隔离的区域
- js操作元素节点对象innerHTML
- MapReduce排序-实现比较器和序列化代码
- linux apache 安装 rewrite,Linux主机下Apache如何使用rewrite模块
- 3d vision可以卸载吗_金属粉末可以用于3D打印,但这些知识你了解吗?
- leetcode 131. 分割回文串 思考分析
- css中英文混排 标点,浅析css中英文混排时行高不一样的原因及其解决方法
- 记一次被自己DDOS攻击
- 【深入浅出精华版视频】-刘意day13思维导图整理
- linux redis 调优,关于redis状态监控和性能调优详解
- Arduino Uno 实验11——MQ-3酒精乙醇传感器模块
- [概念]像素,分辨率
- 大华linux密码,Linux用户和组的实战练习
- 2012网易校园招聘笔试试题
- JavaWeb学习笔记(狂神版)--- 第九节 Cookie与Session
- 计算机网络(期末复习1~3章)
- c语言编码2018新年快乐,c语言代码,输入年月日计算离2018年春节(2019年2月5日)还有多少天?...
- android 控制POS机图文打印(二)
- 序列包含一个以上的元素_小疯谈python:(五)数据类型之序列类型(中)
热门文章
- java 子网掩码 位数_java实现子网掩码转换为网络标识位
- VS中javascript注释快捷键
- 如何利用TFTP服务器上传文件到真机交换机?可使用SecureCRT和3CDaemon工具
- 在 Web 浏览器中运行(PowerApps)应用
- 苏教版六年级上册计算机教案,苏教版六年级数学上册最新全册教案
- 新大一C语言程序设计与算法入门学习路线
- 计算机自己创作游戏,说说自己做的数据库:我不爱玩电脑游戏,自己做数据库自己欣赏...
- 在linux下MySQL的常用操作命令
- amos里CFA可行性辨别结果怎么看_本科毕业论文做问卷和数据分析应该怎么着手?(1)...
- iTextSharp