Spisu treści:

Pomiar zawartości wilgoci w glebie za pomocą platformy Esp32 i Thingsio.ai: 6 kroków
Pomiar zawartości wilgoci w glebie za pomocą platformy Esp32 i Thingsio.ai: 6 kroków

Wideo: Pomiar zawartości wilgoci w glebie za pomocą platformy Esp32 i Thingsio.ai: 6 kroków

Wideo: Pomiar zawartości wilgoci w glebie za pomocą platformy Esp32 i Thingsio.ai: 6 kroków
Wideo: PRECYZYJNY POMIAR WILGOTNOŚCI GLEBY ARDUINO 2024, Czerwiec
Anonim
Pomiar zawartości wilgoci w glebie za pomocą platformy Esp32 i Thingsio.ai
Pomiar zawartości wilgoci w glebie za pomocą platformy Esp32 i Thingsio.ai

W tym samouczku wyjaśnię, jak odczytywać zawartość wilgoci w glebie za pomocą esp32, a następnie przesyłać wartości do platformy internetowej thingsio.ai IoT.

Krok 1: KOMPONENTY

SKŁADNIKI
SKŁADNIKI
SKŁADNIKI
SKŁADNIKI

Komponenty sprzętowe:

1. Płytka rozwojowa esp32

2. Czujnik gleby

3. Przewody połączeniowe

Oprogramowanie:

1. Środowisko Arduino

2. Rzeczy.ai

Krok 2: POŁĄCZENIA

ZNAJOMOŚCI
ZNAJOMOŚCI

Czujnik wilgotności gleby ----------------------- płyta esp32

VCC-------------------------------------------3V3

GND-------------------------------------- GND

A0----------------------------------------- VP

Krok 3: KODOWANIE:

#włączać

#włączać

#włączać

liczba int=0, i, m, j, k;

int t;

wewn. pin_czujnika = A0;

int wartość;

/////////////////////////////////////// WSZYSTKIE OŚWIADCZENIA

dla CHMURY /////////////////////////////

const char* host = "api.thingsai.io"; // LUB host =

devapi2.thethingscloud.com

const char* post_url = "/devices/deviceData"; // LUB

/api/v2/thingscloud2/_table/data_ac

const char* serwer_czasu =

"baas.thethingscloud.com"; //to jest konwersja znacznika czasu

const int httpPort = 80;

const int httpsPort = 443;

const char* serwer =

"api.thingsai.io"; // Serwer URL

znacznik czasu znaków[10];

Wi-FiWiele Wi-FiWiele;

// Użyj klasy WiFiClient do tworzenia połączeń TCP

Klient WiFiClient;

/////////////////////////////////////// ZNAK CZASU

funkcja OBLICZENIA//////////////////////////////////////

int PodajMeTimestamp()

{

długi bez znaku

limit czasu = mili();

// Klient WiFiClient;

podczas

(klient.dostępny() == 0)

{

jeśli (millis() -

limit czasu > 50000)

{

klient.stop();

zwróć 0;

}

}

while (klient.dostępny())

{

Linia ciągu =

klient.odczytajStringUntil('\r'); //indexOf() to funkcja do wyszukiwania smthng, zwraca -1 jeśli nie znaleziono

wew poz =

line.indexOf("\"znacznik czasu\""); //wyszukaj "\"timestamp\"" od początku otrzymanej odpowiedzi i skopiuj wszystkie dane po tym, będzie to Twoja sygnatura czasowa

jeśli (poz >=

0)

{

intj = 0;dla(j=0;j<10;j++)

{znacznik czasu[j] = linia[poz + 12 + j];

}

}

}

}

////////////////////////////////////////////////////////////////////////////////////////////////////////

pusta konfiguracja()

{Serial.początek(115200);Serial.println("Odczyt z czujnika…");

opóźnienie (2000);

// Zaczynamy od

łączenie z siecią Wi-Fi

WiFiMulti.addAP("Nazwa_Wi-Fi", "Hasło do wifi");

Serial.println();

Serial.println();Serial.print("Czekaj na Wi-Fi… ");while(WiFiMulti.run() != WL_CONNECTED) {Serial.print(".");

opóźnienie (500);

}Serial.println("");Serial.println("Połączenie WiFi");

Serial.println( IP

adres: );Serial.println(WiFi.localIP());

opóźnienie (500);

}

pusta pętla()

{

{

////////////////////////////////////// WYŚLIJ ZAPYTANIE I

ODBIERZ ODPOWIEDŹ///////////////////////

wartość=

analogRead (pin_czujnika);

// wartość =

mapa(wartość, 550, 0, 0, 100);Serial.print("Mosture: ");Serial.print(wartość);Serial.println("%");opóźnienie (1000);Serial.print("łączenie z");Serial.println(host); //zdefiniowany plus:- host = devapi2.thethingscloud.com lub 139.59.26.117

//////////////////////////////////// ZNACZNIK KODU

/////////////////////////

Serial.println("wewnątrz pobierz znacznik czasu\n");

Jeśli

(!client.connect(serwer_czasu, port

{

powrót;

//*-*-*-*-*-*-*-*-*-*

}client.println("POBIERZ /api/znacznik czasu HTTP/1.1"); //Co robi ta część, nie dostałemclient.println("Host: baas.thethingscloud.com");client.println("Kontrola pamięci podręcznej: brak pamięci podręcznej");client.println("Token listonosza: ea3c18c6-09ba-d049-ccf3-369a22a284b8");

klient.println();

GiveMeTimestamp();

//wywoła funkcję, która otrzyma odpowiedź ze znacznikiem czasu z serwera

Serial.println("otrzymany znacznik czasu");

Serial.println(sygnatura czasowa);Serial.println("wewnątrz ThingsCloudPost");

Wartość początkowa ciągu znaków =

"{"device_id\": 61121695918, \"slave_id\": 2";

PostValue =

PostValue +”, \"dts\":" +znacznik czasu;

PostValue =

PostValue +", \"data\":{"MOIST\":" + wartość +"}"+"}";Serial.println(PostValue);

/* utwórz instancję WiFiClientSecure */

Klient WiFiClientSecure;Serial.println("Połącz z serwerem przez port 443");

Jeśli

(!client.connect(serwer, 443)){Serial.println("Połączenie nie powiodło się!");

} w przeciwnym razie {Serial.println("Połączono z serwerem!");

/* tworzenie

wniosek */client.println("POST /devices/deviceData HTTP/1.1");client.println("Host: api.thingsai.io");//client.println("Połączenie: zamknij");client.println("Typ treści: aplikacja/json");

client.println( kontrola pamięci podręcznej:

bez pamięci podręcznej");client.println("Upoważnienie: okaziciel eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9. IjVhMzBkZDFkN2QwYjNhNGQzODkwYzQ4OSI.kaY6OMj5cYlW6YlWNQ9tP");client.print("Długość-treści: ");

klient.println(WartośćPoczta.długość());klient.println();klient.println(PostValue);

//////////////////////////////////PRZESYŁANIE danych na

chmura jest gotowa i teraz otrzymaj odpowiedź z serwera w chmurze//////////////////

Serial.print( Oczekiwanie na odpowiedź

);

podczas

(!klient.dostępny()){

opóźnienie(50);

//Serial.print(".");

}

/* jeśli dane to

dostępne, a następnie odbierz i wydrukuj do Terminala */

podczas

(klient.dostępny()) {

char c = klient.odczyt();Serial.zapis(c);

}

/* jeśli

serwer odłączony, zatrzymaj klienta */

Jeśli

(!klient.podłączony()) {Serial.println();Serial.println("Serwer odłączony");

klient.stop();

}

}

Serial.println( ////////////////////// KONIEC

///////////////////// );

opóźnienie(3000);

}

}

Krok 4: WYJŚCIE:

WYJŚCIE
WYJŚCIE

Wyświetlany jest wynik kodu.

Krok 5: WYKRES

WYKRES
WYKRES

Jest to graficzna reprezentacja wartości odczytanych z czujnika.

Krok 6:

Oto kompletny film z projektu. Dziękuję.

Zalecana: