当前位置:首页 > 编程技术 > Arduino > 正文内容

ESP8266 驱动 DS18B20

曾经1年前 (2023-07-02)Arduino1068

1.效果展示:

利用esp8266驱动1.3寸OLED显示屏显示出ds18b20模块所采集的当前实测温度数据,效果如下图:

1.jpeg



2.DS18b20温度模块电路图:

2.png

 需要添加一个10k的上拉电阻。

接线顺序:

 

ESP8266OLED 屏幕DS18B20
GNDGNDGND
VCCVCCVCC
IO5SCL/
IO4SDA/
IO14/DQ

 3.代码展示:

#include <OneWire.h>
#include <DallasTemperature.h>
#include <Arduino.h>
#include <U8g2lib.h>
 
#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ 5, /* data=*/ 4, /* reset=*/ U8X8_PIN_NONE);   // All Boards without Reset of the Display
// 数据输出脚接开发板数字引脚2
#define ONE_WIRE_BUS 14
 
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
const unsigned char touzimu[][32] U8X8_PROGMEM = {
  { 0x40, 0x00, 0x80, 0x00, 0xFE, 0x7F, 0x02, 0x40, 0x11, 0x21, 0x20, 0x01, 0x20, 0x01, 0x08, 0x01,
    0x10, 0x01, 0x10, 0x01, 0xFF, 0x7F, 0x80, 0x02, 0x40, 0x04, 0x20, 0x08, 0x18, 0x10, 0x06, 0x20/*"实",0*/
  },
  { 0x00, 0x10, 0x00, 0x10, 0x3E, 0x10, 0x22, 0x10, 0xA2, 0x7F, 0x22, 0x10, 0x22, 0x10, 0x3E, 0x10,
    0x22, 0x11, 0x22, 0x12, 0x22, 0x12, 0x22, 0x10, 0x3E, 0x10, 0x22, 0x10, 0x00, 0x14, 0x00, 0x08/*"时",1*/
  },
  { 0x00, 0x00, 0xC4, 0x1F, 0x48, 0x10, 0x48, 0x10, 0xC1, 0x1F, 0x42, 0x10, 0x42, 0x10, 0xC8, 0x1F,
    0x08, 0x00, 0xE4, 0x3F, 0x27, 0x25, 0x24, 0x25, 0x24, 0x25, 0x24, 0x25, 0xF4, 0x7F, 0x00, 0x00/*"温",2*/
  },
  { 0x00, 0x00, 0xE4, 0x1F, 0x28, 0x10, 0x28, 0x10, 0xE1, 0x1F, 0x22, 0x10, 0x22, 0x10, 0xE8, 0x1F,
    0x88, 0x04, 0x84, 0x04, 0x97, 0x24, 0xA4, 0x14, 0xC4, 0x0C, 0x84, 0x04, 0xF4, 0x7F, 0x00, 0x00/*"湿",3*/
  },
  { 0x80, 0x00, 0x00, 0x01, 0xFC, 0x7F, 0x44, 0x04, 0x44, 0x04, 0xFC, 0x3F, 0x44, 0x04, 0x44, 0x04,
    0xC4, 0x07, 0x04, 0x00, 0xF4, 0x0F, 0x24, 0x08, 0x42, 0x04, 0x82, 0x03, 0x61, 0x0C, 0x1C, 0x70/*"度",4*/
  },
  { 0x00, 0x00, 0xF8, 0x0F, 0x08, 0x08, 0x08, 0x08, 0xF8, 0x0F, 0x08, 0x08, 0x08, 0x08, 0xF8, 0x0F,
    0x20, 0x02, 0x22, 0x22, 0x24, 0x22, 0x28, 0x12, 0x28, 0x0A, 0x20, 0x02, 0xFF, 0x7F, 0x00, 0x00/*"显",5*/
  },
  { 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x7F, 0x80, 0x00,
    0x80, 0x00, 0x88, 0x08, 0x88, 0x10, 0x84, 0x20, 0x82, 0x40, 0x81, 0x40, 0xA0, 0x00, 0x40, 0x00/*"示",6*/
  },
  { 0x06, 0x00, 0x89, 0x2F, 0x69, 0x30, 0x36, 0x20, 0x10, 0x20, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00,
    0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x10, 0x00, 0x30, 0x20, 0x60, 0x10, 0x80, 0x0F, 0x00, 0x00, /*"℃",7*/
  },
};
void setup(void)
{ u8g2.begin();//u8g2初始化
  Serial.begin(9600);
  sensors.begin();
}
 
void loop(void)
{
  u8g2.clearBuffer();
  //float T = sensors.requestTemperatures(); // 发送命令获取温度
 u8g2.drawXBM(16, 0, 16, 16, touzimu[0]);
  u8g2.drawXBM(32, 0, 16, 16, touzimu[1]);
  u8g2.drawXBM(48, 0, 16, 16, touzimu[2]);
  u8g2.drawXBM(64, 0, 16, 16, touzimu[4]);
  u8g2.drawXBM(80, 0, 16, 16, touzimu[5]);
  u8g2.drawXBM(96, 0, 16, 16, touzimu[6]);
 // u8g2.drawXBM(104, 0, 16, 16, touzimu[6]);
  u8g2.setFontMode(4);
  u8g2.drawXBM(16, 30, 16, 16, touzimu[2]);
  u8g2.drawXBM(32, 30, 16, 16, touzimu[4]);
  u8g2.drawXBM(90, 30, 16, 16, touzimu[7]);
  u8g2.setFont(u8g2_font_cu12_tr);
  u8g2.setCursor(48, 45);
  u8g2.print(":");
  u8g2.setFont(u8g2_font_cu12_tr);
  u8g2.setCursor(54,45);
  u8g2.print(sensors.getTempCByIndex(0));
  u8g2.sendBuffer();
  sensors.requestTemperatures(); // 发送命令获取温度
  Serial.print("Temperature for the device 1 (index 0) is: ");
  Serial.println(sensors.getTempCByIndex(0));
  delay(500);
}


扫描二维码推送至手机访问。

版权声明:本文由珍惜发布,如需转载请注明出处。

本文链接:https://www.zp68.com/article/49.html

分享给朋友:

“ESP8266 驱动 DS18B20” 的相关文章

Arduino常用字符串处理方法二(char)

char数组基本使用方法char a[ ] = "arduino"可用函数strcpy(p, p1) 复制字符串strncpy(p, p1, n) 复制指定长度字符串strcat(p, p1) 附加字符串strncat(p, p1, n)...

Arduino常用字符串处理方法

Arduino常用字符串操作其实都是C语言常用字符串处理方法,有些是String类型的方法,这里只是做下整理在arduino中,通常有两种定义字符串的方式:C语言方式char a[ ] = "arduino";C++方式String&nbs...

Arduino ESP8266 之看门狗

#define LED_PIN D4 void setup() {   //初始化串口   Serial.begin(9600);   // put your s...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。