当制造商和业余爱好者想到物联网(物联网)时,他们想到了两件事:一个是ESP8266,另一个是Things Pake。一个是物联网系统的硬件部分,而另一个为系统提供了必要的API(或用户界面)。在此项目中,我将向您展示如何将ESP8266连接到ThingsPeak应用程序以及ESP8266 ThingsPeak协作的工作方式。
概述
我们已经看到了使用ESP8266和AREST平台的一个这样的物联网实现。使Things pak Difand和“与众不同”的原因是使用简单的HTTP协议来传输,存储和检索不同传感器的信息。
此外,ThingsPeak应用程序使我们能够记录传感器数据,跟踪位置甚至事物的社交网络。
ThingsPeak的另一个重要的事情(或者是独特的功能)是MATLAB的支持。ThingsPeak和Matlab之间的紧密关系导致将MATLAB的几个关键功能集成到Thesspepeak应用程序中。
这样的功能是分析和可视化用户数据,即以图形方式的传感器数据,没有MATLAB许可证。
将公司的内容搁置一旁,ThingsPeak应用程序是我们与物联网相关项目的绝佳工具,因此该项目重点介绍了基础知识,即如何将ESP8266连接到ThingsPeak应用程序,以及如何在我们未来的项目中使用ESP8266 Things -Peak界面。
创建Things pakeak帐户
您需要做的第一件事是用ThingsPeak创建一个帐户。由于与MATLAB合作,您可以使用Mathworks凭据使用此页面中的链接中的符号来登录到ThingsPeak:Thingspeak
如果您没有一个,则需要创建一个使用Mathworks的帐户并登录到ThingsPeak应用程序。
笔记:Mathworks帐户可用于MATLAB和ThingsPeak登录。
登录后,您需要创建一个新的通道,以存储数据。为此,请访问频道 - >我的频道,然后单击新频道。
在相应的部分中输入频道的名称和字段1的名称。通道中的字段用于保存数据,每个通道最多可以具有8个字段。输入详细信息后,保存频道。
就我而言,我创建了一个名为“测试通道”的频道,而字段1为“随机数”。您将在后面的部分中看到为什么。
您在ThingsPeak应用程序中还需要做其他一些事情,但是当您需要时,我会告诉它。
下一步是为项目准备硬件,其中包括ESP8266 WiFi模块,Arduino Uno板和一些连接电线。
该项目的先决条件
我将向您展示如何将ESP8266连接到ThingsPeak应用程序的两种方法。对于这两种方式,您需要确保将ESP8266模块加载或闪烁在命令固件上。
有关此的更多信息,我建议您仔细阅读项目中提到的程序如何更新Flash ESP8266固件。
笔记:
- 要刷新AT命令固件,您需要通过将GPIO0连接到GND并重置模块来启用ESP8266中的编程模式。
- 但是在此电路中(假设您已经刷新了固件),ESP模块处于正常模式,即GPIO0可以保持浮动。
使用AT命令固件刷新ESP后,您现在可以继续将ESP8266连接到ThingsPeak。正如我之前所说,您可以通过两种方式进行操作:一个是通过命令进行的,另一种方式是通过Arduino(即使是这种方式使用命令,但Arduino都可以控制它们)。
我将向您展示将ESP8266连接到ThingsPeak的两种方法。
ESP8266 Things Pake界面的电路图通过命令
为了将ESP8266连接到ThingsPeak的电路图非常简单。实际上,您可能以前已经看到过这种联系。Arduino Uno董事会仅用于在计算机和ESP8266之间传输数据,即它充当USB至uart转换器。
需要组件
- 任何Arduino董事会或USB到UART转换器
- ESP8266 WiFi模块(ESP-01)
- 连接电线
使用AT命令将ESP8266连接到ThingsPeak
将Arduino板连接到计算机,并打开Arduino的串行监视器,并使用以下命令检查连接性。
请注意,我将波特率设置为115200,并在串行显示器中选择了“ NL&CR”选项。
在获得“确定”响应后,您可以使用以下命令继续将ESP模块连接到WiFi网络。
用WiFi网络的名称替换SSID,然后输入密码代替密码。
现在,您将获得有关WiFi连接的确认响应,如下所示。
wifi获得了IP
好的
现在,您需要使用以下命令设置单个连接。
下一步是使用TCP协议连接到ThingsPeak API。为此,您需要使用以下命令。
另外,您可以使用主机API.ThingsPeak.com的IP地址,即184.106.153.149。
笔记:
- 启动TCP连接后,如果您不执行任何操作,则该连接将在一段时间后自动关闭,通常是1分钟后。
现在,您已成功启用了ESP8266和ThingsPeak之间的“ TCP”连接。接下来,您可以通过此TCP连接发送任何数据。
为此,请使用以下命令。
获取 /更新?api_key = xxxxxxxxxxxxxxxxxx&field1 = 255
在+cipclose
建立了TCP连接后,您可以使用某些命令发送数据。这部分可能有些棘手,但是尝试了几次,您将了解该过程。
为了发送数据,您需要发送三个不同的信息:一个是实际的发送命令,接下来是数据以及ThessPeak字段键,最后是CLOSE CONLECT CONNECTING命令。我将尝试以详细的方式解释这些步骤。
在发送数据之前,您需要获取API密钥。为此,转到频道(您刚刚创建的一个),然后单击“ API键”选项卡。在此下方,您可以找到Write API键,该键是16个字符的字母数字字符串。记下此键。
现在,使用以下命令初始化数据传输。
值51是要传输数据的长度。这包括完整的数据,包括API密钥和“ \ r”和“ \ n”值。对于此命令,您将获得以下响应。
>
现在键入以下信息并发送发送。在这里,“ xxxxxxxxxxxxxxxxx”不过是16个字符写API键,您刚刚复制了。数字“ 143”是您要传输到field1的实际数据。
键入此文本并击中发送后,您将不会得到任何响应。它实际上正在等待关闭命令。点击上述文本后,请立即键入以下命令并点击发送。
当您发送发送的那一刻,您将获得以下响应(不是确切的响应,而是类似的答案)。
发送确定
+ipd,1:5 claped
在这里,数字5表示,这是我的5Th给该键的消息。现在,打开ThingsPeak API并打开您的频道。在“私有视图”选项卡中,您可以在“字段1”图表中看到值'143'。
而已。如果您理解并遵循所有这些步骤,那么您可能已经成功将ESP8266连接到ThingsPeak API。要发送更多数据,请重复创建TCP连接的步骤。
ESP8266的电路图使用Arduino
由于我将编程Arduino并通过Arduino控制ESP8266,因此电路图将略有不同。但是组件将相同。
使用Arduino将ESP8266连接到ThingsPeak
我不想问一个旧问题,即您是否厌倦了手动键入所有AT命令?显然,答案是肯定的。Arduino来营救。按照上述电路图进行所有连接,我们将继续执行代码。
代码
使用以下代码上传到Arduino。请注意,您对代码进行了很少的更改。这些更改将是关于WiFi SSID,WiFi密码和API密钥(16个字符)。我认为,其余的值可以保持原样。
上传代码后,如果打开串行监视器(设置为9600),则可以看到将AT命令传输到ESP8266模块。
最初,AT命令将设置与ESP模块的WiFi连接。启用连接后,Arduino将建立与ThesptingPeak API的TCP连接,并每5秒传输随机数。
可以在您创建的频道(在“私有视图”选项卡下)中在ThesTyPeak API网站上进行监视此数据。
结论和应用
- 在此项目中,我向您展示了如何使用Direct At命令以及通过Arduino将ESP8266连接到ThingsPeak API。
- 使用ThingsPeak API,您可以监视来自世界任何地方的传感器数据。
- 最常用的传感器是DHT11湿度和温度传感器,DS18B20温度传感器和LM35。
14个回应
我为什么要失败?ESP8266无法连接到WiFi。
如果我要使用此代码并想在相同的代码中运行SEVRAL传感器,该怎么办?
忙...
RECV 60字节
发送确定
+IPD,323:http/1.1 400不良请求
服务器:nginx/1.9.3
日期:2018年7月16日星期一23:48:52 GMT
内容类型:文本/html
内容长度:172
连接:关闭
400不良要求
400不良要求
nginx/1.9.3
关闭
嘿
您是否得到了这个问题的解决方案。
谢谢
字符串myapi =“ gkbfk8h2xahu29zg”;// API密钥
字符串myHost =“ api.thingspeak.com”;
字符串myport =“ 80”;
void senddata_thingspeak(float value1)
{
int counter2 = 0;
//得到https://api.thingspeak.com/update?api_key = gkbfk8h2xahu29zg&field1=0
字符串url =“ get /update?api_key =”+ myapi;
url +=“&field1 =”;
url += realvalue(value1);
url +=“。”;
URL += DemimalValue(value1);
url +=“ \ r \ n \ r \ n \ r \ n”;
字符串cmd =“ at+cipstart = \” tcp \“,\” \“”;
cmd += myhost;
cmd +=“ \”,”;
cmd += myport;
Serial5.println(CMD);
字符串ip = serial5.5.ReadString();
serial.println(ip);
int len = url.length();
serial.println(url);
serial5.print(“ at+cipsend =”);
Serial5.println(Len);
while(!serial5.find(“>”)){
Counter2 ++;
如果(counter2 == 5000)休息;
}
serial5.print(url);
serial5.println(“ \ r \ n \ r \ n \ r \ n \ n \ n \ r \ n \ n \ r \ n”);
ip = serial5.ReadString();
serial.println(ip);
}
如何控制该项目中的继电器
如何添加和控制此启发中继
如果有免费的WiFi Internet,您能告诉我您必须在代码中进行哪些更改?
你好
任何人都可以解决将数据发送到ThingsPeak的问题
at+cipstart =“ tcp”,“ 184.106.153.149”,80
连接
好的
在+cipsend = 51
好的
> get /update?api_key = hmlaguhaib3k7444&field1 = 143
在+cipclose
忙...
发送确定
+IPD,323:http/1.1 400不良请求
服务器:nginx/1.7.5
日期:THU,2018年9月13日03:18:19 GMT
内容类型:文本/html
内容长度:172
连接:关闭
400不良要求
400不良要求
nginx/1.7.5
关闭
我如何检索Things pak数据?
espdata(“ at+cwjap = \”“+myssid+” \“ \”,\“”+mypwd+“ \” \“”,1000,debug);
1000的含义是什么?
编译时,我会在此代码中遇到错误。它说在此范围内没有宣布Espdata
当我手动输入命令时,一切都很好。我连接到WiFi并将数据发送到ThingsPeak。
但是,当我更改电路并将草图上传到Arduino中时,所有串行消息都将被打印,而不是ESP串行命令。我插入了一些调试代码,甚至注意到简单的命令是抛出错误。我错过了什么?电路和代码都是相同的。仔细检查所有电缆。我也检查了Thingspeak。Arduino没有上传数据。
当您上传Arduino草图时,您已经覆盖了AT固件。要使用AT命令,您必须再次上传AT固件。ESP8266中只能存在一个固件(Arduino Sketch,固件或Nodemcu或任何其他固件,只有一个固件,只有一个固件)。