ESP8266基于microPython的OLED(SSD1306)驱动程序
最近买了一个NodeMCU的板子:NodeMCU是一个开源的物联网平台, 它使用Lua脚本语言编程。该平台基于eLua开源项目,底层使用ESP8266 sdk 0.9.5版本。该平台使用了很多开源项目, 例如 lua-cjson, spiffs. NodeMCU包含了可以运行在 esp8266 Wi-Fi SoC芯片之上的固件,以及基于ESP-12模组的硬件。
作为练手的几个基本项目,先做出了通过I2C控制OLED显示的程序
硬件接线
上图是NodeMcu的IO引脚分配图
使用GND、3V3、D4(GPIO2)、D3(GPIO0)连接I2C接口的OLED
GPIO2接SCL,GPIO0接SDA
Python代码
使用microPython语言,仅实现8x6的字符、数字、字母的显示:
from machine import Pin,I2C
class oled1306(object):
def init(self, scl=Pin(2), sda=Pin(0), freq=400000):
self.i2c = I2C(-1, scl=scl, sda=sda, freq=freq)
# self.i2c_address = 60
self.i2c_address = self.i2c.scan()[0]
init_command = [0xae, 0x00, 0x10, 0x40, 0xb0, 0x81,
0xff, 0xa0, 0xa6, 0xa8, 0x3f, 0xc0,
0xd3, 0x00, 0xd5, 0x80, 0xd8, 0x05,
0xd9, 0xf1, 0xda, 0x12, 0xdb, 0x30,
0x8d, 0x14]
for i in init_command:
self.i2c.writeto_mem(self.i2c_address, 0x00, chr(i))
self.clear()
self.i2c.writeto_mem(self.i2c_address, 0x00, chr(0xaf))
def clear(self):
for i in range(8):
self.i2c.writeto_mem(self.i2c_address, 0x00, chr(0xb0+i))
self.i2c.writeto_mem(self.i2c_address, 0x00, chr(0x00))
self.i2c.writeto_mem(self.i2c_address, 0x00, chr(0x10))
for n in range(128):
self.i2c.writeto_mem(self.i2c_address, 0x40, chr(0x00))
def set_pos(self, x, y):
if x<128 and y<8:
self.i2c.writeto_mem(self.i2c_address, 0x00, chr(0xb0+y))
self.i2c.writeto_mem(self.i2c_address, 0x00, chr(((x&0xf0)>>4)|0x10))
self.i2c.writeto_mem(self.i2c_address, 0x00, chr(x&0x0f))
def char(self, x, y, ch):
Font6x8 = [[0x00, 0x00, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x00, 0x00, 0x2f, 0x00, 0x00],
[0x00, 0x00, 0x07, 0x00, 0x07<