【雕爷学编程】MicroPython手册之 ESP8266 SSD1306驱动

在这里插入图片描述
MicroPython是为了在嵌入式系统中运行Python 3编程语言而设计的轻量级版本解释器。与常规Python相比,MicroPython解释器体积小(仅100KB左右),通过编译成二进制Executable文件运行,执行效率较高。它使用了轻量级的垃圾回收机制并移除了大部分Python标准库,以适应资源限制的微控制器。

MicroPython主要特点包括:
1、语法和功能与标准Python兼容,易学易用。支持Python大多数核心语法。
2、对硬件直接访问和控制,像Arduino一样控制GPIO、I2C、SPI等。
3、强大的模块系统,提供文件系统、网络、图形界面等功能。
4、支持交叉编译生成高效的原生代码,速度比解释器快10-100倍。
5、代码量少,内存占用小,适合运行在MCU和内存小的开发板上。
6、开源许可,免费使用。Shell交互环境为开发测试提供便利。
7、内置I/O驱动支持大量微控制器平台,如ESP8266、ESP32、STM32、micro:bit、掌控板和PyBoard等。有活跃的社区。

MicroPython的应用场景包括:
1、为嵌入式产品快速构建原型和用户交互。
2、制作一些小型的可 programmable 硬件项目。
3、作为教育工具,帮助初学者学习Python和物联网编程。
4、构建智能设备固件,实现高级控制和云连接。
5、各种微控制器应用如物联网、嵌入式智能、机器人等。

使用MicroPython需要注意:
1、内存和Flash空间有限。
2、解释执行效率不如C语言。
3、部分库函数与标准版有差异。
4、针对平台优化语法,订正与标准Python的差异。
5、合理使用内存资源,避免频繁分配大内存块。
6、利用原生代码提升速度关键部位的性能。
7、适当使用抽象来封装底层硬件操作。

总体来说,MicroPython让Python进入了微控制器领域,是一项重要的创新,既降低了编程门槛,又提供了良好的硬件控制能力。非常适合各类物联网和智能硬件的开发。
在这里插入图片描述

ESP8266是一种低成本的Wi-Fi芯片,它可以用于开发物联网、智能家居、网络控制等应用。不同的ESP8266芯片或模块可能有不同的参数,因此在使用或购买时,需要注意选择合适的型号和版本。以下是一些常见的ESP8266参数:

1、尺寸:ESP8266芯片的尺寸为5x5 mm,ESP8266模块的尺寸根据外围电路和天线的不同而有所差异,一般在10x15 mm到25x50 mm之间。
2、工作温度:ESP8266芯片的工作温度范围为-40125℃,ESP8266模块的工作温度范围一般为-4085℃。
3、处理器:ESP8266芯片内置了一个32位的Tensilica L106 RISC处理器,最高时钟频率为160 MHz,支持实时操作系统和Wi-Fi协议栈。
4、内存:ESP8266芯片内置了64 KB的指令RAM和96 KB的数据RAM,以及64 KB的boot ROM。ESP8266模块还需要外接一个Flash存储器,一般为512 KB到16 MB之间。
5、电源:ESP8266芯片的供电电压为3.0~3.6 V,最大功耗为170 mA,最小功耗为20 uA。ESP8266模块的供电电压一般为3.3 V或5 V,最大功耗一般为200~300 mA,最小功耗一般为10~20 uA。
6、通信协议:ESP8266芯片支持IEEE 802.11 b/g/n标准的Wi-Fi协议,支持Station、SoftAP和Station+SoftAP三种模式。ESP8266芯片还支持多种数字外设接口,如GPIO、PWM、ADC、UART、I2C、SPI等。ESP8266芯片还可以使用socket模块或其他协议库来实现TCP/IP、UDP、HTTP、MQTT等协议。
在这里插入图片描述
MicroPython的ESP8266 SSD1306驱动是一种用于控制 SSD1306 OLED 显示屏的模块,可以实现对显示屏的文字和图形的显示和操作。

SSD1306驱动的主要特点有:

SSD1306驱动可以支持 SPI 或 I2C 接口,根据不同的硬件连接方式,需要使用不同的类来创建显示屏对象。
SSD1306驱动可以支持不同的显示屏尺寸和颜色,如 128x64、128x32、72x40、64x48,以及白色、黄色、蓝色、黄色+蓝色等。
SSD1306驱动提供了基本的显示功能,如开关电源、调节对比度、反转显示、旋转显示、滚动显示等。
SSD1306驱动继承了 FrameBuffer 类,提供了图形绘制功能,如填充颜色、画点、画线、画矩形、写文字等。
SSD1306驱动需要通过 show 方法来将缓冲区的内容写入到显示屏上,否则不会更新显示效果。

SSD1306驱动的应用场景有:

SSD1306驱动可以用于显示各种文本信息,如时间、日期、温度、湿度、气压等,实现数据采集和监控。
SSD1306驱动可以用于显示各种图形信息,如图标、二维码、表格、曲线等,实现数据可视化和交互。
SSD1306驱动可以用于显示各种动画效果,如跑马灯、彩虹灯、心跳灯等,实现设备美化和趣味性。

SSD1306驱动的注意事项有:

SSD1306驱动需要根据具体的硬件平台和驱动程序选择合适的引脚和参数,否则可能导致无法正常工作或损坏设备。
SSD1306驱动需要注意不同类型或品牌的显示屏之间的兼容性问题,可能存在分辨率或颜色差异等问题。
SSD1306驱动需要注意控制显示屏的电源和电流,避免过载或过热等问题。

MicroPython的ESP8266 SSD1306驱动的几个实际运用程序参考代码案例如下:

案例1:使用SSD1306驱动显示当前时间:

# 导入相关模块
import machine
import ssd1306
import time

# 创建I2C对象
i2c = machine.I2C(sda=machine.Pin(4), scl=machine.Pin(5))

# 创建SSD1306对象,设置显示屏尺寸为128x64
display = ssd1306.SSD1306_I2C(128, 64, i2c)

# 循环获取并显示当前时间
while True:
    # 清空显示屏
    display.fill(0)
    # 获取当前时间元组(年,月,日,星期,时,分,秒,微秒)
    t = time.localtime()
    # 格式化时间字符串(时:分:秒)
    s = '{:02}:{:02}:{:02}'.format(t[3], t[4], t[5])
    # 在显示屏上写入时间字符串
    display.text(s, 0, 0, 1)
    # 将缓冲区内容写入到显示屏上
    display.show()

案例2:使用SSD1306驱动绘制一个笑脸:

# 导入相关模块
import machine
import ssd1306

# 创建SPI对象
spi = machine.SPI(1)

# 创建SSD1306对象,设置显示屏尺寸为128x64
display = ssd1306.SSD1306_SPI(128, 64, spi, machine.Pin(4), machine.Pin(5), machine.Pin(15))

# 清空显示屏
display.fill(0)

# 绘制笑脸的外圆
display.circle(64, 32, 30, 1)

# 绘制笑脸的左眼
display.fill_circle(54, 24, 3, 1)

# 绘制笑脸的右眼
display.fill_circle(74, 24, 3, 1)

# 绘制笑脸的嘴巴
display.fill_rect(54, 38, 20, 4, 1)
display.fill_rect(52, 40, 4, 4, 1)
display.fill_rect(72, 40, 4, 4, 1)

# 将缓冲区内容写入到显示屏上
display.show()

案例3:使用SSD1306驱动显示一个二维码:

# 导入相关模块
import machine
import ssd1306
import framebuf

# 创建I2C对象
i2c = machine.I2C(sda=machine.Pin(4), scl=machine.Pin(5))

# 创建SSD1306对象,设置显示屏尺寸为128x64
display = ssd1306.SSD1306_I2C(128, 64, i2c)

# 清空显示屏
display.fill(0)

# 创建一个二维码的字节数组(省略)
qr_data = bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
                    b'\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff'
                    b'\x00\x00\xff\x00\x00\x00\x00\xff\x00\xff\x00\xff\x00\x00\x00\xff'
                    b'\x00\x00\xff\x00\xff\xff\xff\xff\x00\xff\x00\xff\x00\xff\xff\xff'
                    b'\x00\x00\xff\x00\xff\xff\xff\xff\x00\xff\x00\xff\x00\xff\xff\xff'
                    b'\x00\x00\xff\x00\x00\x00\x00\xff\x00\xff\x00\xff\x00\x00\x00xff'
                    b'\x00\x00xffxffxffxffxffxffxffxffxffxffxffxffxffxff'
                    b'\x0f\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0'
                    b'\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0'
                    b'\xf0\xf0\xf0\xf0xfxfxfxfxfxfxfxfxfxfxfxfxfxfxfxf'
                    b'\xfxfxfxfxfxfxfxfxfxfxfxfxfxfxfxf')
                    
# 创建一个FrameBuffer对象,使用二维码的字节数组作为数据源,设置尺寸为16x16,格式为MONO_HLSB
qr = framebuf.FrameBuffer(qr_data, 16, 16, framebuf.MONO_HLSB)

# 将FrameBuffer对象缩放到128x128,并绘制到显示屏上
display.blit(qr, 0, -32, key=1)
display.blit(qr, -32, -32, key=1)
display.blit(qr, -64, -32, key=1)
display.blit(qr, -96, -32, key=1)
display.blit(qr, -128, -32, key=1)
display.blit(qr, -160, -32, key=1)
display.blit(qr, -192, -32, key=1)
display.blit(qr, -224 , -32 , key=1)

# 将缓冲区内容写入到显示屏上
display.show()

案例4:显示文本信息:

import machine
import ssd1306

i2c = machine.I2C(scl=machine.Pin(5), sda=machine.Pin(4))
oled = ssd1306.SSD1306_I2C(128, 64, i2c)

oled.fill(0)
oled.text("Hello, World!", 0, 0)
oled.show()

这个示例使用ESP8266驱动SSD1306 OLED显示屏,在屏幕上显示文本信息"Hello, World!"。通过实例化machine.I2C类来初始化I2C总线,然后实例化ssd1306.SSD1306_I2C类来初始化SSD1306显示屏。在oled对象上调用fill()方法来清空屏幕内容,然后使用text()方法在坐标(0, 0)处绘制文本信息,最后通过show()方法将图像渲染到屏幕上。

案例5:绘制图形:

import machine
import ssd1306

i2c = machine.I2C(scl=machine.Pin(5), sda=machine.Pin(4))
oled = ssd1306.SSD1306_I2C(128, 64, i2c)

oled.fill(0)
oled.pixel(30, 30, 1)
oled.line(10, 10, 50, 20, 1)
oled.rect(60, 10, 20, 20, 1)
oled.fill_rect(90, 10, 20, 20, 1)
oled.show()

这个示例使用ESP8266驱动SSD1306 OLED显示屏,在屏幕上绘制简单的图形。通过实例化machine.I2C类来初始化I2C总线,然后实例化ssd1306.SSD1306_I2C类来初始化SSD1306显示屏。在oled对象上调用fill()方法来清空屏幕内容,然后使用pixel()方法绘制一个像素点,line()方法绘制一条直线,rect()方法绘制一个矩形,fill_rect()方法绘制一个填充矩形,最后通过show()方法将图像渲染到屏幕上。

案例6:显示图像:

import machine
import ssd1306
from PIL import Image

i2c = machine.I2C(scl=machine.Pin(5), sda=machine.Pin(4))
oled = ssd1306.SSD1306_I2C(128, 64, i2c)

image = Image.open('image.bmp').convert('1')
oled.image(image)
oled.show()

这个示例使用ESP8266驱动SSD1306 OLED显示屏,显示一个预先准备好的图像。通过实例化machine.I2C类来初始化I2C总线,然后实例化ssd1306.SSD1306_I2C类来初始化SSD1306显示屏。使用PIL库的Image.open()方法打开一个位图图像文件,并转换为黑白模式(convert(‘1’))。然后通过image()方法将图像渲染到屏幕上,最后通过show()方法将图像显示出来。这些示例代码提供了使用MicroPython驱动ESP8266的SSD1306 OLED显示屏的实际运用程序参考。请根据自己的需求和硬件配置进行适当的调整和修改。

案例7:显示文本信息:

import machine
import ssd1306

# 配置SSD1306引脚(例如引脚4和5)
sda_pin = machine.Pin(4)
scl_pin = machine.Pin(5)
i2c = machine.I2C(sda=sda_pin, scl=scl_pin)
oled = ssd1306.SSD1306_I2C(128, 64, i2c)

# 清空显示屏
oled.fill(0)

# 显示文本
oled.text("Hello,", 0, 0)
oled.text("MicroPython!", 0, 10)

# 更新显示
oled.show()

在上述示例中,我们首先使用machine.Pin()创建两个引脚对象,用于配置SSD1306的SDA(数据)引脚(例如引脚4)和SCL(时钟)引脚(例如引脚5)。然后,使用machine.I2C()创建一个I2C对象,并将SDA引脚和SCL引脚作为参数传入。接下来,使用ssd1306.SSD1306_I2C()创建一个SSD1306_I2C对象,将屏幕的宽度(128像素)、高度(64像素)和I2C对象作为参数传入。然后,使用oled.fill()方法清空显示屏。接下来,使用oled.text()方法在显示屏上显示文本信息。在示例中,我们显示了两行文本:"Hello,“和"MicroPython!”,分别位于坐标(0, 0)和(0, 10)处。最后,调用oled.show()方法更新显示屏,使文本显示生效。

案例8:绘制图形:

import machine
import ssd1306
from ssd1306 import SSD1306_I2C

# 配置SSD1306引脚(例如引脚4和5)
sda_pin = machine.Pin(4)
scl_pin = machine.Pin(5)
i2c = machine.I2C(sda=sda_pin, scl=scl_pin)
oled = SSD1306_I2C(128, 64, i2c)

# 清空显示屏
oled.fill(0)

# 绘制矩形
oled.rect(10, 10, 40, 20, 1)

# 绘制圆形
oled.circle(80, 30, 10, 1)

# 更新显示
oled.show()

在上述示例中,我们首先使用machine.Pin()创建两个引脚对象,用于配置SSD1306的SDA(数据)引脚(例如引脚4)和SCL(时钟)引脚(例如引脚5)。然后,使用machine.I2C()创建一个I2C对象,并将SDA引脚和SCL引脚作为参数传入。接下来,使用ssd1306.SSD1306_I2C()创建一个SSD1306_I2C对象,将屏幕的宽度(128像素)、高度(64像素)和I2C对象作为参数传入。然后,使用oled.fill()方法清空显示屏。接下来,使用oled.rect()方法绘制一个矩形,参数依次为左上角坐标(10, 10)、宽度(40像素)、高度(20像素)和颜色(1表示白色)。然后,使用oled.circle()方法绘制一个圆形,参数依次为圆心坐标(80, 30)、半径(10像素)和颜色(1表示白色)。最后,调用oled.show()方法更新显示屏,使图形显示生效。

案例9:显示图片:

import machine
import ssd1306

# 配置SSD1306引脚(例如引脚4和5)
sda_pin = machine.Pin(4)
scl_pin = machine.Pin(5)
i2c = machine.I2C(sda=sda_pin,scl=scl_pin)
oled = ssd1306.SSD1306_I2C(128, 64, i2c)

# 清空显示屏
oled.fill(0)

# 显示图片
image_data = [
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    # 图片数据省略...
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
]
oled.framebuf.blit_buffer(image_data, 0, 0, 128, 64)

# 更新显示
oled.show()

在上述示例中,我们首先使用machine.Pin()创建两个引脚对象,用于配置SSD1306的SDA(数据)引脚(例如引脚4)和SCL(时钟)引脚(例如引脚5)。然后,使用machine.I2C()创建一个I2C对象,并将SDA引脚和SCL引脚作为参数传入。接下来,使用ssd1306.SSD1306_I2C()创建一个SSD1306_I2C对象,将屏幕的宽度(128像素)、高度(64像素)和I2C对象作为参数传入。然后,使用oled.fill()方法清空显示屏。接下来,定义一个图片数据的列表,其中包含要显示的图片的像素数据。在示例中,图片数据被省略部分,你需要根据自己的图片数据进行填充。然后,使用oled.framebuf.blit_buffer()方法将图片数据绘制到显示屏上,参数依次为图片数据、起始位置的坐标(0, 0)、图片的宽度(128像素)和高度(64像素)。最后,调用oled.show()方法更新显示屏,使图片显示生效。这些示例提供了使用MicroPython控制ESP8266的SSD1306驱动程序的实际运用程序参考代码案例。请注意,具体的配置和操作取决于所使用的具体SSD1306屏幕和引脚配置。

请注意,以上示例仅供参考,具体的使用方法可能因不同的硬件平台和MicroPython版本而有所差异。在实际编程中,你需要根据你所使用的硬件和具体需求进行适当的调整。

在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驴友花雕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值