搜索代码

Measuring Non-Contact Temperature with a Melexis MLX90614 and NodeMCU D1 Mini over Wi-Fi

Measuring Non-Contact Temperature with a Melexis MLX90614 and NodeMCU D1 Mini over Wi-Fi

In this tutorial, you will learn how to display temperature in °C, °F, and K using the MLX90614 and ESP8266 NodeMCU and D1 Mini over Wi-Fi.

Click on the images below:

图像

MLX90614 screenshot on Wi-Fi
MLX90614 screen shot on WiFi
338-Resources for this sketch
语言: C++
/*************************************************** 
  This is a library example for the MLX90614 Temp Sensor
Original Library and code source: https://github.com/adafruit/Adafruit-MLX90614-Library

This is Arduino code for MLX90614 to display temperature over Wifi using ESP8266 NodeMCU and D1 Mini
on a browser of a desktop, tablet, or mobile phone. 
This code works without needing a connection to the internet (without Ajax). Check the Ajax version from the link above.

Related Videos:
Introduction to MLX90614: https://youtu.be/cFDSqiEIunw
Display temperature from MLX90614 on LCD1602/LCD2004: https://youtu.be/_iO2L4P_irw
Display temperature over WiFi using ESP32 on a mobile phone:https://youtu.be/HpsvNIAtjm4


   Want to get a full explanation of this code
  and need a wiring diagram? 
  Purchase My Arduino course on Udemy.com http://robojax.com/L/?id=62
 * 
 * Watch video instructions for this code: 
written by Ahmad Shamshiri on Jun 29, 2020 
 
 * in Ajax, Ontario, Canada. www.robojax.com
 * 

 * Get this code and other Arduino codes from Robojax.com
Learn Arduino step by step in a structured course with all material, wiring diagrams, and libraries
all in one place. Purchase My course on Udemy.com http://robojax.com/L/?id=62

If you found this tutorial helpful, please support me so I can continue creating 
content like this. 

or make a donation using PayPal http://robojax.com/L/?id=64

 *  * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
 * This code has been downloaded from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.

Original
  Written by Limor Fried/Ladyada for Adafruit Industries.  
  BSD license, all text above must be included in any redistribution
 ****************************************************/

#include <Wire.h>
#include <Adafruit_MLX90614.h>
char *typeName[]={"Object: ","Ambient: "};
float tempC, tempF, tempK, tempCA, tempFA, tempKA;
char type='C';//default temperature type C

Adafruit_MLX90614 mlx = Adafruit_MLX90614();

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>

#ifndef STASSID
#define STASSID "Robojax"//your Wifi SSID (case sensitive)
#define STAPSK  "YouTube2020"//your WiFi password
#endif

const char *ssid = STASSID;
const char *password = STAPSK;

ESP8266WebServer server(80);
void handleRoot() {
   //Robojax.com MLX90614 with ESP8622 with Ajax
 String HTML ="<!DOCTYPE html>\
  <html>\
  <head>\
  \t\n<title>Robojax MLX90614 Infrared Temperature</title>\
  \t\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\
  \n<style>\
 \nhtml,body{\t\nwidth:100%\;\nheight:100%\;\nmargin:0}\n*{box-sizing:border-box}\n.colorAll{\n\tbackground-color:#90ee90}\n.colorBtn{\n\tbackground-color:#add8e6}\n.angleButtdon,a{\n\tfont-size:30px\;\nborder:1px solid #ccc\;\ndisplay:table-caption\;\npadding:7px 10px\;\ntext-decoration:none\;\ncursor:pointer\;\npadding:5px 6px 7px 10px}a{\n\tdisplay:block}\n.btn{\n\tmargin:5px\;\nborder:none\;\ndisplay:inline-block\;\nvertical-align:middle\;\ntext-align:center\;\nwhite-space:nowrap}\n";
    HTML +=".button {\n";
    HTML +=" border: none\;\n  color: white\;\n  padding: 15px 32px\;\n";
    HTML +="  text-align: center\;\n";
    HTML +="  text-decoration: none\;\n";
    HTML +="  display: inline-block\;\n";
    HTML +="  font-size: 25px\;\n";
    HTML +="  margin: 4px 2px\;\n";
    HTML +="  cursor: pointer\;\n";
    HTML +="} \n";
  HTML +="</style>\n\n";
   HTML +="</head>\n\n<body>\n<h1>Robojax MLX90614 Infrared Temperature </h1>\n";
  HTML +="<span style=\"font-size: 28px\">Temperature</span><br/>\n"; 
  if(type =='C'){
  HTML +="<span  style=\"font-size: 28px\">\n";  
  HTML +=typeName[0];
  HTML +=tempC;
  HTML +="&deg;C</span><br/>\n";

  HTML +="<span style=\"font-size: 28px\">\n";  
  HTML +=typeName[1];
  HTML +=tempCA;
  HTML +="&deg;C</span>\n";
 
  }

  
  if(type =='F')
  {
  HTML +="<span  style=\"font-size: 28px\">\n";  
  HTML +=typeName[0];
  HTML +=tempF;
  HTML +="&deg;F</span><br/>\n";

  HTML +="<span style=\"font-size: 28px\">\n";  
  HTML +=typeName[1];
  HTML +=tempFA;
  HTML +="&deg;F</span>\n";

  }

  
  if(type =='K')
  {

  HTML +="<span  style=\"font-size: 28px\">\n";  
  HTML +=typeName[0];
  HTML +=tempK;
  HTML +="&deg;K</span><br/>\n";

  HTML +="<span style=\"font-size: 28px\">\n";  
  HTML +=typeName[1];
  HTML +=tempKA;
  HTML +="&deg;K</span>\n";

  }
  HTML +="<br/>";

  HTML +="<a href=\"/c\" class=\"button\" style=\"background-color: #4CAF50\">Get &deg;C</a>\n";
  HTML +="<a href=\"/f\" class=\"button\" style=\"background-color: #4389fa\">Get &deg;F</a>\n";
  HTML +="<a href=\"/k\" class=\"button\" style=\"background-color: #fa5e43\">Get &deg;K</a>\n";  

           

  HTML +="\t\n</body>\n</html>\n";
  server.send(200, "text/html", HTML);  
   //Robojax.com MLX90614 with ESP8622 with Ajax  
}//handleRoot()

void handleNotFound() {
   //Robojax.com MLX90614 with ESP8622 with Ajax
  String message = "File Not Found\n\n";
  message += "URI: ";
  message += server.uri();
  message += "\nMethod: ";
  message += (server.method() == HTTP_GET) ? "GET" : "POST";
  message += "\nArguments: ";
  message += server.args();
  message += "\n";

  for (uint8_t i = 0; i < server.args(); i++) {
    message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
  }

  server.send(404, "text/plain", message);

}//handleNotFound()

void setup() {
   //Robojax.com MLX90614 with ESP8622 with Ajax
  Serial.begin(115200);

  Serial.println("Robojax MLX90614 test");  

  mlx.begin();  
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.println("");

  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: http://");
  Serial.println(WiFi.localIP());

//multicast DNS   //Robojax.com Tutorial
  if (MDNS.begin("robojaxESP8266")) {
    Serial.println("MDNS responder started");
    Serial.println("access via http://robojaxESP8266");
  }

  server.on("/", handleRoot);
  server.on("/c", displayTempC);  
  server.on("/f", displayTempF);  
  server.on("/k", displayTempK);      
  server.on("/inline", []() {
    server.send(200, "text/plain", "this works as well");
 });
  server.onNotFound(handleNotFound);
  server.begin();
  Serial.println("HTTP server started");  
     //Robojax.com MLX90614 with ESP8622 
}

void loop() {
     //Robojax.com MLX90614 with ESP8622 
  server.handleClient();
  MDNS.update();  
  //Robojax Example for MLX90614
 getTemp();

    handleRoot();

  delay(1000);

       //Robojax.com MLX90614 with ESP8622 
}

/*
 * @brief returns temperature or relative humidity

 * @return returns one of the values above
 * Usage: to get Fahrenheit type: getTemp('F')
 * to print it on the serial monitor Serial.println(getTemp('F'));
 * Written by Ahmad Shamshiri on Mar 30, 2020. 
 * in Ajax, Ontario, Canada
 * www.Robojax.com 
 */
void getTemp()
{
   // Robojax.com MLX90614 Code

    tempC = mlx.readObjectTempC();//in C object
    tempCA = mlx.readAmbientTempC();

    tempF = mlx.readObjectTempF(); //Fahrenheit Object
    tempFA = mlx.readAmbientTempF();//Fahrenheit Ambient

    tempK = tempC + 273.15;// Object Kelvin
    tempKA =  tempCA + 273.15;//Ambient Kelvin

    // Robojax.com MLX90614 Code
}//getTemp


void displayTempC()
{
     //Robojax.com MLX90614 with ESP8622 
  type ='C';
  handleRoot();

}//displayTempC()

void displayTempF()
{
     //Robojax.com MLX90614 with ESP8622 
 type ='F';
  handleRoot(); 

}//displayTempF()

void displayTempK()
{
     //Robojax.com MLX90614 with ESP8622 
  type ='K';
  handleRoot();  

}//displayTempK()

资源与参考

文件📁

没有可用的文件。