如何将数据从 NodeMCU 发送到 Google Sheets
使用 NodeMCU 固件通过互联网将传感器数据发送到 Google Sheets 电子表格中非常方便。这可以通过 Google 脚本完成,并且与许多云存储替代方案相比,无需花费任何成本。
就本文而言,我们将向您展示一个用于发送温度读数的简单项目使用 ESP8266 和 DHT11 temp &湿度传感器。
设置您的 Google 表格
首先,您需要创建一个新电子表格。登录您的 Google 帐户,转到“我的云端硬盘”,然后打开一个空白电子表格。
复制电子表格的 URL 键。给电子表格一个直观的名称。转到“工具”菜单下的“脚本编辑器”。
为您的脚本命名(同样,保持直观,尤其是在您进行多个项目时)。使用给定的脚本并将其复制粘贴到 Google 脚本编辑器中。
在电子表格 ID 行下,粘贴您保存的电子表格中的 URL 键。
保存脚本并将其部署为应用程序。您会在“发布”菜单下找到此选项。配置部署参数以确保电子表格能够正常工作。
- 保存“当前网络应用 URL”。
- 将所有脚本修订版的项目版本保存为新版本 (这允许 Google 更新您将来可能进行的任何修订。
- 对于将应用程序执行为字段,添加以下“我(您的 Gmail 地址)”。
- 对于谁有权访问应用程序字段,添加以下行“任何人,甚至匿名”。
用于设置 ESP8266 和 DHT11 传感器的代码
这是什么您应该在将 ESP8266 连接到 DHT11 传感器时上传:
#include “ESP8266WiFi.h”
#include “DHT.h”
#define DHTPIN 2//什么数字您连接到的 pin
//pin2 到 esp 板上的 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="
const char* MY_SSID=“<YOUR_WIFI_NAME_HERE”;
const char* MY_PWD=“
void setup()
{
Serial.begin(115200);
dht.begin();
Serial.print(“连接到“+ *MY_SSID);
WiFi.begin (MY_SSID, MY_PWD);
Serial.println(“进入wl connect”);
while (WiFi.status() !=WL_CONNECTED)//未连接,..等待连接
{
delay(1000);
Serial.print(“.”);
}
Serial.println(“wl已连接”);
Serial.println(“”);
Serial.println(“已接受凭据!连接到wifi\n“);
Serial.println(“”);
}
void loop()
{
//在读数之间留出更多时间
//填充谷歌表,以避免超过来自 PushingBox 的免费请求数量
delay(10000);//10秒,(采样率 vs.服务调用配额)
float湿度数据=dht.readHumidity();
//读取温度为摄氏度(默认)
float celData=dht.readTemperature();
//读取温度为华氏度(isFahrenheit=true)
float fehrData=dht.readTemperature(true);
//检查失败的读取提前退出(再试一次)。
if (isnan(湿度数据) || isnan(celData) || isnan(fehrData))
{
p>Serial.println(“DHT 传感器读取失败!”);
return;
}
//计算热指数摄氏(isFahreheit=false)
float hicData=dht.computeHeatIndex(celData, modifiedData, false);
//计算华氏温度(默认)
float hifData=dht.computeHeatIndex(fehrData, heightData);
//以 115200 波特打印到串行监视器或您选择的终端
Serial.print(“Humidity:”);
Serial.print(湿度数据);
Serial.print("%\t");
Serial.print("温度单位: “);
Serial.print(celD ata);
Serial.print(" *C ");
Serial.print("Fehr 中的温度:");
Serial.print(fehrData);
Serial.print(" *F\t");
Serial.print("Cel 中的热指数:");
Serial.print(hicData);
Serial.print(" *C ");
Serial.print("Fehr 热指数:");
Serial.print(hifData);
Serial.print(" *F\n");
WiFiClient client;//实例化WiFi对象
//通过 PushingBox 使用我们的 WiFi 客户端启动或 API 服务
if (client.connect(WEBSITE, 80))
{
client.print(“GET/pushbox?devid=” + devid
+ “&hydrityData=” + (String) 湿度数据
+ “&celData=” + (String) celData
+“&fehrData=”+(字符串)fehrData
+“&hicData=”+(字符串)hicData
+“&hifData=”+(字符串) hifData
);
client.println("HTTP/1.1");
client.print("Host:");
client.println(WEBSITE);
client.println(“User-Agent: ESP8266/1.0”);
client.println(“Connection: close”);
客户端打印ln();
}
}
Google App Script 代码示例
以下是创建可读脚本所需的代码您的传感器数据传输。
GET 请求查询:
https://script.google.com/macros/s/
HumidityDat、celData、fehrData、hicData、hifData(GScript、PushingBox 和 Arduino 变量,按照您编写它们的顺序)
函数 doGet(e) {
Logger.log (JSON.stringify(e));//这是查看参数
Var result='Ok';
If (e.parameter==undefined) {
Result='No Parameters';
}
Else {
Var id='<您的电子表格 URL\;
Var sheet=SpreadsheetApp.openById(id).getActivesheet();
Var newRow=sheet.getLastRow() + 1;
Var rowData=[ ];
//var waktu=new Date()'
rowData[0]=new Date();//A列的时间戳
for (var param in e.parameter) {
logger.log('in for loop, param='+param);
var value=stripQuotes(e.param eter[param]);
switch (param) {
case 'humityData'://Parameter
rowData[1]=value;//Value在 B 列中
break;
case 'celData';
rowData[2]=value;
break;
case 'fehrData':
rowData[3]=value ;
break;
case 'hicData':
rowData[4]=value;
break;
case 'hifData':
rowData[5]=value;
break;
default:
result=“不支持的参数”;
}
Logger.log(JSON.stringify(rowData));
Var newRange=sheet.getRange(newRow, 1, 1, rowData.length);
newRange.setValues([rowData]);
}
返回ContentService.createTextOutput(result);
}
函数stripQuotes(value){
返回value.replace(/^[“']|['|]$/g, “”);
}
Setup PushingBox
此服务充当您之间的中间人DHT 传感器数据和 Google 表格。使用 PushingBox API,您可以将 HTTP 传输的数据转换为 Google 识别的加密 HTTPS 数据。
请注意,PushingBox 将您限制为每天 1,000 个请求。但是,它省去了创建 Google 将响应的自己的加密算法所需的大量繁重工作和专业知识。
- 创建一个 PushingBox 帐户(如果您还没有)。
- 使用您也用于 NodeMCU 传感器数据项目的 Gmail 地址。
- 转到我的服务。
- 从添加一个服务选项。
- 滚动到最后一个名为 CustomURL 的选项,设置您自己的服务!
- 填写需要名称、URL 和方法的字段。
- 对于方法,选择 GET。
- 对于 URL,使用以“script.google.com...”开头的 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 草图并为您的设备进行配置项目和您的设备。您只需为项目设置格式和自定义三个相关字段:
- Wi-Fi 网络。
- Wi-Fi 密码。
- PushingBox ID。
你如何处理 NodeMCU 数据传输?
有更多的方法可以做到这一点,你可以使用大量的传感器类型来传输数据。带有 NodeMCU 固件的 ESP8266 直接连接到 Google Sheets 或其他云平台。
您更喜欢编写自己的脚本和代码来个性化您的项目,还是在 github 和其他平台上在线搜索经过验证的脚本并从那里适应?在下面的评论部分告诉我们您最喜欢的代码和脚本源以及 ESP8266 和传感器组合。
0 评论