ESP8266学习之驱动IIC(I2C) oled屏 128*64

ESP8266学习之驱动IIC(I2C) oled屏 128*64

屏幕主控:SSD1306
接口:I2C
使用模块:ESP-12f
使用语言:Lua

首先你的固件要有I2C的支持,才能进行开发。可以进入官网进行选择下载:

https://nodemcu-build.com/

官网给出了I2C的相关函数
ESP8266学习之驱动IIC(I2C) oled屏 128*64_第1张图片
其实很简单,一共就六个函数,而且很傻瓜的操作。
首先是id参数,可以理解为操作那个设备,如果有多个i2c设备就要多设置几个,我们只有一共oled,所以就

id = 0

i2c.setup(id, pinSDA, pinSCL, speed)函数

这个函数实现I2C的引脚和速度的初始化设置
speed参数有以下几个值
i2c.SLOW (100kHz),
i2c.FAST (400kHz),
i2c.FASTPLUS (1MHz) 如果要使用1MHz的,必须使用语句:
node.setcpufreq(node.CPU160MHZ)
id = 0
SCL = 1
SDA = 2

i2c.address(id, device_addr, direction)函数

--id:	就是上文所述的功能
--device_addr:设备的地址,比如我的oled地址默认是0x78
--direction:设置你下一次的数据传输操作是传字节还是接收字节,不用也行,可以用i2c.write()代替

id = 0
ADDR = 0x78
i2c.address(id, ADDR, i2c.TRANSMITTER) --表示下一个数据操作是传字节

i2c.read(id, len)

顾名思义,接收一个字节
--id:	就是上文所述的功能
--len:就是你要接收多少个字节,SSD1306 oled不需要读字节

id = 0
ADDR = 0x78
len = 1
i2c.address(id, ADDR, i2c.RECEIVER) --表示下一个数据操作是接收字节
i2c.read(id, len)

i2c.start(id) 和 i2c.stop(id)函数

这两个函数大家应该不陌生,i2c必须启动才能传输数据,传完后必须停止
i2c.start(id)
i2c.write( id, byte )
i2c.stop(id)

i2c.write(id, data1[, data2[, ..., datan]])函数

可以一次传多个数据,一般只传一个字节的数据
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
}

你可能感兴趣的:(Lua,ESP8266,单片机)