学习日记——IIC_OLED

一、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

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

热爱生活的fuyao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值