niedziela, 14 stycznia 2024

Moduły w domowej sieci IoT - program


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