LinkedIn YouTube Facebook
Szukaj

Wstecz
IoT

Platforma Adafruit IO – moduł NodeMCU z układem ESP8266 i analogowy termometr LM35DZ

W artykule została zaprezentowana platforma Adafruit IO, która pozwala w wygodny sposób przedstawiać dane pobrane z modułu z mikrokontrolerem (np. z podłączonych czujników) w wygodny sposób – m.in. w postaci wykresów. Program współpracuje z urządzeniami ESP8266, Huzzah, Arduino, a także Raspberry Pi. Opisano proces konfiguracji płytki z NodeMCU z układem ESP8266 oraz wyświetlanie danych z analogowego czujnika temperatury.

Aby zrealizować czynności pokazane w artykule będą potrzebne następujące elementy:

Narzędzie Adafruit IO pozwala w szybki i łatwy sposób rejestrować dane i przedstawiać je w przystępnej formie (wykresy, wskaźniki itp). Możliwe jest również sterowanie wyjściami urządzeń podpiętych do modułu np. z ESP8266. Istnieje również opcja dzielenia się danymi wynikowymi z innymi użytkownikami internetu.

Strona Adafruit IO posiada dwa warianty: IO Free (bezpłatny) oraz IO+ (płatny)

W darmowym wariancie IO Free możliwe jest logowanie danych do 30 pomiarów na minutę,  zapisywanie pomiarów na okres 30 dni, tworzenie do 10 feedów (źródeł pomiarów np. z czujników temperatury) oraz tworzenie do 5 dashboardów (plansz ze wskaźnikami, wykresami, przyciskami itd).

Wariant IO+ jest płatny – 10 dolarów miesięcznie, ale w tym wariancie możliwe jest logowanie danych z częstotliwością do 60 pomiarów na minutę, zapisywanie danych na okres 60 dni, tworzenie nieograniczonej ilości feedów oraz nieograniczonej ilości dashboardów.

Do przestawionego projektu spokojnie wystarczy darmowy wariant czyli IO Free.

Pierwszą czynnością jest założenie konta na stronie projektu Adafruit IO. Po zalogowaniu się i przejściu na stronę io.adafruit.com zobaczymy następujący widok:

Rysunek 1. Panel użytkownika na stronie io.adafruit.com

Będąc na tej stronie należy sprawdzić jaki numer identyfikacyjny został nam przydzielony. Aby go sprawdzić, należy kliknąć na View AIO KEY (czerwona ramka, rysunek 1). Pojawi się okno, gdzie będzie znajdował się indywidualny kod (na rysunku 2 zasłonięty zielonym prostokątem).

Rysunek 2. Okno z AIO KEY

Należy go skopiować do schowka, gdyż będzie on potrzebny podczas pisania programu. Gdy mamy już zapisany AIO KEY, otwieramy program Arduino IDE. Jeżeli wcześniej nie była programowania żadna płytka z modułem ESP8266, należy dodać ich obsługę do programu. W tym celu przechodzimy do zakładki Plik >> Preferencje. Pojawi się okno z ustawieniami programu Arduino IDE (rysunek 3):

Rysunek 3. Zakładka Plik >> Preferencje w programie Arduino IDE

W polu Dodatkowe URL dla menadżera płytek: (czerwona ramka – rysunek 3) należy wpisać następujący adres:

http://arduino.esp8266.com/stable/package_esp8266com_index.json

Teraz należy przejść do zakładki Narzędzia >> Płytka >> Menedżer płytek… i tam w wyszukiwarkę wpisać „ESP8266″, wybrać odpowiednią pozycję i nacisnąć przycisk instaluj. Od teraz w zakładce Narzędzia >> Płytka będzie można wybrać płytki z modułem ESP8266.

Kolejnym krokiem jest instalacja biblioteki Adafruit MQTT library – można ją pobrać ze strony github i zainstalować ręcznie lub wyszukać w menadżerze bibliotek (Szkic >> Dodaj Bibliotekę >> Zarządzaj bibliotekami) w wyszukiwarce wpisując nazwę biblioteki.

Rysunek 4. Okno menedżera bibliotek

Gdy wszystkie niezbędne elementy potrzebne do programowania są już zainstalowane, możemy stworzyć układ pomiaru temperatury. Użyty w projekcie moduł z termometrem analogowym LM35DZ pozwala na pomiar temperatury w zakresie  od 0°C do +100°C z rozdzielczością 0,5°C. Wyjściem czujnika jest sygnał analogowy, który zmienia się liniowo o 10 mV/°C.

Termometr LM35DZ będzie podłączony do płytki NodeMCU zgodnie z opisem umieszczonym w tabeli poniżej:

Pin NodeMCU Pin czujnika temperatury
+3,3V +
GND
A0 SIG

Zmontowany układ wykorzystany w projekcie prezentuje się następująco:

Rysunek 5. Zmontowany układ użyty w projekcie

Teraz można przystąpić do projektowania programu na platformę Arduino (pełen kod programu znajduje się w sekcji Do pobrania). Powstał on w oparciu o przykład MQTT_ESP8266 dostępny w bibliotece Adafruit MQTT library.

Na początku programu deklarowane są dwie zmienne: PIN_A0 (będzie zawierała wartość pomiaru z portu analogowego A0) oraz zmienna temp, w której będzie przechowywana obliczona wartość temperatury.

 /**************************************************** 
 Adafruit invests time and resources providing this open source code,
  please support Adafruit and open-source hardware by purchasing
  products from Adafruit!

  Written by Tony DiCola for Adafruit Industries.
  MIT license, all text above must be included in any redistribution
 ****************************************************/
#include <ESP8266WiFi.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"


int Pin_A0 = 0;
float temp = 0;

Następnie w sekcji Wifi Access Point zdefiniowane są nazwa sieci, do której podłączony jest moduł ESP8266, a także hasło.

/************************* WiFi Access Point *********************************/

#define WLAN_SSID       "<Nazwa sieci WiFi>"
#define WLAN_PASS       "<Hasło do sieci WiFi"

W następnej sekcji Adafruit.io Setup zawarto informacje o serwerze, porcie, nazwie użytkownika na portalu Adafruit IO oraz o indywidualnym kodzie, który zapisaliśmy wcześniej (rysunek 2).

/************************* Adafruit.io Setup *********************************/

#define AIO_SERVER      "io.adafruit.com"
#define AIO_SERVERPORT  1883                   // use 8883 for SSL
#define AIO_USERNAME    "<nazwa użytkownika>"
#define AIO_KEY         "<indywidualny kod AIO KEY>"

Następnie w sekcji Feeds należy nadać nazwę naszemu feedowi. Mój nazywa się „temperatura”, ponieważ będzie zawierał wartości temperatury zmierzonej przez czujnik analogowy.

/****************************** Feeds ***************************************/

Adafruit_MQTT_Publish temperatura = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/temperatura");

W funkcji setup() można zmienić szybkość portu szeregowego, ponadto znajduje się tam kod wyświetlający podstawowe informacje o module i połączeniu.

W pętli głównej programu, dokonywany jest pomiar wartości na wejściu analogowym A0, następnie obliczana jest wartość temperatury na podstawie pomiaru, a wynik tych obliczeń jest zapisywany do zmiennej temp.

Obliczona wartość temperatury wypisywana jest na port szeregowy, a następnie wysyłana naszego do feeda. Na końcu zostało dodane opóźnienie, które sprawia że nie jest przekraczana maksymalna ilość pomiarów na minutę.

void loop() {
  // Ensure the connection to the MQTT server is alive (this will make the first
  // connection and automatically reconnect when disconnected).  See the MQTT_connect
  // function definition further below.
  MQTT_connect();

  // this is our 'wait for incoming subscription packets' busy subloop
  // try to spend your time here

  Pin_A0 = analogRead(A0);
  temp = ((Pin_A0 * 3.3)/1024.00)*100;
  

  // Wysyłanie temperatury 
  Serial.print(F("\nWyslano temperature: "));
  Serial.print(temp);
  Serial.print("...");
  if (! temperatura.publish(temp)) {
    Serial.println(F("Failed"));
  } else {
    Serial.println(F("OK!"));
  }

delay(5000);
Autor: Patryk Mądry