NodeMCU'dan Google E-Tablolara Veri Gönderme
Yayınlanan: 2020-08-26NodeMCU donanım yazılımını kullanarak sensör verilerini internet üzerinden bir Google E-Tablolar e-tablosuna göndermek çok kullanışlıdır. Bu, bir Google komut dosyası aracılığıyla yapılabilir ve birçok Bulut depolama alternatifinin aksine hiçbir maliyet getirmeme avantajına sahiptir.
Bu makalenin amacı doğrultusunda, size ESP8266 ve DHT11 sıcaklık ve nem sensörünü kullanarak sıcaklık okumaları göndermek için basit bir proje göstereceğiz.
Google E-Tablonuzu Kurun
Öncelikle yeni bir e-tablo oluşturmak isteyeceksiniz. Google hesabınıza giriş yapın, Drive'ım'a gidin ve boş bir e-tablo açın.
E-tablonuzun URL anahtarını kopyalayın. Elektronik tabloya sezgisel bir ad verin. Araçlar menüsü altında Komut Dosyası Düzenleyicisi'ne gidin.
Komut dosyanıza bir ad verin (özellikle birden fazla proje yapıyorsanız yine sezgisel olmasını sağlayın). Verilen komut dosyasını kullanın ve kopyalayıp Google Komut Dosyası düzenleyicisine yapıştırın.
E-tablo kimlik satırının altına, kayıtlı e-tablonuzun URL anahtarını yapıştırın.
Komut dosyasını kaydedin ve bir uygulama olarak dağıtın. Bu seçeneği Yayınla menüsünün altında bulacaksınız. Elektronik tablonun doğru şekilde çalışacağından emin olmak için dağıtım parametrelerini yapılandırın.
- “Geçerli web uygulaması URL'sini” kaydedin.
- Tüm komut dosyası revizyonları için proje sürümünü yeni olarak kaydedin (bu, Google'ın gelecekte yapabileceğiniz düzeltmeleri güncellemesine olanak tanır).
- Uygulamayı şu şekilde yürüt alanı için aşağıdaki “ben(Gmail adresiniz)” ifadesini ekleyin.
- Uygulamaya kimlerin erişimi var alanına şu satırı ekleyin: "Herkes, hatta anonim".
ESP8266 ve DHT11 Sensörünü Ayarlama Kodu
ESP8266'nızı DHT11 sensörüne bağlarken yüklemeniz gerekenler:
#include “ESP8266WiFi.h”
#"DHT.h"yi dahil et
#define DHTPIN 2 // hangi dijital pin'e bağlısınız
//esp kartındaki pin2'den D4'e
// Kullandığınız DHT sensör tipinin kodundaki yorumu kaldırın.
#define DHTTYPE DHT11 // DHT 11
//#DHTTYPE DHT21'i tanımla // DHT 21
//#DHTTYPE DHT22'yi tanımla // DHT 22
DHT dht(DHTPIN,DHTTYPE);
const char WEB SİTESİ[] = “api.pushingbox.com”; //PushingBox API sunucusu
const String devid = “<YOUR_Devid_HERE>”; //Pushingbox'tan cihaz kimliği
const char* MY_SSID = “<WIFI_NAME_HERE”;
const char* MY_PWD = “<WIFI_PASSWORD_HERE>”;
geçersiz kurulum ()
{
Serial.begin(115200);
dht.begin();
Serial.print(“+*MY_SSID'ye bağlanılıyor);
WiFi.begin(MY_SSID, MY_PWD);
Serial.println(“wl connect'e giriliyor”);
while (WiFi.status() != WL_CONNECTED) //bağlı değil,..bağlanmayı bekliyor
{
gecikme(1000);
Seri.print(“.”);
}
Serial.println(“wl bağlı”);
Seri.println(“”);
Serial.println(“Kimlik bilgileri kabul edildi! Wifi'ye bağlanıldı\n “);
Seri.println(“”);
}
geçersiz döngü ()
{
//Okumalar arasında daha fazla zaman geçmesine izin ver
//PushingBox'tan gelen ücretsiz isteklerin sayısını aşmamak için google sayfalarını doldur
gecikme(10000); //10 saniye, (örnekleme hızı ve servis çağrı kotası karşılaştırması)
float nemVeri = dht.readHumidity();
// Sıcaklığı Santigrat olarak oku (varsayılan)
float celData = dht.readTemperature();
// Sıcaklığı Fahrenheit olarak oku (isFahrenheit = true)
float fehrData = dht.readTemperature(true);
// Başarısız okumaların erken çıkışını kontrol edin (tekrar denemek için).
if (isnan(humidityData) || isnan(celData) || isnan(fehrData))
{
Serial.println(“DHT sensöründen okuma başarısız oldu!”);
geri dönmek;
}
// Isı endeksini Celsius cinsinden hesaplayın (isFahreheit = false)
float hicData = dht.computeHeatIndex(celData, nemVerisi, false);
// Isı indeksini Fahrenheit cinsinden hesapla (varsayılan)
float hifData = dht.computeHeatIndex(fehrData, nemVerisi);
//Seçtiğiniz Seri monitöre veya Terminale 115200 Baud hızında yazdırın
Seri.print(“Nem: “);
Seri.print(nemVerisi);
Seri.print(” %\t”);
Serial.print(“Cel cinsinden sıcaklık: “);
Seri.print(celData);
Seri.print(” *C “);
Serial.print(“Fehr cinsinden sıcaklık: “);
Seri.print(fehrData);
Seri.print(” *F\t”);
Serial.print(“Cel cinsinden ısı indeksi: “);
Seri.print(hicData);
Seri.print(” *C “);
Serial.print(“Fehr'deki ısı indeksi: “);
Seri.print(hifData);
Seri.print(” *F\n”);
WiFiClient istemcisi; //WiFi nesnesini başlat
//PushingBox aracılığıyla WiFi İstemcimizi kullanarak API hizmetini başlatın
if (client.connect(WEB SİTESİ, 80))
{
client.print(“GET /pushbox?devid=” + devid
+ “&humidityData=” + (Dize) nemVerileri
+ “&celData=” + (Dize) celData
+ “&fehrData=” + (Dize) fehrData
+ “&hicData=” + (Dize) hicData
+ “&hifData=” + (Dize) hifData
);
client.println(”HTTP/1.1″);
client.print(“Ana Bilgisayar: “);
client.println(SİTE);
client.println(“Kullanıcı Aracısı: ESP8266/1.0”);
client.println(“Bağlantı: kapat”);
client.println();
}
}
Örnek Google Uygulama Komut Dosyası Kodu
Sensör veri aktarımınız için okunabilir bir komut dosyası oluşturmak için ihtiyacınız olan kodu burada bulabilirsiniz.
GET İstek sorgusu:
https://script.google.com/macros/s/<gscriptID'niz>/exec?celData=data_here
HumidityDat, celData,fehrData,hicData, hifData (GScript, PushingBox ve Arduino değişkenlerini yazmanız gereken sırayla)
İşlev doGet(e) {
Logger.log ( JSON.stringify(e) ); // bu parametreleri görüntülemek içindir
Var sonuç = 'Tamam';
If (e.parametre == tanımsız) {
Sonuç = 'Parametre Yok';
}
Başka {
Var id= '<e-tablo URL'niz\;
Var sayfası = SpreadsheetApp.openById(id).getActivesheet();
Var newRow = sayfa.getLastRow() + 1;
Var satırVerileri = [];
//var waktu = yeni Tarih()'
rowData[0] = yeni Tarih(); //A sütunundaki Zaman Damgası için
for (var param e.parametrede) {
logger.log('döngüde, param='+param);
var değer = stripQuotes(e.parametre[param]);
anahtar (param) {
case 'humidityData': //Parametre
satırVerileri[1] = değer; //B sütunundaki değer
kırmak;
vaka 'celData';
satırVerileri[2] = değer;
kırmak;
'fehrData' durumu:
satırVerileri[3] = değer;
kırmak;
'hicData' durumu:
satırVerileri[4] = değer;
kırmak;
'hifData' durumu:
satırVerileri[5] = değer;
kırmak;
varsayılan:
sonuç = “desteklenmeyen parametre”;
}
Logger.log(JSON.stringify(rowData));
Var newRange = Sheet.getRange(newRow, 1, 1, rowData.length);
newRange.setValues([rowData]);
}
ContentService.createTextOutput(sonuç);
}
Function stripQuotes( değer ){
Dönüş değeri.replace(/^[“']|['|]$/g, “”);
}
PushingBox Kurulumu
Bu hizmet, DHT sensör verileriniz ile Google E-Tablolar arasında aracı görevi görür. PushingBox API'yi kullanarak HTTP ile iletilen verileri Google'ın tanıdığı şifrelenmiş HTTPS verilerine dönüştürebilirsiniz.
PushingBox'ın sizi günde 1.000 istekle sınırladığını unutmayın. Ancak, Google'ın yanıt vereceği kendi şifreleme algoritmanızı oluşturmak için gereken zorlu çalışma ve uzmanlığın çoğunu ortadan kaldırır.
- Henüz bir hesabınız yoksa, bir PushingBox hesabı oluşturun.
- NodeMCU sensör verileri projesi için de kullandığınız Gmail adresini kullanın.
- Hizmetlerim'e gidin.
- Hizmet Ekle seçeneğinden yeni bir hizmet ekleyin.
- Özel URL başlıklı son seçeneğe ilerleyin, Kendi hizmetinizi ayarlayın!
- Ad, URL ve Yöntem gerektiren alanları doldurun.
- Yöntem için GET'i seçin.
- URL için, Google Komut Dosyası adresini oluşturduğunuzda oluşturulan URL'den "script.google.com..." ile başlayan URL'yi kullanın.
- Hizmeti gönderin ve Senaryolarım'a gidin.
- Sezgisel bir ad girin ve ekle düğmesine basın.
- Ekranda istendiğinde bir eylem ekleyin.
- Her değişkenin adlarını biçimlendirerek GET yöntemini yapılandırın. Bu adım, kaydettiğiniz sensör sayısına ve bunların neyi kaydettiğine bağlı olarak farklılık gösterecektir.
Donanımı Yapılandırma
ESP8266'nızla birlikte bir DHT sensörü kullanıyorsanız üniteye 3,3v yerine 5v ile güç verin. Daha düşük bir voltaj size doğru okumalar vermeyebilir.
ESP8266'nızdaki pin 2 ve D4'ü bağlayın.
Yazılımı Yapılandırma
Bu kurulum, tercihen 1.6.4'ten daha yeni bir sürüm olan Arduino IDE ile çalışır. Bu aynı zamanda sisteminize bazı kütüphaneleri indirmeniz gerektiği anlamına da gelir.
Kütüphanelere aşağıdaki bağlantılardan ulaşabilirsiniz:
- hhtps://github.comesp8266/Arduino/tree/master/libraries/ESP8266WiFi
- https://learn.adafruit.com/dht
Bir sonraki adım, Arduino taslağının yüklenmesini ve projeniz ve cihazınız için yapılandırılmasını içerir. Projeniz için biçimlendirmeniz ve özelleştirmeniz gereken yalnızca üç ilgili alan vardır:
- Kablosuz ağ.
- Kablosuz ağ parolası.
- PushingBox Kimliği.
NodeMCU Veri Aktarımına Nasıl Yaklaşırsınız?
Bunu yapmanın daha fazla yolu ve NodeMCU donanım yazılımına sahip bir ESP8266 kullanarak verileri doğrudan Google E-Tablolar'a veya diğer Bulut platformlarına aktarmak için kullanabileceğiniz tonlarca sensör türü vardır.
Projelerinizi kişiselleştirmek için kendi komut dosyalarınızı ve kodlarınızı yazmayı mı tercih ediyorsunuz yoksa github ve diğer platformlarda doğrulanmış komut dosyalarını çevrimiçi arayıp oradan mı uyarlıyorsunuz? Aşağıdaki yorumlar bölümünde favori kod ve komut dosyası kaynaklarınızın yanı sıra ESP8266 ve sensör kombinasyonlarını bize bildirin.