Jak wysłać dane z NodeMCU do Arkuszy Google
Opublikowany: 2020-08-26Wysył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.
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.
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.
- Zapisz „Aktualny adres URL aplikacji internetowej”.
- 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).
- W polu Wykonaj aplikację jako dodaj następujący tekst „ja (twój adres Gmail)”.
- 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.
- Utwórz konto PushingBox, jeśli jeszcze go nie masz.
- Użyj adresu Gmail, którego używasz także w projekcie danych czujnika NodeMCU.
- Przejdź do Moich usług.
- Dodaj nową usługę za pomocą opcji Dodaj usługę.
- Przewiń do ostatniej opcji zatytułowanej CustomURL, Ustaw własną usługę!
- Wypełnij pola wymagające nazwy, adresu URL i metody.
- Jako metodę wybierz GET.
- Jako adres URL użyj adresu URL zaczynającego się od „script.google.com…”, z adresu URL wygenerowanego podczas tworzenia adresu Google Scrip.
- Zatwierdź usługę i przejdź do Moich Scenariuszy.
- Wprowadź intuicyjną nazwę i naciśnij przycisk dodawania.
- Dodaj akcję po wyświetleniu monitu na ekranie.
- 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:
- hhtps://github.comesp8266/Arduino/tree/master/libraries/ESP8266WiFi
- 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:
- Sieć Wi-Fi.
- Hasło do wifi.
- 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.