如何將數據從 NodeMCU 發送到 Google Sheets
已發表: 2020-08-26使用 NodeMCU 固件通過互聯網將傳感器數據發送到 Google Sheets 電子表格中非常方便。 這可以通過 Google 腳本來完成,並且與許多雲存儲替代方案相比,具有無需花費任何成本的優點。
在本文中,我們將向您展示一個使用 ESP8266 和 DHT11 溫度和濕度傳感器發送溫度讀數的簡單項目。
設置您的 Google 表格
首先,您需要創建一個新的電子表格。 登錄您的 Google 帳戶,轉到“我的雲端硬盤”,然後打開一個空白電子表格。
複製電子表格的 URL 密鑰。 為電子表格指定一個直觀的名稱。 轉到“工具”菜單下的“腳本編輯器”。
為您的腳本命名(再次強調,保持直觀,尤其是當您正在執行多個項目時)。 使用給定的腳本並將其複制粘貼到 Google 腳本編輯器中。
在電子表格 ID 行下方,粘貼已保存電子表格中的 URL 密鑰。
保存腳本並將其部署為應用程序。 您可以在“發布”菜單下找到此選項。 配置部署參數以確保電子表格正常工作。
- 保存“當前網絡應用程序 URL”。
- 將所有腳本修訂的項目版本保存為新版本(這允許 Google 更新您將來可能進行的任何修訂)。
- 對於執行應用程序字段,添加以下“我(您的 Gmail 地址)”。
- 對於誰有權訪問應用程序字段添加以下行“任何人,甚至匿名”。
設置 ESP8266 和 DHT11 傳感器的代碼
這是將 ESP8266 連接到 DHT11 傳感器時應上傳的內容:
#include“ESP8266WiFi.h”
#include“DHT.h”
#define DHTPIN 2 // 您連接到的數字引腳
//esp板上的pin2到D4
// 刪除代碼中您正在使用的 DHT 傳感器類型的註釋。
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT21 // DHT 21
//#define DHTTYPE DHT22 // DHT 22
DHT dht(DHTPIN,DHTTYPE);
const char WEBSITE[] = “api.pushingbox.com”; //PushingBox API 服務器
const String devid = “<YOUR_Devid_HERE>”; //來自Pushingbox的設備ID
const char* MY_SSID = “<YOUR_WIFI_NAME_HERE”;
const char* MY_PWD = “<您的WIFI密碼_此處>”;
無效設置()
{
串行.開始(115200);
dht.begin();
Serial.print(“連接到”+*MY_SSID);
WiFi.開始(MY_SSID, MY_PWD);
Serial.println(“進入wl connect”);
while (WiFi.status() != WL_CONNECTED) //未連接,..等待連接
{
延遲(1000);
串口.print(“.”);
}
Serial.println(“wl已連接”);
Serial.println(“”);
Serial.println(“憑據已接受!已連接到 wifi\n “);
Serial.println(“”);
}
無效循環()
{
//在讀數之間留出更多時間
//谷歌表填充,以避免超過 PushingBox 的免費請求數量
延遲(10000); //10秒,(採樣率與服務調用配額)
浮動濕度數據 = dht.readHumidity();
// 以攝氏度讀取溫度(默認)
浮動 celData = dht.readTemperature();
// 將溫度讀取為華氏度 (isFahrenheit = true)
浮動 fehrData = dht.readTemperature(true);
// 檢查失敗的讀取是否提前退出(重試)。
if (isnan(humidityData) || isnan(celData) || isnan(fehrData))
{
Serial.println(“從DHT傳感器讀取失敗!”);
返回;
}
// 計算攝氏溫度指數 (isFahreheit = false)
float hicData = dht.computeHeatIndex(celData, 濕度數據, false);
// 計算華氏度熱指數(默認值)
float hifData = dht.computeHeatIndex(fehrData, 濕度數據);
//以 115200 波特率打印到您選擇的串行監視器或終端
Serial.print(“濕度:”);
Serial.print(濕度數據);
Serial.print(“%\t”);
Serial.print(“溫度單位:Cel:”);
串行打印(celData);
Serial.print(“*C”);
Serial.print(“費爾溫度:”);
串行.打印(fehrData);
Serial.print(“ *F\t”);
Serial.print(“Cel 中的熱指數:”);
串行打印(hicData);
Serial.print(“*C”);
Serial.print(“費爾熱指數:”);
串行打印(hifData);
Serial.print(“ *F\n”);
WiFiClient客戶端; //實例化WiFi對象
//通過 PushingBox 使用我們的 WiFi 客戶端啟動或 API 服務
if (client.connect(網站, 80))
{
client.print(“GET /pushingbox?devid=” + devid
+“&humidityData=”+(字符串)濕度數據
+“&celData=”+(字符串)celData
+“&fehrData=”+(字符串)fehrData
+“&hicData=”+(字符串)hicData
+“&hifData=”+(字符串)hifData
);
client.println(“HTTP/1.1”);
client.print(“主機:”);
客戶端.println(網站);
client.println(“用戶代理:ESP8266/1.0”);
client.println(“連接:關閉”);
客戶端.println();
}
}
Google 應用程序腳本代碼示例
以下是為傳感器數據傳輸創建可讀腳本所需的代碼。
GET請求查詢:
https://script.google.com/macros/s/<您的 gscriptID>/exec?celData=data_here
HumidityDat、celData、fehrData、hicData、hifData(GScript、PushingBox 和 Arduino 變量,按照您應編寫的順序排列)
函數 doGet(e) {
Logger.log ( JSON.stringify(e) ); // 這個是用來查看參數的
變量結果 = '好的';
if (e.參數==未定義) {
結果='無參數';
}
別的 {
Var id= '<您的電子表格 URL\;
varsheet = SpreadsheetApp.openById(id).getActivesheet();
var newRow =sheet.getLastRow() + 1;
變量行數據 = [];
//var waktu = new Date()'
rowData[0] = new Date(); //對於A列中的時間戳
for (e.parameter 中的 var param) {
logger.log('在for循環中,param='+param);
var value = stripQuotes(e.parameter[param]);
開關(參數){
case 'humidityData': //參數
行數據[1] = 值; //B列的值
休息;
案例“celData”;
行數據[2] = 值;
休息;
案例“fehrData”:
行數據[3] = 值;
休息;
案例“hicData”:
行數據[4] = 值;
休息;
案例“hifData”:
行數據[5] = 值;
休息;
默認:
結果=“不支持的參數”;
}
Logger.log(JSON.stringify(rowData));
var newRange = Sheet.getRange(newRow, 1, 1, rowData.length);
newRange.setValues([rowData]);
}
返回 ContentService.createTextOutput(結果);
}
函數 stripQuotes( 值 ){
返回值.replace(/^[“']|['|]$/g,“”);
}
設置推箱
該服務充當 DHT 傳感器數據和 Google 表格之間的中間人。 使用 PushingBox API,您可以將 HTTP 傳輸的數據轉換為 Google 識別的加密 HTTPS 數據。
請注意,PushingBox 限制您每天的請求數不得超過 1,000 個。 然而,它省去了創建谷歌將響應的自己的加密算法所需的大量繁重工作和專業知識。
- 如果您還沒有 PushingBox 帳戶,請創建一個。
- 使用您也用於 NodeMCU 傳感器數據項目的 Gmail 地址。
- 轉到我的服務。
- 從“添加服務”選項添加新服務。
- 滾動到最後一個標題為 CustomURL 的選項,設置您自己的服務!
- 填寫需要名稱、URL 和方法的字段。
- 對於方法,選擇 GET。
- 對於 URL,請使用以“script.google.com...”開頭的 URL,該 URL 來自創建 Google Scrip 地址時生成的 URL。
- 提交服務並轉到我的場景。
- 輸入直觀的名稱並點擊添加按鈕。
- 當屏幕上出現提示時添加操作。
- 通過格式化每個變量的名稱來配置 GET 方法。 此步驟將根據您記錄的傳感器數量以及記錄內容而有所不同。
配置硬件
如果您在 ESP8266 上使用 DHT 傳感器,請使用 5v 而不是 3.3v 為設備供電。 較低的電壓可能無法為您提供正確的讀數。
連接 ESP8266 上的引腳 2 和 D4。
配置軟件
此設置適用於 Arduino IDE,最好是高於 1.6.4 的版本。 這也意味著您需要在系統上下載一些庫。
可以通過以下鏈接找到這些庫:
- hhtps://github.comesp8266/Arduino/tree/master/libraries/ESP8266WiFi
- https://learn.adafruit.com/dht
下一步涉及上傳 Arduino 草圖並針對您的項目和設備進行配置。 您只需為項目設置格式和自定義三個相關字段:
- 無線網絡。
- 無線網絡密碼。
- 推箱 ID。
您如何處理 NodeMCU 數據傳輸?
有更多方法可以實現此目的,並且您可以使用大量傳感器類型,使用帶有 NodeMCU 固件的 ESP8266 將數據直接傳輸到 Google Sheets 或其他雲平台。
您是否更喜歡編寫自己的腳本和代碼來個性化您的項目,還是在線搜索 github 和其他平台上經過驗證的腳本並從中進行調整? 請在下面的評論部分告訴我們您最喜歡的代碼和腳本源以及 ESP8266 和傳感器組合。