Jak wysłać dane z NodeMCU do Arkuszy Google

Opublikowany: 2020-08-26
Jak wysłać dane z NodeMCU do Arkuszy Google

Wysyłanie danych z czujników za pomocą oprogramowania sprzętowego NodeMCU przez Internet do arkusza kalkulacyjnego Arkuszy Google jest bardzo wygodne. Można to zrobić za pomocą skryptu Google i ma tę zaletę, że nic nie kosztuje, w przeciwieństwie do wielu alternatywnych rozwiązań przechowywania w chmurze.

Na potrzeby tego artykułu pokażemy prosty projekt przesyłania odczytów temperatury za pomocą ESP8266 i czujnika temperatury i wilgotności DHT11.

Skonfiguruj swój arkusz Google

Najpierw utwórz nowy arkusz kalkulacyjny. Zaloguj się na swoje konto Google, przejdź do Mojego dysku i otwórz pusty arkusz kalkulacyjny.

Skopiuj klucz URL arkusza kalkulacyjnego. Nadaj arkuszowi kalkulacyjnemu intuicyjną nazwę. Przejdź do Edytora skryptów w menu Narzędzia.

edytor skryptów

Nadaj nazwę swojemu skryptowi (ponownie zachowaj intuicyjność, zwłaszcza jeśli robisz więcej niż jeden projekt). Skorzystaj z podanego skryptu i skopiuj go i wklej w edytorze Google Script.

kod edytora skryptów

Pod wierszem identyfikatora arkusza kalkulacyjnego wklej klucz URL z zapisanego arkusza kalkulacyjnego.

Zapisz skrypt i wdróż go jako aplikację. Tę opcję znajdziesz w menu Publikuj. Skonfiguruj parametry wdrożenia, aby mieć pewność, że arkusz kalkulacyjny będzie działał poprawnie.

  1. Zapisz „Aktualny adres URL aplikacji internetowej”.
  2. Zapisz wersję projektu jako nową dla wszystkich wersji skryptu (umożliwia to Google aktualizację wszelkich poprawek, które możesz wprowadzić w przyszłości).
  3. W polu Wykonaj aplikację jako dodaj następujący tekst „ja (twój adres Gmail)”.
  4. W polu Kto ma dostęp do aplikacji dodaj następujący wiersz „każdy, nawet anonimowy”.

Kod konfiguracji czujnika ESP8266 i DHT11

Oto co należy wgrać podłączając ESP8266 do czujnika DHT11:

#include „ESP8266WiFi.h”

#include „DHT.h”

#define DHTPIN 2 // do jakiego cyfrowego pinu jesteś podłączony

//pin2 do D4 na płycie esp

// Usuń komentarz w kodzie dotyczący typu czujnika DHT, którego używasz.

#zdefiniuj DHTTYPE DHT11 // DHT 11

//#zdefiniuj typ DHT DHT21 // DHT 21

//#zdefiniuj typ DHT DHT22 // DHT 22

DHT dht(DHTPIN,TYP DHT);

const char WEBSITE[] = „api.pushingbox.com”; //serwer API PushingBox

const String devid = „<YOUR_Devid_HERE>”; //ID urządzenia z Pushingbox

const char* MY_SSID = „<YOUR_WIFI_NAME_HERE”;

const char* MY_PWD = „<YOUR_WIFI_PASSWORD_HERE>”;

unieważnij konfigurację()

{

Serial.begin(115200);

dht.begin();

Serial.print(“Łączenie z “+*MY_SSID);

WiFi.begin(MY_SSID, MY_PWD);

Serial.println(“przechodzę do wl connect”);

while (WiFi.status() != WL_CONNECTED) //brak połączenia,..czekanie na połączenie

{

opóźnienie (1000);

Numer seryjny.print(„.”);

}

Serial.println(“wl podłączony”);

Serial.println(“”);

Serial.println("Poświadczenia zaakceptowane! Połączono z Wi-Fi\n ");

Serial.println(“”);

}

pusta pętla()

{

//Odczekaj więcej czasu między odczytami

//zapełnij arkusz Google, aby uniknąć przekroczenia liczby bezpłatnych żądań z PushingBox

opóźnienie (10000); //10 sekund (częstotliwość próbkowania a limit zgłoszeń serwisowych)

float wilgotnośćData = dht.readHumidity();

// Odczyt temperatury w stopniach Celsjusza (domyślnie)

float celData = dht.readTemperature();

// Odczyt temperatury w stopniach Fahrenheita (isFahrenheit = true)

float fehrData = dht.readTemperature(true);

// Sprawdź, czy odczyty nie powiodły się, zakończ wcześniej (aby spróbować ponownie).

if (isnan(wilgotnośćData) || isnan(celData) || arenan(fehrData))

{

Serial.println(„Nie udało się odczytać z czujnika DHT!”);

powrót;

}

// Oblicz wskaźnik ciepła w stopniach Celsjusza (isFahreheit = false)

float hicData = dht.computeHeatIndex(celData, wilgotnośćData, fałsz);

// Oblicz wskaźnik ciepła w stopniach Fahrenheita (domyślnie)

float hifData = dht.computeHeatIndex(fehrData, wilgotnośćData);

//Drukuj na monitorze szeregowym lub wybranym terminalu z szybkością 115200 bodów

Serial.print(“Wilgotność: “);

Serial.print(dane wilgotności);

Serial.print(”%\t”);

Serial.print(“Temperatura w Cel.: “);

Numer seryjny.print(celData);

Serial.print(” *C „);

Serial.print(“Temperatura w Fehr: “);

Numer seryjny.print(fehrData);

Serial.print(” *F\t”);

Serial.print("Indeks cieplny w Cel: ");

Numer seryjny.print(hicData);

Serial.print(” *C „);

Serial.print("Indeks ciepła w Fehr: ");

Numer seryjny.print(hifData);

Serial.print(” *F\n”);

Klient WiFiClient; //Utwórz instancję obiektu WiFi

//Uruchom usługę API za pomocą naszego klienta Wi-Fi poprzez PushingBox

if (klient.połącz(STRONA INTERNETOWA, 80))

{

klient.print(“GET /pushingbox?devid=” + devid

+ „&humidityData=” + (Ciąg) wilgotnośćData

+ „&celData=” + (Ciąg) celData

+ „&fehrData=” + (String) fehrData

+ „&hicData=” + (Ciąg) hicData

+ „&hifData=” + (Ciąg) hifData

);

klient.println(” HTTP/1.1″);

klient.print(“Host: “);

klient.println(STRONA INTERNETOWA);

klient.println(“Agent użytkownika: ESP8266/1.0”);

klient.println(“Połączenie: zamknij”);

klient.println();

}

}

Przykładowy kod skryptu aplikacji Google

Oto kod potrzebny do utworzenia czytelnego skryptu do przesyłania danych z czujnika.

GET Zapytanie o żądanie:

https://script.google.com/macros/s/<twój gscriptID>/exec?celData=data_here

HumidityDat, celData, fehrData, hicData, hifData (zmienne GScript, PushingBox i Arduino w kolejności, w jakiej należy je zapisać)

Funkcja doGet(e) {

Logger.log ( JSON.stringify(e) ); // służy do przeglądania parametrów

Var wynik = 'OK';

If (e.parametr == niezdefiniowany) {

Wynik = 'Brak parametrów';

}

W przeciwnym razie {

Var id= '<URL Twojego arkusza kalkulacyjnego\;

Arkusz Var = SpreadsheetApp.openById(id).getActivesheet();

Var nowyRow = arkusz.getLastRow() + 1;

Var rowData = [];

//var waktu = nowa data()'

rowData[0] = nowa data(); //dla znacznika czasu w kolumnie A

for (var param w e.parametrze) {

logger.log('w pętli for, param='+param);

var wartość = stripQuotes(e.parametr[parametr]);

przełącznik (parametr) {

case 'humidityData': //Parametr

rowData[1] = wartość; //Wartość w kolumnie B

przerwa;

przypadek „celData”;

rowData[2] = wartość;

przerwa;

przypadek „fehrData”:

rowData[3] = wartość;

przerwa;

przypadek „hicData”:

rowData[4] = wartość;

przerwa;

przypadek „hifData”:

rowData[5] = wartość;

przerwa;

domyślny:

wynik = „nieobsługiwany parametr”;

}

Logger.log(JSON.stringify(rowData));

Var newRange = sheet.getRange(newRow, 1, 1, rowData.length);

nowyRange.setValues([rowData]);

}

Zwróć ContentService.createTextOutput(result);

}

Pasek funkcyjnyQuotes(wartość){

Zwróć wartość.replace(/^[„']|['|]$/g, „”);

}

Skonfiguruj PushingBox

Ta usługa pośredniczy między danymi z czujnika DHT a Arkuszami Google. Korzystając z API PushingBox, możesz zamienić dane przesyłane przez HTTP na zaszyfrowane dane HTTPS rozpoznawane przez Google.

Pamiętaj, że PushingBox ogranicza Cię do 1000 żądań dziennie. Eliminuje to jednak wiele ciężkiej pracy i wiedzy wymaganej przy tworzeniu własnego algorytmu szyfrowania, na który zareaguje Google.

  1. Utwórz konto PushingBox, jeśli jeszcze go nie masz.
  2. Użyj adresu Gmail, którego używasz także w projekcie danych czujnika NodeMCU.
  3. Przejdź do Moich usług.
  4. Dodaj nową usługę za pomocą opcji Dodaj usługę.
  5. Przewiń do ostatniej opcji zatytułowanej CustomURL, Ustaw własną usługę!
  6. Wypełnij pola wymagające nazwy, adresu URL i metody.
  7. Jako metodę wybierz GET.
  8. Jako adres URL użyj adresu URL zaczynającego się od „script.google.com…”, z adresu URL wygenerowanego podczas tworzenia adresu Google Scrip.
  9. Zatwierdź usługę i przejdź do Moich Scenariuszy.
  10. Wprowadź intuicyjną nazwę i naciśnij przycisk dodawania.
  11. Dodaj akcję po wyświetleniu monitu na ekranie.
  12. Skonfiguruj metodę GET, formatując nazwy każdej zmiennej. Ten krok będzie się różnić w zależności od tego, ile czujników rejestrujesz i co rejestrują.

Konfiguracja sprzętu

Jeśli używasz czujnika DHT z ESP8266, zasilaj urządzenie napięciem 5 V zamiast 3,3 V. Niższe napięcie może nie dać prawidłowych odczytów.

Połącz piny 2 i D4 w ESP8266.

Konfiguracja oprogramowania

Ta konfiguracja działa z Arduino IDE, najlepiej w wersji nowszej niż 1.6.4. Oznacza to również, że musisz pobrać niektóre biblioteki do swojego systemu.

Biblioteki można znaleźć pod następującymi linkami:

  1. hhtps://github.comesp8266/Arduino/tree/master/libraries/ESP8266WiFi
  2. https://learn.adafruit.com/dht

Następny krok polega na przesłaniu szkicu Arduino i skonfigurowaniu go dla Twojego projektu i urządzenia. Istnieją tylko trzy odpowiednie pola, które musisz sformatować i dostosować do swojego projektu:

  1. Sieć Wi-Fi.
  2. Hasło do wifi.
  3. Identyfikator PushingBoxa.

Jak podejść do transferu danych NodeMCU?

Jest na to więcej sposobów i mnóstwo typów czujników, których można użyć do przesyłania danych za pomocą ESP8266 z oprogramowaniem NodeMCU bezpośrednio do Arkuszy Google lub innych platform chmurowych.

Czy wolisz pisać własne skrypty i kod, aby spersonalizować swoje projekty, czy też wyszukujesz w Internecie zweryfikowane skrypty na githubie i innych platformach i stamtąd dostosowujesz? Daj nam znać w sekcji komentarzy poniżej, jakie są Twoje ulubione źródła kodu i skryptów, a także kombinacje ESP8266 i czujników.