通过ESP32读取I2C温湿度传感器项目:协议与代码实例

简介

在本项目中,我们将使用ESP32开发板读取I2C温湿度传感器的数据。我们将详细介绍I2C协议,并提供图文并茂的代码实例,帮助你快速上手。

项目流程

  1. 选择硬件:ESP32开发板、I2C温湿度传感器(如DHT12、HTU21D、SHT30等)、连接线和面包板。
  2. 了解I2C协议:I2C(Inter-Integrated Circuit)是一种常用的串行通信协议,适用于短距离通信。
  3. 硬件连接:将I2C温湿度传感器连接到ESP32开发板。
  4. 编写代码:使用Arduino IDE编写代码,读取传感器数据并在串口监视器中显示。
  5. 调试与运行:上传代码到ESP32开发板,观察串口监视器中的数据。

I2C协议简介

I2C是一种串行通信协议,通常用于微控制器与传感器、显示器等外围设备之间的通信。I2C总线由两条线组成:数据线(SDA)和时钟线(SCL)。I2C协议支持多主多从通信,即一个总线上可以有多个主设备和从设备。

I2C通信过程

  1. 启动条件:主设备拉低SDA线,同时保持SCL线为高电平。
  2. 发送地址:主设备发送从设备地址和读/写位。
  3. 数据传输:主设备和从设备之间进行数据传输,每次传输一个字节。
  4. 停止条件:主设备释放SDA线,同时保持SCL线为高电平。

硬件连接

将I2C温湿度传感器连接到ESP32开发板。以下是连接示意图:

  1. VCC:连接到ESP32的3.3V引脚。
  2. GND:连接到ESP32的GND引脚。
  3. SDA:连接到ESP32的GPIO21引脚。
  4. SCL:连接到ESP32的GPIO22引脚。

代码实例

使用Arduino IDE编写代码,读取I2C温湿度传感器的数据并在串口监视器中显示。以下是代码示例:

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_HTU21DF.h>// 创建HTU21D传感器对象
Adafruit_HTU21DF htu = Adafruit_HTU21DF();void setup() {// 初始化串口Serial.begin(115200);// 初始化I2C接口Wire.begin();// 检查传感器是否连接成功if (!htu.begin()) {Serial.println("未找到HTU21D传感器!");while (1);}
}void loop() {// 读取温度和湿度数据float temperature = htu.readTemperature();float humidity = htu.readHumidity();// 在串口监视器中显示数据Serial.print("温度: ");Serial.print(temperature);Serial.print(" °C");Serial.print("\t湿度: ");Serial.print(humidity);Serial.println(" %");// 延时2秒delay(2000);
}

代码解释

  1. 包含库文件:我们使用Wire.h库进行I2C通信,使用Adafruit_Sensor.hAdafruit_HTU21DF.h库读取HTU21D传感器数据。
  2. 创建传感器对象:创建HTU21D传感器对象htu
  3. 初始化:在setup()函数中,初始化串口和I2C接口,并检查传感器是否连接成功。
  4. 读取数据:在loop()函数中,循环读取温度和湿度数据,并在串口监视器中显示。

调试与运行

  1. 上传代码:将代码上传到ESP32开发板。
  2. 打开串口监视器:在Arduino IDE中打开串口监视器,设置波特率为115200。
  3. 观察数据:观察串口监视器中的温度和湿度数据,确保数据正确。

总结

通过本项目,我们详细介绍了如何使用ESP32开发板读取I2C温湿度传感器的数据。我们从硬件连接、I2C协议、代码编写和调试等方面进行了全面讲解,并提供了图文并茂的代码实例。希望通过本文的介绍,读者能够掌握ESP32与I2C传感器通信的方法,并能够在实际项目中应用。

参考资料

  1. ESP32官方文档
  2. Arduino HTU21D库
  3. I2C协议详解

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

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

相关文章

硬盘数据恢复软件,推荐5种适合你的方法来恢复硬盘数据

硬盘数据恢复软件&#xff0c;作为解决数据丢失问题的关键工具&#xff0c;帮助用户在重要文件丢失时迅速找回数据。本教程介绍5种恢复实用硬盘数据方法&#xff0c;适应不同类型和严重程度的数据损坏情况。 文章摘要&#xff1a; 一. 硬盘数据恢复软件 二. 数据恢复原理 三. …

LED显示屏的换帧频率与刷新频率:技术细节与市场发展

在当今数字化时代&#xff0c;LED显示屏已成为信息传递和广告宣传的重要工具。然而&#xff0c;对于普通消费者来说&#xff0c;LED显示屏背后的技术细节可能仍然是一个谜。今天&#xff0c;我们将深入探讨LED显示屏中的两个关键概念&#xff1a;换帧频率和刷新频率&#xff0c…

分布式锁实现方案

分布式锁 1 什么是分布式锁 ​ 就是在分布式环境下&#xff0c;保证某个公共资源只能在同一时间被多进程应用的某个进程的某一个线程访问时使用锁。 2 几个使用场景分析 一段代码同一时间只能被同一个不同进程的一个线程执行 库存超卖 (库存被减到 负数)&#xff0c;上面案…

预训练是什么?

预训练是什么&#xff1f; 图像领域的预训练 在介绍图像领域的预训练之前&#xff0c;我们首先介绍下卷积神经网络&#xff08;CNN&#xff09;&#xff0c;CNN 一般用于图片分类任务&#xff0c;并且CNN 由多个层级结构组成&#xff0c;不同层学到的图像特征也不同&#xff…

【C++】Cmake入门|掌握cmake的基本操作

前言&#xff1a; CMake是开源、跨平台的构建工具&#xff0c;可以让我们通过编写简单的配置文件去生成本地的Makefile&#xff0c;这个配置文件是独立于运行平台和编译器的&#xff0c;这样就不用亲自去编写Makefile了&#xff0c;而且配置文件可以直接拿到其它平台上使用&am…

基于动力学的六自由度机器人阻抗恒力跟踪控制

1.整个代码的控制流程图如下&#xff1a; 2.正逆运动学计算 略 3.动力学模型 采用拉格朗日法计算机械臂的动力学模型&#xff0c;其输入的是机械臂的关节角度、角速度和角加速度&#xff1b;其中M、C、G本别是计算的惯性力、科式力和重力项&#xff0c;相关部分如下&#xf…

JavaScript的学习之运算符

目录 一、运算符的介绍 二、算数运算符 三、一元运算符 一、运算符的介绍 运算符也称操作符&#xff0c;通过运算符可以对一个或者多个值进行运算&#xff0c;并获得结果 比如&#xff1a;typeof就是运算符&#xff0c;可以获得一个值的类型&#xff0c;它会将改值的类型以字…

安卓中使用ttf字体文件

官方文档中提供的方法要设备能访问google&#xff1f; 官方方法 直接下载字体的fft文件 我要使用的是lexend 需要的格式可以在里面搜索 使用下载的ttf文件 解压出来 可以单独使用static里面的&#xff0c;里面是直接的lexend的各种格式 但是我这里直接使用Lexend-Vari…

odoo的采购询价单,默认情况下显示‘draft‘,‘sent‘,‘purchase‘,请问什么情况下才会显示‘to approve‘?

odoo的采购询价单&#xff0c;默认情况下显示’draft’,‘sent’,‘purchase’&#xff0c;请问什么情况下才会显示’to approve’? 见下图&#xff1a; 这与操作人员的角色是相关的&#xff1a; 当操作人员是群组 “采购 / 用户”时&#xff0c;点击“confirm order/确认订…

Day59 代码随想录打卡|二叉树篇---把二叉搜索树转换为累加树

题目&#xff08;leecode T538&#xff09;&#xff1a; 给出二叉 搜索 树的根节点&#xff0c;该树的节点值各不相同&#xff0c;请你将其转换为累加树&#xff08;Greater Sum Tree&#xff09;&#xff0c;使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。…

vuex的深入学习[基于vuex3]----篇(二)

store对象的创建 store的传递图 创建语句索引 创建vuex的语句为new Vuex.Store({…})Vuex的入口文件是index.js,store是index.js导出的store类store类是store.js文件中定义的。 Store的构造函数constructor 判断vuex是否被注入&#xff0c;就是将vue挂载在window对象上&am…

【算法】二叉树 - 理论基础

1.种类 1.1 满二叉树 只有度为0和2的节点&#xff0c;且度为0的节点都都在同一层。深度为k&#xff0c;有2^k-1个节点。 1.2 完全二叉树 在完全二叉树中&#xff0c;除了最底层节点可能没填满外&#xff0c;其余每层节点数都达到最大值&#xff0c;并且最下面一层的节点都…

常说的云VR是什么意思?与传统vr的区别

虚拟现实&#xff08;Virtual Reality&#xff0c;简称VR&#xff09;是一种利用计算机技术模拟产生一个三维空间的虚拟世界&#xff0c;让用户通过视觉、听觉、触觉等感官&#xff0c;获得与现实世界类似或超越的体验。VR技术发展历程可追溯至上世纪&#xff0c;经历概念提出、…

某大厂程序员吐槽:离职交接时,新人被工作量吓退,领导却污蔑我故意劝退新人,我怒晒工作短信反击证明,新人看了后也决定走人了!

一位知名大公司的程序员分享了他离职时的遭遇&#xff1a;在交接工作时&#xff0c;新进的同事因工作量过大而感到压力&#xff0c;但出乎意料的是&#xff0c;他们的领导却指责我故意吓唬新人。为了证明自己的清白&#xff0c;我晒出了工作短信作为反击&#xff0c;结果连新人…

Linux系统编程--软/硬连接

真正找到磁盘上文件的并不是文件名&#xff0c;而是inode。 其实在linux中可以让多个文件名对应于同一个inode。 命令&#xff1a; 软连接&#xff1a;ln -s 原文件名 新文件名 硬链接&#xff1a;ln 原文件名 新文件名 删除链接文件&#xff1a;unlink 文件名执行上面两条命令…

matplotlib之常见图像种类

Matplotlib 是一个用于绘制图表和数据可视化的 Python 库。它支持多种不同类型的图形&#xff0c;以满足各种数据可视化需求。以下是一些 Matplotlib 支持的主要图形种类&#xff1a; 折线图&#xff08;Line Plot&#xff09;&#xff1a; 用于显示数据随时间或其他连续变量的…

Git使用过程中涉及的几个区域

一. 简介 Git 是一个开源的分布式版本控制系统&#xff0c;可以有效、高速的处理从很小到非常大的项目版本管理&#xff0c;也是 Linus Torvalds 为了帮助管理 Linux内核开发而开发的一个开放源码的版本控制软件。 本文简单了解一下 git涉及的几个部分&#xff0c;以及git 常…

vue登陆密码加密,java后端解密

前端 安装crypto-js npm install crypto-js加密 //引入crypto-js import CryptoJS from crypto-js;/** ---密码加密 start--- */ const SECRET_KEY CryptoJS.enc.Utf8.parse("a15q8f6s5s1a2v3s"); const SECRET_IV CryptoJS.enc.Utf8.parse("a3c6g5h4v9sss…

基于网络搜索的长篇问答能力优化:FoRAG

检索增强生成&#xff08;RAG&#xff0c;Retrieval Augmented Generation&#xff09;可以利用搜索引擎检索技术来提升长篇问答质量&#xff0c;因而在 QA 任务中广受欢迎。尽管有多种开源方法和网络增强的商业系统如 Bing Chat 出现&#xff0c;但生成长篇答案的事实性和逻辑…

ruoyi添加自己的菜单

先把自己自定义的view填写好 在菜单管理模块 因为我已经新增过&#xff0c;所以就看看我填的啥就行了 我发现一个问题&#xff0c;路由地址可以填index2或者scooldemo/index2都可以&#xff08;这个包含了文件夹路径&#xff09;&#xff0c;反正组件路径一定要填对就可以了。 …