#include <Arduino.h>
#include <Wire.h>
#include <WiFi.h>
#include <PubSubClient.h>
#include <AsyncTCP.h>
#include <ESPAsyncWebServer.h>
#include <AsyncElegantOTA.h>
#include <U8g2lib.h>
#include <WiFiUdp.h>
#include <WiFiMulti_Generic.h>
TaskHandle_t Task1;
TaskHandle_t Task2;
const char* ssid = "WWWWWWWWWW";
const char* password = "AAAAAAAAAAA";
const char* mqttServer = "CCCCCCCCCC";
const int mqttPort = 1883;
const char* mqttUser = "XXXXXXXXXXXXXX";
const char* mqttPassword = "XXXXXXXXXXXXXX";
unsigned long lastRun1 = 0;
unsigned long lastRun2 = 0;
unsigned long lastRun3 = 0;
unsigned long lastRun4 = 0;
int buttonPin1 = 15;
int ledPin1 = 13;
int buttonPin2 = 12;
int ledPin2 = 14;
int counter = 0;
int buttonState1 = 0;
int lastButtonState1 = 0;
int buttonState2 = 0;
int lastButtonState2 = 0;
bool buttonstate1 = true;
bool buttonstate2 = true;
const char* NTPtime = "NTP/time";
String ntptimeo;
AsyncWebServer server(80);
WiFiClient KONYHA; //KONYHA
PubSubClient client(KONYHA);
IPAddress ip(192, 168, 5, 116);
IPAddress gateway(192, 168, 5, 1);
IPAddress subnet(255, 255, 255, 0);
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
void setup() {
pinMode(buttonPin1, INPUT);
pinMode(ledPin1, OUTPUT);
pinMode(buttonPin2, INPUT);
pinMode(ledPin2, OUTPUT);
WiFi.config(ip, gateway, subnet);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
u8g2.begin();
/*
while (WiFi.status() != WL_CONNECTED)
{
delay(200);
if (++counter > 100)
delay(1000);
// ESP.restart();
}
*/
client.setServer(mqttServer, mqttPort);
client.setCallback(callback);
AsyncElegantOTA.begin(&server);
while (!client.connected()) {
if (client.connect("KONYHA", mqttUser, mqttPassword )) {
client.subscribe("lamp/konyhalamp");
client.subscribe("lamp/konyhaled");
client.subscribe("hiba/viz");
client.subscribe("hiba/suto");
client.subscribe("hiba/fozolap");
client.subscribe("NTP/time");
delay(50);
}
}
//create a task that will be executed in the Task1code() function, with priority 1 and executed on core 0
xTaskCreatePinnedToCore(
Task1code, /* Task function. */
"Task1", /* name of task. */
10000, /* Stack size of task */
NULL, /* parameter of the task */
1, /* priority of the task */
&Task1, /* Task handle to keep track of created task */
0); /* pin task to core 0 */
delay(500);
//create a task that will be executed in the Task2code() function, with priority 1 and executed on core 1
xTaskCreatePinnedToCore(
Task2code, /* Task function. */
"Task2", /* name of task. */
10000, /* Stack size of task */
NULL, /* parameter of the task */
1, /* priority of the task */
&Task2, /* Task handle to keep track of created task */
1); /* pin task to core 1 */
delay(500);
// server.begin();
// WiFi.setAutoReconnect(true);
// WiFi.persistent(true);
/* // Send web page to client
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
request->send_P(200, "text/html", index_html);
});
// Receive an HTTP GET request
server.on("/on", HTTP_GET, [] (AsyncWebServerRequest *request) {
ESP.restart();
request->send(200, "text/plain", "ok");
});
*/
server.begin();
delay(20000);
}
void Task2code( void * pvParameters ){
for(;;){
if (millis() - lastRun1 > 400)
{
buttonState1 = digitalRead(buttonPin1);
buttonState2 = digitalRead(buttonPin2);
////////////////////////////////////////////////////////////////////// 1
if (buttonState1 != lastButtonState1) {
if (buttonState1 == HIGH) {
digitalWrite(ledPin1, LOW);
// client.publish("lamp/konyhalamp1", "off");
} else {
digitalWrite(ledPin1, HIGH);
// client.publish("lamp/konyhalamp1", "on");
}
lastButtonState1 = buttonState1;
}
//delay(50);
//////////////////////////////////////////////////////////////////////
if (buttonState2 != lastButtonState2) {
if (buttonState2 == HIGH) {
digitalWrite(ledPin2, LOW);
// client.publish("lamp/konyhaled1", "off");
} else {
digitalWrite(ledPin2, HIGH);
// client.publish("lamp/konyhaled1", "on");
}
lastButtonState2 = buttonState2;
}
lastRun1 = millis();
}
}
}
void Task1code( void * pvParameters ){
for(;;){
//////////////////////////////////////////////////////////////////////
if (millis() - lastRun2 > 1000)
{
if ((digitalRead (13)) == LOW) { client.publish("test/konyhalamp", "on"); }
if ((digitalRead (13)) == HIGH) { client.publish("test/konyhalamp", "off"); }
// if ((digitalRead (14)) == LOW) { client.publish("test/konyhaled1", "off"); }
// if ((digitalRead (14)) == HIGH) { client.publish("test/konyhaled1", "on"); }
lastRun2 = millis();
}
//////////////////////////////////////////////////////////////////////
if (millis() - lastRun4 > 1000)
{
printLocalTime();
lastRun4 = millis();
}
//////////////////////////////////////////////////////////////////////
if (millis() - lastRun3 > 1000)
{
if(!client.connected())reconnect();
while (WiFi.status() != WL_CONNECTED)
{
WiFi.config(ip, gateway, subnet);
delay(50);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
}
lastRun3 = millis();
}
//////////////////////////////////////////////////////////////////////
}
}
void hivogat() {
while (WiFi.status() != WL_CONNECTED)
{
WiFi.config(ip, gateway, subnet);
delay(50);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
}
}
void reconnect() {
client.setServer(mqttServer, mqttPort);
client.connect("KONYHA", mqttUser, mqttPassword );
client.subscribe("lamp/konyhalamp");
client.subscribe("lamp/konyhaled");
client.subscribe("hiba/viz");
client.subscribe("hiba/suto");
client.subscribe("hiba/fozolap");
client.subscribe("NTP/time");
}
void callback(char *topic, byte *payload, unsigned int length) {
payload[length] = '\0';
if(strcmp(topic,"lamp/konyhalamp")==0)
{
if(strcmp((char*)payload,"on")==0)
{
digitalWrite(ledPin1,HIGH);
}
else if(strcmp((char*)payload,"off")==0)
{
digitalWrite(ledPin1,LOW);
}
lastButtonState1 = buttonState1;
}
////////////////////////////////////////////////////////////
if(strcmp(topic,"lamp/konyhaled")==0)
{
if(strcmp((char*)payload,"on")==0)
{
digitalWrite(ledPin2,HIGH);
}
else if(strcmp((char*)payload,"off")==0)
{
digitalWrite(ledPin2,LOW);
}
lastButtonState2 = buttonState2;
}
////////////////////////////////////////////////////////////
if (strcmp(topic,NTPtime)==0){
payload[length] = '\0';
ntptimeo = ((char *)payload);
}
}
void printLocalTime()
{
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_inb24_mr); // u8x8.setFont(u8x8_font_courB18_2x3_f);
u8g2.setCursor(12, 40); //szélesség/magasság
u8g2.print(ntptimeo);
u8g2.sendBuffer();
}
void loop() {
// client.loop();
}
Is it better that way?
E.g. if I tinker with my mikrotik router (e.g. netinstall) and there is no wifi, the switch does not work. The above code is a proximity switch with an oled display and turns on a light. If there is no wifi, the switch does not work either. How could this be eliminated?