屏幕主控:SSD1306
接口:I2C
使用模块:ESP-12f
使用语言:Lua
首先你的固件要有I2C的支持,才能进行开发。可以进入官网进行选择下载:
https://nodemcu-build.com/
官网给出了I2C的相关函数
其实很简单,一共就六个函数,而且很傻瓜的操作。
首先是id参数,可以理解为操作那个设备,如果有多个i2c设备就要多设置几个,我们只有一共oled,所以就
id = 0
node.setcpufreq(node.CPU160MHZ)
id = 0
SCL = 1
SDA = 2
--id: 就是上文所述的功能
--device_addr:设备的地址,比如我的oled地址默认是0x78
--direction:设置你下一次的数据传输操作是传字节还是接收字节,不用也行,可以用i2c.write()代替
id = 0
ADDR = 0x78
i2c.address(id, ADDR, i2c.TRANSMITTER) --表示下一个数据操作是传字节
--id: 就是上文所述的功能
--len:就是你要接收多少个字节,SSD1306 oled不需要读字节
id = 0
ADDR = 0x78
len = 1
i2c.address(id, ADDR, i2c.RECEIVER) --表示下一个数据操作是接收字节
i2c.read(id, len)
i2c.start(id)
i2c.write( id, byte )
i2c.stop(id)
i2c.start(id)
i2c.write( id, 0xff )
i2c.stop(id)
说了这么多,大家可以尝试自己编写程序,接下来是我编写的lua脚本,把线接对就可以直接使用
init.lua文件:
id = 0
sda = 1
scl = 2
ADDR = 0x78
node.setcpufreq(node.CPU160MHZ)
i2c.setup( id, sda, scl, i2c.FASTPLUS )
function init() --初始化函数
node.setcpufreq(node.CPU160MHZ)
i2c.setup( id, SDA, SCL, i2c.FASTPLUS )
dofile( "image.lua" ) --打开存放图片数据的文件
write_cmd( id, 0xae ); --关显示
write_cmd( id, 0x20 );
write_cmd( id, 0x00 ); --设置内存地址模式
--00,Horizontal Addressing Mode;01,Vertical Addressing Mode;10,Page Addressing Mode
write_cmd( id, 0xc8 );
write_cmd( id, 0xa1 ); --设置扫描行和列方式
write_cmd( id, 0x81 );
write_cmd( id, 0x00 ); --对比度
write_cmd( id, 0xa8 );
write_cmd( id, 0x3f );
write_cmd( id, 0xa5 ); ----set normal display
write_cmd( id, 0xa4 ); --0xa4,Output follows RAM content;0xa5,Output ignores RAM content
write_cmd( id, 0xd3 );
write_cmd( id, 0x00 ); --设置显示偏移
write_cmd( id, 0xd5 );
write_cmd( id, 0xf0 );
write_cmd( id, 0xd9 );
write_cmd( id, 0x22 );
write_cmd( id, 0xda );
write_cmd( id, 0x12 );
write_cmd( id, 0x8d );
write_cmd( id, 0x14 ); --打开电荷泵
write_cmd( id, 0xaf );
CLS()
print( "Build acomplish!\n" )
end
function write_cmd( id, CMD ) --写指令函数
i2c.start(id)
i2c.write( id, ADDR )
i2c.write( id, 0x00 )
c = i2c.write( id, CMD )
i2c.stop(id)
print( "CMD:"..CMD.." was Write "..c )
end
function write_dat( id, DATA ) --写数据函数
i2c.start(id)
i2c.write( id, ADDR )
i2c.write( id, 0x40 )
c = i2c.write( id, DATA )
i2c.stop(id)
--print( "DATA:"..DATA.." was Write "..c )
end
function DIS12864( DATA ) --显示128*64的图片
write_cmd( id, 0x21 )
write_cmd( id, 0x00 )
write_cmd( id, 0x7f )
write_cmd( id, 0x22 )
write_cmd( id, 0x00 )
write_cmd( id, 0x07 )
pos = 1
for i = 0, 7, 1 do
for k = 0, 127, 1 do
write_dat( id, DATA[pos] )
pos = pos + 1
end
end
end
function CLS() --清屏函数
write_cmd( id, 0x21 )
write_cmd( id, 0x00 )
write_cmd( id, 0x7f )
write_cmd( id, 0x22 )
write_cmd( id, 0x00 )
write_cmd( id, 0x07 )
for i = 0, 7, 1 do
for k = 0, 127, 1 do
write_dat( id, 0x00 )
end
end
end
-----------------------------------
init()
DIS12864( img )
image.lua文件:
img = {
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,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,
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,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,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,
0X80,0XC0,0XC0,0XE0,0XE0,0XE0,0XF0,0XF0,0XF0,0XF0,0XF8,0XF8,0XF8,0XF8,0XFC,0XFC,
0XFC,0XFC,0X7C,0X7C,0X3C,0X1C,0X1C,0X0C,0X0C,0X04,0X04,0X04,0X00,0X00,0X00,0X00,
0XF8,0XFC,0XFE,0XFE,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XCF,0X8F,0X8E,0X8E,0X8C,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X08,0X08,
0X1C,0X1C,0X3C,0X7C,0X7E,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,
0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFC,0XFC,0XFC,0XFC,0XF8,0XF8,0XF0,0XF0,0XE0,0XE0,
0XC0,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XC0,0XE0,0XF0,0XF8,0XFC,0XFE,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X1F,0X07,0X03,
0X01,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X20,0X20,0X70,
0X70,0X71,0X73,0XFB,0XFF,0XF7,0XF7,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XF7,0XF7,0XF7,0XFB,0XFB,0XF9,0XF0,0XF0,0XF0,0XF0,0XE0,0XE0,0XE0,0XC0,0XC0,
0X80,0X80,0X00,0X00,0X00,0X00,0X01,0X03,0X07,0X0F,0X3F,0X7F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFE,0XFC,0XF8,0XE0,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X01,0X01,0X03,0X03,0X07,0X0F,0X1F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFE,0XFC,0XF8,0XE0,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X07,0X1F,0X3F,0X3F,0X7F,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,
0XF8,0XF0,0XE0,0XC0,0XC0,0X80,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0X80,0XC0,0XF0,0XFC,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0X7F,0X7F,0X3F,0X1F,0X0F,0X03,0X80,0XC0,0XE0,0XF8,0XFE,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X7F,0X3F,0X07,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,
0X01,0X03,0X03,0X07,0X07,0X07,0X0F,0X0F,0X0F,0X0F,0X0F,0X1F,0X1F,0X1F,0X1F,0X1F,
0X1F,0X1F,0X1F,0X1F,0X1F,0X1F,0X1F,0X1F,0X1E,0X1E,0X1C,0X1C,0X1C,0X18,0X08,0X08,
0X00,0X00,0X04,0X04,0X0E,0X0E,0X0E,0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,
0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,0X07,0X07,0X07,0X07,0X83,0X83,0X83,0XC1,0XC1,0XE1,
0XF0,0XF0,0XF8,0XF8,0XFC,0XFE,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X7F,0X7F,
0X3F,0X1F,0X0F,0X07,0X03,0X03,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,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,0X10,0X10,0X38,0X38,
0X78,0X78,0X7C,0X7C,0XFC,0XFE,0XFE,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X3F,0X3F,0X3F,
0X1F,0X1F,0X1F,0X0F,0X0F,0X0F,0X07,0X07,0X03,0X03,0X01,0X01,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,
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,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X01,0X01,0X01,0X01,0X01,
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,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00
}