#include <WiFi.h>
#include "AsyncTelegram2.h"
#include <Arduino.h>
#include <WiFiClientSecure.h>
WiFiClientSecure client;
AsyncTelegram2 myBot(client);
const int BUTTONS[4] = {22,23,16,17};
const int RELAYS[4] = {33,25,26,27};
const int SENSORS[4] = {21,19,18,15};
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
// Defining the WiFi channel speeds up the connection:
#define WIFI_CHANNEL 6
const char* ssid = "Wokwi-GUEST"; // REPLACE mySSID WITH YOUR WIFI SSID
const char* pass = ""; // REPLACE myPassword YOUR WIFI PASSWORD, IF ANY
const char* token = "";
#define MYTZ "CET-1CEST,M3.5.0,M10.5.0/3"
boolean RELAYS_STATE[4] = {false,false,false,false};
void setup() {
for (int i = 0; i<4; i++){
pinMode(BUTTONS[i], INPUT_PULLUP);
}
for (int i = 0; i<4; i++){
pinMode(RELAYS[i], OUTPUT);
}
Serial.begin(115200);
Serial.println("");
Serial.println("Inputs/outputs inited");
delay(1000);
WiFi.setAutoConnect(true);
WiFi.mode(WIFI_STA);
WiFi.begin("Wokwi-GUEST", "",6);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
Serial.println("Wifi inited");
configTzTime(MYTZ, "time.google.com", "time.windows.com", "pool.ntp.org");
client.setCACert(telegram_cert);
//myBot.setClock("CET-1CEST,M3.5.0,M10.5.0/3");
myBot.setUpdateTime(1000);
myBot.setTelegramToken(token);
// Check if all things are ok
Serial.print("\nTest Telegram connection... ");
myBot.begin() ? Serial.println("OK") : Serial.println("NOK");
delay(1000);
}
void loop() {
for (int i = 0; i<4; i++){
if (digitalRead(BUTTONS[i]) == LOW){
RELAYS_STATE[i] = !RELAYS_STATE[i];
};
};
for (int i = 0; i<4; i++){
if (digitalRead(SENSORS[i]) == HIGH){
RELAYS_STATE[i] = 1;
};
};
for (int i = 0; i<4; i++){
if (RELAYS_STATE[i]){
digitalWrite(RELAYS[i],LOW);
} else {
digitalWrite(RELAYS[i],HIGH);
};
};
delay(500);
TBMessage msg;
if (myBot.getNewMessage(msg)) {
if (msg.text.equalsIgnoreCase("LIGHTS ON")) {
for (int i = 0; i<4; i++){
RELAYS_STATE[i] = true;
digitalWrite(RELAYS[i],LOW);
};
myBot.sendMessage(msg, "Light is now ON");
}
else if (msg.text.equalsIgnoreCase("LIGHTS OFF")) {
for (int i = 0; i<4; i++){
RELAYS_STATE[i] = false;
digitalWrite(RELAYS[i],HIGH);
};
myBot.sendMessage(msg, "Light is now OFF");
}
else if (msg.text.equalsIgnoreCase("LIGHT 1 ON")){
RELAYS_STATE[0] = true;
digitalWrite(RELAYS[0],LOW);
myBot.sendMessage(msg, "Light 1 is now ON");
}
else if (msg.text.equalsIgnoreCase("LIGHT 2 ON")){
RELAYS_STATE[1] = true;
digitalWrite(RELAYS[2],LOW);
myBot.sendMessage(msg, "Light 2 is now ON");
}
else if (msg.text.equalsIgnoreCase("LIGHT 3 ON")){
RELAYS_STATE[2] = true;
digitalWrite(RELAYS[2],LOW);
myBot.sendMessage(msg, "Light 3 is now ON");
}
else if (msg.text.equalsIgnoreCase("LIGHT 4 ON")){
RELAYS_STATE[3] = true;
digitalWrite(RELAYS[3],LOW);
myBot.sendMessage(msg, "Light 4 is now ON");
}
else if (msg.text.equalsIgnoreCase("LIGHT 1 OFF")){
RELAYS_STATE[0] = false;
digitalWrite(RELAYS[0],HIGH);
myBot.sendMessage(msg, "Light 1 is now OFF");
}
else if (msg.text.equalsIgnoreCase("LIGHT 2 OFF")){
RELAYS_STATE[1] = false;
digitalWrite(RELAYS[2],HIGH);
myBot.sendMessage(msg, "Light 2 is now OFF");
}
else if (msg.text.equalsIgnoreCase("LIGHT 3 OFF")){
RELAYS_STATE[2] = false;
digitalWrite(RELAYS[2],HIGH);
myBot.sendMessage(msg, "Light 3 is now ON");
}
else if (msg.text.equalsIgnoreCase("LIGHT 4 OFF")){
RELAYS_STATE[3] = false;
digitalWrite(RELAYS[3],HIGH);
myBot.sendMessage(msg, "Light 4 is now OFF");
}
else if (msg.text.equalsIgnoreCase("Show state")){
String reply;
reply += "Light 1 ";
reply += RELAYS_STATE[0];
reply += "\nLight 2 ";
reply += RELAYS_STATE[1];
reply += "\nLight 3 ";
reply += RELAYS_STATE[2];
reply += "\nLight 4 ";
reply += RELAYS_STATE[3];
myBot.sendMessage(msg, reply);
}
else if (msg.text.equalsIgnoreCase("Away from home")){}
else {
// generate the message for the sender
String reply;
reply = "Welcome " ;
reply += msg.sender.username;
reply += ".\nTry LIGHTS ON or LIGHTS OFF (case insensitive)";
myBot.sendMessage(msg, reply); // and send it
}
}
}