ESP32 调试SHT20踩的坑
ESP32介绍
esp32 是乐鑫出品的双核处理器,自带wifi和蓝牙,用于IOT领域,更多详情参考乐鑫官网
SHT20介绍
sht20 是一款温湿度传感器,广泛用于物联网行业,使用I2C通信协议
I2C介绍
2C 通讯协议(Inter-Integrated Circuit)是由 Phiilps公司开发的,由于它引脚少,硬件实现简单,可扩展性强,不需要 USART、CAN 等通讯协议的外部收发设备,现在被广泛地使用在系统内多个集成电路(IC)间的通讯。下面我们分别对 I2C协议的物理层及协议层进行讲解。
ESP32带硬件I2C,只要调用相关API即可,用起来非常简单。
问题
按照正常的协议进行调试,一直在读数据上出问题,使用了多种方式都不行
仔细检查SHT20的ds,发现如下说明:
进行数据测量的时候,未准备好的时候,没有ACK返回,这个时候就会失败。知道原因后处理就方便多了,这块等待直到读取到数据为止
/**
* @brief read data
* @param
* sensor
* tp
* rh
* @retval
* ESP_OK:
* ESP_ERR:
*/
esp_err_t iot_sht20_get_data(sht20_handle_t sensor, float* tp, float* rh)
{
uint8_t data[3];
sht20_dev_t* sens = (sht20_dev_t*) sensor;
i2c_cmd_handle_t cmd = i2c_cmd_link_create();
uint16_t tmp;
i2c_master_start(cmd);
i2c_master_write_byte(cmd, (sens->dev_addr << 1) | WRITE_BIT, ACK_CHECK_EN);
if (tp)
i2c_master_write_byte(cmd, TEMP_MASUREMENT, ACK_CHECK_EN);
if (rh)
i2c_master_write_byte(cmd, HUMI_MASUREMENT, ACK_CHECK_EN);
i2c_master_stop(cmd);
int ret = iot_i2c_bus_cmd_begin(sens->bus, cmd, 1000 / portTICK_RATE_MS);
i2c_cmd_link_delete(cmd);
if (ret == ESP_FAIL) {
ESP_LOGE(TAG, "SNED WRITE ERROR\n");
return ESP_FAIL;
}
do {
// ets_delay_us(200 * 1000);
vTaskDelay(100 / portTICK_PERIOD_MS);
cmd = i2c_cmd_link_create();
i2c_master_start(cmd);
i2c_master_write_byte(cmd, (sens->dev_addr << 1) | READ_BIT, ACK_CHECK_EN);
i2c_master_read(cmd, data, 2, ACK_VAL);
i2c_master_read_byte(cmd, &data[2], NACK_VAL);
i2c_master_stop(cmd);
ret = iot_i2c_bus_cmd_begin(sens->bus, cmd, 1000 / portTICK_RATE_MS);
i2c_cmd_link_delete(cmd);
if (ret == ESP_FAIL) {
ESP_LOGE(TAG, "SEND READ ERROR \n");
}
}while (ret != ESP_OK);
tmp = (data[0] << 8) | (data[1]<<0);
tmp &= ~0x0003;
if (rh) {
*rh = ((float)tmp * 0.00190735)-6;
}
if (tp) {
*tp = ((float)tmp * 0.00268127)-46.85;
}
return ESP_OK;
}
ESP32 调试SHT20踩的坑相关推荐
- 程序员,Mybatis 你踩过坑吗?
大多数开发者应该都使用过Hibernate或者Mybatis的框架,或多或少都踩过一些坑! 如在MyBatis/Ibatis中#和$的区别,#方式能够很大程度防止sql注入,$方式无法防止Sql注入. ...
- map mybatis 的字段返回0_Mybatis 你踩过坑吗?
(给ImportNew加星标,提高Java技能) 作者:似水的流年 yq.aliyun.com/roundtable/49835 大多数开发者应该都使用过Hibernate或者Mybatis的框架,或 ...
- mybatis 查询的时间不对_程序员,Mybatis 你踩过坑吗?
点击上方"Java基基",选择"设为星标" 做积极的人,而不是积极废人! 源码精品专栏 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 ...
- 全中!七大初学者易踩的坑!
[CSDN 编者按]作为初学者,你是否有犯过不知道有现成的API,而自己重复造轮子呢?本文作者详解七大新人程序员容易犯的错,让大家吸取教训,不要重复掉入这些坑. 作者 | Daan 译者 | 弯月,责 ...
- 大话 AliPay踩的坑
大话 AliPay踩的坑 传送门->大话微信支付踩的坑 做三方集成的时候按照官方的步骤进行集成基本不会出现太多问题.最近在做App集成支付,主要就是微信支付.支付宝.在集成支付宝支付的时候还是遇 ...
- 【Go入门可能会踩的坑-02】
Go语言是一门简单有趣的编程语言,与其他语言一样,在使用时不免会遇到很多坑,不过它们大多不是Go本身的设计缺陷.如果你刚从其他语言转到Go,那这篇文章可能会帮到你.旨在帮助你跳过这些坑,能减少大量调试 ...
- 深思数盾使用脚本加密(加壳)踩的坑
深思数盾使用脚本加密(加壳)踩的坑 商业化软件要盈利离不开加密,目前项目上选择的加密软件是深思数盾. 一般来说加密都是由实施人员来做的,但是本项目又个特殊的地方,需要和二次开发者写作开发,这样就需要将 ...
- 2021年Java面试题目最新总结【90%面试会踩的坑】
学会java技术之后大家面临的最多的问题就是面试这关,求职面试java岗位是否能够成功是直接影响我们的工作机会的,所以对于Java程序员面试你准备好了吗?今天小编汇总了一下关于Java程序员面试,90 ...
- celery开发中踩的坑
celery开发中踩的坑 celery连接redis 当使用redis做broker,redis连接需要密码时: BROKER_URL='redis://:xxxxx@127.0.0.1:6379/0 ...
- Spring Boot 从1.0 升级到 2.0 所踩的坑
先给大家晒一下云收藏的几个数据,作为一个 Spring Boot 的开源项目(https://github.com/cloudfavorites/favorites-web)目前在 Github 上面 ...
最新文章
- 修改 Idea 终端 Terminal 为 GitBash 或 Cmder
- Redhat5虚拟系统安装VmwareTools
- uPC1677射频信号放大芯片
- 认识实时动态测量技术
- 【UVA - 10037】Bridge(过河问题,经典贪心)
- Linux Shell脚本入门教程系列之(十五) Shell函数简介
- oracle字段规则,Oracle的基本操作+Oracle字段类型(zz)
- k8s的Pod状态和生命周期管理
- 想买个这样的笔记本电脑
- java访问kudu,KUDU的java操作
- 今天,霍金没有提AI威胁论,他的新目标是带领人类移民外星球(附霍金姚期智Pete演讲实录+PPT)
- CloudSim源码分析之DatacenterBroker--processEvent()
- D - Power Tower欧拉降幂公式
- 云智慧全智能计算机,东方所推出INV3062T型云智慧采集系统
- vue 调起浏览器打印
- 国家开放大学计算机基础应用型题一,国家开放大学(电大)《计算机应用基础》上机网考常考操作题及步骤...
- DEEP COMPRESSION: COMPRESSING DEEP NEURAL NETWORKS WITH PRUNING, TRAINED QUANTIZATION AND HUFFMAN
- 学习笔记15--机器人操作系统
- 张凤莲:换城市工作就一定要转移社保吗?
- 文本生成 | 一篇带风格的标题生成的经典工作
热门文章
- 经典.net混淆器 Confuser EX 2.0 使用介绍及配置 2022
- j2sdkversion-doc.zip下载地址
- webRTC初探:如何实现音视频的录制
- Msm8960(APQ8064)平台的MSM-AOSP-kitkat编译适配(1):基础知识
- 理解Memory Barrier(内存屏障)
- php 查看linux硬盘序列号,LINUX获取硬盘序列号
- 通用数据权限设计方案
- OSG正二十面体均分球面
- 【转】Xposed+JustTrustMe关闭SSL证书验证解决无法抓取https包问题
- 程序员方式原生表白网页