ESP32引脚入门指南(七):从理论到实践(IIC)

news2024/11/16 7:45:25

引言

IIC(Inter-Integrated Circuit),又称为I²C,是一种简单而高效的多主控器串行通信协议,常用于微控制器和各种外围设备之间的通信。在ESP32系列芯片中,IIC协议被广泛应用于连接各种传感器、存储器和其他支持IIC接口的电子元件。本文将深入探讨ESP32的IIC总线特性,以及如何在实际项目中利用它来与外部设备进行通信。

ESP32的IIC特性

1. 主机与从机模式

ESP32的IIC控制器支持主机从机两种工作模式。作为主机,ESP32可以发起通信并控制总线时序;作为从机,它可以响应其他设备的通信请求。

2. 多功能引脚

ESP32的IIC接口通常使用SCL(Serial Clock)和SDA(Serial Data)两根线来实现通信。在ESP32C3上,只有一个IIC控制器,但可以通过软件配置选择不同的GPIO引脚来模拟IIC总线,提供灵活性以适应不同的硬件布局。这意味着任何GPIO引脚都可以配置为I2C SDA(数据线)和SCL(时钟线),但是除了像D34和D35这种只能做输入的引脚。然而,GPIO21 (SDA)和GPIO22 (SCL)通常用作默认的I2C引脚,使人们更容易使用现有的Arduino代码,库和草图。
在这里插入图片描述

3. 通信速率

ESP32支持多种IIC通信速率,包括标准速(100kHz)、快速模式(400kHz)以及高速模式(最高3.4MHz,但并非所有设备都支持此速度)。

4. 从机寻址

IIC通信中,主机需要通过7位从机地址来指定目标设备。在ESP32中,地址的高位可以设置为0或1,以确定写入或读取操作的方向。

IIC通信流程

  1. 起始信号:主机发送一个低电平到高电平的边沿,表示开始传输。
  2. 从机地址:主机发送7位从机地址,加上1位读/写位(0表示写,1表示读)。
  3. 应答位:如果从机识别其地址,它会在SDA线上拉低电平以应答;否则,线路保持高电平,主机检测到无应答后结束传输。
  4. 数据交换:主机和从机之间进行数据传输,每次传输一个字节,每个字节后跟随一个应答位。
  5. 停止信号:传输结束后,主机发送一个高电平到低电平的边沿,释放总线。

当然,在Arduino应用中,我们并不关注以上实现结节。

应用示例:连接SSD1306 OLED屏幕

连接一个SSD1306 OLED屏幕到ESP32的IIC总线,可以实现文本和图像的显示。以下是一段简单的示例代码片段(使用Arduino IDE和Adafruit_SSD1306库):

#include <Wire.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // OLED屏幕宽度
#define SCREEN_HEIGHT 64 // OLED屏幕高度
#define OLED_RESET -1    // 若有硬件复位引脚,则指定,否则设为-1

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

void setup() {
  Serial.begin(115200);
  
  // 初始化I2C总线
  Wire.begin(21, 18); // ESP32的SCL和SDA引脚,默认值通常是22(SCL)和21(SDA),这里根据实际情况调整
  
  // 初始化OLED显示屏
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // 地址0x3C是SSD1306的常见I2C地址
    Serial.println(F("SSD1306 allocation failed"));
    for(;;); // 如果初始化失败,则进入死循环
  }
  delay(2000); // 稍作延迟,让屏幕初始化稳定

  // 清除屏幕
  display.clearDisplay();
  display.display();

  // 设置文本参数
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0, 0);

  // 显示文本
  display.println("Hello, ESP32!");
  display.display();
}

void loop() {
  // 在这里可以添加更多动态显示的代码
  delay(2000); // 为了演示,每2秒循环一次
}

注意事项

  • 上述代码中,Wire.begin(21, 18)指定了ESP32的SCL和SDA引脚分别为GPIO21和GPIO18,这是一组常用的I2C引脚配置,但具体引脚需根据你的硬件接线和设计进行调整。
  • 0x3C是SSD1306 OLED屏幕的默认I2C地址,但某些模块可能使用其他地址,比如通过跳线设置,务必确认你的屏幕的实际地址。
  • 请确保你的硬件连接正确,包括电源和I2C线的连接,以及OLED屏幕的复位(如果需要)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1663178.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机网络实验1:交换机基本配置管理

实验目的和要求 安装Packer Tracer&#xff0c;了解Packer Tracer的基本操作掌握交换机基本命令集实验项目内容 认识Packet Tracer软件 交换机的基本配置与管理 交换机的端口配置与管理 交换机的端口聚合配置 交换机划分Vlan配置 实验环境 硬件&#xff1a;PC机&#x…

HTML5 + CSS3实现卖茶女与水果男的巅峰微信聊天对决,看完后笑一整天

记得之前看过一段卖茶女与水果男的聊天视频&#xff0c;当时觉得真有意思&#xff0c;竟然还可以这样热爱自己的事业。我就想&#xff0c;用HTML5 CSS3实现一下这个过程&#xff0c;锻炼了技术&#xff0c;也娱乐了开发人员&#xff0c;多有意思的一件事啊。 目录 1 实现思路…

Dbeaver连接一段时间不操作后断开的问题

右键数据库连接点击编辑连接点击初始化将连接保持改成60s

杰理AC632N 通过写flash修改蓝牙名字

杰理修改蓝牙名字一般有他自己的一个工具的,如下图,在编译前修改 现在用写flash的方式更改: 主要看杰理CFG_BT_NAME这个宏里面的.c文件 杰理给这里的flash都定义好每个宏的信息,你需要读写就行,修改后记得重启上电才能生效.如果你要自定义数据写进去flash断电不丢失,估计就是在…

智慧公厕的技术基础、保障技术和应用价值

近年来&#xff0c;随着信息技术的快速发展&#xff0c;智慧公厕逐渐成为城市管理的热点项目。智慧公厕利用物联网技术与大数据、云计算、网络通信、自动化控制等先进技术相结合&#xff0c;公共厕所的管理变得更加快捷高效&#xff0c;实现了真正的智能化使用和智慧化管理。下…

盘点自动驾驶的技术发展趋势

自动驾驶技术在不断发展变快&#xff0c;我们之前提过算法岗如今越来越卷&#xff0c;从今年的就业局势看&#xff0c;前年还属于蓝海行业的自动驾驶&#xff0c;今年就已经满满关上了招揽之门——呈红海之势。作为在这个行业中摸爬滚打的一以子&#xff0c;我们到底该如何纵观…

Goland GC

Goland GC 引用Go 1.3 mark and sweep 标记法Go 1.5 三色标记法屏障机制插入屏障删除写屏障总结 Go 1.8 混合写屏障(hybrid write barrier)机制总结 引用 https://zhuanlan.zhihu.com/p/675127867 Garbage Collection&#xff0c;缩写为GC&#xff0c;一种内存管理回收的机制…

ABAP 直连sqlserver或oracle数据库

1、事务码DBCO,配置链接 2、测试链接&#xff1a;sm38 执行ADBC_TEST_CONNECTION 3、运行时会报驱动找不到的错误&#xff0c;解决方法&#xff1a; S4 HANA连接其他数据库&#xff08;oracle,sqlserver)

代码审计平台sonarqube的安装及使用

docker搭建代码审计平台sonarqube 一、代码审计关注的质量指标二、静态分析技术分类三、使用sonarqube的目的四、sonarqube流程五、docker快速搭建sonarqube六、sonarqube scanner的安装和使用七、sonarqube对maven项目进行分析八、sonarqube分析报告解析九、代码扫描规则定制十…

mysql--join

Join 两个表都有一个主键索引 id 和一个索引 a&#xff0c;字段 b 上无索引&#xff0c;表 t2 里插入了 1000 行数据&#xff0c;在表 t1 里插入的是 100 行数据 CREATE TABLE t2 (id int(11) NOT NULL,a int(11) DEFAULT NULL,b int(11) DEFAULT NULL,PRIMARY KEY (id),KEY …

图机器学习入门:基本概念介绍

图机器学习&#xff08;Graph Machine Learning&#xff0c;简称Graph ML&#xff09;是机器学习的一个分支&#xff0c;专注于利用图形结构的数据。在图形结构中&#xff0c;数据以图的形式表示&#xff0c;其中的节点&#xff08;或顶点&#xff09;表示实体&#xff0c;边&a…

【LeetCode算法】28. 找出字符串中第一个匹配项的下标

提示&#xff1a;此文章仅作为本人记录日常学习使用&#xff0c;若有存在错误或者不严谨得地方欢迎指正。 文章目录 一、题目二、思路三、解决方案四、JAVA截取字符串的常用方法4.1 通过subString()截取字符串* 一、题目 给你两个字符串 haystack 和 needle &#xff0c;请你在…

某大型央企主数据项目实战,上线前后深度对比与解析

数据已成为数字化转型的核心&#xff0c;如何将数据转化为战略资产&#xff0c;是当今企业迫切需要解决的问题。其中主数据作为企业的“黄金数据”&#xff0c;是数据资产管理实践方式的重要切入方法之一。某大型央企成功实施了主数据管理项目&#xff0c;实现了从数据孤岛到一…

寻找最大价值的矿堆 - 矩阵

系列文章目录 文章目录 系列文章目录前言一、题目描述二、输入描述三、输出描述四、Java代码五、测试用例 前言 本人最近再练习算法&#xff0c;所以会发布一些解题思路&#xff0c;希望大家多指教 一、题目描述 给你一个由’0’(空地)、‘1’(银矿)、‘2’(金矿)组成的地图…

揭秘自行车对人体的神奇力量

想象一下&#xff0c;如果有一种魔法&#xff0c;能让你每施展一次就多一个小时的寿命&#xff0c;你会心动吗&#xff1f;这种魔法确实存在&#xff0c;它就是——骑自行车。没错&#xff0c;你没有听错&#xff0c;根据最新的研究数据&#xff0c;“骑行一小时&#xff0c;长…

vue布局设置——使用 el-drawer 打造个性化 Admin 后台布局设置

在前端开发中&#xff0c;我们常常需要为 admin 后台构建灵活且个性化的布局设置。今天&#xff0c;我要分享的是如何利用 el-drawer 来实现这样一个有趣的功能。 首先&#xff0c;我们来看一下主要的设置参数&#xff1a; 1. theme: 用于定义主题&#xff0c;可以根据需求切换…

政安晨:【Keras机器学习示例演绎】(四十二)—— 使用 KerasNLP 和 tf.distribute 进行数据并行训练

目录 简介 导入 基本批量大小和学习率 计算按比例分配的批量大小和学习率 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras机器学习实战 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在…

电脑文件找回恢复软件分享,3款软件助力数据恢复!

使用电脑时一不小心就删除了重要文件&#xff1f;想找回数据却不知道应该怎么操作&#xff1f;众所周知&#xff0c;电脑的使用已经成为我们工作、学习和生活中不可或缺的工具&#xff0c;但是在操作时误删文件是令很多用户都头疼的问题。 怎么恢复电脑里被删除的文件呢&#…

LabVIEW天然气压缩因子软件设计

LabVIEW天然气压缩因子软件设计 项目背景 天然气作为一种重要的能源&#xff0c;其压缩因子的准确计算对于流量的计量和输送过程的优化具有关键意义。传统的计算方法不仅步骤繁琐&#xff0c;而且难以满足现场快速响应的需求。因此&#xff0c;开发一款既能保证计算精度又便于…

一个开源即时通讯源码

一个开源即时通讯源码 目前已经含服务端、PC、移动端即时通讯解决方案&#xff0c;主要包含以下内容。 服务端简介 不要被客户端迷惑了&#xff0c;真正值钱的是服务端&#xff0c; 服务是采用Java语言开发&#xff0c;基于spring cloud微服务体系开发的一套即时通讯服务端。…