A hőmérőegység egy vagy több digitális hőmérőből és egy vezérlőből áll . A vezérlőben található egy WiFi-s számítógép és egy lítiumos akkumulátor, így nem kell konnektorhoz csatlakoztatni az eszközt a működéshez. A digitális hőmérők vízállóak és -55°C és 125°C között képesek mérni több, mint 0,1°C pontossággal, ami szinte minden fizika órán előforduló kísérlethez megfelelő. Például kiválóan alkalmazható kalorimetriai mérésekhez, ahol több folyadék hőmérsékletét kell egyszerre mérni.
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>
#include <OneWire.h>
#include <DallasTemperature.h>
WiFiClient espClient;
PubSubClient client(espClient);
OneWire oneWire(D2);
DallasTemperature sensors(&oneWire);
WiFiManager wifiManager;
char clientname[40];
char mqtt_user[] = "";
char mqtt_passwd[] = "";
char topic1[] = "janusmeter/temp/01";
char topic2[] = "janusmeter/temp/02";
char topicv[] = "janusmeter/volt/temp01";
bool connectToServer()
{
bool conn = 0;
if (client.connect(clientname, mqtt_user, mqtt_passwd))
{
Serial.println("Connected.");
conn = 1;
}
return (conn);
}
bool tryServer(char* addr)
{
client.setServer(addr, 1883);
return (connectToServer());
}
void g()
{
digitalWrite(D3, LOW);
digitalWrite(D4, HIGH);
}
void r()
{
digitalWrite(D4, LOW);
digitalWrite(D3, HIGH);
}
void setup() {
Serial.begin(115200);
sensors.begin();
pinMode(D4, OUTPUT);
pinMode(D3, OUTPUT);
r();
wifiManager.autoConnect("JanusMeter_TEMP");
String t = "ESP_JanusMeter_" + String(ESP.getChipId());
t.toCharArray(clientname, t.length() + 1);
if (!client.connected())
{
tryServer("192.168.1.100");
}
if (!client.connected())
{
tryServer("192.168.1.28");
}
if (!client.connected())
{
for (int c = 0; c < 256; c++)
{
String ip = "192.168.1.";
ip += String(c);
char ip2[ip.length()];
Serial.println(ip);
ip.toCharArray(ip2, ip.length() + 1);
client.setServer(ip2, 1883);
if (connectToServer())
{
break;
}
}
}
g();
}
void publishString(String data, const char* topic)
{
char message[50];
data.toCharArray(message, data.length() + 1);
client.publish(topic, message);
}
void loop() {
if (!client.connected()) {
if (client.connect(clientname, mqtt_user, mqtt_passwd))
{
Serial.println("Connected.");
}
}
client.loop();
if (millis() % 1000 < 10)
{
r();
sensors.requestTemperatures();
Serial.println("\nT1: " + String(sensors.getTempCByIndex(0)) + "\nT2: " + String(sensors.getTempCByIndex(1)) + "\nV0: " + String(analogRead(A0)));
publishString(String(sensors.getTempCByIndex(0)), topic1);
publishString(String(sensors.getTempCByIndex(1)), topic2);
publishString(String(analogRead(A0)), topicv);
delay(10);
g();
}
}