Last active
October 3, 2020 21:46
-
-
Save BrianInGermany/dee1cd1edb9f125282656a4abf22f2ce to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const char* ssid = "SSID NAME"; | |
const char* password = "WIFI PASSWORD"; | |
const char* mqtt_server = "MQTT SERVER"; | |
#include <ESP8266WiFi.h> | |
#include <PubSubClient.h> | |
#include <stdio.h> | |
#include <string> | |
#include <LiquidCrystal_I2C.h> | |
LiquidCrystal_I2C lcd(0x27, 16, 2); // set the LCD address to 0x27 for a 16 chars and 2 line display | |
WiFiClient espClient; | |
PubSubClient client(espClient); | |
unsigned long lastMsg = 0; | |
#define MSG_BUFFER_SIZE (50) | |
char msg[MSG_BUFFER_SIZE]; | |
int value = 0; | |
String living_room_humidity = "None"; | |
String outside_temperature = "None"; | |
String living_room_temperature = "None"; | |
String greeting1 = "Line 1"; | |
String greeting2 = "Line 2"; | |
String balcony_temp = "None"; | |
String pressure = "None"; | |
unsigned long last_cycle; | |
unsigned long this_cycle; | |
bool first_loop = true; | |
bool first_livingTemp = true; | |
bool first_greeting = true; | |
bool first_livingHum = true; | |
bool first_balconyTemp = true; | |
bool first_pressure = true; | |
bool first_outsideTemp = true; | |
void setup_wifi() { | |
delay(10); | |
// We start by connecting to a WiFi network | |
Serial.println(); | |
Serial.print("Connecting to "); | |
Serial.println(ssid); | |
WiFi.mode(WIFI_STA); | |
WiFi.begin(ssid, password); | |
while (WiFi.status() != WL_CONNECTED) { | |
delay(500); | |
Serial.print("."); | |
} | |
randomSeed(micros()); | |
Serial.println(""); | |
Serial.println("WiFi connected"); | |
Serial.println("IP address: "); | |
Serial.println(WiFi.localIP()); | |
} | |
void callback(char* topic, byte* payload, unsigned int length) { | |
Serial.print("Message arrived ["); | |
Serial.print(topic); | |
Serial.print("] "); | |
for (int i = 0; i < length; i++) { | |
Serial.print((char)payload[i]); | |
} | |
String topic_str = String(topic); | |
String delimiter = ";"; | |
String delimiter2 = "#"; | |
String payload_str = String((char*)payload); | |
Serial.print(payload_str); | |
if (topic_str == "living_room_dht") { | |
String temp = payload_str.substring(0, payload_str.indexOf(delimiter)); | |
String hum = payload_str.substring(payload_str.indexOf(delimiter) + 1, payload_str.indexOf(delimiter) + 6); | |
living_room_temperature = temp; | |
living_room_humidity = hum; | |
Serial.println(living_room_temperature); | |
Serial.println(living_room_temperature); | |
} | |
else if (topic_str == "dallasOutdoor") { | |
outside_temperature = payload_str.substring(0, 5); | |
Serial.println(outside_temperature); | |
} | |
else if (topic_str == "greeting") { | |
greeting1 = ""; | |
greeting2 = ""; | |
greeting1 = payload_str.substring(0, payload_str.indexOf(delimiter)); | |
greeting2 = payload_str.substring(payload_str.indexOf(delimiter)+1, payload_str.indexOf(delimiter2)); | |
Serial.println(greeting1); | |
Serial.println(greeting2); | |
} | |
else if (topic_str == "BM280-pressure") { | |
pressure = payload_str.substring(0, payload_str.indexOf(".")+3); | |
pressure = pressure.toFloat() * 0.01; | |
Serial.println(pressure); | |
} | |
else if (topic_str == "BM280-temperature") { | |
balcony_temp = payload_str.substring(0, payload_str.indexOf(".")+3); | |
Serial.println(balcony_temp); | |
} | |
Serial.println(); | |
} | |
void reconnect() { | |
// Loop until we're reconnected | |
while (!client.connected()) { | |
Serial.print("Attempting MQTT connection..."); | |
// Create a random client ID | |
String clientId = "ESP8266Client-"; | |
clientId += String(random(0xffff), HEX); | |
// Attempt to connect | |
if (client.connect(clientId.c_str())) { | |
Serial.println("connected"); | |
// Once connected, publish an announcement... | |
// client.publish("outTopic", "hello world"); | |
// ... and resubscribe | |
client.subscribe("living_room_dht"); | |
client.subscribe("dallasOutdoor"); | |
client.subscribe("BM280-pressure"); | |
client.subscribe("BM280-temperature"); | |
client.subscribe("greeting"); | |
} else { | |
Serial.print("failed, rc="); | |
Serial.print(client.state()); | |
Serial.println(" try again in 5 seconds"); | |
// Wait 5 seconds before retrying | |
delay(5000); | |
} | |
} | |
} | |
void setup() | |
{ | |
// last_cycle = millis(); | |
lcd.init(); // initialize the lcd | |
// Print a message to the LCD. | |
lcd.backlight(); | |
lcd.setCursor(0, 0); | |
lcd.print("Smart Home"); | |
lcd.setCursor(0, 1); | |
lcd.print("Center"); | |
delay(2000); | |
lcd.clear(); | |
//pinMode(BUILTIN_LED, OUTPUT); // Initialize the BUILTIN_LED pin as an output | |
Serial.begin(115200); | |
setup_wifi(); | |
client.setServer(mqtt_server, 1883);//add user and password as parameters here if necessary | |
client.setCallback(callback); | |
} | |
void loop() { | |
if (!client.connected()) { | |
reconnect(); | |
} | |
client.loop(); | |
if (first_loop == true){ | |
last_cycle = millis(); | |
//this_cycle = millis(); | |
first_loop = false; | |
} | |
if ((millis() - last_cycle) > 18000){ | |
first_livingTemp = true; | |
first_greeting = true; | |
first_livingHum = true; | |
first_balconyTemp = true; | |
first_pressure = true; | |
first_outsideTemp = true; | |
last_cycle = millis();} | |
else if ((millis() - last_cycle) > 15000){ | |
if (first_livingTemp == true){ | |
lcd.clear(); | |
//this_cycle = millis(); | |
lcd.setCursor(0, 0); | |
lcd.print("Living Room Temp."); | |
lcd.setCursor(0, 1); | |
lcd.print(living_room_temperature + "C"); | |
Serial.println("livin room temp"); | |
first_livingTemp = false; | |
} | |
} | |
else if ((millis() - last_cycle) > 12000){ | |
if (first_outsideTemp == true){ | |
lcd.clear(); | |
lcd.setCursor(0, 0); | |
lcd.print("Outside Temp."); | |
lcd.setCursor(0, 1); | |
lcd.print(outside_temperature + "C"); | |
Serial.println("outside temp"); | |
} | |
first_outsideTemp = false;} | |
else if ((millis() - last_cycle) > 9000){ | |
if (first_balconyTemp == true){ | |
lcd.clear(); | |
lcd.setCursor(0, 0); | |
lcd.print("Balcony Temp."); | |
lcd.setCursor(0, 1); | |
lcd.print(balcony_temp + "C"); | |
Serial.println("balc temp"); | |
} | |
first_balconyTemp = false; | |
} | |
else if ((millis() - last_cycle) > 6000){ | |
if (first_pressure == true){ | |
lcd.clear(); | |
lcd.setCursor(0, 0); | |
lcd.print("Balcony Pressure"); | |
lcd.setCursor(0, 1); | |
lcd.print(pressure + "hPa"); | |
Serial.println("pressure"); | |
} | |
first_pressure = false; | |
} | |
else if ((millis() - last_cycle) > 3000){ | |
if (first_livingHum == true){ | |
lcd.clear(); | |
lcd.setCursor(0, 0); | |
lcd.print("Living Room Hum."); | |
lcd.setCursor(0, 1); | |
lcd.print(living_room_humidity + "%"); | |
Serial.println("livin room hum"); | |
} | |
first_livingHum = false; | |
} | |
else { | |
if (first_greeting == true){ | |
lcd.clear(); | |
lcd.setCursor(0, 0); | |
lcd.print(greeting1); | |
lcd.setCursor(0, 1); | |
lcd.print(greeting2); | |
Serial.println("greeting"); | |
} | |
first_greeting = false; | |
} | |
Serial.println(last_cycle); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment