Blynk
V0: Display für aktuell gemessene Temperatur
V1: Slider für die Einstellung der Temperatur
V3: Display für die eingestellte Temperatur
V4: Auswahlmöglichkeit für Temperaturprofile
V5: Button zum Wählen eines Profils
V6: Button zum Speichern einer Temperatur in einem Profil
Arduino
Vollständiger Code: https://github.com/Lynncholy/Smarter-Getraenkewaechter/tree/main/Quellcode
Um den Infrarotsensor benutzen zu können, müssen wir uns zuerst die “Adafruit MLX90614 Library” herunterladen.
Adafruit_MLX90614 mlx = Adafruit_MLX90614();
Diese Zeile erzeugt ein Objekt des Sensors, mit dem wir im weiteren Verlauf arbeiten.
char auth[] = "rF0gN-Zo20v2XaCYwyDCLaqGx6aMTDcx";
char ssid[] = ""; //Your SSID
char pass[] = ""; // your Wifi password
Die Variable auth speichert den Token von Blynk ab. Ansonsten müssen vom Nutzer noch die SSID und das WLAN-Passwort hier eingetragen werden, sodass eine Verbindung zu Blynk hergestellt werden kann.
Methoden, die nicht funktionieren…
int slidervalue = 0;
int teaProfile = 0;
int coffeeProfile = 0;
int otherDrinkProfile = 0;
int chooseProfilePressed = 0;
int saveProfilePressed = 0;
int profile = 0; //1, 2 or 3
int activeProfile = 0;
Hier sind die Variablen initialisiert, die wir für die Getränkprofile benötigen. Der “slidervalue” speichert den Wert vom Slider (V1) ab. In den Variablen teaProfile, coffeeProfile und otherDrinkProfile werden die Temperaturen gespeichert, die der Nutzer durch das Drücken von V6 auslöst. Dabei ist “activeProfile” das jeweilige aktive Profil von den 3 Auswahlmöglichkeiten. Die Variablen chooseProfilePressed und saveProfilePressed können nur die Werte 1 (also Button gedrückt) oder 0 (Button nicht gedrückt) annehmen.
BLYNK_WRITE(V1)
{
double i = param.asDouble();
slidervalue = i;
profile = slidervalue;
Blynk.virtualWrite(V3, profile);
Serial.println(i);
}
Diese Methode übernimmt den Wert vom Slider (V1) und zeigt den Wert im Display V3 an.
BLYNK_WRITE(V5)
{
int i = param.asInt();
chooseProfilePressed = i;
if ((chooseProfilePressed == 1) && (teaProfile == profile)) { //if press the choose button, value of teaprofile is displayed
//profile = teaProfile;
Blynk.virtualWrite(V3, teaProfile);
}
}
Diese Methode bestätigt die Wahl eines Profils. Bei der Bestätigung wird der gespeicherte Temperatur-Wert im Display V3 angezeigt. Dies soll nur geschehen, wenn der Nutzer beispielsweise das Tee-Profil ausgewählt hat und den Button V5 drückt.
BLYNK_WRITE(V6)
{
int i = param.asInt();
saveProfilePressed = i;
if ((saveProfilePressed == 1) && (profile == 1)) { //if you press the save button, value of slider is saved to chosen profile
teaProfile = slidervalue;
}
if ((saveProfilePressed == 1) && (profile == 2)) { //if you press the save button, value of slider is saved to chosen profile
coffeeProfile = slidervalue;
}
if ((saveProfilePressed == 1) && (profile == 3)) { //if you press the save button, value of slider is saved to chosen profile
otherDrinkProfile = slidervalue;
}
}
Mit dieser Methode kann man die Temperatur aus dem Slider in Profile speichern. Dafür wählt man ein Profil in V4 aus und drückt gleichzeitig den Button V6.
WiFiManager
WiFi.mode(WIFI_STA); // explicitly set mode, esp defaults to STA+AP
// it is a good practice to make sure your code sets wifi mode how you want it.
Serial.begin(115200);
//WiFiManager, Local intialization
WiFiManager wm;
// reset settings - wipe stored credentials for testing
// these are stored by the esp library
//wm.resetSettings();
bool res;
res = wm.autoConnect(); // auto generated AP name from chipid
// res = wm.autoConnect("AutoConnectAP"); // anonymous ap
if (!res) {
Serial.println("Failed to connect");
// ESP.restart();
}
else {
//if you get here you have connected to the WiFi
Serial.println("connected...yeey :)");
}
Das Objekt wm der Klasse WiFiManager wird hier erzeugt. Mit dem WiFiManager kann man sich alternativ über einen Access Point mit Blynk verbinden und müsste so nicht seine SSID und Passwort im Code hinterlegen.
Wichtigsten Methoden
Blynk.begin(auth, ssid, pass, "iot.informatik.uni-oldenburg.de", 8080);
Blynk.virtualWrite(V0, mlx.readObjectTempC()); //displays current temperature on V0 (Blynk)
Hier wird eine Verbindung zu Blynk hergestellt. mlx.readObjectTempC() liefert dabei die aktuelle Temperatur des Sensors und gibt den Wert an das Display V0 in Blynk weiter. So hat man die aktuelle Temperatur des Getränks immer im Überblick.
if (mlx.readObjectTempC() < slidervalue) // Notificate if current temperature is below set temperature
{
Blynk.notify("Achtung! Deine Wunschtemperatur wurde jetzt erreicht!");
}
Nachdem in Blynk der Slider (V1) bewegt wird, zeigt das Display V3 den ausgewählten Wert an. Fällt die aktuelle Temperatur des Getränks nun unterhalb die eingestellte Temperatur, so wird die Benachrichtigung “Achtung! Deine Wunschtemperatur wurde jetzt erreicht!” gesendet, auch wenn die App nicht im Vordergrund läuft.