ThingSpeak 介绍






4.44/5 (7投票s)
ThingSpeak 是什么,它提供的各种功能和特性,以及一个快速的编程概述,教你如何使用它。
引言
物联网(IoT)是“互联事物”的一个系统。事物通常包括一个嵌入式操作系统以及与互联网或其他事物通信的能力。物联网系统中连接各种“事物”的关键要素之一是物联网服务。物联网系统中事物本身的组成有一个有趣的含义,那就是事物本身什么也做不了。最基本的要求是它们必须具备与其他“事物”连接的能力。但当事物能够直接或通过其他“事物”连接到“服务”时,物联网的真正力量才得以发挥。在这样的系统中,服务充当着一个隐形的管理者,提供从简单的数据收集和监控到复杂的数据分析等各种功能。下图说明了物联网服务在物联网生态系统中的位置。
“ThingSpeak”就是这样一种物联网应用平台,它提供了广泛的分析、监控和反作用能力。让我们详细了解 ThingSpeak。
什么是 ThingSpeak
ThingSpeak 是一个专门为构建物联网应用而提供的各种服务的平台。它提供了实时数据收集、以图表形式可视化收集到的数据、创建插件和应用程序以与 Web 服务、社交网络和其他 API 进行协作等功能。我们将在下面详细讨论这些功能。
ThingSpeak 的核心元素是“ThingSpeak 频道”。频道存储我们发送到 ThingSpeak 的数据,并包含以下元素:
- 8 个用于存储任何类型数据的字段 - 可用于存储来自传感器或嵌入式设备的数据。
- 3 个位置字段 - 可用于存储纬度、经度和海拔。这些对于跟踪移动设备非常有用。
- 1 个状态字段 - 一个简短的消息,用于描述存储在频道中的数据。
要使用 ThingSpeak,我们需要注册并创建一个频道。一旦有了频道,我们就可以发送数据,让 ThingSpeak 处理它,并检索相同的数据。让我们通过注册和设置频道来开始探索 ThingSpeak。
入门
打开 https://thingspeak.com/,然后点击页面中心的“立即开始”按钮,您将被重定向到注册页面(点击最右侧的“注册”按钮也可以到达同一个页面)。填写所需信息,然后点击“创建账户”按钮。
现在您应该看到一个页面,确认账户已成功创建。确认消息会在几秒钟后消失,最终页面应如下图所示:
继续点击“新频道”。您应该看到如下页面:
您可以根据需要更改名称,并添加相应的描述。您可以在元数据字段中添加任何其他有用的描述。在同一页面上,您应该看到纬度、经度和海拔的字段。此外,当您向下滚动时,您应该看到一个复选框,上面写着“公开?”。让我们详细了解各个字段和选项卡。
- 纬度、经度和海拔 - 这些字段对应于“事物”的位置,对于移动的事物尤为重要。
- 公开? - 如果频道设置为公开,则任何人都可以查看频道的**数据流**和相应的图表。如果未选中此复选框,则频道是私有的,这意味着对于每次读取或写入操作,用户都必须提供相应的 API 密钥。
- URL - 这可以是您的博客或网站的 URL,如果指定,它将出现在频道的公开视图中。
- 视频 ID - 这是您的 YouTube 或 Vimeo ID 对应的 ID。如果指定,视频将出现在频道的公开视图中。
- 字段 1 至 8 - 这些字段对应于传感器或“事物”发送的数据。字段必须先添加才能用于存储数据。默认情况下,添加了字段 1。如果您尝试向未添加的字段发布数据,您的请求仍然会成功,但您无法在图表中看到该字段和相应的数据。您可以点击每个字段前的小框来添加它。一旦您点击“添加字段”框,一个默认的标签名称就会出现在每个字段对应的文本框中,“添加字段”文本会变为“移除字段”。您可以编辑添加字段时出现的默认文本,使其更有意义。例如,在下面的屏幕截图中,我已经将字段 2 的文本修改为“SensorInput”。要移除已添加的字段,只需勾选“移除字段”框。点击后,“移除字段”文本会变回“添加字段”,并且相应的字段文本将被清除。
编辑完字段后,点击“保存频道”按钮。您现在应该看到如下页面,其中默认显示“私密视图”选项卡。
私密视图显示我们添加的每个字段对应的图表。现在点击“公开视图”选项卡。这应该与我们在“私密视图”选项卡中看到的一致,因为我们的频道是公开的。如果您的频道不是公开的(在“频道设置”选项卡中未选中“公开”复选框),则公开视图选项卡会显示“此频道未公开”的消息。
现在点击“API 密钥”选项卡。您应该看到一个类似的屏幕。写入 API 密钥用于向频道发送数据,读取 API 密钥用于读取频道数据。当我们创建一个频道时,默认会生成一个写入 API 密钥。我们通过点击此选项卡下的“生成新的读取 API 密钥”按钮来生成读取 API 密钥。您还可以为每个读取 API 密钥添加备注。
注意:请注意,点击“生成新的写入 API 密钥”将覆盖之前的密钥。您在任何时候都只有一个写入 API 密钥。此外,如果您的频道是私有的,其他人只能通过使用读取 API 密钥来查看频道的**数据流**和图表。请将读取 API 密钥分享给已批准并授权查看您频道的人。
现在点击“数据导入/导出”选项卡,您应该看到一个类似的屏幕。此选项卡用于将“逗号分隔值 (CSV)”数据从文件导入频道。您也可以在此处以 CSV 格式下载频道的**数据流**。此选项卡还概述了如何通过提供发送和查看 API 的 URI 来发送和查看数据。
使用 C# .NET 更新状态字段
既然我们已经进行到这一步,让我们开始实际操作。让我们尝试使用 C# 和 .NET 来更新频道中的字段。我使用了 Visual Studio 2013 Express for Web,但代码在其他版本中也基本相同。
- 打开 Visual Studio 并创建一个新项目。如果您被提示选择模板,请选择一个空白 Web 应用程序。
- 在解决方案资源管理器中,右键单击项目,选择“添加”->“新项”,然后选择“Web 窗体”。添加窗体后,在 form 标签内添加以下代码:
<label id="lblError" runat="server" style="display:none;font-weight:bold;color:red"></label>
如果出现任何异常,此标签将用于显示错误消息。
- 转到代码隐藏文件,并在页面加载时添加以下代码:
try { const string WRITEKEY = "YOUR_KEY"; string strUpdateBase = "http://api.thingspeak.com/update"; string strUpdateURI = strUpdateBase + "?key=" + WRITEKEY; string strField1 = "18"; string strField2 = "42"; HttpWebRequest ThingsSpeakReq; HttpWebResponse ThingsSpeakResp; strUpdateURI+= "&field1=" + strField1; strUpdateURI+= "&field2=" + strField2; ThingsSpeakReq = (HttpWebRequest)WebRequest.Create(strUpdateURI); ThingsSpeakResp = (HttpWebResponse)ThingsSpeakReq.GetResponse(); if(!(string.Equals(ThingsSpeakResp.StatusDescription,"OK"))) { Exception exData = new Exception(ThingsSpeakResp.StatusDescription); throw exData; } } catch (Exception ex) { lblError.InnerText = ex.Message; lblError.Style.Add("display", "block"); throw; }
代码解析:我首先构建了用于更新字段的 URI。初始 URI 是 http://api.thingspeak.com/update,需要附加密钥。请注意,您需要将字符串 YOUR_KEY 替换为实际的写入 API 密钥,您在注册并创建频道后才能获得该密钥。
之后,我声明了两个常量,我将把它们推送到我的 ThingSpeak 频道。之后,我将这些字段作为参数 field1 和 field2 附加到 URL。您可以类似地推送字段 8 直到字段 8。之后,我使用 `WebRequest.Create` 方法创建了一个与该 URI 对应的 `HTTPWebRequest` 对象。之后,我使用 `GetResponse` 方法检索响应,并将其赋给 `response` 对象。如果数据已成功发送到频道,则结果的状态描述将是“OK”。我检查是否有任何非 OK 的状态描述,以防出现错误,我将抛出一个异常,并在标签中显示结果消息。
在一系列更新之后,私密视图选项卡中每个字段的图表将如下所示:
每个点都对应于发布到频道的值以及发布的时间。将鼠标悬停在点上可获取有关发布该值的确切日期和 GMT 偏移量的更多详细信息。
请注意,在上面的示例中,我向频道发送了一些示例值。您可以在此处发送任何数据,例如温度传感器的周期性读数或电机上的 RPM 值。Y 轴显示了我们为每个标签指定的名称。
让我们尝试一些其他有趣的事情。
发布您的当前纬度、经度和海拔到 ThingSpeak
考虑下面的示例,我使用 HTML5 GeoLocation API 检索我的当前纬度、经度和海拔,并使用 JavaScript 将其发布到 ThingSpeak。我有一个简单的 HTML 页面,其中有一个名为“fOnLoad”的函数,该函数在页面加载完成后调用。在此函数内部,我将以下代码调用 HTML5 GeoLocation API 的 `getCurrentPosition` 方法:
if(navigator.geolocation) { navigator.geolocation.getCurrentPosition(UpdateDataToThingSpeak); }
代码 `navigator.geolocation` 检查浏览器是否支持地理位置。如果满足此条件,则调用 `getCurrentPosition` 方法。一旦此方法调用成功,`UpdateDataToThingsSpeak` 方法就会被调用。
function UpdateDataToThingSpeak(GeoData) { var lat = GeoData.coords.latitude; var lon = GeoData.coords.longitude; var alt = GeoData.coords.altitude; if(alt == null) { alt = 0; } var HttpAgent = new XMLHttpRequest(); var URI = "http://api.thingspeak.com/update?key=YOUR_KEY&lat=" + lat + "&long=" + lon + "&elevation=" + alt; HttpAgent.open("POST", URI); HttpAgent.send(); }
在此方法中,我从 `GeoData` 参数(此处 `GeoData` 可用任何名称替换)使用 `GeoData.coords` 检索纬度、经度和海拔。在某些浏览器中,海拔可能返回 null。因此,我添加了一个检查,并在这种情况下将海拔设置为零。之后,我实例化了一个 `XMLHttpRequest` 类型的对象。我们将使用它来调用 ThingSpeak API。
注意:海拔必须始终为整数,因此我们不能传递“null”或任何其他字符串。
下一步是构建 URI,将纬度、经度和海拔作为查询字符串参数附加到 lat、long 和 elevation。之后,我使用 `XMLHttpRequest` 对象的 `open` 和 `send` 方法调用 API。我使用 Internet Explorer 11 运行此示例。运行后,要检查**数据流**是否已更新,请运行以下 URL:
http://api.thingspeak.com/channels/YOUR_CHANNEL_ID/feed.json?key=YOUR_KEY&location=true
注意:如上所述,您必须将 YOUR_KEY 替换为您的写入 API 密钥,并将 YOUR_CHANNEL_ID 替换为您频道的 ID。此外,如果您调用上述 URL 而不指定 location=true,则无法看到纬度、经度和海拔字段。
在多次更新我的位置信息后,运行上述 URL 后出现的屏幕如下:
ThingSpeak 应用
ThingSpeak 提供了一些应用程序,可以让我们更轻松地与 Web 服务、社交网络和其他 API 集成。以下是一些 ThingSpeak 提供的应用程序:
- ThingTweet - 允许您通过 ThingSpeak 发布消息到 Twitter。本质上,这是一个 TwitterProxy,它将您的帖子重定向到 Twitter。
- ThingHTTP - 允许您连接到 Web 服务,并支持 HTTP 的 GET、PUT、POST 和 DELETE 方法。
- TweetControl - 使用此功能,您可以监视特定关键字的 Twitter **数据流**,然后处理请求。一旦在 Twitter **数据流**中找到特定关键字,您就可以使用 ThingHTTP 连接到另一个 Web 服务或执行特定操作。
- React - 当频道满足特定条件时,发送一条推文或触发一个 ThingHTTP 请求。
- TalkBack - 使用此应用程序可以排队命令,然后允许设备根据这些排队命令执行操作。
- TimeControl - 使用此应用程序,我们可以在将来的指定时间执行 ThingTweet、ThingHTTP 或 TalkBack。我们还可以使用它来允许这些操作在一周内的指定时间发生。
除了上述之外,ThingSpeak 还允许我们使用 HTML、CSS 和 JavaScript 创建 ThingSpeak 应用程序作为插件,我们可以将它们嵌入到网站或我们的 ThingSpeak 频道中。
结论
物联网系统的关键要素之一是物联网服务。ThingSpeak 就是这样一个应用程序平台,提供各种功能。ThingSpeak 的核心是频道,可用于存储和处理从“事物”收集的数据。ThingSpeak 还提供了各种应用程序,用于与 Web 服务、其他 API 和社交网络集成,并提供了创建应用程序作为插件的能力。它是一个很棒的平台,具有丰富的可能性来探索物联网的集成。