心想MQTT是基于TCP的,能否使用TCP转MQTT?因此就想使用TCP协议然后转MQTT协议连接阿里云物联网平台,经过试验证明是可以的。
首先我们先分析一下如何登陆接入Onenet平台。
先从它数据格式开始分析。首先我们要从后台取出三个信息,我们以这个为例。
我们把产品ID,设备名称,设备秘钥,简称三要素 (具体是什么看你自己的设备)
其实阿里云物联网平台的MQTT协议用的就是标准的,不过它加入了自己的认证方式。
MQTT协议需要上传四个参数,报活时间,clientID,用户名,密码。
那么阿里云的就在clientID,用户名,密码做了手脚。
clientID比较长,按照一定的格式
用户名:设备名和秘钥组成
密码:使用了加密串进行了加密,有sha1或者MD5加密方式
下面我们来介绍一下
MQTT接入都是发十六进制的数据。
么我们发送的时候就是这样子的一串数据
0x74 0x00 0x04 0x4d 0x51 0x54 0x54 0x04 0xC0 0078 0033 0x61 0x62 0x63 0x7c 0x73 0x65 0x63 0x75 0x72 0x65 0x6d 0x6f 0x64 0x65 0x3d 0x33 0x2c 0x73 0x69 0x67
0x6e 0x6d 0x65 0x74 0x68 0x6f 0x64 0x3d 0x68 0x6d 0x61 0x63 0x73 0x68 0x61 0x31 0x2c 0x74 0x69 0x6d 0x65 0x73 0x74 0x61 0x6d 0x70 0x3d 0x31 0x32 0x30 0x7c 0009
0x35 0x36 0x37 0x38 0x26 0x31 0x32 0x33 0x34 0028 0x32 0x32 0x32 0x37 0x35 0x30 0x44 0x45 0x44 0x46 0x45 0x34 0x46 0x37 0x37 0x34 0x30 0x30 0x32 0x45 0x45 0x38 0x37 0x45 0x45 0x44 0x32 0x39 0x43 0x46 0x44 0x30 0x36 0x33 0x38 0x43 0x35 0x46 0x36 0x36
十六进制解释
数据长度:0x74
协议数据长度 0x00 0x04
协议类型: 0x4d 0x51 0x54 0x54
协议数据: 0x04 0xC0
keepAlive数据:0078
ClientID长度:0033
ClientID: 0x61 0x62 0x63 0x7c 0x73 0x65 0x63 0x75 0x72 0x65 0x6d 0x6f 0x64 0x65 0x3d 0x33 0x2c 0x73 0x69 0x67 0x6e 0x6d 0x65 0x74 0x68 0x6f 0x64 0x3d 0x68 0x6d 0x61 0x63 0x73 0x68 0x61 0x31 0x2c 0x74 0x69 0x6d 0x65 0x73 0x74 0x61 0x6d 0x70 0x3d 0x31 0x32 0x30 0x7c
用户名:0009
用户名: 0x35 0x36 0x37 0x38 0x26 0x31 0x32 0x33 0x34
密码长度:0028
密码: 0x32 0x32 0x32 0x37 0x35 0x30 0x44 0x45 0x44 0x46 0x45 0x34 0x46 0x37 0x37 0x34 0x30 0x30 0x32 0x45 0x45 0x38 0x37 0x45 0x45 0x44 0x32 0x39 0x43 0x46 0x44 0x30 0x36 0x33 0x38 0x43 0x35 0x46 0x36 0x36复制代码上面的就是连接服务器的连接包
下面呢,我们来做个发布包(上传数据到服务器)
0x30 0x1D 0009 2f7379732f706f7374 0x7b 0x70 0x61 0x72 0x61 0x6d 0x73 0x3a 0x7b 0x74 0x65 0x6d 0x70 0x3a 0x31 0x30 0x7d 0x7d
十六进制数据解释
数据头:0x30
数据长度:0x1D
TopicName数据长度:0009
TopicName数据内容:2f7379732f706f7374
主体json数据: 0x7b 0x70 0x61 0x72 0x61 0x6d 0x73 0x3a 0x7b 0x74 0x65 0x6d 0x70 0x3a 0x31 0x30 0x7d 0x7d复制代码以上就是连接阿里云的数据包格式及发布数据的格式,由于时间问题没有做订阅的数据包分析,下一次更新订阅的内容。最近想做个大点的项目,想同时用到arduino和esp-idf的特性,但是环境设置还有点复杂
首先是现在platformio里面的esp-idf和arduino不兼容,是因为esp32 的arduino是基于esp-idf 44 的而,platformio里面的esp-idf只支持到43所以不行。然后我尝试用idf的工具链新建一个工程,等pio支持了我再配置platformio来支持。
2022年4月2日 UPDATE:
我发现原来插件有自动化这个过程的指令的,不过默认是安装在工程的component下面的,所以会导致每个工程都有一个几百m的arduino component。。。
>基本上的套路是服务器发指令给以太网模块或者wifi模块等可以上网通信的单元,然后这些单元把指令传递给arduino,arduino解析后就可以使用digitalWrite功能去控制继电器啦。我猜你用的应该是wifi吧?如果是的话,可以去掉arduino,直接使用nodemcu。首先51是最古老的芯片(指8051),专利过期了其他厂家兼容芯片琳琅满目。在你列出的这几种里面速度慢,内存小(排除有些厂家出的魔改的型号)。常见的厂家stc的,atmel的正统89c51系列以及后期魔改型号。国产的st89,10,11,12,以及最新的15。还有c8051系列,以及高速usb接口的芯片,以及有很多无线收发芯片的核心是8051的。但是指令集兼容但是寄存器的复杂度就不一样了。\x0d\\x0d\说arduino的话,arduino算是一个平台,他的早起,也是最广泛的核心是基于avr单片机的。我们都戏说arduino团队是给avr收买了帮avr买芯片。既然你没问avr的我就只说说arduino的情况。他简单易懂,做毕业,原型,快速开发的时候,硬件搭设方便,基本不用你去画板子,导线连接模块就是了。代码也全是简单易懂的。基本不涉及到寄存器级。总得来说就是开发快。小量定制化还是划算。真的做产品或者研究就算了,成本高,简单高度抽象化带来就是效率底下以及资源开销大,模块数量上去后系统就撑不住了。\x0d\虽然现在也有基于stm32,fpga,lpc,pic等芯片做的arduino,但是开源库和ide的开发很多没跟上,不兼容也没办法继承avr的arduino遗产。虽然官方也出了avr32位单片机的arduino,以及arm m0,还有配合嵌入式openwrt系统的arduino yun。但是价格以及方便性简直了(更何况新的芯片大多是低压io,外接模块很少兼容。\x0d\说stm32之前要说arm,上面的人也说过了,arm有分好几个版本。只说最近的划分,一个就是带mmu内存管理的,一般需要外接ram,flash才能工作。就是你听到的手机处理器arm多少多少,还有的路由器的处理器,以及服务器的处理器。特点是跑系统。还有就是不带mmu的嵌入式,和8051一样带ram,flash。现在划分了m0 m3 m4 m7等用在嵌入式,以及m0+升级版和其他特殊版本。总之就是比8051高了不知道哪里去了的芯片。然后stm32是st意法半导体公司向arm公司购买了核心(嵌入式)版权,加上自己的外设生产的一个系列的芯片。功能强大速度快外设多。但是寄存器复杂度等和8051就不能比了。所以官方也出了库,现在还出了专门的代码生成软件cube来简化 *** 作。\x0d\\x0d\fpga就厉害多了,前面说的几种都是单片机,做运算都是一步步来的,逻辑上是串联的。fpga是并行的,单片机一次同一时间只能做一次运算,fpga只要资源够(芯片买的贵),你心情好,同时进行成百上千的运算都可以的。所以一般用在速度要求高的地方,比如视频压缩,高速网络设备等。8051,arduino,stm32,10元左右就能上,fpga不上百就没啥资源可用,连前面三都比不过。fpga也不是用c来开发的,你可以想象成是一个数学的算法然后转到电路去执行(视频压缩就是一种)。更考数学,算法类的。\x0d\\x0d\总结1,8051系列已经是辉煌的末日了。构架上已经拉后腿了,除了老代码,老系统升级,就是特定领域的芯片上使用。但是他至今还占用很大份额的原因是——大学的课本是他。\x0d\总结2,arduino就是一个玩具,玩玩可以,艺术类学生用来做互动的比较多。很多是不懂嵌入式硬件的程序员用来做东西玩。真正懂的要么直接用底层的avr要么用stm32或者其他了\x0d\总结3stm32杠杠的,值得学。在同性质的单片机里面最具性价比的。学习资料也多。\x0d\总结4 没的说太大范围了,都攘括了上一条总结的东西。\x0d\总结5高大上。学好饭碗不愁,高薪。但是怎么也得博士硕士才能干出点成绩,野路子的话是享受不到这个的。同时资料也少,入门成本高。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)