MicroPython动手做(14)——掌控板之OLED屏

2020-04-181.7万
AI 快速预览详细 收起
本文介绍了如何在掌控板上使用OLED显示屏。OLED屏具有自发光、广视角、高对比度等优点,适用于工业现场、军工等行业。通过简单的驱动电路即可实现OLED屏的发光,适用于初学者快速上手。
1、OLED显示模块
有机发光二极管(Organic Light-Emitting Diode, UIV OLED)又称为有机电激光显示、有机发光半导体(Organic Electroluminesence Display, UIV OLED)。与液晶显示(Liquid Crystal Display, LCD)是不同类型的发光原理。OLED显示技术具有自发光、广视角、几乎无穷高的对比度、较低耗电、极高反应速度等优点。 OLED显示模块为OLED显示屏+PCB+铁框构成,便于安装,广泛应用于工业现场,军工等行业。

主要特点:OLED为自发光材料,不需用到背光板,同时视角广、画质均匀、反应速度快、较易彩色化、用简单驱动电路即可达到发光、制程简单、可制作成挠曲式面板,符合轻薄短小的原则,应用范围属于中小尺寸面板。
显示方面:主动发光、视角范围大;响应速度快,图像稳定;亮度高、色彩丰富、分辨率高。
工作条件:驱动电压低、能耗低,可与太阳能电池、集成电路等相匹配。
适应性广:采用玻璃衬底可实现大面积平板显示;如用柔性材料做衬底,能制成可折叠的显示器。由于OLED是全固态、非真空器件,具有抗震荡、耐低温(-40℃)等特性,在军事方面也有十分重要的应用,如用作坦克、飞机等现代化武器的显示终端。

MicroPython动手做(14)——掌控板之OLED屏图1

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(28)
驴友花雕
驴友花雕
作者

驴友花雕
驴友花雕
作者
Mind+ 图形编程

驴友花雕
驴友花雕
作者
12、跳动屏显32个字
//MicroPython动手做(14)——掌控板之OLED屏幕
//跳动屏显32个字
[mw_shl_code=applescript,false]//MicroPython动手做(14)——掌控板之OLED屏幕
//跳动屏显32个字
#include
// 动态变量
volatile float mind_n_Xing, mind_n_Lie;
// 主程序开始
void setup() {
mPython.begin();
}
void loop() {
mind_n_Xing = 0;
while (!(mind_n_Xing>=4)) {
mind_n_Lie = 0;
while (!(mind_n_Lie>=8)) {
display.setCursor((mind_n_Lie * 16), (mind_n_Xing * 16));
display.print("掌");
mind_n_Lie += 1;
yield();
}
mind_n_Xing += 1;
yield();
}
buzz.freq(196, BEAT_1_4);
delay(1000);
mind_n_Xing = 0;
while (!(mind_n_Xing>=4)) {
mind_n_Lie = 0;
while (!(mind_n_Lie>=8)) {
display.setCursor((mind_n_Lie * 16), (mind_n_Xing * 16));
display.print("控");
mind_n_Lie += 1;
yield();
}
mind_n_Xing += 1;
yield();
}
buzz.freq(196, BEAT_1_4);
delay(1000);
mind_n_Xing = 0;
while (!(mind_n_Xing>=4)) {
mind_n_Lie = 0;
while (!(mind_n_Lie>=8)) {
display.setCursor((mind_n_Lie * 16), (mind_n_Xing * 16));
display.print("板");
mind_n_Lie += 1;
yield();
}
mind_n_Xing += 1;
yield();
}
buzz.freq(392, BEAT_1_4);
delay(1000);
}
[/mw_shl_code]
驴友花雕
驴友花雕
作者

驴友花雕
驴友花雕
作者
mPython X 图形编程

驴友花雕
驴友花雕
作者
11、OLED满屏流水字
#MicroPython动手做(14)——掌控板之OLED屏幕
#OLED满屏流水字
[mw_shl_code=applescript,false]#MicroPython动手做(14)——掌控板之OLED屏幕
#OLED满屏流水字
from mpython import *
import time
rgb.fill((int(0), int(0), int(102)))
rgb.write()
time.sleep_ms(1)
while True:
_E8_A1_8C = 0
while not _E8_A1_8C >= 4:
_E5_88_97 = 0
while not _E5_88_97 >= 8:
oled.fill(0)
oled.DispChar("掌控板OLED", (_E5_88_97 * 16), (_E8_A1_8C * 16), 1)
oled.show()
_E5_88_97 = _E5_88_97 + 1
_E8_A1_8C = _E8_A1_8C + 1
_E8_A1_8C = 0
while not _E8_A1_8C >= 4:
_E5_88_97 = 0
while not _E5_88_97 >= 8:
oled.fill(0)
oled.DispChar("mPython", (_E5_88_97 * 16), (_E8_A1_8C * 16), 1)
oled.show()
_E5_88_97 = _E5_88_97 + 1
_E8_A1_8C = _E8_A1_8C + 1[/mw_shl_code]
gada888
gada888
知识点爆多
驴友花雕
驴友花雕
作者
回复gada888
谢谢版主的鼓励
驴友花雕
驴友花雕
作者

驴友花雕
驴友花雕
作者
[table=98%,rgb(255, 255, 255)]
[tr][td][p=28, null, left]mPython X 图形编程[/p]
[p=28, null, left]

[/p][/td][/tr]
[/table]
驴友花雕
驴友花雕
作者
10、动态正弦与圆的关系
通过掌控板载的oled,显示正弦与圆的关系。
[mw_shl_code=applescript,false]#MicroPython动手做(14)——掌控板之OLED屏幕
#动态正弦与圆的关系
from mpython import *
from machine import Timer
import math
def upRange(start, stop, step):
while start <= stop:
yield start
start += abs(step)
def downRange(start, stop, step):
while start >= stop:
yield start
start -= abs(step)
def timer1_tick(_):
global Dy, Dx, i, j, my_list, _item
oled.fill_rect(48, 0, 80, 64, 0)
oled.hline(48, 32, 80, 1)
oled.vline(48, 8, 50, 1)
j_end = int(len(my_list) - 1)
for j in (0 <= j_end) and upRange(0, j_end, 1) or downRange(0, j_end, 1):
oled.pixel(((len(my_list) + 49) - j), my_list[j], 1)
tim1 = Timer(1)
def add_to_list(_item):
global Dy, Dx, i, j, my_list
my_list.append(_item)
if len(my_list) > 72:
my_list.pop(0)
my_list = []
oled.fill(0)
tim1.init(period=100, mode=Timer.PERIODIC, callback=timer1_tick)
while True:
for i in range(0, 361, 5):
oled.fill_rect(0, 0, 47, 64, 0)
oled.circle(20, 32, 20, 1)
Dx = int((20 + math.cos(math.radians(i)) * 20))
Dy = int((32 - math.sin(math.radians(i)) * 20))
oled.line(20, 32, Dx, Dy, 1)
oled.line(Dx, Dy, 46, Dy, 1)
oled.show()
add_to_list(Dy)
[/mw_shl_code]
驴友花雕
驴友花雕
作者
实验记录视频:掌控板OLED动态打字效果(29秒)
https://v.youku.com/v_show/id_XNDYzODQyNzkzMg==.html
[media=x,500,375]https://v.youku.com/v_show/id_XNDYzODQyNzkzMg==.html[/media]
驴友花雕
驴友花雕
作者

驴友花雕
驴友花雕
作者

驴友花雕
驴友花雕
作者
9、实现OLED动态打字效果
[mw_shl_code=applescript,false]# 动态打字效果
from mpython import *
oled.fill(0)
# 显示的字符串
_str = "掌控板是一块MicroPython微控制器板,使用当下最流行的Python编程语言,以便您轻松地将代码从桌面传输到微控制器或嵌入式系统。掌控板是一块普及STEAM创客教育、人工智能教育、编程教育的开源智能硬件。它集成ESP-32高性能双核芯片,支持WiFi和蓝牙双模通信,可作为物联网节点,实现物联网应用。掌控板上配置了OLED显示屏、RGB灯、加速度计、麦克风、光线传感器、蜂鸣器、按键开关、触摸开关、金手指外部拓展接口,支持图形化及python代码编程,可实现智能机器人、创客智造作品等智能控制类应用。利用掌控上丰富的传感器,结合它小尺寸的特点还可以做很多智能穿戴、电子饰品等各种DIY作品应用。"
# 起点坐标
axis = (0, 0)
# 逐字显示,根据返回的坐标续接显示
for c in _str:
response = oled.DispChar(c, axis[0], axis[1])
char_width = response[0]
axis = response[1]
oled.show()
# 满屏时,清屏
if axis[1] >= 64 - 16 and char_width >= 128-axis[0]:
print('Clear screen')
oled.fill(0)[/mw_shl_code]
注解:
oled.DispChar_font(font, s, x, y, invert=False)
自定义字体显示。用户可根据自己需求,在PC端将 otf 、 ttf 标准字体文件通过Python脚本 font_to_py.py 转为输出含字体Bitmap的python源码,调用使用。 返回(字符总像素点宽度,续接显示的x,y坐标)的二元组。
font - 字体对象。font_to_py.py 脚本转换得到的Python源码, 放到文件系统中,注意,在使用函数前须导入font文件。
s - 显示的字符串
x 、 y - 文本的左上角作为起点坐标。
invert - 显示像素点翻转。
在PC端使用font_to_py.py脚本转换字体:
# 转换高度为16像素只包含ASCII字符集
font_to_py.py -x FreeSans.ttf 16 myfont.py
# 转换高度为16像素指定Unicode字符集,-c参数后面为你指定的字符集
font_to_py.py -x simfang.ttf 16 simfang.py -c ¬!"#£$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~°Ωαβγδθλμπωϕ£
驴友花雕
驴友花雕
作者
oled.fill(c)
用指定的颜色填充整个帧缓存。 c 为1时,像素点亮;c 为0时,像素点灭。
oled.circle(x, y, radius, c)
绘制圆
x 、y -左上角作为起点坐标。
radius -圆半径大小
c -为1时,像素点亮;c 为0时,像素点灭。
oled.fill_circle(x, y, radius, c)
绘制实心圆
x 、y -左上角作为起点坐标。
radius -圆半径大小
c -为1时,像素点亮;c 为0时,像素点灭。
oled.triangle(x0, y0, x1, y1, x2, y2, c)
绘制三角形
x0 、y0 -三角形上顶点坐标 。
x1 、y1 -三角形左顶点坐标 。
x2 、y2 -三角形左顶点坐标 。
c -为1时,像素点亮;c 为0时,像素点灭。
oled.fill_triangle(x0, y0, x1, y1, x2, y2, c)
绘制实心三角形
x0 、y0 -三角形上顶点坐标 。
x1 、y1 -三角形左顶点坐标 。
x2 、y2 -三角形左顶点坐标 。
c -为1时,像素点亮;c 为0时,像素点灭。
oled.bitmap(x, y, bitmap, w, h, c)
绘制bitmap图案
x 、y -左上角作为起点坐标
bitmap -图案bitmap 的btyearray字节数组
w -图案宽度
h -图案高度
c -为1时,像素点亮;
oled.RoundRect(x, y, w, h, r, c)
绘制弧角矩形
x 、y -左上角作为起点坐标
w -图案宽度
h -图案高度
r -圆弧角半径
c -为1时,像素点亮;c 为0时,像素点灭。
驴友花雕
驴友花雕
作者
8、oled对象
oled对象为framebuf的衍生类,继承framebuf的方法。
oled.poweron()
开启显示屏电源。
oled.poweroff()
关闭显示器电源。
oled.contrast(brightness)
设置显示屏亮度。
brightness 亮度,范围0~255
oled.invert(n)
翻转像素点。当n=1时,未填充像素点点亮,填充像素点灭。当n=0时,则反。默认启动是填充像素点点亮。
oled.DispChar(s, x, y, mode=TextMode.normal)
oled屏显示文本。采用 Google Noto Sans CJK 开源无衬线字体字体。字体高度16像素点,支持英文,简体中文繁体中文,日文和韩文语言。 当显示字符串超出显示屏宽度可自动换行。
返回(字符总像素点宽度,续接显示的x,y坐标)的二元组。
s -需要显示的文本。
x 、y -文本的左上角作为起点坐标。
mode - 设置文本模式,默认为TextMode.normal
TextMode.normal - 等于1 。普通模式,文本显示白色,背景为黑色。
TextMode.rev - 等于2 。反转模式,文本显示黑色,背景为白色。
TextMode.trans - 等于3 。透明模式,透明文本意味着文本被写在显示中已经可见的内容之上。不同之处在于,以前屏幕上的内容仍然可以看到,而对于normal,背景将被当前选择的背景颜色所替代。
TextMode.xor - 等于4 。XOR模式,如果背景是黑色的,效果与默认模式(normal模式)相同。如果背景为白色,则反转文本。
oled.show()
将frame缓存发送至oled显示。
驴友花雕
驴友花雕
作者

驴友花雕
驴友花雕
作者

7、动态曲线图形
[mw_shl_code=applescript,false]from mpython import *
import time
def testdrawline():
for i in range(0,64):
oled.line(0,0,i*2,63,1)
oled.show()
for i in range(0,32):
oled.line(0,0,127,i*2,1)
oled.show()
time.sleep_ms(250)
oled.fill(0)
oled.show()
for i in range(0,32):
oled.line(0,63,i*4,0,1)
oled.show()
for i in range(0,16):
oled.line(0,63,127,(64-4*i)-1,1)
oled.show()
time.sleep_ms(250)
oled.fill(0)
oled.show()
for i in range(1,32):
oled.rect(2*i,2*i,(128-4*i)-1,(64-2*i)-1,1)
oled.show()
testdrawline()[/mw_shl_code]
驴友花雕
驴友花雕
作者

驴友花雕
驴友花雕
作者
mPythonX 图形编程