热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

esp8266时钟_ESP8266_09基于IIC控制的OLED屏幕

事情比较多,停了几天,到目前为止,事情依然很多……从第一节到第九节(也就是这一节),说的都是ESP8266的基本应用

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

        从第一节到第九节(也就是这一节),说的都是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文件,管脚选择部分如下所示:

#define I2C_MASTER_SDA_MUX PERIPHS_IO_MUX_GPIO2_U

#define I2C_MASTER_SCL_MUX PERIPHS_IO_MUX_MTMS_U

#define I2C_MASTER_SDA_GPIO 2

#define I2C_MASTER_SCL_GPIO 14

#define I2C_MASTER_SDA_FUNC FUNC_GPIO2

#define I2C_MASTER_SCL_FUNC FUNC_GPIO14

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

#define I2C_MASTER_SDA_MUX PERIPHS_IO_MUX_MTDI_U

#define I2C_MASTER_SCL_MUX PERIPHS_IO_MUX_MTMS_U

#define I2C_MASTER_SDA_GPIO 12

#define I2C_MASTER_SCL_GPIO 14

#define I2C_MASTER_SDA_FUNC FUNC_GPIO12

#define I2C_MASTER_SCL_FUNC FUNC_GPIO14

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

3初始化IIC管脚

      通过下面的函数实现:

      i2c_master_gpio_init();

4开始写数据

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

bool ICACHE_FLASH_ATTR Write_IIC_Data(unsigned char IIC_Data)

{

         uint8 ack;

         i2c_master_start();

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

         ack = i2c_master_getAck();

         if (ack) {

                   os_printf("addr not ack when tx write cmd \n");

                   i2c_master_stop();

                   return false;

         }

         i2c_master_writeByte(0x40);                   //write data

         ack = i2c_master_getAck();

         if (ack) {

                   os_printf("addr not ack when tx write cmd \n");

                   i2c_master_stop();

                   return false;

         }

         i2c_master_writeByte(IIC_Data);

         ack = i2c_master_getAck();

         if (ack) {

                   os_printf("addr not ack when tx write cmd \n");

                   i2c_master_stop();

                   return false;

         }

         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,我看了半天手册:

afe1b23562c65e2557610d95fea91b20.png

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

0a7c1a95f0cb42338c40201bf6afc3c2.png

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

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

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

47281f558bb4dc2b78e6ea91b4df0bcf.png

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

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

fe12c7f9524bc428cada2bb7a1c5c036.png

fe12c7f9524bc428cada2bb7a1c5c036.png

3dfe19a87fa92f9ab81225f76798e466.png

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

        链接:https://pan.baidu.com/s/1428honimYQCKM_CVwxDojg

        提取码:9p4v

ESP8266_前言

ESP8266_01搭建开发环境

ESP8266_02程序的编译与下载

ESP8266_03 SDK与Makefile的基本用法

ESP8266_04管脚控制与软件定时器

ESP8266_05 ESP8266有几个串口?

ESP8266_06硬件定时器与IO中断

ESP8266_07基于PWM的呼吸灯

ESP8266_08基于flash的数据掉电保护



推荐阅读
  • 计算 n 叉树中各节点子树的叶节点数量分析 ... [详细]
  • 本文详细介绍了如何在Linux系统中搭建51单片机的开发与编程环境,重点讲解了使用Makefile进行项目管理的方法。首先,文章指导读者安装SDCC(Small Device C Compiler),这是一个专为小型设备设计的C语言编译器,适合用于51单片机的开发。随后,通过具体的实例演示了如何配置Makefile文件,以实现代码的自动化编译与链接过程,从而提高开发效率。此外,还提供了常见问题的解决方案及优化建议,帮助开发者快速上手并解决实际开发中可能遇到的技术难题。 ... [详细]
  • 如何判断一个度序列能否构成简单图——哈维尔-哈基米算法的应用与解析 ... [详细]
  • [TyvjP1050] 动态规划求解最长公共子序列问题
    在解决最长公共子序列问题时,动态规划是一种高效的方法。具体而言,我们使用二维数组 `dp[i][j]` 来表示第一个字符串匹配到第 `i` 位,第二个字符串匹配到第 `j` 位时的最长公共子序列长度。状态转移方程为:当两个字符相等时,`dp[i][j] = dp[i-1][j-1] + 1`;否则,`dp[i][j] = max(dp[i-1][j], dp[i][j-1])`。通过这种方法,我们可以有效地计算出两个字符串的最长公共子序列。 ... [详细]
  • BZOJ4240 Gym 102082G:贪心算法与树状数组的综合应用
    BZOJ4240 Gym 102082G 题目 "有趣的家庭菜园" 结合了贪心算法和树状数组的应用,旨在解决在有限时间和内存限制下高效处理复杂数据结构的问题。通过巧妙地运用贪心策略和树状数组,该题目能够在 10 秒的时间限制和 256MB 的内存限制内,有效处理大量输入数据,实现高性能的解决方案。提交次数为 756 次,成功解决次数为 349 次,体现了该题目的挑战性和实际应用价值。 ... [详细]
  • 本文作为“实现简易版Spring系列”的第五篇,继前文深入探讨了Spring框架的核心技术之一——控制反转(IoC)之后,将重点转向另一个关键技术——面向切面编程(AOP)。对于使用Spring框架进行开发的开发者来说,AOP是一个不可或缺的概念。了解AOP的背景及其基本原理,对于掌握这一技术至关重要。本文将通过具体示例,详细解析AOP的实现机制,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 结语 | 《探索二进制世界:软件安全与逆向分析》读书笔记:深入理解二进制代码的逆向工程方法
    结语 | 《探索二进制世界:软件安全与逆向分析》读书笔记:深入理解二进制代码的逆向工程方法 ... [详细]
  • 本文深入探讨了 MXOTDLL.dll 在 C# 环境中的应用与优化策略。针对近期公司从某生物技术供应商采购的指纹识别设备,该设备提供的 DLL 文件是用 C 语言编写的。为了更好地集成到现有的 C# 系统中,我们对原生的 C 语言 DLL 进行了封装,并利用 C# 的互操作性功能实现了高效调用。此外,文章还详细分析了在实际应用中可能遇到的性能瓶颈,并提出了一系列优化措施,以确保系统的稳定性和高效运行。 ... [详细]
  • BZOJ1034 详细解析与算法优化
    本文深入解析了BZOJ1034问题,并提出了优化算法。通过借鉴广义田忌赛马的贪心策略,当己方当前最弱的马优于对方最弱的马时进行匹配;同样地,若己方当前最强的马优于对方最强的马,也进行匹配。此方法在保证胜率的同时,有效提升了算法效率。 ... [详细]
  • 在 Android 开发中,通过合理利用系统通知服务,可以显著提升应用的用户交互体验。针对 Android 8.0 及以上版本,开发者需首先创建并注册通知渠道。本文将详细介绍如何在应用中实现这一功能,包括初始化通知管理器、创建通知渠道以及发送通知的具体步骤,帮助开发者更好地理解和应用这些技术细节。 ... [详细]
  • 利用PaddleSharp模块在C#中实现图像文字识别功能测试
    PaddleSharp 是 PaddleInferenceCAPI 的 C# 封装库,适用于 Windows (x64)、NVIDIA GPU 和 Linux (Ubuntu 20.04) 等平台。本文详细介绍了如何使用 PaddleSharp 在 C# 环境中实现图像文字识别功能,并进行了全面的功能测试,验证了其在多种硬件配置下的稳定性和准确性。 ... [详细]
  • 在Linux系统中,原本已安装了多个版本的Python 2,并且还安装了Anaconda,其中包含了Python 3。本文详细介绍了如何通过配置环境变量,使系统默认使用指定版本的Python,以便在不同版本之间轻松切换。此外,文章还提供了具体的实践步骤和注意事项,帮助用户高效地管理和使用不同版本的Python环境。 ... [详细]
  • 提升工作效率:掌握这些技巧,IDEA 使用效率翻倍 | IDEA 高效操作指南
    提升工作效率:掌握这些技巧,IDEA 使用效率翻倍 | IDEA 高效操作指南 ... [详细]
  • C++20 引入了指定初始化器(Designated Initializers),这一特性借鉴了 C# 的对象初始化器和 Kotlin 的 apply 范围函数。指定初始化器允许开发者在初始化结构体或类时,直接指定成员变量的值,提高了代码的可读性和简洁性。此外,该特性还支持嵌套初始化,使得复杂对象的初始化更加直观和灵活。本文将详细解析指定初始化器的语法、应用场景及其实现细节,并通过具体示例展示其在实际开发中的优势。 ... [详细]
  • 多种实现 Windows 定时自动执行任务的专业技巧与方案
    在Windows系统中,实现定时自动执行任务有多种专业技巧和方案。常见的方法包括:使用Windows任务计划程序、开发Windows服务以及利用SQL Server Agent作业。这些方法被广泛应用于各种自动化场景,多数技术人员对此都有所了解。 ... [详细]
author-avatar
西安黄河文化补习学校
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有