ESP32用Arduino硬件IIC读取SHT30温湿度计的数据
网上有不少ESP32用硬件IIC读取SHT30温湿度计的数据的文章,大多缺少解释,不太看得明白,我通过波形查看标注了一下说明,有不对的地方望帮助指出,谢谢
直接上代码吧:
#include <Wire.h>//IIC管脚为GPIO 21(SDA)、GPIO 22(SCL)
//如果要使用其他管脚,在使库函数时,只需调用:Wire.begin(SDA, SCL);
//OLED的地址是 0X3c(7位)
//时间发生器PCF8563T 地址是0X51//温度SHT30 地址是0x44 不需要乘2这个概念!!!!!!!//温度sht30 地址0x44byte temp[6]; //6个数据:温度高位,温度低位,温度CRC,湿度高位,湿度低位,湿度CRC
int wendu, shidu;void setup(){Serial.begin(115200); Wire.begin();
}void loop(){Wire.beginTransmission(0x44); //发开启传输Start + 地址0x44(7位) + 写入Bit(1位)Wire.write(0x2C); //写入命令 0x2C:开启Clock stretching 0x24:关闭Clock stretching (开启的时候会在没有转换完之前拉低时钟信号,迫使IIC等待转换 大概 9.2ms)Wire.write(0x06); //写入命令 0x06 重复率高,慢,重复率越高,转换持续的时间越长,功耗越高,但是转换精度越高。Wire.endTransmission(); //停止Stop// Wire.requestFrom(0x44, 0x06, false); //将输据读出到缓存 地址 6个字节 结束后Stop;false和true在波形上看不到区别Wire.requestFrom(0x44, 0x06, true); //将输据读出到缓存 地址 6个字节 结束后Stop;temp[0] = Wire.read(); // 接收并读取从机发来的一个字节的数据temp[1] = Wire.read(); // 接收并读取从机发来的一个字节的数据temp[2] = Wire.read(); // 接收并读取从机发来的一个字节的数据temp[3] = Wire.read(); // 接收并读取从机发来的一个字节的数据temp[4] = Wire.read(); // 接收并读取从机发来的一个字节的数据temp[5] = Wire.read(); // 接收并读取从机发来的一个字节的数据//Wire.endTransmission(); //发完后自动会发Stop,不需要这句话wendu = temp[0]<<8 | temp[1]; //高位左移8位 并上低位shidu = temp[3]<<8 | temp[4]; //高位左移8位 并上低位float wendufloat = (float)wendu / 65535 * 175 - 45; //公式就是这样float shidufloat = ((float)shidu / 65535) * 100 ; //公式就是这样Serial.printf("wendu = %02X %02X ; shidu = %02X %02X ;\r\n",temp[0],temp[1],temp[3],temp[4]);Serial.printf("wendu = %04X ; shidu = %04X;\r\n",wendu, shidu);Serial.printf("wendu = %f ; shidu = %f;\r\n",wendufloat, shidufloat);// Serial.println("The iic device list!"); //用于检测在线的IIC设备地址// for(int i=0x01;i<127;i++)// {// Wire.beginTransmission(i);// if(Wire.endTransmission()==0)// {// Serial.print("0x");// Serial.println(i,HEX);// }// }delay(1000);}
波形如下:
中间等待9.2ms
写命令2C 06 再读温湿度数据 等待9.2ms
读到6字节数据。
ESP32用Arduino硬件IIC读取SHT30温湿度计的数据相关推荐
- 模拟IIC读取SHT30温湿度传感器数据
文章目录 1 i2c.c 2 i2c.h 3 crc.c 4 crc.h 1 i2c.c /*** @brief SHT30温湿度传感器相关,使用模拟IIC进行数据的读取*/#include < ...
- STM32F103使用硬件IIC驱动SHT30温湿度传感器
文章目录 前言 一.SHT30温湿度传感器原理图 二.代码部分 1.SHT30.c文件 2.SHT30.h文件 总结 前言 SHT30是一种常见的温湿度传感器,该传感器广泛应用于各种场景,小米的温湿度 ...
- STM32单片机硬件I2C读取AHT10温湿度传感器数据
STM32使用硬件IIC读取AHT10温湿度传感器的数据并显示在0.96寸OLED屏上. 我用的单片机是STM32F103C8T6,程序用的是ST标准库写的. STM32使用硬件I2C读取SHTC3温 ...
- nRF52笔记(8) IIC读取sht30温湿度传感器
1.平台的条件 1.1 软件平台:sdk14.2 1.2 硬件平台: nrf52832 2 说明: 只是介绍代码怎么使用,直接点 QQ: 1297311998 ,如果有什么问题,请高手不吝赐教 2.n ...
- 用arduino uno的IIC读取JY901角度传感器的数据
1 介绍 大家从标题中来看呢,大家可能会有些困惑,MPU9250只输出加速度.陀螺仪.没有角度.这个也是我今天想和大家说的.最近我做了一个倾角项目.老板基于成本考虑希望我能用MPU9250去算出来角度 ...
- stm32读取目标芯片_STM32通过IIC读取MPU6050陀螺仪芯片数据核心程序
1 简 介 最近,想学角度融合算法在网上买一个JY61的模块.他们家的模块用起来还不错.模块分为串口通讯和IIC通讯的.串口读取数据他们家有例程,我就不说了.想分享给大家这个模块的IIC是怎么去读取 ...
- 【STM32】HAL库 STM32CubeMX教程十二---IIC(读取AT24C02 )
前言: 本系列教程将HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用 在之前的标准库中,STM32的硬件IIC非常复杂,更重要的是它并不稳定,所以都不推荐使用. 但是 ...
- GD32F303调试小记(三)之IIC(硬件IIC+PCF8563实时时钟)
前言 前面的文章介绍了在单片机中常用的两种通信协议(USART和SPI),并给出了GD32F303对应的配置流程.这次介绍第三种常见的通信协议IIC.这此使用GD32的硬件IIC通信PCF8563实时 ...
- 使用STM32+硬件IIC+DMA驱动GT系列触摸屏(GT911)
使用STM32+硬件IIC+DMA驱动GT系列触摸屏(GT911) 初始化代码 /** @brief GT911 初始化程序* @param None* @retval None*/ void GT9 ...
最新文章
- Linux基本C编程fork、signal、time以及用printf在终端打印一个GUI窗口 - 使用cygwin
- 在执行Dockerfile时出现Get https://registry-1.docker.io/v2/错误的解决方案
- 《黑客大曝光:移动应用安全揭秘及防护措施》一2.2 攻击与对策
- 高级数据结构---优先队列
- 桶排序/Bucket Sort
- 火星浏览器_Facebook Libra 测试网区块浏览器上线,测试网已被重置2次
- 【实例解析】某集团BI决策系统建设方案分享
- [转]WINDOW进程通信的几种方式
- 仅需5道题轻松掌握Python命令行相关标准库 | Python技能树征题
- vscode插件之常用插件
- 文献解读:结构方程模型SEM基础,小白看这个就基本够了
- ISO14000标准与ISO9000标准异同(转载)
- Word vba之遍历段落、识别固定段头、设置样式
- BarTender对单个二维码/文本添加多个域(数据库字段)/嵌入的数据,并对数据添加后缀等处理;扩展更多域
- win32实现两个透明窗口联动
- 免苹果开发者账号申请iOS上架及证书打包ipa测试(2022最新详解)
- 面试分享:专科半年经验面试阿里前端P6+总结
- 高德地图使用自定义地图无效问题
- Intellij IDEA使用技巧
- [CF1129E]Legendary Tree