如何将数据从 NodeMCU 发送到 Google Sheets

已发表: 2020-08-26
如何将数据从 NodeMCU 发送到 Google Sheets

使用 NodeMCU 固件通过互联网将传感器数据发送到 Google Sheets 电子表格中非常方便。 这可以通过 Google 脚本来完成,并且与许多云存储替代方案相比,具有无需花费任何成本的优点。

在本文中,我们将向您展示一个使用 ESP8266 和 DHT11 温度和湿度传感器发送温度读数的简单项目。

设置您的 Google 表格

首先,您需要创建一个新的电子表格。 登录您的 Google 帐户,转到“我的云端硬盘”,然后打开一个空白电子表格。

复制电子表格的 URL 密钥。 为电子表格指定一个直观的名称。 转到“工具”菜单下的“脚本编辑器”。

脚本编辑器

为您的脚本命名(再次强调,保持直观,尤其是当您正在执行多个项目时)。 使用给定的脚本并将其复制粘贴到 Google 脚本编辑器中。

脚本编辑器代码

在电子表格 ID 行下方,粘贴已保存电子表格中的 URL 密钥。

保存脚本并将其部署为应用程序。 您可以在“发布”菜单下找到此选项。 配置部署参数以确保电子表格正常工作。

  1. 保存“当前网络应用程序 URL”。
  2. 将所有脚本修订的项目版本保存为新版本(这允许 Google 更新您将来可能进行的任何修订)。
  3. 对于执行应用程序字段,添加以下“我(您的 Gmail 地址)”。
  4. 对于谁有权访问应用程序字段添加以下行“任何人,甚至匿名”。

设置 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 个。 然而,它省去了创建谷歌将响应的自己的加密算法所需的大量繁重工作和专业知识。

  1. 如果您还没有 PushingBox 帐户,请创建一个。
  2. 使用您也用于 NodeMCU 传感器数据项目的 Gmail 地址。
  3. 转到我的服务。
  4. 从“添加服务”选项添加新服务。
  5. 滚动到最后一个标题为 CustomURL 的选项,设置您自己的服务!
  6. 填写需要名称、URL 和方法的字段。
  7. 对于方法,选择 GET。
  8. 对于 URL,请使用以“script.google.com...”开头的 URL,该 URL 来自创建 Google Scrip 地址时生成的 URL。
  9. 提交服务并转到我的场景。
  10. 输入直观的名称并点击添加按钮。
  11. 当屏幕上出现提示时添加操作。
  12. 通过格式化每个变量的名称来配置 GET 方法。 此步骤将根据您记录的传感器数量以及记录内容而有所不同。

配置硬件

如果您在 ESP8266 上使用 DHT 传感器,请使用 5v 而不是 3.3v 为设备供电。 较低的电压可能无法为您提供正确的读数。

连接 ESP8266 上的引脚 2 和 D4。

配置软件

此设置适用于 Arduino IDE,最好是高于 1.6.4 的版本。 这也意味着您需要在系统上下载一些库。

可以通过以下链接找到这些库:

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

下一步涉及上传 Arduino 草图并针对您的项目和设备进行配置。 您只需为项目设置格式和自定义三个相关字段:

  1. 无线网络。
  2. 无线网络密码。
  3. 推箱 ID。

您如何处理 NodeMCU 数据传输?

有更多方法可以实现此目的,并且您可以使用大量传感器类型,使用带有 NodeMCU 固件的 ESP8266 将数据直接传输到 Google Sheets 或其他云平台。

您是否更喜欢编写自己的脚本和代码来个性化您的项目,还是在线搜索 github 和其他平台上经过验证的脚本并从中进行调整? 请在下面的评论部分告诉我们您最喜欢的代码和脚本源以及 ESP8266 和传感器组合。