ESP8266实现温度检测并用MAX7217显示检测温度(附源码和软件)

这个项目主要是为了直观的显示检测的环境温度,用最便宜的设备、最低的成本显示实时温度

硬件:ESP8266一块、DS18B20温度传感器一个、MAX7217点阵屏一个

成本=8.9+1+6=15.9元

先看效果图

接线方案

ESP8266   DS18B20

3V        VCC

GND       GND

D4        DC

ESP8266   MAX7217

3V        VCC

GND       GND

D5        DIN

D6        CS

D7        CLK

首先根据接线方案把DS18B20和MAX7217连接在单片机上,然后把单片机连接电脑,使用ArduinoIDE写代码进单片机

考虑到MAX7217点阵屏的数据需要预先定义,我写了一个小程序来定义这个数据,方便直接使用数据让MAX7217需要的部分亮起来。例如如下的一个爱心就是使用点阵屏数据生成器生成的,这里提供下载,生成的数据样式就是一串数字0和1,只需要手动点击左边的按键,然后点击生成就可以生成需要的数据:0000000001101100100100101000001001000100001010000001000000000000

如果这里没有显示下载地址就去我的主页获取

接下来是写入ESP8266的代码,你需要改的只有数据,如果看不懂代码请看B站的详细介绍,哔哩哔哩搜索“董哥物联网“有详细的制作讲解视频。

#include <LedControl.h>
#include <OneWire.h>
#include <DallasTemperature.h>
/*
接线方案
ESP8266   DS18B20
3V        VCC
GND       GND
D4        DC

ESP8266   MAX7217
3V        VCC
GND       GND
D5        DIN
D6        CS
D7        CLK
*/

const int dataPin = D4;
OneWire oneWire(dataPin);
DallasTemperature sensors(&oneWire);
#define DIN_PIN D5
#define CS_PIN D6
#define CLK_PIN D7
const int NUM_DEVICES = 1;  // MAX7217 的数量
LedControl lc = LedControl(DIN_PIN, CLK_PIN, CS_PIN, NUM_DEVICES);
int i=0,j=0,k=0;
String tempraturedata[40];
float Temperature=0.0;
int Location=0;
void setfont(String s){
  lc.clearDisplay(0);          // Clear display register
  if(s.length()==64){
    k=0;
    for(i=0;i<8;i++){
      for(j=0;j<8;j++){
        if(s[k++]=='1'){
          lc.setLed(0,i,j, true);
        }
      }
    }
    delay(500);
  }
}
float gettemperature(){
  sensors.requestTemperatures();// 请求温度数据
  delay(1);//防止过快请求出错,设定响应时间
  Temperature = sensors.getTempCByIndex(0);  // 读取温度
  while (Temperature == DEVICE_DISCONNECTED_C) { // 检查是否成功读取温度   -127  
    sensors.requestTemperatures();// 请求温度数据
    delay(1);//防止过快请求出错,设定响应时间
    Temperature = sensors.getTempCByIndex(0);  // 读取温度
  } 
  return Temperature; 
}
void setup() {
  Serial.begin(9600);
  sensors.begin();
  sensors.setResolution(12);  // 设置为 12 位分辨率
  lc.shutdown(0, false);  // 唤醒显示
  /* 
    * Set the brightness of the display.
    * Params:
    * addr		the address of the display to control
    * intensity	the brightness of the display. (0..15)
    */
  lc.setIntensity(0, 15);   // 设置亮度级别
  lc.clearDisplay(0);      // 清空显示
  //定义0-40的显示数据
  tempraturedata[0]="0111100001001000010010000100100001001000010010000111100000000000";
  tempraturedata[1]="0000100000111000000010000000100000001000000010000000100001111111";
  tempraturedata[2]="0111110000000100000001000111110001000000010000000100000001111100";
  tempraturedata[3]="0111110000000100000001000111110000000100000001000000010001111100";
  tempraturedata[4]="0100100001001000010010000111110000001000000010000000100000000000";
  tempraturedata[5]="0111100001000000010000000111100000001000000010000111100000000000";
  tempraturedata[6]="0111100001000000010000000111100001001000010010000100100001111000";
  tempraturedata[7]="0111100000001000000010000000100000001000000010000000100000000000";
  tempraturedata[8]="0111100001001000010010000111100001001000010010000111100000000000";
  tempraturedata[9]="0111100001001000010010000111100000001000000010000000100001111000";
  tempraturedata[10]="0100010011001100010001000100010001000100010001000100010011101110";
  tempraturedata[11]="0100010011001100010001000100010001000100010001000100010011101110";
  tempraturedata[12]="0100111111000001010000010100111101001000010010000100100011101111";
  tempraturedata[13]="1100111101000001010000010100111101000001010000010100000111101111";
  tempraturedata[14]="1100100101001001010010010100111101000001010000010100000111100001";
  tempraturedata[15]="1100111101001000010010000100111101000001010000010100000111101111";
  tempraturedata[16]="1100111101001000010010000100111101001001010010010100100111101111";
  tempraturedata[17]="1100111101000001010000010100000101000001010000010100000111100001";
  tempraturedata[18]="1100111101001001010010010100111101001001010010010100100111101111";
  tempraturedata[19]="1100111101001001010010010100111101000001010000010100000111101111";
  tempraturedata[20]="1110111100101001001010011110100110001001100010011000100111101111";
  tempraturedata[21]="1111011000010010000100100001001011110010100000101000001011110111";
  tempraturedata[22]="1110111000100010001000100010001011101110100010001000100011101110";
  tempraturedata[23]="1110111000100010001000100010001011101110100000101000001011101110";
  tempraturedata[24]="1110101000101010001010100010101011101111100000101000001011100010";
  tempraturedata[25]="1110111100101000001010000010100011101111100000011000000111101111";
  tempraturedata[26]="1110111100101000001010000010100011101111100010011000100111101111";
  tempraturedata[27]="1110111100100001001000010010000111100001100000011000000111100001";
  tempraturedata[28]="1110111100101001001010010010100111101111100010011000100111101111";
  tempraturedata[29]="1110111100101001001010010010100111101111100000011000000111101111";
  tempraturedata[30]="1110111100101001001010011110100100101001001010011110111100000000";
  tempraturedata[31]="1110110000100100001001001110010000100100001001001110111000000000";
  tempraturedata[32]="1110111000100010001000101110111000101000001010001110111000000000";
  tempraturedata[33]="1110111000100010001000101110111000100010001000101110111000000000";
  tempraturedata[34]="1110101000101010001010101110111100100010001000101110001000000000";
  tempraturedata[35]="1110111100101000001010001110111100100001001000011110111100000000";
  tempraturedata[36]="1110111100101000001010001110111100101001001010011110111100000000";
  tempraturedata[37]="1110111100100001001000011110000100100001001000011110000100000000";
  tempraturedata[38]="1110111100101001001010011110111100101001001010011110111100000000";
  tempraturedata[39]="1110111100101001001010011110111100100001001000011110111100000000";
  tempraturedata[40]="1010111110101001101010011110100100101001001010010010111100000000";
  
}
void loop() {
  Temperature=gettemperature();
  Location=(int)Temperature;
  setfont(tempraturedata[Location]);//31
  delay(500);
}

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

董哥物联网

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值