目录
ESP8266 ⽬前提供作为 I2C 主设备的接⼝,可以对其他 I2C 从设备(例如⼤多数数字传 感器)进⾏控制与读写。
ESP8266 作为 I2C 主机的 SDA 与 SCL 线波形由 GPIO 模拟产⽣,I2C 时钟频率约为 100 kHz。
i2c_master_gpio_init:GPIO 硬件初始化。
具体如下:
1. 选择 pin 脚功能,配置为 GPIO
2. 配置 GPIO 为开漏模式
3. 初始化 SDA 与 SCL 为⾼电平
4. 使能 GPIO 中断并复位从机状态。
i2c_master_init(void):复位从机状态
i2c_master_start(void):主机产⽣ I2C 起始条件。
i2c_master_stop(void):主机产⽣ I2C 停⽌条件。
i2c_master_send_ack(void):设置 I2C 主机应答 ACK。(8266应答从机)
i2c_master_send_nack(void):设置 I2C 主机回复 NACK。(8266不应答从机)
bool i2c_master_checkAck(void):检查从机应答状态(8266检查从机是否应答)
i2c_master_writeByte(uint8 wrdata):向 I2C 总线写数(8266向iic总线写入一个字节数据)
i2c_master_readByte (void):从 SPI slave 读取⼀个字节(8266从iic总线中读取一个字节数据)
SCL----GPIO14 SDA-------GPIO2
ESP-12模组的led阳极接的是3.3v阴极串联电阻接到GPIO2,当我们使用GPIO2作为iic的SDA作为iic通信时,这个led会亮,正常现象
注:如果想使用IIC_ APl函数,需将 【i2c master.h、i2c master.c】添加到正确的工程文件夹中,并包含头文件
将 【i2c master.h、i2c master.c】 、 [oled.h、 oled.c、oledfonth】文件添加到工程文件夹中。
1、将【i2Cmaster.c】添加到下,将【i2Cmasterh】添加到 下
如果【oled.h】不是放在下,需修改所有包含【i2C_master.h】头文件路径
2、将【oled.c】添加到下,将【oled.h、oledfont.h】添加到 下
如果【oled.h】不是放在下,需修改所有包含【oled.h】头文件路径
如果【oledfonth】不是放在下,需修改所有包含 【oledfont.h】头文件路径
3、如果中没有【delay ms】函数,那么在 中添加【delay ms】函数。因为【oled init函数】中需使用【delay ms函数】
0.96'OLED分辨率二= 128*64,即【每一行有128个点,每一列有64个点】
【oledfont.h】中字符的大小为【8*16】,即:一个字符占【横向8个点、纵向16个点】
只支持ASCI码表中,从【'"】~[’~'】的字符
1、首先在函数中,执行 「OLED_ Inito:】初始化函数
2、调用【OLED_ Showstring(x,y,"…”)】来显示字符/字符串
注:【x、y从O开始】
3、调用【OLED_ Show/Px,y, A】来显示【点分十进制1P地址】 注:【x、y从0开始】
【OLED ShowString(x, y,“....”)】
【x】OLED显示字符串的起始列(1字符占8列) 注:【x】尽量能整除8
如果字符串超过行尾,则会跳到下一个字符行【y】OLED显示字符串的起始页(1页=8行) 注:【y】尽量能整除2
尽量不要超过【6】
宇符显示位置 == (x, y*8)
可以认为OLED是二维坐标系的第四象限(y |-y|,x趋于0、y趋于0,则显示的字符->左上角(原点)
【OLED ShowIP(x, y, A)】
注:【u8 A[4]】,A是IP地址数组的首地址,每个元素对应一个<=255的整数
建议:在程序中,初始化OLED后
执行【OLED_ ShowString(x, y. "0123456789ABCDEFGHJKLMN")】,改变【x、y】的值,多试几次就可以了。
因为在oled初始化的时候需要使用毫秒延迟函数
- // 毫秒延时函数
- //===========================================
- void ICACHE_FLASH_ATTR delay_ms(u32 C_time)
- { for(;C_time>0;C_time--)
- os_delay_us(1000);
- }
在user_init中首先执行oled初始化操作,之后调用oled显示函数来显示字符串或是点分十进制形式的ip地址
8*8=64, IIC_OLED在Project后面所以y不需要改变还是0
- // OLED显示字符串
- //-------------------------------------------------------------------------------------------------------------------------
- OLED_ShowString(0,0,"Project="); // 从(0,0)开始显示
-
- OLED_ShowString(64,0,"IIC_OLED"); // 从(64,0)开始显示 // 因为,【Project=】一共8个字符,横向上占用【64】个点
- // OLED显示【点分十进制_IP地址】
- //-------------------------------------------------------------------------------------------------------------------------
- u8 IP_Address[4];
- IP_Address[0] = 192;
- IP_Address[1] = 168;
- IP_Address[2] = 4;
- IP_Address[3] = 1;
- // u8 IP_Address[4] = { 192,168,4,1 }; // 数组形式表示【点分十进制_IP地址】
- OLED_ShowString(0,2,"IP:"); // 从(0,2)开始显示 // 因为【Project=IIC_OLED】在纵向上占用了【2】页(2*8个点)
- OLED_ShowIP(24, 2, IP_Address); // 从(24,2)开始显示 // 因为,【IP:】一共3个字符,横向上占用【24】个点
最后调用oled显示字符串函数来显示一个比较长的字符串来看看如果字符串超过了行尾会发生什么情况
- OLED_ShowString(0,4,"0123456789ABCDEFGHIJKLMN"); // 从(0,4)开始显示
- // 因为【Project=IIC_OLED】【IP:192.168.4.1】在纵向上占用了【4】页(4*8个点)