将 MKR1000 数据发送到 Google 表格
组件和用品
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
应用和在线服务
| ||||
|
关于这个项目
该项目允许您使用 MKR1000 处理数据,并通过 WiFi 将该数据发送到云端的 Google 表格。该项目无需任何信用卡注册或使用专有的黑盒 API 即可完成。对于这个特定示例,我使用了廉价且无处不在的 DHT11 环境传感器,但是您可以轻松地为您喜欢的任何传感器或设备更改包含的 Arduino 代码。现在值得指出的是,这个项目可以很容易地与我的一个相关项目结合在一个草图中,该项目将 DHT11 数据上传到 Thingspeak.com 以进行图表绘制。
这是四个部分中的第一部分。在项目的第一部分,您将使用包含的 Google App Script 代码设置和配置您自己的 Google Sheet 以接受您的 WiFi 数据。
第 1 部分:创建和部署您的 Google 表格
1. 如果您没有,请注册一个免费的 Google 电子邮件。
2. 登录您的免费 Google 帐户并创建一个新的“Google 表格”,该电子表格将由我们的 DHT 传感器值通过 WiFi 填充。此时,您需要复制并保存您的电子表格 URL 密钥。此键列在新电子表格的“/d/”和“/edit”之间的 URL 中(参见蓝色圆圈)。
3. 将您的电子表格命名为“环境数据”等原始名称,现在我们必须创建我们的 Google App 脚本(类似于 JavaScript),它将处理我们的数据并正确填充我们的电子表格。要插入我们的 Google App 脚本,我们首先从电子表格导航到脚本编辑器:
工具 →脚本编辑器
我们现在将进入 Google Script Editor 页面。现在我们可以将 Gscript 命名为更具创意的名称,例如“My Environmental GScript”。此时,我们在脚本编辑器页面上还有四件事要做。
A) 将包含的 Google Script 代码复制并粘贴到编辑器中
B) 将之前保存的电子表格 URL 密钥(第 2 步)复制并粘贴到 Google Script 代码(引号之间)中的正确行中,其中显示:
var id =' '; // 电子表格 ID
C) 保存脚本:File→Save All
D) 部署为 Web 应用程序:发布-→ 部署为 Web 应用程序...
4. 我们设置 Google 工作表的最后一步将涉及配置 Web 部署参数。正确设置所有这些字段很重要。如果您没有准确设置所有四个字段,您的电子表格将无法正常工作。
字段 1) 复制并保存“Current web app URL: ” 刚刚生成,稍后我们在 PushingBox 中配置 API 时会用到它。
字段 2) 将项目版本另存为“new ” 在每次迭代中,请务必注意,如果您不为所做的每个脚本修订版制作新的项目版本(如果您决定进行任何修订),则您的脚本修订版将不会在网络上更新。这是违反直觉的,而且很容易被忽视,但 Google 目前就是这样配置这个系统的。
字段 3) “执行应用程序为
:
<代码> 代码> “ 将其设置为“me(您的 GMail 在这里)
”。
字段 4) “谁有权访问该应用
:
“ 将此设置为“任何人,甚至匿名
.”
第 2 部分:配置 PushingBox
Pushingbox.com 作为简单、免费且简单的 API 中间人,让我们的 DHT 数据对 Google 表格来说是可口的。使用 PushingBox API 中介的需要是将我们的 HTTP 传输数据转换为 Google 兼容的 HTTPS 加密数据。我们可以尝试制作一个非平凡的加密算法来满足标准要求,但使用 PushingBox 更容易,我们每天最多可以免费获得 1,000 个请求。此外,我们不必处理任何“黑匣子”API,我们可以在其中输入我们自己的参数,但几乎无法控制自定义,也无法真正了解该功能的实际工作方式。以下是配置 Pushingbox 以使用我们的数据的步骤:
1. 使用您的 Gmail 创建一个 PushingBox 帐户。
2. 在顶部点击“我的服务”
3. 现在在“我的服务”中,转到“添加服务”框,然后单击“添加服务”。
4. 您要创建的服务是服务列表中的最后一项,名为:”CustomURL,
设置你自己的服务!
”。现在选择这个 CustomUrl 服务。
5. 一个盒子会打开并要求三个项目。如下填写,然后点击提交
您的 CustomURL 配置的名称:
根网址: 此网址将以开头 https://script.google.com... 因为这是您在第 1 部分中保存的 Google Script 地址
方法:
6. 提交您的服务后,您现在必须为该服务创建一个场景。为此,请选择页面顶部的“我的场景”。
7. 在“创建方案或添加设备”框中为您的方案输入适当的名称。为服务命名后,点击右侧的“添加”按钮。
8. 现在它会询问“为您的场景添加一个操作”您现在应该选择您在上一步中创建的服务名称旁边列出的“向该服务添加一个操作”按钮。这会将您的新场景分配给您的新服务。
9. 将打开一个数据框,询问您的“Get”或“Post”方法(我们使用 Get 方法,尽管这似乎违反直觉)。要将我们所有的 DHT 数据(五个数据点)记录到您的 Google 表格中,您需要将 Google App Script 中列出的变量名称链接到我们的 Arduino 草图中列出的名称。在 Pushingbox API 中正确格式化名称将完成此链接任务。将以下字符串复制并粘贴到您的框中。
?hydrityData=$humityData$&celData=$celData$&fehrData=$fehrData$&hicData=$hicData$&hifData=$hifData$
注意: 语句以“ 开头 ? " 表示“获取”。
结果应如下所示,但使用您自己的方案名称和设备 ID 号:
确保复制您的“DeviceID”字符串,下一步的初步测试和第 4 部分的 Arduino Sketch 都需要它。
3. 测试 API
在我们进入最后一个陡坡之前,我们对 MKR1000 进行编程以通过网络发送我们的 DHT 数据,测试我们迄今为止所做的一切是否正确会很有帮助。如果我们等待完成硬件部分,那么可能更难以追踪任何错误的原因。幸运的是,到目前为止我们有一个简单的方法来测试我们的代码。我们可以直接在我们的网络浏览器地址栏中输入一些硬编码的伪数据,并检查我们的 Google 表格是否正确更新。这是您可以复制并粘贴到浏览器地址栏中的示例。
http://api.pushingbox.com/pushingbox?devid=(YOUR-DEVID-HERE)&warmityData=33&celData=44&fehrData=111&hicData=22&hifData=77
如果您愿意,您甚至可以为后续行重新输入具有不同值的新假数据,但是请记住,您每天只有 1,000 个来自 Pushingbox 的请求,所以不要发疯!如果此过程没有更新您的电子表格,请在尝试第 4 部分之前返回并查看本说明的第 1 -3 部分是否有错误。
第 4 部分
在确认您能够将一些硬编码的伪数据直接从您的浏览器推送到您的 Google 表格后,您现在已准备好进行下一步,包括通过 WiFi 通过 Pushingbox 将数据直接从 MKR1000 发送到 Google 表格。在将随附的 Arduino 草图上传并运行到 MKR1000 之前,您必须完成以下三个步骤。
硬件
1. 将 MKR1000 连接到 DHT:这是一项简单的任务,尤其是在使用 MKR1000 时。我建议您使用 MKR1000 上提供的 5 伏电压为 DHT 供电,列为 5 伏。据说 DHT 可以在 3.3v 下工作,但我还没有发现 DHT 读数在较低电压下可靠。您可以选择使用多个不同的引脚将数据从 DHT 输入到 MKR1000,但在我的草图中,我使用 引脚 5 映射到Pin D5 在电路板顶部的 MKR1000 上。
软件(1)
2. 设置 Arduino IDE 以与 MKR1000 配合使用有几个步骤。这些步骤包括下载两个库并使用正确的 MRK1000 板包(工具-->板-->板管理器)配置 Arduino IDE(1.6.4 或更高版本)。你们中的许多人已经安装了您需要的所有软件,对于那些还没有安装的人,下面是检索所需库和 MKR1000 板支持包的链接。另请注意,我必须使用先前版本的 MKR1000 板包,因为最新的 MKR1000 板支持包无法正常工作。我希望在您阅读本文时此问题已得到解决。
https://www.arduino.cc/en/Reference/WiFi101
草图所需的两个库:
- https://github.com/arduino-libraries/WiFi101
- https://learn.adafruit.com/dht
软件(2)
3. 您现在已准备好进行项目的最后一步,您需要复制并粘贴随附的 Arduino 草图,针对您的设备对其进行自定义,然后将草图上传到您的 MKR1000。该草图还以 9600 波特中继串行输出,因此您可以监控通过 WiFi 发送的数据。您必须自定义的 Arduino 草图上的三个字段是:
A) 您的 WiFi 名称
B) 您的 WiFi 密码
C) 您的推送盒设备 ID (devid)
就是这样,你完成了!如果一切都正确完成,您的输出将类似于下图:
感谢所有构建这个项目的大部分软件组件的人。我在代码注释中列出了他们的名字以供适当归属。请随意使用该项目的任何部分来创建您自己的魔法。
-SDB
代码
- 使用 DHT 通过 PushingBox 将 MKR1000 转换为 Google Sheets
- 用于以 HTTPS 格式接收无线数据的 Google 脚本
- PushingBox URL 字符串(用于 HTTPS 胶水)
MKR1000 到 Google Sheets 通过 PushingBox 使用 DHTArduino
这个 Arduino Sketch 通过 WiFI 将数据推送到推送框进行加密,然后推送到 PushingBox 以将该数据记录到您的 Google Sheet//-------------------- --------------------------//此草图结合了 Adafruit DHT 传感器和 tdicola 用于 dht.h 库// https://learn .adafruit.com/dht/overview// https://gist.github.com/teos0009/acad7d1e54b97f4b2a88//其他作者Arduino和相关谷歌脚本//Aditya Riska Putra//Ahmed Reza Rafsanzani//Ryan Eko Saputro//另见://http://jarkomdityaz.appspot.com////ELINS UGM////为MKR1000的Hackster.io项目修改//斯蒂芬博尔赛(波特兰,俄勒冈州,美国)//因为Arduino不能https,我们需要使用Pushingbox API(使用http)来运行//Google Script(使用https)。或者使用 Ivan 的 SecureWifi 加密#include#include "DHT.h"#define DHTPIN 5 // 我们连接到哪个引脚,pin1 是第 5 个引脚 // 取消注释您使用的任何 DHT 传感器类型!#define DHTTYPE DHT11 // DHT 11//#define DHTTYPE DHT21 // DHT 21//#define DHTTYPE DHT22 // DHT 22DHT dht(DHTPIN,DHTTYPE);const char WEBSITE[] ="api.pushingbox.com"; //pushingbox API serverconst String devid ="YOUR_DEVICEID"; //我们Scenarioconst的Pushingbox设备ID char* MY_SSID ="YOUR SSID";const char* MY_PWD ="YOUR WiFi PASSWORD";int status =WL_IDLE_STATUS;//如果你不想使用DNS(并减少你的草图size)// 使用数字 IP 代替服务器名称://IPAddress server(74,125,232,128); // Google 的数字 IP(无 DNS)void setup() { //初始化串口并等待端口打开:Serial.begin(9600); while (!Serial) {; // 等待串口连接。仅本地 USB 端口需要 } // 检查屏蔽是否存在: if (WiFi.status() ==WL_NO_SHIELD) { Serial.println("WiFi shield not present"); // 不要继续:while (true); } // 尝试连接到 Wifi 网络:while (status !=WL_CONNECTED) { Serial.print("Attempting to connect to SSID:"); Serial.println(MY_SSID); //连接到WPA/WPA2网络。如果使用open/WEP网络,请更改此行 status =WiFi.begin(MY_SSID, MY_PWD); // 等待 10 秒连接:delay(10000); } Serial.println("连接到wifi");打印无线状态(); }void loop() { // 在测量之间等待。延迟(10000); // 更喜欢使用浮点数,但包大小或浮点数转换不起作用 // 将来会使用字符串函数或浮点数转换函数进行修改 int 湿度数据 =dht.readHumidity(); // 读取摄氏温度(默认) int celData =dht.readTemperature(); // 读取温度为华氏度 (isFahrenheit =true) int fehrData =dht.readTemperature(true); // 检查是否有任何读取失败并提前退出(重试)。如果(isnan(湿度数据)|| isnan(celData)|| isnan(fehrData)){ Serial.println(“无法从DHT传感器读取!”);返回; } // 以华氏度为单位计算热量指数(默认) int hifData =dht.computeHeatIndex(fehrData, modifiedData); // 以摄氏度为单位计算热指数 (isFahreheit =false) int hicData =dht.computeHeatIndex(celData, heightData, false); Serial.print("湿度:");串行打印(湿度数据); Serial.print("%\t"); Serial.print("温度:");串行打印(celData); Serial.print(" *C "); Serial.print(fehrData); Serial.print(" *F\t"); Serial.print("热指数:"); Serial.print(hicData); Serial.print(" *C "); Serial.print(hifData); Serial.println(" *F\n");Serial.println("\n向服务器发送数据..."); // 如果获得连接,则通过 serial:WiFiClient 客户端返回报告; //实例化WiFi对象,可以从这里或全局范围 //API服务通过PushingBox使用WiFi客户端然后中继到谷歌 if (client.connect(WEBSITE, 80)) { client.print("GET /pushingbox?devid=" + devid + "&hydrityData=" + (String) 湿度数据 + "&celData=" + (String) celData + "&fehrData=" + (String) fehrData + "&hicData=" + (String) hicData + "&hifData=" + (String)数据 ); // HTTP 1.1 提供持久连接,允许批量请求 // 或通过管道传输到输出缓冲区 client.println(" HTTP/1.1"); client.print("主机:");客户端打印(网站); client.println("用户代理:MKR1000/1.0"); //对于MKR1000,不像esp8266,不关闭连接client.println(); Serial.println("\n数据已发送"); }}void printWifiStatus() { // 打印您连接的网络的 SSID:Serial.print("SSID:"); Serial.println(WiFi.SSID()); // 打印你的 WiFi 盾的 IP 地址:IPAddress ip =WiFi.localIP(); Serial.print("IP 地址:"); Serial.println(ip); // 打印接收到的信号强度:long rssi =WiFi.RSSI(); Serial.print("信号强度(RSSI):");串行打印(RSSI); Serial.println("dBm");}
用于以 HTTPS 格式接收无线数据的 Google 脚本JavaScript
将此粘贴到您的 Google Sheet 的脚本编辑器中以接收您的无线数据。记住它必须是加密/安全证书 HTTPS 格式,这就是为什么我使用 PushingBox//------------------------- ---------------------//最初由Mogsdad@Stackoverflow 发布//修改为jarkomdityaz.appspot.com//修改为Hackster.io by Stephen Borsay// - - - - - - - - - - - - - - - - - - - - - - - -/*得到请求查询:https://script.google.com/macros/s//exec?celData=data_here---------------------- -----------------------------------------------GScript, PushingBox和 Arduino/ESP8266 变量依次为:湿度DatcelDatafehrDatahicDatahifData---------------------------------------- -----------*//* 使用电子表格 API */function doGet(e) { Logger.log( JSON.stringify(e) ); // 查看参数 var result ='Ok'; // 假设成功 if (e.parameter ==undefined) { result ='No Parameters'; } else { var id =' PushingBox URL 字符串(用于 HTTPS 胶水)HTML
这是用于连接 Arduino/MKR1000 变量名称的字符串,这些变量名称以完全相同的名称传输到 Google 表格。使用 PushingBox 作为安全性启用中介 RESTful。?hydrityData=$humityData$&celData=$celData$&fehrData=$fehrData$&hicData=$hicData$&hifData=$hifData$
定制零件和外壳
其他数据
其他无线https://github.com/sborsay/Arduino_Wireless示意图
布局制造工艺