一、I2C使用说明
1、简介
- ESP8266目前提供的I2C主设备的接口,可以对其他I2C从设备(例如大多数传感器)进行控制与读写。
- ESP8266没有硬件I2C外设。其I2C功能是由GPIO模拟产生的。I2C的时钟频率为100KHZ.
2、I2C管脚
- IO14作为I2C的SCL;IO2作为I2C的SDA
3、I2C相关API
(1)GPIO初始化
- 配置GPIO为开漏模式
- 初始化SDA与SCL为高电平
- 使能GPIO中断并复位从机状态
(2)主机产生I2C起始信号
(3)产生停止信号
(4)应答从机
(5)不应答从机
(6)检查从机是否应答
(6)向I2C主线写入数据
(7)从I2C总线中读取数据
- I2C的相关API就这些,大家想要了解可以[查看文档]
提取码:qfqw
4、原理图
(1)ESP-12F
GPIO14作为SCL,GPIO2作为哦SDA。
(2)0.92OLED
使用I2C来驱动
(3)LED
阳极接3V3,阴极串联电阻接GPIO2。当我们使用GPIO2当作SDA进行I2C通信时,此灯会亮,是正常现象。
注意如果使用I2C的API函数,想要将I2C的头文件、C文件添加到正确的工程文件夹当中,并且包含头文件
二、使用I2C驱动OLED
1、文件的添加
- 需将2c master.h. i2c. master.c] 、[oled.h. oled.c. oledfont.h]文件添加到工程文件夹中。
- 1.将[i2c_ master.c] 添加到<app/driver>下,将[i2c_ master.h] 添加到< app/include/driver>下。
如果[oled.h] 不是放在<app/include/driver>下,需修改所有包含[i2c_ master.h] 头文件路径 - 2、将[oled.c] 添加到<app/driver>下,将[oled.h. oledfont.h]添加到<app/include/driver>下
如果[oled.h] 不是放在<app/include/driver>下,需修改所有包含[oled.h] 头文件路径;
如果[oledfont.h]不是放在<app/include/driver>下,需修改所有包含[ oledfont.h]头文件路径 - 3.如果<user_ main.c>中没有[delay. ms]函数,那么在<user_ main.c>中添加[delay_ ms]函数。因为[oled. init函数]中需使用[delay_ ms函数]。
2、如何使用OL ED驱动函数:
-
注意
1、0.96’OLED分辨率== 128*64,即[每一行有128个点,每一列有64个点]
2、[oledfonth]中字符的大小为[8*16],即: 一个字符占[横向8个点、纵向16个点]
3、只支持ASCII码表中,从[’’] ~ [’~’] 的字符,大家可以在字库头文件中自己添加 -
步骤
1、首先在函数中,执行[OLED_ Init0;] 初始化函数
2、调用[OLED. _ShowString(x, y, …")]来显示字符字符串或者IP地址。
3、调用[OLED_ShowlP(x, y, A)]来显示[点分十进制IP地址] -
[OLED. ShowString(xy, “.”)]
1、[x] OLED显示字符串的起始列(1字符占8列)。注: [x] 尽量能整除8。如果字符串超过行尾,则会跳到下一个字符行.
2、[y] OLED显示字符串的起始页(1页=8行)。注: [y] 尽量能整除2;尽量不要超过[6]。 -
字符显示位置
1、字符显示位置== (x,y*8)可以认为OLED是二维坐标系的第四象限(y=|-yI), x->0、y->0, 则显示的字符->左上角(原点)
2、[OLED_ ShowlP(x, y, A)];注: [u8 A[4]],A是IP地址数组的首地址,每个元素对应一个<=255的整数。 -
在程序中,初始化OLED后执行[OLED_ShowString(x, y, “0123456789ABCDEFGHUKLMN”)] ,改变[x. y]的值,多试几次就可以了。
-
定义[u8A[4]={a,b,c,d}],执行[OLED ShowlP(x,y,A)] ,改变[a、b、C. d] [x. y]的值,多试几次就可以了。
三、OLED例程
此原理同上,占用的点决定位置。
准确的程序,大家可以查看官方准确例程
提取码为k8jx
由图可知,ESP8266显示的和我们程序编写的是一样的。长的字符串,会将超过行尾的这部分在另一起一共字符行显示。
参考链接
https://www.bilibili.com/video/BV1dJ411S723?p=62