Najciekawszym niewątpliwie elementem zabaw w domową automatykę jest programowanie. Nieważne na jakim poziomie czy języku. Ważne jest to, że praktycznie bezboleśnie i bezkosztowo siedząc w wygodnym fotelu tworzy się wirtualne światy elektronicznej rzeczywistości. Światy w których nie rządzą pieniądze, prawo czy konwenanse ale twoje decyzje czy pragnienia. I co ważniejsze możesz te światy bez żalu i konsekwencji unicestwić by zrobić miejsce dla jeszcze lepszych i ciekawszych pomysłów. Niemalże jak grafiki z AI zdobiące nagłówki tych postów od jakiegoś czasu.
Dziś opis jednej z takich wirtualnych rzeczywistości.
Dochodzenie do obecnego kształtu programu, jakim karmię opisane wcześniej moduły ESP zajęło kawałek czasu. I wciąż trwa. Ale gdy zaczyna się niemal od zera to musi trochę wody upłynąć. W końcu udało się uzyskać pożądany efekt - działający kod złożony z kilkunastu funkcjonalnych klocków LEGO. Czyli coś na kształt sposobu w jaki sposób budowany jest hardware modułu IoT. Tu i tu są do dyspozycji klocki, które można zestawiać dowolnie w miarę konkretnych potrzeb.
Do dzisiaj przetestowane programowe bloki to
- główny z setup () i loop()
- komunikacji RS 433 MHz NO433.h
- komunikacji VIRTUINO WebSocket.h
- komunikacji z Arduino IoT Cloud Cloud.h (obecnie nie używany)
- obsługi czujników temperatury DS18B20 Dallas.h
- zapisu i odczytu danych do pamięci flash w ESP eeprom.h
- obsługi LEDów i przycisków Led.h
- obsługi zdalnego zapisu programu do ESP Ota.h
- konfiguracja zmiennych i deklaracji dla VIRTUINO piny.h
- dwa bloki z kodem obsługi konkretnej funkcji danego modułu program.h i program1.h
- komunikacji WiFi i obsługi serwera czasu NTP wifi_clock.h
Trochę się tego nazbierało ale dzięki zastosowaniu identycznych modułów sprzętowych oprogramowanie kolejnych modułów z określoną funkcją praktycznie ogranicza się do wyboru niezbędnych do działania bloków i napisania nowego kodu obsługi w ramach bloku program.h. Jeżeli złożoność funkcji tego wymaga dzielę jeszcze program obsługi na dwa podbloki.
Jak na razie ten schemat programowania ( tworzenia nowych modułów ) sprawdza się znakomicie. Ilość zgłaszanych przez ARDUINO IDE błędów znakomicie zmalała.
Sporym wyzwaniem dla stworzenia i uruchomienia takiego blokowego szablonu programu było odpowiednie rozmieszczenie bloków i bibliotek by wyeliminować wewnętrze konflikty.
Najbardziej podoba się mi widok bloku głównego xxxx.ino złożonego z około 50 linii i zawierającego jedynie wywołania moich bloków programu w ramach #include, setup() i loop().
#include <Timers.h>
Timers<7> akcja;
#include <EEPROM.h>
#include "wifi_clock.h" // procedury obsługi wifi i clock NTP
#include "ota.h"
#include "websocket.h" // procedury bsługi websocket czyli virtuino
//#include "cloud.h" // connect to Arduino cloud
#include "piny.h" //deklaracje pinów i programów obsługi pinów
#include "led.h" // obsługa ledów
#include "NO433.h" //procedury transmisji 433 MHz
//#include "eeprom.h"
#include "dallas.h" // obsługa DS18b20
#include "program.h" // my program
#include "program2.h" //my program part 2
//=============================================== setup
void setup() {
ledsetup();
if (procesor == D1MINI) Serial.begin(115200);
delay(100);
Serial.println(); Serial.println(F(__FILE__));
akcja.attach(0, 3001, led_app_timer); // miganie led w aplikacji
akcja.attach(2, 2003, led_timer); // miganie led w ESP
// akcja.attach(3, 10000, program_timer); // timer dla programu - czas pompy
akcja.attach(4, 2011, sensorT_timer); //
// akcja.attach(5, 50001, ntp_timer); //
connectToWiFiNetwork();
otasetup();
webSocket.begin();
webSocket.onEvent(webSocketEvent);
// cloudsetup();
ntpsetup(); //setup for NTP clock
no433setup(); //setup 433 MHz
dallasset(); //setup for ds18b20
programsetup(); //setup for my program
}
//===================================================== loop
void loop() {
akcja.process(); // timer
ArduinoOTA.handle();
webSocket.loop();
// cloudloop();
no433akcja(); //433 Mhz
// czy_pompa(); //my program
sw_test(); // sprawdzanie stanu przełącznika
// czy_programowanie() // programownie pilotów
}
Cały kod umieszczony jest GitHubie
Kod jest aktualny na dziś tj. 14 stycznia 2024.
Jutro zapewne już ulegnie jakieś zmianie. Jakiej? A to to wie tylko nasz ulubiony ciąg dalszy
Brak komentarzy:
Prześlij komentarz