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:
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 +="°C</span><br/>\n";
HTML +="<span style=\"font-size: 28px\">\n";
HTML +=typeName[1];
HTML +=tempCA;
HTML +="°C</span>\n";
}
if(type =='F')
{
HTML +="<span style=\"font-size: 28px\">\n";
HTML +=typeName[0];
HTML +=tempF;
HTML +="°F</span><br/>\n";
HTML +="<span style=\"font-size: 28px\">\n";
HTML +=typeName[1];
HTML +=tempFA;
HTML +="°F</span>\n";
}
if(type =='K')
{
HTML +="<span style=\"font-size: 28px\">\n";
HTML +=typeName[0];
HTML +=tempK;
HTML +="°K</span><br/>\n";
HTML +="<span style=\"font-size: 28px\">\n";
HTML +=typeName[1];
HTML +=tempKA;
HTML +="°K</span>\n";
}
HTML +="<br/>";
HTML +="<a href=\"/c\" class=\"button\" style=\"background-color: #4CAF50\">Get °C</a>\n";
HTML +="<a href=\"/f\" class=\"button\" style=\"background-color: #4389fa\">Get °F</a>\n";
HTML +="<a href=\"/k\" class=\"button\" style=\"background-color: #fa5e43\">Get °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()
资源与参考
文件📁
没有可用的文件。