X

Kurs ESP - Przesyłanie danych do chmury

ThingSpeak jest to platforma IoT typu open source do zbierania i pobierania danych z obiektów. Wykorzystuje ona protokołu HTTP oraz MQTT. Platforma umożliwia gromadzenie danych oraz późniejszą ich wizualizację. 

Do korzystania z rozwiązania konieczne jest konto na platformie MathWorks.

Tworzenie kanału

Należy zalogować się do platformy "https://thingspeak.com/" za pomocą konta MathWorks.

Następnie należy przejść do zakładki "Chanels" => "My Channels" po czym wygrać opcję "New Channel". 

Kanał musi zawierać nazwę, oraz odpowiednią ilość pól na dane.

TS1

Utworzony kanał widoczny jest w zakładce "My Channels"

TS2

W utworzonym kanale wizualizowane są zebrane dane.

7

 

Użytkownik może dostosować wykres do swoich potrzeb. Na podstawie danych można utworzyć widgety. 

TS15

Przykład widgetu na podstawie aktualnej temperatury/

16

 

W celu wysłania danych poprzez kontroler ESP należy w kodzie programu podać:

  • Chanel ID 
  • Write API Key

X10

 

ThingSpeak jest występuje zarówno w wersji darmowej jak i jako płatna subskrypcja.

Ograniczenia wersji darmowej dotyczą:

  • ograniczenia liczby wiadomości 3 miliony/rok oraz 8200/dzień,
  • maksymalnej częstotliwości aktualizacji max co 15 sekund,
  • ilość kanałów ograniczona do max 4,
  • udostępnienie kanału prywatnego max 3. 

 

Program

Dane wysyłane są na platformę ThingSpeak co 20 sekund.  Przesyłane są dwa pola Odczyt temperatury z sensora oraz zmienna losowa.

Kod pobranie adresu czujnika

#include <OneWire.h>
#define ONE_WIRE_BUS D2
OneWire pin(ONE_WIRE_BUS); 
void setup(void) {
  Serial.begin(9600);
}
void loop(void) {
  byte i;
  byte addr[8];
  
  if (!pin.search(addr)) {
    Serial.println();
    pin.reset_search();
    delay(250);
    return;
  }
  Serial.print(" ROM =");
  for (i = 0; i < 8; i++) {
    Serial.write(' ');
    Serial.print(addr[i], HEX);
  }
  delay(5000);
}

Schemat

Wymagany rezystor 4,7kΩ

DSTS

Kod Programu

#include "ThingSpeak.h"
#include "secrets.h"
#include <ESP8266WiFi.h>

#include <OneWire.h>
#include <DallasTemperature.h>
//obsługa Czujnika
#define ONE_WIRE_BUS D2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress sensor = { 0x28, 0xFF, 0x19, 0x4D, 0xB3, 0x17, 0x1, 0x3E };

//Dane logowania WiFi
char ssid[] = "ArduinoTestWiFi";  
char pass[] = "12345678"; 
int keyIndex = 0;           
WiFiClient  client;

unsigned long myChannelNumber = 1120166;
const char * myWriteAPIKey = "V3J71LR4LN1TPZRZ";

// Inicjalizacja wartości
float number1 = 0;
int number2 = random(0,100);

String myStatus = "";

void setup() {
  // Inicjowanie Serial Portu
  Serial.begin(9600);  
  sensors.begin();
  WiFi.mode(WIFI_STA); 
  // Inicjalizacja ThingSpeak
  ThingSpeak.begin(client);  
}

void loop() {

  // Połączenie WiFi
  if(WiFi.status() != WL_CONNECTED){
    Serial.print("Łączenie z siecią: ");
    Serial.println(SECRET_SSID);
    while(WiFi.status() != WL_CONNECTED){
      WiFi.begin(ssid, pass); 
      Serial.print(".");
      delay(5000);     
    } 
    Serial.println("\nPołączono.");
  }
  //pobranie informacji z sensora
  sensors.requestTemperatures(); 
  
  number1 = sensors.getTempC(sensor);
  number2 = random(0,100);

  // Nadanie wartości polom do wysłania
  ThingSpeak.setField(1, number1);
  ThingSpeak.setField(2, number2);

  // Wysłanie do kanału ThingSpeak
  int x = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
  if(x == 200){
    Serial.println("Aktualizacja kanału powiodła się.");
  }
  else{
    Serial.println("Błąd - " + String(x));
  }
 
  // Ustawienie statusu
  ThingSpeak.setStatus(myStatus);
   
  delay(20000); // Wysłanie danych co 20 sekund (minimum 15s)
}

Wizualizacja

Wizualizacja danych gromadzonych przez 5 godzin.

ts22