niedziela, 4 października 2020

Czujnik Temperatury MQTT na ESP8266


Jednym z popularniejszych urządzeń jakie będziemy podłączać do sieci z cyklu IoT będą urządzenia 
oparte o ESP8266 czy też ESP32. Niema co ukrywać ten Chiński moduł WIFI jest tani jak barszcz 
a ma możliwości tak potężne, ze na chwilę obecną nie ma dla niego żadnej godnej konkurencji w zakresie tanich i uniwersalnych urządzeń IoT.  

W poprzednim wpisie postawiliśmy server/broker MQTT w oparciu o projekt Mosquitto. Teraz wypadało by coś do niego podłączyć by to jakiś miało sens.  Najprościej będzie w oparciu o ESP8266 i DS18b20 postawić zdalny czujnik temperatury ....



Ja użyję tu sobie dla łatwizny płytki mojej konstrukcji o wszystko mówiącej nazwie SUN-001C Circle Board , które wyposażyłem w 2 przekaźniki zestaw wyjść GPIO  zarządzanych przez moduł ESP-03


a całościowo prezentują się następująco:



Oprogramowanie napiszemy najszybciej w arduino. Dlatego ze jest to wygodne zwłaszcza jak się używa pod Visual Studio gdzie można pisać komfortowo i wygodnie w cywilizowany sposób.



No ale dobrze ... 

Nasze urządzenie będzie dokonywać pomiaru temperatury i wynik pomiaru publikować na naszym serwerku MQTT w temacie Sensor/T   tak dla porządku dzięki czemu  łatwo ogarniemy jakie informacje latają nam po MQTT :)

Ja sobie nazwałem tematy porządkowo :

Sensor/T  - czujnik temperatury
Sensor/H - czujnik wilgotności
Sensor/C - czujnik CO2 
Switch/L - włącznik świateł 
Status/L  - status włącznika dla HMI 

itd ...

Pozwala to na szybkie podbieranie wiadomości w różnych punktach kontrolnych do różnych celów np:
od wyświetlania info o włączonym oświetleniu po statystyki i wykresy. Ale wróćmy do sedna sprawy.
Jak wspomniałem pomiar będziemy publikować w temacie Sensor/T  (jak mamy więcej czujników można je numerować  np Sensor/T1 ... /T23 ....) 

Zatem zaczynamy : 

Do całości szczęścia potrzebujemy więc tylko bibliotek dla ESP8266/ESP32

https://github.com/PaulStoffregen/OneWire    - do obsługi 1Wire w ESP

i najważniejszej czyli klienta subskrypcji i publikacji mqtt 


Biblioteka ta wiele nam ułatwi dzięki czemu szybciej włączymy nasze urządzenie do sieci 
i podłączymy do serwera MQTT

Na początku kodu definiujemy sobie zmienne w których ustawiamy hasła , nazwe sieci i takie tam:

// USTAWIENIA HASEŁ ITD ... 

const char* ssid = "Sun_IOT";                           // Nazwa sieci 
const char* password = "hasło_WIFI";              // hasło WIFI
const char* mqtt_server = "192.168.0.178";      // MQTT Broker IP lub adres chmury ...
const char* mqtt_user = "SunMQTT";              // Nazwa użytkownika MQTT
const char* mqtt_pass = "hasło_mqtt";              // hasło MQTT
int mqtt_port = 1883;                                          // port MQTT  



reszta kodu jest banalna jak to w arduino ...  Łączy nas funkcja :


void reconnect() {
    // pętla łącząca z serwerem MQTT
    while (!client.connected()) {
        Serial.print("Próba połączenia z serwerem MQTT ");
        
        if (client.connect("SUN-001CClient", mqtt_user, mqtt_pass)) {

            Serial.println("połaczono..");
            
        }
        else {
            Serial.print("BŁĄD, rc=");
            Serial.print(client.state());
            Serial.println(" za 5 sekund ponowna próba łączenia";
            delay(5000);
        }
    }
}


jak wiec widać nic wielkiego, a sama publikacja pomiaru to również nic specjalnie skomplikowanego 


void loop() {

    sensors.requestTemperatures();
    float celsius = temperaturenow;       // sensors.getTempCByIndex(0);
    Serial.println(sensors.getTempCByIndex(0));

    char temperaturenow[15];
    dtostrf(celsius, 7, 3, temperaturenow);    // konwersja float do char
    client.publish("Sensor/T", temperaturenow);  // wysyłanie char

    if (!client.connected()) {
        reconnect();

    }
    client.loop();

    delay(10000);

}


i tak wkoło ....   W terminalu naszego urządzenia WIFI zobaczymy dane diagnostyczne dotyczące połączenia z WIFI i Serwerem MQTT  ,  zaś w naszym temacie Sensor/T pojawią się dane dotyczące odczytanej temperatury z czujnika :




Teraz pozostaje tylko wstawić te dane publikowane przez czujnik do wykresu i jakiejś ładnej apki na komputer , moduł HMI  czy smartfona ... ale tym zajmiemy się innym razem.





Brak komentarzy:

Publikowanie komentarza