基于WIFIduino的18B20温度计
DS18B20数字温度传感器是美国DALLAS公司生产的单总线数字温度传感器。DSl820数字温度计提供 9 位(二进制)温度读数指示器件的温度信息经过单线接口送入 DSl8B20 或从 DSl8B20 送出因此从主机 CPU 到DSl820 仅需一条线(和地线) DSl820 的电源可以由数据线本身提供而不需要外部电源,因为每一个 DSl820 在出厂时已经给定了唯一的序号,因此任意多个 DSl820 可以存放在同一条单线总线上,这允许在许多不同的地方放置温度敏感器件 DSl820 的测量范围从-55 到+125 增量值为 0.5 可在 l s(典型值)内把温度变换成数字。简单的DS18B20测温原理就是说把芯片感知到的温度换成数值放在数据寄存器里面,要想得到寄存器里面的数据,只有按照DALLAS规定的一种时序才能正确传出数据,这种时序被称为单总线,cpu就可通过单总线协议,取得DS18B20里面的温度值。详细参照DS18B20手册 https://www.arduino.cn/static/image/filetype/pdf.gif DS18B20.pdf,Arduino教程——DS18B20温度传感器https://www.arduino.cn/forum.php?mod=viewthread&tid=1345&fromuid=129943(出处: Arduino中文社区)
因为ArduinoIDE提供了单总线协议库(但是需要更新到最新版本才支持esp8266),所以编程变的非常简单。该项目例程采用WIFIduino板和DS18B20连接,测得的温度值通过Blinker显示在手机上。 完整示例程序如下:
其中ssid和pswd需写入你当前WiFi的ssid和密码
```
/* Blinker WiFi DS1B20, support WiFiduino*/
#define BLINKER_PRINT Serial//启用串口调试输出功能
#define BLINKER_WIFI//设备配置
#include <Blinker.h>
#include <OneWire.h>//单总线库需更新最新版才支持8266
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 12 //定义DS18B20数据口连接WIFIduino的12号IO上
#define BUTTON_1 "ButtonKey"
// 初始连接在单总线上的单总线设备
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
char ssid[] = "<Your WiFi network SSID or name>";
char pswd[] ="<Your WiFi network WPA password or WEP key>";
void setup()
{
Serial.begin(115200);
Blinker.begin(ssid, pswd);
sensors.begin();// 初始DS18B20库
Blinker.wInit(BUTTON_1, W_BUTTON);//app组件初始化, 建议在使用前初始化 Button 、Slider(滑动开关) 、 Toggle 及 RGB
Blinker.run();
}
void loop()
{
Blinker.run();//此函数需要频繁调用以保持设备间连接及处理收到的数据, 建议放在 loop() 函数中
Blinker.delay(2000);//解决了和Blinker较难连接的问题
if (Blinker.available()) //检测是否有接收到数据
{
BLINKER_LOG2("Blinker.readString(): ", Blinker.readString());//手机读取接收到的数据
sensors.requestTemperatures(); //发送命令获取温度
Blinker.print("degree centigrade", sensors.getTempCByIndex(0)+1);//发送温度数据显示在Blinker APP中
}
}
``` 那位高手试过这个示例程序,分享下经验 DSl8B20 不用接电阻,直接接到12口? 实验一下。
页:
[1]