查看: 1274|回复: 2

[分享] 基于WIFIduino的18B20温度计

[复制链接]
  • TA的每日心情
    开心
    2019-4-22 10:27
  • 签到天数: 21 天

    [LV.4]偶尔看看III

    发表于 2018-7-15 15:36 | 显示全部楼层 |阅读模式
       DS18B20数字温度传感器是美国DALLAS公司生产的单总线数字温度传感器。DSl820数字温度计提供 9 位(二进制)温度读数指示器件的温度信息经过单线接口送入 DSl8B20 或从 DSl8B20 送出因此从主机 CPU 到DSl820 仅需一条线(和地线) DSl820 的电源可以由数据线本身提供而不需要外部电源,因为每一个 DSl820 在出厂时已经给定了唯一的序号,因此任意多个 DSl820 可以存放在同一条单线总线上,这允许在许多不同的地方放置温度敏感器件 DSl820 的测量范围从-55 到+125 增量值为 0.5 可在 l s(典型值)内把温度变换成数字。简单的DS18B20测温原理就是说把芯片感知到的温度换成数值放在数据寄存器里面,要想得到寄存器里面的数据,只有按照DALLAS规定的一种时序才能正确传出数据,这种时序被称为单总线,cpu就可通过单总线协议,取得DS18B20里面的温度值。
    详细参照DS18B20手册 DS18B20.pdf,Arduino教程——DS18B20温度传感器https://www.arduino.cn/forum.php?mod=viewthread&tid=1345&fromuid=129943(出处: Arduino中文社区)
          因为Arduino  IDE提供了单总线协议库(但是需要更新到最新版本才支持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中
         }
    }
  • TA的每日心情
    开心
    2019-4-16 16:41
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2019-5-13 21:15 | 显示全部楼层
    那位高手试过这个示例程序,分享下经验
  • TA的每日心情
    开心
    2019-4-16 16:41
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2019-5-13 21:19 | 显示全部楼层
    DSl8B20 不用接电阻,直接接到12口?
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    请问一下微动开关 4X4矩阵键盘 16按键  怎么接ardiuno的 接口?
    请问一下微动开关 4X4矩阵
    请问下这款微动开关 4X4矩阵键盘 16按键的 8个接口分别接单片机的什么口,我
    Arduino MEGA 与UNO 通过nRF24L模块通讯
    Arduino MEGA 与UNO 通过n
    之前在深水宝很“实惠”的店铺买了一些原件,随手砍了esp8266以及nRF24L*3 因为缺
    Nano 一直显示上传,不显示上传成功。
    Nano 一直显示上传,不显
    前面用的还好好的,突然就传不上程序了。一直停留在上传状态中,就是不限显示上传成功
    【项目】基于Arduino Nano的多功能桌面感应垃圾桶
    【项目】基于Arduino Nano
    基于Arduino Nano的多功能桌面感应垃圾桶随着大学生活不断往前迈进,宿舍桌面上的杂物
    Arduino板接74HC拓展接驱动器接多个四项电机
    Arduino板接74HC拓展接驱
    一个Arduino板能不能接多个74HC595来得到多个拓展? 如果能的话要怎么接啊? 如果接
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表