mirror of
https://github.com/dustinbrun/MQTT-Weather-display
synced 2025-08-26 04:40:27 +02:00
upload_1
This commit is contained in:
216
Weatherdisplay_Nokia_5110/Weatherdisplay_Nokia_5110.ino
Normal file
216
Weatherdisplay_Nokia_5110/Weatherdisplay_Nokia_5110.ino
Normal file
@@ -0,0 +1,216 @@
|
||||
/*
|
||||
WARNING:
|
||||
If you are not receiving the Json Messages you probably have to increase the
|
||||
MQTT_MAX_PACKET_SIZE in the PubSubClient.h file to at least 1024
|
||||
(Located on Windows at C:\Users\*YOUR_USERNAME*\Documents\Arduino\libraries\pubsubclient-master\src\PubSubClient.h)
|
||||
*/
|
||||
|
||||
#include <SPI.h>
|
||||
#include <ESP8266WiFi.h>
|
||||
#include <Adafruit_PCD8544.h> // https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library
|
||||
#include <Adafruit_GFX.h> // https://github.com/adafruit/Adafruit-GFX-Library
|
||||
#include <PubSubClient.h> // https://github.com/knolleary/pubsubclient
|
||||
#include <OneButton.h> // https://github.com/mathertel/OneButton
|
||||
#include <ArduinoJson.h> // https://github.com/bblanchon/ArduinoJson
|
||||
|
||||
|
||||
const char *ssid = "----WIFI_SSID_HERE----";
|
||||
const char *password = "----WIFI_PASSWORD_HERE----";
|
||||
|
||||
//MQTT Server
|
||||
const char *mqtt_server = "----MQTT_SERVER_IP_HERE----";
|
||||
const char *mqtt_user = "----MQTT_USERNAME_HERE----";
|
||||
const char *mqtt_pass = "----MQTT_PASSWORD_HERE----";
|
||||
|
||||
|
||||
int contrast = 65;
|
||||
|
||||
unsigned long display_light_max = 10000; // Values in ms
|
||||
unsigned long display_2_max = 10000;
|
||||
unsigned long update_time_max = 600000; // 600000 ms = 10 min
|
||||
|
||||
const int buttonpin = D6;
|
||||
const int backlightpin = D4;
|
||||
Adafruit_PCD8544 display = Adafruit_PCD8544(D5, D7, D3, D2, D1);
|
||||
|
||||
String update = "-";
|
||||
String temp_2m = "TT.T";
|
||||
String humidity = "FF.F";
|
||||
String pressure = "DDDD.D";
|
||||
|
||||
String temp_0m = "T0.T";
|
||||
String dewpoint = "tp.t";
|
||||
String luminosity = "HHHHH.H";
|
||||
String wind = "WW.W";
|
||||
String windr = "WRWR";
|
||||
|
||||
bool startup = true;
|
||||
unsigned long update_time = 0;
|
||||
|
||||
bool display_light = false;
|
||||
unsigned long display_light_time = 0;
|
||||
|
||||
bool display_2 = false;
|
||||
unsigned long display_2_time = 0;
|
||||
|
||||
int error = 0;
|
||||
|
||||
WiFiClient espClient;
|
||||
PubSubClient client(espClient);
|
||||
StaticJsonBuffer<1024> jsonBuffer;
|
||||
|
||||
OneButton button = OneButton(
|
||||
buttonpin, // Input pin for the button
|
||||
true, // Button is active LOW
|
||||
true // Enable internal pull-up resistor
|
||||
);
|
||||
|
||||
void setup()
|
||||
{
|
||||
pinMode(backlightpin, OUTPUT);
|
||||
digitalWrite(backlightpin, LOW); //LOW = Light on!
|
||||
|
||||
button.attachClick(button_click);
|
||||
button.attachLongPressStart(button_long);
|
||||
button.attachDoubleClick(button_doubleclick);
|
||||
|
||||
display.begin();
|
||||
display.setContrast(contrast);
|
||||
|
||||
display.setTextSize(2);
|
||||
display.clearDisplay();
|
||||
display.setTextColor(BLACK);
|
||||
display.setCursor(5, 0);
|
||||
display.print("Wetterstation");
|
||||
display.setTextSize(1);
|
||||
display.setCursor(5, 35);
|
||||
display.print("Starting ...");
|
||||
display.display();
|
||||
|
||||
delay(1000);
|
||||
digitalWrite(backlightpin, HIGH);
|
||||
delay(1000);
|
||||
digitalWrite(backlightpin, LOW);
|
||||
delay(1000);
|
||||
digitalWrite(backlightpin, HIGH);
|
||||
delay(1000);
|
||||
digitalWrite(backlightpin, LOW);
|
||||
|
||||
display.clearDisplay();
|
||||
display.setCursor(5, 0);
|
||||
display.print("Wetterstation");
|
||||
display.setCursor(1, 10);
|
||||
display.print("Connecting Wifi");
|
||||
display.setCursor(1, 20);
|
||||
display.display();
|
||||
|
||||
WiFi.mode(WIFI_STA);
|
||||
WiFi.begin(ssid, password);
|
||||
while (WiFi.status() != WL_CONNECTED) {
|
||||
display.print(".");
|
||||
display.display();
|
||||
delay(500);
|
||||
}
|
||||
|
||||
client.setServer(mqtt_server, 1883);
|
||||
client.setCallback(callback);
|
||||
reconnect();
|
||||
|
||||
display.clearDisplay();
|
||||
display.setCursor(5, 0);
|
||||
display.print("Wetterstation");
|
||||
display.setCursor(25, 10);
|
||||
display.print("Wifi");
|
||||
display.setCursor(15, 30);
|
||||
display.print("connected");
|
||||
display.display();
|
||||
delay(1000);
|
||||
|
||||
digitalWrite(backlightpin, HIGH);
|
||||
}
|
||||
|
||||
void button_doubleclick()
|
||||
{
|
||||
display.clearDisplay();
|
||||
display.setTextColor(BLACK);
|
||||
display.setTextSize(1);
|
||||
display.setCursor(5, 25);
|
||||
display.print("Updating ...");
|
||||
display.display();
|
||||
|
||||
delay(100);
|
||||
update_time = millis() + update_time_max + 1;
|
||||
}
|
||||
|
||||
void button_click()
|
||||
{
|
||||
digitalWrite(backlightpin, LOW);
|
||||
display_light_time = millis();
|
||||
display_light = true;
|
||||
}
|
||||
|
||||
void button_long()
|
||||
{
|
||||
digitalWrite(backlightpin, LOW);
|
||||
display_light_time = millis();
|
||||
display_light = true;
|
||||
|
||||
display_page2();
|
||||
display_2_time = millis();
|
||||
display_2 = true;
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
button.tick();
|
||||
|
||||
if (!client.connected())
|
||||
reconnect();
|
||||
|
||||
client.loop();
|
||||
|
||||
if (millis() - update_time > update_time_max || startup)
|
||||
{
|
||||
startup = false;
|
||||
error = 3;
|
||||
|
||||
display.setCursor(0, 10);
|
||||
display.print("U");
|
||||
display.display();
|
||||
delay(300);
|
||||
|
||||
client.publish("wetter_display/get", "1");
|
||||
update_time = millis();
|
||||
}
|
||||
|
||||
if (error == 2)
|
||||
{
|
||||
display_error("Message decoding Error");
|
||||
error = 0;
|
||||
}
|
||||
else if (error == 1)
|
||||
{
|
||||
updatedisplay();
|
||||
error = 0;
|
||||
}
|
||||
else if (error == 3 && millis() - update_time > 5000)
|
||||
{
|
||||
display_error("No Response from MQTT server");
|
||||
error = 0;
|
||||
}
|
||||
|
||||
|
||||
if (display_light && (millis() - display_light_time > display_light_max))
|
||||
{
|
||||
digitalWrite(backlightpin, HIGH);
|
||||
display_light = false;
|
||||
}
|
||||
|
||||
if (display_2 && (millis() - display_2_time > display_2_max))
|
||||
{
|
||||
updatedisplay();
|
||||
display_2 = false;
|
||||
}
|
||||
|
||||
delay(100);
|
||||
}
|
86
Weatherdisplay_Nokia_5110/display.ino
Normal file
86
Weatherdisplay_Nokia_5110/display.ino
Normal file
@@ -0,0 +1,86 @@
|
||||
void updatedisplay()
|
||||
{
|
||||
if (update == "-") update = "--";
|
||||
else if (update == "--") update = "---";
|
||||
else if (update == "---") update = "----";
|
||||
else if (update == "----") update = "-----";
|
||||
else if (update == "-----") update = "-";
|
||||
|
||||
display.clearDisplay();
|
||||
display.setTextColor(BLACK);
|
||||
display.setTextSize(1);
|
||||
display.setCursor(0, 0);
|
||||
display.print("Temp");
|
||||
display.setCursor(28, 0);
|
||||
display.setTextSize(2);
|
||||
display.print(temp_2m); //Temperature
|
||||
|
||||
display.setTextSize(1);
|
||||
display.setCursor(12, 10);
|
||||
display.print("*C");
|
||||
|
||||
display.setCursor(0, 18);
|
||||
display.print("Feu");
|
||||
display.setCursor(28, 18);
|
||||
display.print(humidity); //Humidity
|
||||
display.print(" %");
|
||||
|
||||
display.setCursor(0, 28);
|
||||
display.print("Dr");
|
||||
display.setCursor(28, 28);
|
||||
display.print(pressure); //Pressure
|
||||
display.print("hPa");
|
||||
|
||||
display.setCursor(0, 38);
|
||||
display.print("Wind");
|
||||
display.setCursor(28, 38);
|
||||
display.print(wind); //Windspeed
|
||||
display.print("km/h");
|
||||
|
||||
display.display();
|
||||
}
|
||||
|
||||
void display_page2()
|
||||
{
|
||||
display.clearDisplay();
|
||||
display.setTextColor(BLACK);
|
||||
display.setTextSize(1);
|
||||
display.setCursor(0, 0);
|
||||
display.print("Windr");
|
||||
display.setCursor(32, 0);
|
||||
display.print(windr); //Wind direction
|
||||
|
||||
display.setCursor(0, 10);
|
||||
display.print("TempB");
|
||||
display.setCursor(32, 10);
|
||||
display.print(temp_0m); //Temperature 0m
|
||||
display.print(" *C");
|
||||
|
||||
display.setCursor(0, 20);
|
||||
display.print("Taup");
|
||||
display.setCursor(28, 20);
|
||||
display.print(dewpoint); //Dewpoint
|
||||
|
||||
display.setCursor(0, 30);
|
||||
display.print("Hell");
|
||||
display.setCursor(28, 30);
|
||||
display.print(luminosity); //Luminosity
|
||||
|
||||
display.setCursor(0, 40);
|
||||
display.print(update); //Windrichtung
|
||||
|
||||
display.display();
|
||||
}
|
||||
|
||||
void display_error(String error)
|
||||
{
|
||||
display.clearDisplay();
|
||||
display.setTextSize(2);
|
||||
display.setTextColor(BLACK);
|
||||
display.setCursor(5, 0);
|
||||
display.print("Error");
|
||||
display.setTextSize(1);
|
||||
display.setCursor(0, 20);
|
||||
display.print(error);
|
||||
display.display();
|
||||
}
|
42
Weatherdisplay_Nokia_5110/mqtt_callback.ino
Normal file
42
Weatherdisplay_Nokia_5110/mqtt_callback.ino
Normal file
@@ -0,0 +1,42 @@
|
||||
void callback(String topic, byte* message, unsigned int length)
|
||||
{
|
||||
String messageTemp;
|
||||
for (int i = 0; i < length; i++)
|
||||
messageTemp += (char)message[i];
|
||||
|
||||
if (topic == "wetter_display/set")
|
||||
{
|
||||
JsonObject& json = jsonBuffer.parseObject(messageTemp);
|
||||
if (!json.success()) {
|
||||
error = 2;
|
||||
return;
|
||||
}
|
||||
|
||||
temp_2m = json["Temp_2m"].as<String>();
|
||||
temp_0m = json["Temp_0m"].as<String>();
|
||||
pressure = json["Pressure"].as<String>();
|
||||
humidity = json["Humidity"].as<String>();
|
||||
dewpoint = json["Dewpoint"].as<String>();
|
||||
luminosity = json["Luminosity"].as<String>();
|
||||
wind = json["Wind_kmh"].as<String>();
|
||||
windr = json["Wind_r"].as<String>();
|
||||
error = 1;
|
||||
|
||||
jsonBuffer.clear();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void reconnect()
|
||||
{
|
||||
while (!client.connected())
|
||||
{
|
||||
if (client.connect("WetterDisplay", mqtt_user, mqtt_pass))
|
||||
client.subscribe("wetter_display/set");
|
||||
else
|
||||
{
|
||||
display_error("MQTT Error");
|
||||
delay(5000);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user