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 &ltESP8266WiFi.h>
#include &ltPubSubClient.h>
#include &ltDNSServer.h>
#include &ltESP8266WebServer.h>
#include &ltWiFiManager.h>
#include &ltOneWire.h>
#include &ltDallasTemperature.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();
  }
}