0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ESP8266_09基于IIC控制的OLED屏幕

单片机爱好者 来源:单片机爱好者 2019-12-06 15:12 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

事情比较多,停了几天,到目前为止,事情依然很多……

从第一节到第九节(也就是这一节),说的都是ESP8266的基本应用,例如GPIO、定时器、中断、PWM等等。从后面开始,将陆续说一下基于网络的用法,毕竟这是个联网的芯片,还是要联网玩,才更能体现它的特点。但偶尔,我可能还会说一下它的硬件的基本用法,例如ADC、SPI等,看情况吧,时间富裕与否~

好,这一节,主要说一下ESP8266上面的IIC接口。是的,它有SPI接口,也有IIC接口。但IIC接口是使用GPIO模拟的,也就是说,你可以使用8266上的任意两个GPIO模拟出IIC接口来。同时,每个管脚内部都有上拉电阻,无需外接。

注:ESP8266只能用做IIC主设备,不能用做从设备。

那我们是否还要写一堆IIC的start函数、stop函数?

不用,官方的SDK已经给我们写好了整个的IIC库,只要配置好要用的管脚,直接调用函数即可,例如:

i2c_master_start(void);

i2c_master_stop(void);

i2c_master_writeByte(uint8 wrdata);

如何使用?很简单,分四步:

1 添加相关源文件和头文件

把i2c_master.c拷入app下的driver文件夹,把i2c_master.h拷入app下的include下的driver文件夹。

2 选择要用到的GPIO

打开i2c_master.h文件,管脚选择部分如下所示:

#defineI2C_MASTER_SDA_MUX PERIPHS_IO_MUX_GPIO2_U

#defineI2C_MASTER_SCL_MUX PERIPHS_IO_MUX_MTMS_U

#defineI2C_MASTER_SDA_GPIO 2

#defineI2C_MASTER_SCL_GPIO 14

#defineI2C_MASTER_SDA_FUNC FUNC_GPIO2

#defineI2C_MASTER_SCL_FUNC FUNC_GPIO14

通过这6个宏定义,配置好IIC接口要用的时钟脚和数据脚,我这里想用GPIO12和14,所以改成如下的样子:

#defineI2C_MASTER_SDA_MUX PERIPHS_IO_MUX_MTDI_U

#defineI2C_MASTER_SCL_MUX PERIPHS_IO_MUX_MTMS_U

#defineI2C_MASTER_SDA_GPIO 12

#defineI2C_MASTER_SCL_GPIO 14

#defineI2C_MASTER_SDA_FUNC FUNC_GPIO12

#defineI2C_MASTER_SCL_FUNC FUNC_GPIO14

关于管脚的名字,主要看eagle_soc.h文件。

3 初始化IIC管脚

通过下面的函数实现:

i2c_master_gpio_init();

4 开始写数据

用过24C02的童鞋都知道,IIC的写操作,前后就几步:开始信号、写入设备地址、等待应答、写入存储地址、等待应答、写入数据、结束信号。这里结合SDK中的例程IOT_DEMO中的IIC代码,实现写数据的函数如下:

boolICACHE_FLASH_ATTRWrite_IIC_Data(unsignedcharIIC_Data)

{

uint8 ack;

i2c_master_start();

i2c_master_writeByte(0x78); //D/C#=0; R/W#=0

ack = i2c_master_getAck();

if(ack) {

os_printf("addrnotackwhentxwritecmd ");

i2c_master_stop();

returnfalse;

}

i2c_master_writeByte(0x40); //write data

ack = i2c_master_getAck();

if(ack) {

os_printf("addrnotackwhentxwritecmd ");

i2c_master_stop();

returnfalse;

}

i2c_master_writeByte(IIC_Data);

ack = i2c_master_getAck();

if(ack) {

os_printf("addrnotackwhentxwritecmd ");

i2c_master_stop();

returnfalse;

}

i2c_master_stop();

}

上面代码中出现的函数,例如i2c_master_start()、i2c_master_writeByte(0x78)、i2c_master_getAck();等,都已经在i2c_master.c中写好了。换句话说,我们只需要像堆积木一样,按照特定的顺序把这些函数摆下来就行了。

so,是不是很简单?

如何演示?

这里使用一个0.96寸的,带有IIC接口的OLED屏幕。这类屏幕按照我见过的接口不同,分两种:一种是4针的,只能接IIC接口;一种是7针的,既能接IIC,又能接SPI。我手里这个是7针的,出厂默认SPI接口,怎么切换到IIC,我看了半天手册:

看起来不难,当我翻开我的液晶背面的时候,发现是这样:

所以我只把SPI字符旁边的电阻改到IIC旁边就可以了。

程序使用卖家提供的代码,做了一下移植。会用IIC的自然就懂了,不懂就说明你还没学好IIC。

7针的接口,针脚功能如下:

虽然IIC只用到CLK和SDA两个脚,但是这里还要注意下复位管脚,要给它接一个高电平,否则无法工作。

程序移植完成,保存、清理、编译、下载一条龙,然后重新上电,效果如下所示:

程序里使用了一个软件定时器,每隔3秒刷新一下图片。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • OLED
    +关注

    关注

    121

    文章

    6332

    浏览量

    232540
  • SPI
    SPI
    +关注

    关注

    17

    文章

    1866

    浏览量

    99824
  • 函数
    +关注

    关注

    3

    文章

    4406

    浏览量

    66843

原文标题:ESP8266_09基于IIC控制的OLED屏幕

文章出处:【微信号:gh_dae0718828df,微信公众号:gh_dae0718828df】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    晶科鑫 | 国产26MHz晶振匹配Espressif(乐鑫) ESP8285/ESP8266芯片案例

    【应用】国产26MHz频率晶振应用于物联网WIFI物联网模块(串口转WiFi模块),Espressif(乐鑫)ESP8285/ESP8266芯片匹配测试OKESP8285其实是ESP8266的升级版
    的头像 发表于 11-21 15:37 4062次阅读
    晶科鑫 | 国产26MHz晶振匹配Espressif(乐鑫) <b class='flag-5'>ESP</b>8285/<b class='flag-5'>ESP8266</b>芯片案例

    ESP8266ESP32开发板常见的2种下载方式

    ESP32和ESP8266是性价比很高而且使用较为广泛的的Wi-Fi模块,在物联网(IoT)领域的DIY项目中可以首先考虑这2款产品。 两款芯片都属于32位处理器。ESP32是低功耗双核80MHz
    的头像 发表于 11-10 20:30 337次阅读
    <b class='flag-5'>ESP8266</b>和<b class='flag-5'>ESP</b>32开发板常见的2种下载方式

    ESP8266ESP32开发板常见的2种下载方式

    协议,完整的 TCP/IP 协议栈以及蓝牙协议栈。用户可以使用这两款模块为现有的设备添加WIFI联网功能或蓝牙(ESP32),轻松的构建独立的网络控制器和远程控制监控设备。 ESP8266
    发表于 10-24 18:04

    esp8266 udp server 端口监听错误的原因?

    1、使用esp8266 at组件+sal socket实现使用udpserver_sample.c demo代码 udp server,通信失败 2、跟踪代码发现 packegs 里面
    发表于 09-23 07:03

    请问一下我想用ESP8685直接替换ESP8266而不用写程序,可以让ESP8685直接通过之前ESP8266的外挂的flash运行程序吗

    请问一下我想用ESP8685直接替换ESP8266而不用写程序,可以让ESP8685直接通过之前ESP8266的外挂的flash运行程序吗
    发表于 09-17 12:06

    ESP8266】进入透传模式后,数据间隔怎么调整,

    01.TCP客户端用ESP8266透传模式发送数据是10ms发送一次,(连续发送) 02.TCP服务器接收到的数据是200ms左右接收一次,数据未丢失,但是更新不及时; 03.通过TCP调试助手已
    发表于 09-15 10:16

    【微五科技CF5010RBT60开发板试用体验】硬件IIC点亮OLED屏幕

    CF5010RBT60 凭借其丰富的外设资源和亲民的价格,吸引了众多嵌入式开发者。本次测评聚焦其硬件 IIC 接口驱动 SSD1306 OLED 屏幕的实际表现,带你体验“硬实力”带来的流畅显示效果。 一、硬件
    发表于 08-08 11:01

    【RA-Eco-RA6M4开发板评测】——4.使用ESP8266获取任意城市的天意预报

    手头上有一个ESP8266,闲置了很久,突然想起来可以和RA6M4开发板连接起来,使用AT指令来获取网络天气预报,于是就把它们连接起来。就有了这个帖子。 开始创建工程,打开 RA smart 配置
    发表于 07-23 19:50

    STM32+esp8266连接机智云,上传温湿度数据并控制继电器开关(平台配置、代码生成、代码移植)

    本教程将详细介绍如何将STM32微控制器与ESP8266Wi-Fi模块连接到机智云平台,实现温湿度数据的上传与继电器的远程控制。通过此过程,您将学会如何配置机智云平台,烧录ESP8266
    的头像 发表于 07-15 18:54 751次阅读
    STM32+<b class='flag-5'>esp8266</b>连接机智云,上传温湿度数据并<b class='flag-5'>控制</b>继电器开关(平台配置、代码生成、代码移植)

    单片机实例项目:ESP8266串口WIFI

    单片机实例项目:ESP8266串口WIFI,推荐下载!
    发表于 06-03 21:01

    【RA-Eco-RA4M2开发板评测】使用RA4M2和ESP8266实现MQTT协议上传传感器数据到云服务器并反向点灯控制

    马上就到RA4M2开发板评测的结尾了,今天给瑞萨论坛线上最具创意的一篇帖子,通过RA4M2开发板,和ESP8266 WIFI模块,然后通过手机上的MQTTOOL来实现手机控制RA4M2远程点灯,即使
    发表于 05-29 15:29

    基于STM32 HAL库与标准库的esp8266接入机智云方案(二)

    在《基于STM32HAL库与标准库的esp8266接入机智云方案(一)》中,我们详细介绍了硬件连接和机智云客户端的创建。本篇将重点讲解如何下载代码、分析下载的代码,并直接使用这些代码连接机智云。同时
    的头像 发表于 05-28 18:02 1118次阅读
    基于STM32 HAL库与标准库的<b class='flag-5'>esp8266</b>接入机智云方案(二)

    ESP8266烧录与机智云一键配网教程

    ESP8266模块因其低成本和高性能,广泛应用于智能家居和工业自动化等领域。机智云平台提供了一键配网功能,简化了设备的联网过程。本教程将详细介绍如何使用ESP8266进行烧录,并通过机智云实现一键配
    的头像 发表于 05-24 11:04 1563次阅读
    <b class='flag-5'>ESP8266</b>烧录与机智云一键配网教程

    【RA-Eco-RA4M2开发板评测】RA4M2 + ESP8266获取城市天气预报(一)

    的天气预报。 ESP8266是一款WiFi模块,它具有强大的网络连接功能,可以轻松地连接到互联网。将使用ESP8266模块来获取天气数据,并将其发送给RA4M2 控制器。通过AT指令来控制
    发表于 05-02 14:28

    零知开源——ESP8266+MPU6050 实现运动姿态检测

    零知ESP8266的I2C通信        在运动姿态检测、机器人平衡控制、VR头戴设备等应用中,MPU6050(三轴加速度计+三轴陀螺仪)是一个常见的姿态传感器。而ESP8266作为一款低功耗
    的头像 发表于 02-20 17:54 2809次阅读
    零知开源——<b class='flag-5'>ESP8266</b>+MPU6050 实现运动姿态检测