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
    +关注

    关注

    118

    文章

    5986

    浏览量

    221461
  • SPI
    SPI
    +关注

    关注

    17

    文章

    1615

    浏览量

    89600
  • 函数
    +关注

    关注

    3

    文章

    3868

    浏览量

    61309

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

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

收藏 人收藏

    评论

    相关推荐

    nodemcu和esp8266是什么关系?

    nodemcu和esp8266是什么关系 nodemcu和esp8266是什么关系?通俗理解就是nodemcu是一个开发板,基于esp8266的开发板。 目前市面上搭载有ESP8266
    的头像 发表于 10-20 14:53 2283次阅读
    nodemcu和<b class='flag-5'>esp8266</b>是什么关系?

    esp8266ex引脚详细 ESP8266EX参考手册

    ESP8266EX 由乐鑫公司开发,提供了⼀套⾼度集成的 Wi-Fi SoC 解决⽅案,其低功耗、 紧凑设计和⾼稳定性可以满⾜⽤户的需求。 ESP8266EX 拥有完整的且⾃成体系的 Wi-Fi
    发表于 09-08 17:05 1次下载

    ESP8266物联网茶壶

    电子发烧友网站提供《ESP8266物联网茶壶.zip》资料免费下载
    发表于 07-10 16:45 0次下载
    <b class='flag-5'>ESP8266</b>物联网茶壶

    ESP8266由游戏手柄控制的汽车机器人

    电子发烧友网站提供《ESP8266由游戏手柄控制的汽车机器人.zip》资料免费下载
    发表于 07-03 10:12 0次下载
    <b class='flag-5'>ESP8266</b>由游戏手柄<b class='flag-5'>控制</b>的汽车机器人

    使用Firebase的ESP8266物联网平台

    电子发烧友网站提供《使用Firebase的ESP8266物联网平台.zip》资料免费下载
    发表于 07-03 09:54 0次下载
    使用Firebase的<b class='flag-5'>ESP8266</b>物联网平台

    带有Blynk和IR的Arduino ESP8266控制继电器

    电子发烧友网站提供《带有Blynk和IR的Arduino ESP8266控制继电器.zip》资料免费下载
    发表于 06-30 10:31 0次下载
    带有Blynk和IR的Arduino <b class='flag-5'>ESP8266</b><b class='flag-5'>控制</b>继电器

    使用ESP8266 OLED和Visuino从NIST TIME服务器获取日期和时间

    电子发烧友网站提供《使用ESP8266 OLED和Visuino从NIST TIME服务器获取日期和时间.zip》资料免费下载
    发表于 06-28 09:55 0次下载
    使用<b class='flag-5'>ESP8266</b> <b class='flag-5'>OLED</b>和Visuino从NIST TIME服务器获取日期和时间

    使用ESP8266 DIY控制任何家用电器

    电子发烧友网站提供《使用ESP8266 DIY控制任何家用电器.zip》资料免费下载
    发表于 06-27 14:55 0次下载
    使用<b class='flag-5'>ESP8266</b> DIY<b class='flag-5'>控制</b>任何家用电器

    灵活的ESP8266ESP32初始设备配置

    电子发烧友网站提供《灵活的ESP8266ESP32初始设备配置.zip》资料免费下载
    发表于 06-19 16:15 2次下载
    灵活的<b class='flag-5'>ESP8266</b>和<b class='flag-5'>ESP</b>32初始设备配置

    基于ESP8266的Agrumino Lemon

    电子发烧友网站提供《基于ESP8266的Agrumino Lemon.zip》资料免费下载
    发表于 06-15 09:19 0次下载
    基于<b class='flag-5'>ESP8266</b>的Agrumino Lemon

    ESP8266ESP32上的WiFi Webradio

    电子发烧友网站提供《ESP8266ESP32上的WiFi Webradio.zip》资料免费下载
    发表于 06-13 11:38 0次下载
    <b class='flag-5'>ESP8266</b>或<b class='flag-5'>ESP</b>32上的WiFi Webradio

    ESP8266初次如何实现无线通信(基于电脑与ESP8266)

    一.需要的软件及硬件 1.软件 2.硬件 二.ESP8266的使用 .ESP8266的介绍 2.ESP8266进行初始AT指令的配置步骤 三.所用软件安装分享 ESP8266
    发表于 05-30 09:53 14次下载
    <b class='flag-5'>ESP8266</b>初次如何实现无线通信(基于电脑与<b class='flag-5'>ESP8266</b>)

    CC2530采用ESP8266与手机APP通信

    项目概述: 项目实现通过CC2530控制ESP8266将其配置成AP+TCP服务器模式,并通过手机APP连接到TCP服务器并完成数据传输。ESP8266将作为一个热点(AP)来工作,其WiFi模块
    的头像 发表于 05-23 09:15 2857次阅读

    使用ESP8266驱动OLED

    在进行后续的ESP8266学习前,我们先来对OLED屏进行驱动,为后续学习提供直观的信息显示。
    的头像 发表于 05-19 14:37 1739次阅读
    使用<b class='flag-5'>ESP8266</b>驱动<b class='flag-5'>OLED</b>屏

    如何使用ESP8266+ATMega组合板来学习和控制ESP8266

    我尝试使用 ESP8266+ATMega 组合板来学习和控制 ESP8266。 该板设置为 USB+esp(仅,未使用 ATMega) esp
    发表于 05-16 09:14