前言
巴法云物联网云平台,就如它的文档介绍的,是一个专注物体联网的神奇的设备云平台(cloud.bemfa.com),它有以下特征,轻量级,支持发布/订阅模式,提供遗嘱机制,支持TCP长连接,全平台兼容。本文,将介绍如何通过esp8266这个芯片连接到巴法云的TCP设备云。
(一)注册添加TCP设备
(1)注册巴法云账号
到巴法云官网或直接进入 https://cloud.bemfa.com/u_login.php?reurl=https://cloud.bemfa.com/tcp/index.html
如下图,点击“微信一键登录”,扫码直接登录注册,然后直接进入“控制台”
(2)创建主题
登录后,会直接跳转到巴法云云平台的个人控制台,如下图,选中TCP设备云,输入主题名“test”,点击新建主题,便可以创建一个名为test的主题,之后我们就可以对这个主题进行订阅或发布了。
(二)订阅发布主题
完成上面后,我们可以使用 SSCOM5 串口/网络调试助手来调试我们之前创建的主题。uid即用户私钥,可以直接在用户控制台获取
(1)TCP设备相关指令
这主要参考官方文档关于 TCP设备云部分。
TCP服务器地址IP: bemfa.com 服务器端口:8340
订阅主题格式
cmd=1&uid=7d54f85af42976ee3c2693e6xxxxxxxx&topic=light002\r\n
正常返回:
cmd=1&res=1
发布信息格式
cmd=2&uid=7d54f85af42976ee3c2693e6xxxxxxxx&topic=light002&msg=off\r\n
正常返回:
cmd=2&res=1
订阅主题,并获取一次已推送的消息
cmd=3&uid=7d54f85af42976ee3c2693e6xxxxxxxx&topic=light002\r\n
正常返回:
cmd=3&uid=7d54f85af42976ee3c2693e6xxxxxxxx&topic=light002&msg=on
获取一次时间
cmd=7&uid=7d54f85af42976ee3c2693e6xxxxxxxx&type=1\r\n
正常返回:
2021-06-11 16:39:27
获取一次已发消息
cmd=9&uid=7d54f85af42976ee3c2693e6xxxxxxxx&topic=light002\r\n
正常返回:
cmd=9&uid=7d54f85af42976ee3c2693e6xxxxxxxx&topic=light002&msg=on
发送心跳
ping\r\n
正常返回:
cmd=0&res=1
json响应
上述任意指令中加入 mode=1 时,服务器响应的数据格式是 json 类型。
例如发送:
cmd=2&uid=4d9ec352e0376f2110a0c601a2857225&topic=light002&msg=on&mode=1
正常响应:
{“cmd”:2,“res”:1}
此时订阅light002的设备将收到:
{“cmd”:2,“time”:1623402740,“uid”:“4d9ec352e0376f2110a0c601a2857225”,“topic”:“light002”,“msg”:“on”}
其中time为发送消息的时间戳
字段说明
cmd:为消息类型
cmd=1 时为订阅消息,当设备发送一次此消息类型,之后就可以收到发往该主题的消息
cmd=2 时为发布消息,向订阅该主题的设备发送消息
cmd=3 是订阅消息,和cmd=1相同,并且会拉取一次已发送过的消息
cmd=7 是获取时间,获取当前北京时间
cmd=9 为遗嘱消息,拉取一次已经发送的消息
uid:用户私钥
可在控制台获取
topic:用户主题
可以在控制台创建主题,格式为英文或数字,相当于设备标识
msg: 为消息体
用户想要发送到某个主题的数据
获取时间指令说明
type=1 获取当前日期和时间,例如:2021-06-11 17:20:54
type=2 获取当前时间,例如:17:20:54
type=3 获取当前时间戳,例如:1623403325
符号说明
\r\n: 为回车换符,每条指令后都需要有回车换行
&: 为连接符,各字段间用’&'隔离
心跳说明
发送任意数据 为心跳消息,包括上述指令也算是心跳,但要以回车换行结尾。
心跳消息是告诉服务器设备还在线,可30秒发送一次,结尾以\r\n结尾。
可选功能
推送消息时:主题名后加/set推送消息,表示向所有订阅这个主题的设备们推送消息,假如推送者自己也订阅了这个主题,消息不会被推送给它自己,以防止自己推送的消息被自己接收。
推送消息时:主题名后加/up推送消息,表示只更新云端数据,不进行任何推送。
例如向主题 light002推送数据,可为 light002/set , light002/up
示例:cmd=2&uid=4d9ec352e0376f2110a0c601a2857225&topic=light002/set&msg=on
(2)调试
测试的内容就是上面的指令,使用网络调试助手连接上巴法云后,修改uid,就可以直接发送指令了。下面图片是返回的结果。
文章来源:https://www.toymoban.com/news/detail-439420.html
(三)ESP8266接入巴法云
这里给出测试代码,ESP8266 Arduino IDE开发环境的配置,以及ESP8266的相关编程,可以参考我的另一篇博文《esp8266环境配置以及相关学习资料》。下面代码,订阅了一个test主题,当有信息下发时,会直接将数据输出到ArduinoIDE的串口查看器上。文章来源地址https://www.toymoban.com/news/detail-439420.html
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
ESP8266WiFiMulti wifiMulti; // 建立ESP8266WiFiMulti对象
const char* host = "bemfa.com"; // 网络服务器地址
const int httpPort = 8340; // http端口80
// WiFi连接信息
const char* WiFi_SSID = "ling";
const char* WiFi_Password = "ling....9";
// 建立WiFi客户端对象,对象名称client
WiFiClient client;
void setup(){
Serial.begin(9600);
WiFi.mode(WIFI_STA); // 设置ESP8266为无线终端模式
wifiMulti.addAP(WiFi_SSID, WiFi_Password);
Serial.println("Connecting ...");
// 尝试进行wifi连接。
int i = 0;
while (wifiMulti.run() != WL_CONNECTED) {
delay(1000);
Serial.print(i++); Serial.print(' ');
}
// WiFi连接成功后将通过串口监视器输出连接成功信息
Serial.println("");
Serial.print("Connected to ");
Serial.println(WiFi.SSID()); // WiFi名称
Serial.print("IP address:\t");
Serial.println(WiFi.localIP()); // IP
//连接巴法云
client.connect(host, httpPort);
Serial.print("conneted bamfa!\n");
//订阅主题test
client.print("cmd=1&uid=<填你们自己的uid>&topic=test\r\n");
}
void loop(){
// 判断登录状态
if(not client.connected()){
//连接巴法云
client.connect(host, httpPort);
Serial.print("reconneted bamfa!\n");
//订阅主题test
client.print("cmd=1&uid=<填你们自己的uid>&topic=test\r\n");
}
//输出结果
while (client.connected() || client.available()){
if (client.available()){
String line = client.readStringUntil('\n');
Serial.println(line);
}
}
delay(10);
}
到了这里,关于esp8266 TCP接入巴法云物联网云平台的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!