前言
上一节,我们完成了Tlink云端创建项目,并使用网络助手连接Tlink云服务器,本节,我们开始学习使用Wemos D1连接Tlink平台。
一、实例
1.通信流程
首先连接tcp.tlink.io:8647,然后发送设备序列号给平台,如果平台不断开连接,或者返回错误信息,那么鉴权成功,接着定期发送心跳数据(“Q”)给平台,平台回复A说明心跳正常。
2.通信协议
点击设置连接,进入设备连接信息配置页面
自定义协议类型,选择如下数据传输协议
协议说明,本项目选用[H:数据] + [D? ] + [S:数据] + [D? ] + [T:数据];其中,[H:数据]为数据头,本项目为’#’,[T:数据]为数据头,本项目为’#’,[S:数据]为数据分隔符,本项目为’,’ ,两个[D? ]分别表示传感器DHT11数据和开关状态数据。
详细协议说明如下:
3.获取设备序列号
device1的设备序列号为:UVKY765HR848JGNM
4.wemos D1程序
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <Ticker.h>
#define DEVICE_ID "UVKY765HR848JGNM"
#define DEVICE_DATA "#22,1#"
char* ssid = "sand";
char* passwd = "12345678";
const uint16_t port = 8647;
const char * host = "tcp.tlink.io"; // ip or dns
WiFiClient client;//创建一个tcp client连接
int heartbeart_flag = 0;
Ticker tk;
void time_coming_cicyle_cb(void)
{
heartbeart_flag = 1;
}
// 复位或上电后运行一次:
void setup() {
//在这里加入初始化相关代码,只运行一次:
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, passwd);
Serial.println("connecting to router... ");
//等待wifi连接成功
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println("");
Serial.print("WiFi connected, local IP address:");
Serial.println(WiFi.localIP());
delay(500);
Serial.print("connecting to ");
Serial.println(host);
if (!client.connect(host, port)) {
Serial.println("connection failed");
Serial.println("wait 5 sec...");
delay(5000);
return;
}else
{
Serial.println("connect to tcp server success.");
Serial.println("Send this data to tcp server");
client.print(DEVICE_ID);
delay(500);
client.print(DEVICE_DATA);
// call time_coming_cicyle_cb every 30s
tk.attach(30, time_coming_cicyle_cb);
}
}
void loop() {
if (1 == heartbeart_flag)
{
client.print("Q");
String recv_heart_data= client.readString();
Serial.print("Receive heartbeat data : ");
Serial.println(recv_heart_data);
heartbeart_flag = 0;
}
String recv_data = client.readString(); // client.readStringUntil('\r');
if (recv_data != NULL)
{
Serial.print("Receive data : ");
Serial.println(recv_data);
}
delay(200);
}
上述程序实现当设备上电的时候,模块首先连接热点,然后开始连接远程Tlink服务器,并发送序列号进行认证,认证通过后发送一条上报数据状态的指令,同时使用Ticker开启一个30S的定时器设置心跳标志位,loop函数循环检测心跳标志位,定期发送心跳数据给云端,同时实时接收云端下发的数据。
二、下载运行
点击上传图标,开始下载程序到wemos D1
设备下载完成重新启动,并上传数据,后台结果如下:
通过后台发送数据
设备Log如下:
可以看到云端下发了#24,0#,而设备刚好也受到了,此外,设备上发了’Q’心跳数据,平台返回了’A’应答数据。
四、结语
(1)TCP通信协议
设备和云端的协议可以自行编辑,也可以采用帧头+数据长度+数据+校验位+帧尾这种更加可靠的通信方式。
(2)获取资料
如您在使用过程中有任何问题,请加QQ群进一步交流。
QQ交流群:906015840 (备注:物联网项目交流)
公众号:物联网客栈,扫码关注,回复wemos即可。
一叶孤沙出品:一沙一世界,一叶一菩提