主要内容

控制一个通过ESP8266的对话的灯

此示例显示了如何从ThingsPeak™对讲队列中获取命令,然后使用命令更改板载LED的状态。

当您的应用程序涉及只有在队列中有命令时才能运行的计算机时,请使用对话。

在此示例中,您写打开或者关掉到您的对话队列和设备更改板上LED的状态以匹配命令。使用对讲应用程序通过Web界面或HTTP命令将设备命令写入列表。您可以在列表中存储多达8000个命令。每次设备读取命令列表时,都会读取单个命令并从列表中删除该命令。

金宝app支持的硬件

  • ESP8266设备

  • nodemcu

  • Wemos

先决条件

您必须至少设置一个频道才能完成此示例。创建一个频道如图所示在新频道中收集数据,并记录写API键。您还需要设置对话。去应用>对讲并选择新的对讲

将命令添加到对话队列

您可以通过两种方式之一将命令添加到对话队列中。

  • 使用Things pak顶嘴Web界面将命令添加到对讲队列中。您可以配置对讲机最多具有8000个命令。

  • 使用Things pakeap api。您可以使用HTTP POST请求将命令添加到队列中。在以下帖子中,替换talkback_id,,,,your_talkback_api_key,,,,talkback_command, 和位置_number具有适合您的频道的值。

发表https://api.thingspeak.com/talkbacks/talkback_id/commands api_key = your_talkback_api_key command_key command_string = talkback_command position = position_number

编程您的设备

1)下载最新的Arduino®IDE。

2)添加ESP8266板包。

3)下文件>喜好, 进入https://arduino.esp8266.com/stable/package_esp8266com_index.json进入其他董事会经理URL

4)选择工具>董事会>董事会经理。进入ESP8266在搜索栏中,然后选择并安装软件包。

5)在工具菜单,在Arduino IDE中选择适当的端口和板。用于生成此示例的硬件使用了节点MCU 1.0(ESP 8266–12E)选项。

6)将代码粘贴到Arduino IDE中。添加您的网络信息,对讲API密钥和对话号码。

7)对设备进行编程,然后观看串行监视器,并在消耗命令时观察更改。执行的每个命令将从列表中删除。消耗后,您需要在列表中添加更多命令。

代码

1)首先包括适当的库和定义变量。输入您的网络SSID和密码。输入您的频道编号和对讲参数:mytalkbackidmytalkbackkey

/* WiFi FetchCommandFromTalkback说明:每60秒检查一次对话队列,并根据获取的最新命令设置内置LED状态。使用命令turn_on和turn_off打开和关闭LED。对话文档可以在//www.tatmou.com/help/help/thingspeak/talkback-app.html上找到。硬件:基于ESP8266的董事会版权所有2018,The Mathworks,Inc。 */ #include  char ssid [] = ;//您的网络ssid(name)char Pass [] = <输入您的密码>;//您的网络密码WificLient客户端;unsigned long myTalkBackid = <输入您的对讲ID>;const char * myTalkBackKey = <输入您的对讲API键>;

2)在设置功能,初始化LED并启动串行显示器。

void setup(){pinmode(led_builtin,output);//设置LED Serial.Begin(115200);//初始化串行}

3)在主循环中,首先建立与本地Wi-Fi网络的连接。使用正确的参数创建邮政消息。提出帖子请求,验证结果,然后检查对讲命令。等待60秒,然后再次检查队列。

void loop(){//连接或重新连接到wi-fi if(wifi.status()!= wl_connected){serial.print(“尝试连接到ssid:”);serial.println(string(ssid));while(wifi.status()!= wl_connected){wifi.begin(ssid,pass);serial.print(“。”);延迟(5000);} serial.println(“ \ nconnected。”);} //创建对讲backback uri string tburi = string(“/talkbacks/“”) + string(myTalkBackid) + string(“/commands/execute”);//创建帖子的消息主体,从值string postmessage = string(“ api_key =”) + string(myTalkBackKey);//为可能在队列字符串newCommand = string();//将帖子发表到thingspeak int x = httppost(tburi,postmessage,newcommand); client.stop(); // Check the result if(x == 200){ Serial.println("checking queue..."); // Check for a command returned from TalkBack if(newCommand.length() != 0){ Serial.print(" Latest command from queue: "); Serial.println(newCommand); if(newCommand == "TURN_ON"){ digitalWrite(LED_BUILTIN, HIGH); } if(newCommand == "TURN_OFF"){ digitalWrite(LED_BUILTIN, LOW); } } else{ Serial.println(" Nothing new."); } } else{ Serial.println("Problem checking queue. HTTP error code " + String(x)); } delay(60000); // Wait 60 seconds to check queue again }

4)使用httppost读取下一个对话命令的功能。

//通用函数要发布到thesspeak int httppost(字符串URI,String Postmessage,String&Response){bool connectSuccess = false;connectSuccess = client.connect(“ api.thingspeak.com”,80);如果(!connectSuccess){return -301;} postmessage +=“&headers = false”;字符串标头=字符串(“ post”) + uri + string(“ http/1.1 \ r \ n”) + string(“ host:api.thingspeak.com \ r \ n”) + string(“ content-type:application:application:application:application:application:application:application:application:application:apply/x-www-form-urlencoded \ r \ n“) + string(“连接:close \ r \ n”) + string(“ content-length:”) + string(postmessage.length()) + string(”\ r \ n \ r \ n“);client.print(标题);client.print(postmessage);长startwaitforresponseat = millis();while(client.available()== 0 && millis() -  startwaitforresponseat <5000){delay(100);} if(client.available()== 0){return -304; // Didn't get server response in time } if(!client.find(const_cast("HTTP/1.1"))){ return -303; // Couldn't parse response (didn't find HTTP/1.1) } int status = client.parseInt(); if(status != 200){ return status; } if(!client.find(const_cast("\n\r\n"))){ return -303; } String tempString = String(client.readString()); response = tempString; return status; }