PlatformIO+ESP32+Vscode+DS18B20温度传感器(一直输出-127)
DS18B20一直输出-127 ??
将相应的线接到ESP wroom 32
- 先在PlatformIO的library添加onWire库和DallasTemperature
库 -
#include <Arduino.h> #include <OneWire.h> #include <DallasTemperature.h> #define DS18B20PIN 4 OneWire onWire(DS18B20PIN); DallasTemperature sensors(&onWire); void setup() { Serial.begin(115200); sensors.begin(); } void loop() { sensors.requestTemperatures(); // Send the command to get temperatures float ds_num = sensors.getTempCByIndex(0); Serial.println(ds_num); }
代码编译运行没有问题,但是在串口看到都是输出-127。
网上看了解决方案是这样说的:
- ESP32 的GPIOx与Dx可能不是一个口,所以定义的时候得注意下那个IO口是不是对的。
- 电源没有正确接入
- 需要外加一个上拉电阻
我遇到的是第3个。后来查看ESP32 的数据手册知道,有点GPIO是不提供上拉的。而且DS18B20的手册也有说,需要加上拉电阻。原因是这样的,IO作为输出时,自带锁存功能,也就是写1后,输出一直是1(锁存器上的值),引脚上可能被外部电路影响而不是1了。所以需要上拉。
加了上拉电阻之后,就能够输出正常的温度值了。
如有见解,欢迎留言指教。
分类:
esp32
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了