EDP协议 Arduino uno接入onenet(数据上传和命令下发)
我是真的妹想到这玩意居然还能搞出第二篇文章。
源码下载:EDP控制命令下发
第一篇指路(tcp透传数据上传教程)
【小白入门】超详细Arduino uno接入onenet云平台教程(TCP透传)
元器件,接线图和接入WiFi
这部分和第一篇是完完全全一模一样的。
这些属于硬件连接和wifi模块的配置工作,而本篇文章和上一篇的唯一不同只是换了协议,也就是改变了接入平台的方法,所以不管协议怎么变,这部分都是不会变的啦(~ ̄▽ ̄)~
元器件
arduino uno R3
esp8266 01s(或01)
杜邦线,电脑等
接线图
01s接线
01接线
接线不会的去看上一篇的接线部分,那个真的是保姆级了。
接入WiFi
和上一篇是一样的,使用at指令接入网络,思路不再展开说了。
在这一次提供的代码里面,联网的部分被封装进了单独的.c文件和.h文件里面,如果使用我提供的这个源码改写的话只需要改net_device.h里面的ssid和密码就可以了。
云平台
之前很多朋友很头疼的脚本这次不用管啦,只有tcp透传才需要脚本。
各个协议对比
放一个各协议的对比图吧,便于大家对各个协议有些对比的概念,也方便大家以后自己选用协议
官方说明
个人总结(modbus一行来自网络)
协议 | 优点 | 缺点 |
---|---|---|
EDP | 有配套的控制控件,是唯一可以使用设备云APP及应用应用管理实现控制的协议 | 数据需要最低限度的打包 |
MQTT | 能够实现命令下发和控制实现,除应用管理功能之外资源与edp相同 | 数据需要最低限度的打包 |
HTTP | 无需建立HTTP连接,格式简单,上传数据无需设备上线 | 无法实现控制,无法设备上线(如果使用http协议传数据,设备列表里面的设备在线不会变绿!始终都是离线状态,不影响传数据) |
Modbus | 基于ModBus的数据经过简单封装即可传输,使用方便(对已使用ModBus协议的设备) | 使用困难(非Modbus协议设备) |
Tcp透传 | 传输数据灵活,可自定义格式,使用简单无需打包 | 需要上传脚本(脚本编写使用lua语言) |
关于tcp能不能下发指令,数据回传实现控制这一点,众说纷纭,我个人没有搞清楚,故特此说明,以免误导各位。
云平台
新建设备
在多协议接入中新建edp产品
新建设备
新建数据流模板
上传的数据如果没有已有的数据或者数据流模板会自动建立数据流,上传的数据可以不建立数据流模板。但触发器功能和控制控件只支持关联数据流模板,所以必须建立模板。
在程序里直接引用数据流模板就可以使用了。
- 使用方法
- 建立数据流模板;
- 在应用界面关联相关控件;
- 在发送或接受程序中直接引用数据流模板名control实现发送和接受;
接入云平台
和tcp透传协议一样,我们只是用地址+端口号就可以接入平台。
在edp协议中,服务器地址是183.230.40.39,端口号为876。(t协议不同,地址和端口号不同)
设备上线
edp协议中,使用api-key和设备id进行封包上传。
如果使用我提供的程序的话只要在onenet.h里面修改api-key和设备id就可以了。
上传数据
onenet.cpp中包含发送指令,发送数据需要封包,原理不讲了,只说一下怎么改程序吧。
在OneNet_SendData函数中,将蓝色字部分改为自己的数据流名称,灰色字改为自己的变量名就可以了。
函数格式为
sprintf(send_buf,“数据流名,%d;……数据流名,%d;”,变量名……,变量名);
因为我的变量都是十进制的整形所以我的输出中全部是%d,大家只要按照自己的数据格式改变就好了。
下发指令
onenet.cpp中包含指令接受程序,程序会在指令中找到一样不细讲了,在OneNet_App函数中,把原本的控制信号数据流改成你的数据流名称,并且做相应处理就好了。程序会在接收到的数据包中找到和你的控制条件相同的数据流名称并且执行的你控制命令。
同样的,以上内容参考借鉴以及复制了很多来自网络的内容,我主要是做了一个整理和说明的工作,如果有侵权,或者其他的冒犯请联系我删除或者修改。
再次感谢素昧平生的大佬们为本文提供的帮助(虽然没有一一去征求各位的意见)
写在后面(纯废话)
!!!!!!!从这里往下就不用看了!!!!!!!!!
!!!!!!!以下是准废话,纯抱怨!!!!!!!!!
!!!!!!!如果你继续阅读将会浪费你生命的1分钟!!!!!!!
但我就是要抱怨,我写这篇就是为了抱怨o(╥﹏╥)o
(请别学我)
不知道各位有没有看过我之前的另一篇文章,和这篇非常的像,是使用tcp透传进行传输的接入教程。本来嘛,咱数据的监测实现了基本上功能的大头就完成了,但是如果不能实现远程控制的话,数据上云还有什么意义呢?
对很理所应当的我就去摸索平台的控制功能了。
对onenet平台稍微有点了解的大家应该都会知道应用界面是有控制控件的,所以我想当然的觉得嗯那很简单嘛,直接用控件嘛。
于是我就在疯狂碰壁中逐渐开始怀疑人生。
然后我看到了。
你说啥??
那咋整啊
嗯,行吧,好吧,i’m fine thank you and you.
特别的,并不是指其他协议不能实现控制功能,而是说在应用编辑器中控制控件只支持edp协议。其他的协议当然还是有他们自己的下发指令方式,只是目前我害没有摸索出来。
比如论坛上同样有大佬给出tcp透传实现控制的方法
但是我太菜了我不行啊Ծ‸Ծ
所以有大佬愿意出一个稍微详细一点的教程嘛(╹▽╹),或者有谁找到稍微具体一点的教程麻烦评论留言告诉我一声
ball ball大佬们教教我