0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

怎樣使用ESP8266將數據發(fā)布到Google工作表

454398 ? 來源:網絡整理 ? 作者:網絡整理 ? 2019-12-06 15:36 ? 次閱讀

在過去的幾年中,ESP8266平臺蓬勃發(fā)展,并成為電子愛好者物聯網愛好者中最受歡迎的硬件工具之一。 ESP8266裝有運行在80 MHz的32位RISC CPU,帶TCP/IP協議棧的完全集成WiFi無線電,串行外設(I2C,SPIUART),ADC通道和通用I/O引腳,ESP8266是當前物聯網市場空間中可用度最高的,集成度最高的WiFi解決方案。 ESP8266硬件(例如NodeMCU和ESP-01)可以使用其外圍設備直接與傳感器連接,并將傳感器的測量值通過Internet上傳到本地或遠程Web服務器。目前,已經有很多云物聯網平臺(ThingSpeak,thinger.io,TESPA.io,Xively…每天都在增加)提供了API和工具,以使ESP8266用戶可以直接上傳其傳感器讀數在線進行實時可視化和全局訪問。如果您像我一樣是Google云端硬盤的普通用戶,那么您會發(fā)現Google表格比所有這些IoT云平臺更容易接近。在本教程中,我將描述一種將ESP8266設備直接連接到Google表格以存儲傳感器數據而無需使用任何第三方插件的方法。作為說明,我正在使用一個 NodeMCU 板,該板從插入我的花盆的土壤濕度傳感器讀取模擬輸出,并直接連接到Google云端硬盤上的電子表格以存儲數據。

怎樣使用ESP8266將數據發(fā)布到Google工作表

ESP8266數據記錄到Google電子表格

相關帖子

查看如何使用ESP8266發(fā)送電子郵件和短信。

查看我們的天氣Web服務器項目,用于使用ESP8266本地存儲傳感器讀數。

查看我們的 ThingSpeak溫濕度記錄器項目,用于使用ESP8266進行遠程服務器數據記錄示例

該項目基本上有兩個部分。第一部分是設置ESP8266硬件以讀取土壤濕度傳感器的輸出。第二部分涉及創(chuàng)建Google工作表,并將其配置為使用本教程隨附的Google App腳本通過ESP8266模塊通過Internet發(fā)送的傳感器數據。

硬件設置

此該項目使用了一個非常簡單且便宜的土壤濕度傳感器(您可以在 eBay 或 Aliexpress 上以1美元的價格購買)套件,該套件包括兩個裸露的金屬焊盤和一個儀表電路板。裸露的墊子充當探測土壤中水分含量的探針。土壤中的水越多,意味著兩個墊之間的電導率越高,反之亦然。隨附的儀表板可提供隨土壤濕度變化的模擬輸出電壓。儀器電路由3.3V電源供電,其輸出饋送到NodeMCU的模擬輸入通道(A0)。

土壤濕度傳感器由裸露的金屬焊盤和儀器電路

注意: ESP8266模擬輸入可以處理最大1V的輸入電壓。但是,NodeMCU在板上實現了一個分壓器電路,以將輸入電壓范圍擴展到3.3V。

軟件

讓我們首先嘗試了解在嘗試發(fā)送時實際發(fā)生的情況數據到Google的盡頭。很明顯,我們將使用GET請求通過URL來發(fā)送數據,該URL的模式為 https://script.google.com/。..。。當您在網絡瀏覽器中輸入該URL時,Google服務器響應,要求瀏覽器通過新的GET請求重定向到域為 script.googleusercontent.com 的另一個URL。對于Web瀏覽器,URL重定向是很常見的事情,它可以正常工作。然而,對于ESP8266,這不是直截了當的。 ESP8266需要正確解碼從第一臺服務器收到的標頭信息以提取重定向URL并向新服務器發(fā)出第二個GET請求。為了簡化重定向,Sujay Phadke(aka electronicsguy )已共享在GitHub上,以Arduino庫的形式編寫了一段精美的代碼,名為 HTTPSRedirect 。 Arduino的其他示例還使用第三方API服務(例如 pushingbox )將數據發(fā)布到Google電子表格,以處理Google的https要求和URL重定向。 HTTPSRedirect 庫的使用通過避免需要任何第三方服務而使任務更加簡單。因此,您需要做的第一件事是從GitHub復制HTTPSRedirect庫文件并將其安裝到Arduino庫文件夾中。為了方便起見,我還在以下鏈接上發(fā)布了壓縮的庫文件。

下載HTTPS重定向庫

更新:以上庫已過時。

請轉到GitHub Sujay Phadke并下載更新的庫。感謝Sujay。

要將其安裝到您的計算機上,只需下載上述壓縮文件,解壓縮并移動名為 HTTPSRedirect 的文件夾即可。到您的Arduino庫位置。在Windows PC上,它通常轉到 C:\ Users \\ Documents \ Arduino \ libraries \ 。

在Windows PC上的Arduino IDE庫路徑

確保已復制的庫文件夾中同時存在HTTPSRedirect.cpp和HTTPSRedirect.h文件。

程序ESP8266將數據發(fā)送到Google Sheets

下面發(fā)布的是使用Arduino IDE編寫的ESP8266代碼,用于讀取土壤濕度傳感器的輸出并將其發(fā)布到Google云端硬盤上的Google Sheet中。為了使其適合您的情況,您需要更新與您的匹配的 ssid 和 密碼 WiFi網絡。另外,您還需要獲取 * GScriptId ,只能在發(fā)布所需的Google App腳本后獲得。本教程底部將說明獲取 * GScriptId 的過程。傳感器數據每15分鐘發(fā)布到Google工作表一次。

//BY:Akshaya Niraula

//ON:2016年11月11日

//AT: http://www.embedded-lab.com/

#include 《 ESP8266WiFi 。 h 》

#include “ HTTPSRedirect.h”

const char * ssid = “ –您的SSID –” ;

const char * 密碼 = “ –您的密碼–” ;

//下面的ID來自Google表格。

//指向此頁面底部,它將解釋如何獲得此

const char * GScriptId = “ —您的Google-Script-ID – =” ;

//在此間隔內推送數據

const int dataPostDelay = 900000 ; //15分鐘= 15 * 60 * 1000

const char * host = “ script.google.com” ;

const char * googleRedirHost = “ script.googleusercontent.com” ;

const int httpsPort = 443 ;

HTTPSRedirect 客戶端 ( httpsPort ) ;

//準備url(沒有變化的數據)

字符串 url = 字符串 ( ”/macros/s/” ) + GScriptId + ”/ex ec?” ;

const char * 指紋 = “ F0 5C 74 77 3F 6B 25 D7 3B 66 4D 43 2F 7E BC 5B E9 28 86 AD” ;

//我們將從A0引腳獲取模擬輸入

const int AnalogIn = A0 ;

void 設置 ( ) {

Serial 。 開始 ( 115200 ) ;

序列 。 println ( “連接到wifi:“ ) ;

序列 。 println ( ssid ) ;

序列 。 沖洗 ( ) ;

WiFi 。 開始 ( ssid , 密碼 ) ;

而 ( WiFi 。 狀態(tài) ( ) != WL_CONNECTED ) {

延遲 ( 500 ) ;

序列 。 打印 ( “。” ) ;

}

串行 。 println ( ” IP地址:“ ) ;

序列 。 println ( WiFi 。 localIP ( ) ) ;

序列 。 print ( String ( “連接到” ) ) ;

序列 。 println ( host ) ;

布爾 標志 = false ;

用于 ( int i = 0 ; i 《 5 ; i ++ ) {

int retval = 客戶端 。 conn ( 主機 , httpsPort ) ;

如果 ( retval == 1 ) {

flag = true ;

break ;

}

else

序列 。 println ( “連接失敗。正在重試…” ) ;

}

//連接狀態(tài),1 =已連接,未連接為0。

序列 。 println ( “連接狀態(tài):” + 字符串 ( 客戶端 已連接 ( ) ) ) ;

序列 。 刷新 ( ) ;

如果 ( ! flag ) {

序列 。 打印 ( “無法連接到服務器:“ ) ;

串行 。 println ( host ) ;

序列 。 println ( 出口ing…” ) ;

序列 。 flush ( ) ;

返回 ;

}

//即使證書不匹配,數據仍將被推送。

如果 ( 客戶端 。 驗證 ( 指紋 , 主機 ) ) {

Serial 。 println ( “證書匹配。” ) ;

} else {

Serial 。 println ( “證書不匹配” ) ;

}

}

//這是將數據推送到的主要方法Google工作表

void postData ( String tag , float value ) {

如果 ( ! client 。 已連接 ( ) ) {

序列 。 println ( “再次連接到客戶端… ” ) ;

客戶端 。 connect ( 主機 , httpsPort ) ;

}

字符串 urlFinal = url + “ tag =” + 標簽 + “&value =” + 字符串 ( value ) ;

客戶 。 printRedir ( urlFinal , 主機 , googleRedirHost ) ;

}

//繼續(xù)以給定的時間間隔推送數據

void loop ( ) {

//讀取模擬值,在這種情況下為土壤濕度

int 數據 = 1023 – analogRead ( AnalogIn ) ;

//發(fā)布這些信息

postData ( “土壤水分” , 數據 ) ;

延遲 ( dataPostDelay ) ;

}

您還可以從以下鏈接下載NodeMCU代碼。

下載NodeMCU代碼

創(chuàng)建Google表格

在您的Google Dri中創(chuàng)建Google電子表格ve,并將其命名為 DataCollector 。將當前/活動工作表重命名為摘要,然后添加第二個工作表,將其命名為 DataLogger 。在工作表的URL地址欄中,將d/和/edit之間的字符串復制并保存到某處。這是電子表格的唯一共享密鑰,以后在Google Apps腳本中將需要。

您的Google電子表格的唯一共享密鑰可以在URL中找到

注意: Google電子表格的名稱無關緊要,因為我們將在表單中使用唯一的表單共享密鑰。 Google Apps腳本可以訪問它。但是,工作表名稱(摘要和 DataLogger )必須與您在Google Apps腳本中輸入的內容(稍后描述)相匹配。

在摘要中表格上,在單元格 A1 上鍵入 上次修改 ,在上鍵入 DataLogger計數 》 和 A3 上的 下次讀取時間 。在單元格 B2 中,鍵入一個公式,該公式將為我們在 B3 中提供數據計數‘ = counta(DataLogger!D:D)-1 ’ ,請輸入此等式 = B1 + TimeValue(“ 00:15”),這將為最后修改的日期時間增加15分鐘。為了支持Google表格中的壓力表,已添加了從A6到B7的一些信息,如下圖所示

Goolge表格–摘要標記

在 DataLogger 表中,在 A1,B1,C1和D1 中鍵入 ID,DateTime,標記和值

Google表格數據記錄器選項卡

Google Apps腳本

創(chuàng)建Google應用腳本,請從Google表格轉到工具》腳本編輯器。在代碼部分中,粘貼以下代碼。該代碼或腳本可以使用任何名稱保存。

// BY: Akshaya Niraula

// ON: 2016 November 12th.

// AT: http://www.embedded-lab.com/。..。.

// Steps are valid as of 2016 November 12th.

// 0) From Google spreadsheet, Tools 》 Scriipt Editor.。.

// 1) Write your code

// 2) Save and give a meaningful name

// 3) Run and make sure “doGet” is selected

// You can set a method from Run menu

// 4) When you run for the first time, it will ask

// for the permission. You must allow it.

// Make sure everything is working as it should.

// 5) From Publish menu 》 Deploy as Web App.。.

// Select a new version everytime it‘s published

// Type comments next to the version

// Execute as: “Me (your email address)”

// MUST: Select “Anyone, even anonymous” on “Who has access to this script”

// For the first time it will give you some prompt(s), accept it.

// You will need the given information (url) later. This doesn’t change, ever!

// Saving the published URL helps for later.

// https://script.google.com/macros/s/---Your-Script-ID--Goes-Here---/exec

// https://script.google.com/macros/s/---Your-Script-ID--Goes-Here---/exec?tag=test&value=-1

// This method will be called first or hits first

function doGet(e){

Logger.log(“--- doGet ---”);

var tag = “”,

value = “”;

try {

// this helps during debuggin

if (e == null){e={}; e.parameters = {tag:“test”,value:“-1”};}

tag = e.parameters.tag;

value = e.parameters.value;

// save the data to spreadsheet

save_data(tag, value);

return ContentService.createTextOutput(“Wrote: tag: ” + tag + “ value: ” + value);

} catch(error) {

Logger.log(error);

return ContentService.createTextOutput(“oops.。..” + error.message

+ “ ” + new Date()

+ “ tag: ” + tag +

+ “ value: ” + value);

}

}

// Method to save given data to a sheet

function save_data(tag, value){

Logger.log(“--- save_data ---”);

try {

var dateTime = new Date();

// Paste the URL of the Google Sheets starting from https thru /edit

// For e.g.: https://docs.google.com/。..。/edit

var ss = SpreadsheetApp.openByUrl(“https://docs.google.com/spreadsheets/d/---Your-Google-Sheet-ID--Goes-Here---/edit”);

var summarySheet = ss.getSheetByName(“Summary”);

var dataLoggerSheet = ss.getSheetByName(“DataLogger”);

// Get last edited row from DataLogger sheet

var row = dataLoggerSheet.getLastRow() + 1;

// Start Populating the data

dataLoggerSheet.getRange(“A” + row).setValue(row -1); // ID

dataLoggerSheet.getRange(“B” + row).setValue(dateTime); // dateTime

dataLoggerSheet.getRange(“C” + row).setValue(tag); // tag

dataLoggerSheet.getRange(“D” + row).setValue(value); // value

// Update summary sheet

summarySheet.getRange(“B1”).setValue(dateTime); // Last modified date

// summarySheet.getRange(“B2”).setValue(row - 1); // Count

}

catch(error) {

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

}

Logger.log(“--- save_data end---”);

}

重要說明: 在上面的腳本中,工作表名稱應與我們要填充的名稱匹配。

var summarySheet = ss.getSheetByName(“Summary”);

var dataLoggerSheet = ss.getSheetByName(“DataLogger”);

類似地,您還需要在腳本中編輯電子表格共享密鑰,以便與您的匹配(您之前從電子表格URL復制的副本)。

table》

下載 Goolge應用程序腳本

將內容作為Web應用程序部署

下一步是發(fā)布腳本,以便可通過URL訪問。為此,請發(fā)布》作為Web應用程序部署。

注意:每當您修改代碼時,都必須創(chuàng)建一個“新建”項目版本并發(fā)布,否則您仍然會遇到相同的舊代碼。

復制 當前網絡應用的URL 并將其保存在需要的地方用于提取 GScriptID 。我通常將其保存在mycode中作為注釋。 Web應用程序URL如下所示:

https://script.google.com/macros/s/–您的Google腳本ID–/exec?tag = test&value = -1

s/和/exec之間的字符串?是您的 GScriptID 。

作為Web應用程序部署

在發(fā)布過程中,Google會要求授予一些權限,您需要允許這些權限。

測試進度

如果操作正確,則以下測試應該成功。復制發(fā)布過程中收到的Web應用程序URL,如上所示進行格式化,然后將此字符串粘貼到Web瀏覽器URL字段中。您應該在 DataLogger 工作表中看到以下信息,如下所示。

測試數據發(fā)布到Google工作表

到目前為止還好嗎?如果沒有,請仔細檢查步驟。如果您在瀏覽器中輸入的URL填充了工作表中的值,請使用之前發(fā)布的ESP8266代碼更新您的 GScriptID 。

輸出

我添加了一行圖表以可視化發(fā)布在 DataLogger 表上的傳感器數據的時間序列。圖表的來源范圍足夠大,可以覆蓋ESP8266發(fā)送的任何新數據。您還可以添加一個量規(guī)以顯示最新的土壤濕度數據。

圖表基于NodeMCU在DataLogger工作表上發(fā)布的數據

下面是 DataLogger 工作表的快速視圖。水分數據帶有時間戳記。

ESP8266發(fā)布的傳感器數據每隔一分鐘

責任編輯:wv

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • ESP8266
    +關注

    關注

    50

    文章

    962

    瀏覽量

    45170
收藏 人收藏

    評論

    相關推薦

    esp8266加入c51單片機單通道程序怎么寫

    要將ESP8266模塊加入C51單片機的單通道程序中,您需要了解如何通過串行通信(UART)與ESP8266進行通信。以下是如何實現這一點的步驟和示例代碼。 步驟 1:硬件連接 首先,您需要
    的頭像 發(fā)表于 10-18 11:32 ?682次閱讀

    ESP8266 太空人動畫的 OLED 顯示

    ESP8266 太空人動畫的 OLED 顯示
    的頭像 發(fā)表于 10-08 15:06 ?310次閱讀
    <b class='flag-5'>ESP8266</b> 太空人動畫的 OLED 顯示

    STM32 ESP8266阿里云鏈接源碼

    stm32F103C8T6 ESP8266 物聯網電表 登錄阿里云
    發(fā)表于 08-29 14:21 ?6次下載

    esp32和esp8266代碼共用嗎

    本文介紹ESP32和ESP8266兩款流行的微控制器在代碼共用性方面的可能性與差異性。 一、引言 隨著物聯網技術的飛速發(fā)展,越來越多的智能設備開始進入我們的生活。其中,ESP32和
    的頭像 發(fā)表于 08-19 18:23 ?1265次閱讀

    esp8266esp32區(qū)別是什么

    Xtensa? 32-bit LX6 CPU,主頻可達240MHz,具有更強大的處理能力。 內存 : ESP8266 :通常有64KB512KB的RAM,以及1MB4MB的閃存。 ESP
    的頭像 發(fā)表于 08-19 18:16 ?5675次閱讀

    esp8266不燒錄可以使用嗎

    ESP8266是一款非常流行的Wi-Fi模塊,廣泛應用于物聯網項目中。然而,如果不進行燒錄,ESP8266無法正常工作。 1. ESP8266
    的頭像 發(fā)表于 08-19 17:28 ?926次閱讀

    esp8266wifi模塊怎么連接手機

    ESP8266 : 使用USB轉TTL模塊ESP8266模塊與電腦連接。 通過串口調試助手發(fā)送AT指令配置ESP8266,包括設置WiFi模式為STA模式(客戶端模式),連接指定的W
    的頭像 發(fā)表于 08-19 17:27 ?3305次閱讀

    ESP8266為什么無法在網站上發(fā)布數據?

    我正在研究ESP8266。 固件版本 AI-v0.9.5.0 AT Firmware.bin。 當我開始這樣做時,我能夠在 thingspeak.com 上發(fā)布我的數據,但現在我無法發(fā)布
    發(fā)表于 07-16 07:25

    是否可以ESP8266用作橋接AP?

    我知道這個問題已經發(fā)布了很多次,但我沒有找到任何最終答案,它困擾著我...... 是否可以 ESP8266 用作橋接 AP?如果是這樣...AT 命令的腳本?
    發(fā)表于 07-15 07:23

    如何使用ESP8266WiFi嵌入設備中?

    我們考慮使用ESP8266 WiFi 嵌入到我們的設備中。
    發(fā)表于 07-12 10:41

    JoyLink移植esp8266當中,esp8266使用的是RTOS_SDK還是NON_RTOS_SDK?

    我看到esp8266有移植京東JoyLink 2.0的文檔,但是文檔中提及的jd_demo卻找不到,哪位大神幫忙指點一下,謝謝。 小弟有以下幾個疑問: 1,JoyLink移植esp8266當中
    發(fā)表于 07-11 07:28

    ESP8266網絡天氣時鐘OLED顯示

    基于ESP8266實現網絡獲取天氣和時鐘并OLED顯示
    的頭像 發(fā)表于 06-28 04:46 ?1294次閱讀
    <b class='flag-5'>ESP8266</b>網絡天氣時鐘OLED顯示

    國產低成本Wi-Fi SoC解決方案芯片ESP8266ESP8285對比差異

    ESP8285對比ESP8266差異如下: 1、ESP8285內部集成1/2MB Flash,DOUT模式。ESP8266則需要外接Flash; 2、
    的頭像 發(fā)表于 05-17 11:44 ?1426次閱讀
    國產低成本Wi-Fi SoC解決方案芯片<b class='flag-5'>ESP8266</b>與<b class='flag-5'>ESP</b>8285對比差異

    使用Wi-Fi ESP8266方案模組接入云平臺

    選擇Wi-Fi的應用模式,列出、加入、退出接入點,建立TCP/UDP連接、獲得狀態(tài)、發(fā)送數據等操作。ESP8266模塊的三種工作模式如下:①Sation模式:Sat
    的頭像 發(fā)表于 05-10 08:20 ?1892次閱讀
    使用Wi-Fi <b class='flag-5'>ESP8266</b>方案模組接入云平臺

    STM32、ESP8266與MQTT連接阿里云物聯網的串口通信異常解析

    阿里云物聯網平臺的過程中,串口通信異常成為了一個常見的挑戰(zhàn)。本文探討這些異?,F象及其可能的原因,并給出相應的解決方案。 首先,我們來談談STM32與ESP8266之間的串口通信問題。這兩者的組合通常用于實現數據的采集與傳輸。然
    的頭像 發(fā)表于 04-19 17:19 ?1512次閱讀