stm32+W5500+阿里物联网平台
前提:
非物联网专业出身,网络协议一知半解(就是没学过),最近调试一块stm32+w5500开发板,为了学习知识,实现以个依靠阿里云物联网平台控制开发板上LED开关功能。(2020年4月24日)
1:阿里云物联网平台:
https://www.aliyun.com/
物联网平台主要是创建一个设备,收费比较便宜(创建设备两块多,资源包买了100万分钟不到十块)。第一次登陆网站会有文档一步一步指导创建,这里就不细说了。当获取了ProductKey、DeviceSecret、DeviceName这个三项之后创建设备告一段落。
**2:w5500简介:
https://www.iwiznet.cn/2017/09/这里有一篇w5500中国官网博客 功能也是连接阿里云,不过到现在也是过去三年了,阿里云界面或者一些配置需要更改。
w5500驱动:http://wizwiki.net/wiki/doku.php?id=products:w5500:driver
3:stm32与w5500相关:
stm32与w5500是使用SPI通信,mode 0/3.由于我使用的stm32cube生成代码,使用的HAL库,所以只要封装两个函数`
void SPI_WriteByte(uint8_t Tdata)//SPI写一字节数据{HAL_SPI_Transmit(&hspi2,&Tdata,1,0xffff);while(HAL_SPI_GetState(&hspi2) == HAL_SPI_STATE_BUSY_RX);SPI2->DR;}//SPI读取一字节数据uint8_t SPI_ReadByte(void){uint8_t Rcv=0;HAL_SPI_Receive(&hspi2,&Rcv,1,0XFFFF);return Rcv;}`
接下来就是实现w5500的连网操作了,不要急这里我们分三步(注由于w5500驱动因为版本不同,部分函数名可能有区别)
一,设置固定IP,可以使用计算机与w5500网线直连测试,如果接路由器请注意防止IP冲突这里参考另一位大佬博客https://blog.csdn.net/u014470361/article/details/79238437
二,DHCP动态IP,为了防止IP冲突这里更改为动态IP获取。依旧是上一位大佬的博客https://blog.csdn.net/u014470361/article/details/79239729
三,通过DNS获取服务器IP。上链接https://blog.csdn.net/u014470361/article/details/79240054
这里要注意了,这位大佬获取的是“www.baidu.com”,如果你成功获取了百度的ip,那么下一步需要注意了。
我们需要获取物联网平台上我们设备的域名“{ProductKey}.iot-as-mqtt.cn-shanghai.aliyuncs.com”的iP
使用cn-shanghai因为是华东2节点。
但是你会发现获取不到ip.这里可能是因为阿里云更新的原因或者是我网络防火墙的原因吧。于是我使用了w5500博客中的另一种方法。直接Ping就好了。。。。。。。你会发现与手册的界面有一丝丝不同。(域名变了,我是没有一丝丝网络知识所以我也不知道为什么)。不过直接使用这个ip赋值吧.
4:MQTT协议:
MQTT协议是一种TCP协议?虽然不太清楚,不过有现成的库直接用!
MQTT代码源码下载地址:(http://www.eclipse.org/paho/)
将以上文件都可以在w5500的博客文件中找到,其中最重要的部分就是void MQTT_CON_ALI(void)这个函数了,它是使用MQTT协议与阿里云进行连接,发送的拼接报文如下:
参考阿里云内 MQTT 设备接入手册,计算出设备连接的各项参数,例如下列程序中框中的部分为本例程 MQTT 与阿里云连接的参数的配置,详细内容如下:
clientId = 192.168.207.115 //可以随便写的
deviceName = MQTT1 //根据自己平台上的名称修改
productKey = TKKMt4nMF8U //根据自己平台上的名称修改
timestamp = 789(毫秒值) //不变
signmethod = hmacsha1(算法类型) //不变
deviceSecret = secret //根据自己平台上的名称修改
加密部分可以使用网站生成http://encode.chahuo.com/
在tcp_client.c文件对应位置替换好上图字段,我们就可以进行连接测试了!
通过定时器中断每隔几秒ping一次服务器的方式保持自己在线。
5:Cjson相关:
json基本的格式是 “变量名”:“变量值”,变量值是另一个json格式值。就是说变量值可以是json,可以是字符串,可以是数字。。。举个例子:
{“method”:
“thing.service.property.set”,“id”:“1098258095”,“params”:
{“NightLightSwitch”:0},“version”:“1.0.0”}
这是一条控制开关的指令,其中变量名为“params”的值为{“NightLightSwitch”:0},“version”:“1.0.0”},为了获取开关值我们还需要知道“NightLightSwitch”的值,所以代码中这样实现:
char parsetext[] = {"method":"thing.service.property.set","id":"1098258095","params":{"NightLightSwitch":0},"version":"1.0.0"} // 初始化定义一个字符串,用于JSON的解析}//这里只是示范 所以没加转义字符 实际测试需要添加\哦cJSON *json = NULL; char *out = NULL; // rootjson = cJSON_Parse(parsetext); // 将字符串处理成JSON对象if (!json) // 如果转化错误,则报错退出{printf("Error before: [%s]\n", cJSON_GetErrorPtr());}else{/* print the json */out = cJSON_Print(json); // first string print 将JSON对象“按照格式”打印输出//printf("%s\n", out); }cJSON *jver = NULL;jver = cJSON_GetObjectItem(json,"params"); //获取JSON格式中,键值为”params”的对象cJSON* tmp = cJSON_GetObjectItem(jver, "LightSwitch");int value = tmp->valueint; // 读取 version的值,version值为整型数printf(" LightSwitch: %d\r\n",value );
了解详情看这位大佬写的十篇专门讲json解析的文章https://blog.csdn.net/NB_vol_1/article/details/50454841
6:阿里云下发,stm32上传流程:**
![串口助手显示](https://img-blog.csdnimg.cn/20200424135225536.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ExMTMxNjA=,size_16,color_FFFFFF,t_70
到目前为止,stm32+w5500作为客户端可以接受服务端指令并做出对应操作,下面就是执行成功与否进行反馈了。
stm32+W5500+阿里物联网平台相关推荐
- 关于NB-IOT模块链接阿里物联网平台的学习笔记-记录
关于NB-IOT模块链接阿里物联网平台思路的学习笔记-记录 叙述 调试思路总结 调试过程 AT命令-方式一 AT命令-方式二 AT命令-方式三 软件 关于遇到问题 总结 叙述 前一段是写了一篇&quo ...
- MCU接入阿里物联网平台遇到的各种坑
使用阿里物联网sdk3.2.0 1.cJson相关坑,修改了cJSON_malloc和cJSON_free的指向以后,忘记修改realloc的指向了,结果csjon创建字符串的时候调用了系统的real ...
- 阿里物联网平台的使用
此处我们不使用具体的硬件设备来与物联网平台进行交互,我们可以使用MQTT.fx软件来模拟相关的硬件设备,让该设备与阿里物联网平台进行通信. 下篇我们将介绍如何使用esp8266 实际与阿里物联网平台进 ...
- ESP8266 接入阿里物联网平台实现远程控制LED
上一篇我们介绍了阿里物联网平台的使用,并使用MQTT.fx软件来模拟实际的硬件设备.这一篇来实际操作如何使用esp8266接入到阿里物联网平台中,并控制一个LED灯.阿里物联网平台实际上是一个一站式的 ...
- ESP32/ESP8266/ESP32C3系列模组 AT固件MQTT 对接阿里物联网平台
文章目录 一.前言 二.一机一密接入 三.一型一密接入 四.订阅&发布 4.1 订阅 4.2 发布 五.总结 一.前言 本文介绍如何使用AT指令MQTT接入阿里云物联网平台,包括一机一密.一型 ...
- 阿里物联网平台“云产品流转”设置方法(新版)
今天得空,研究一下阿里物联网平台新版"云产品流转"设置方法.手头只有一片ESP32,考虑先将消息发送给平台,然后平台再将消息转发给自己,这样消息转了一圈,还是回到自己手里!主要目的 ...
- 阿里物联网平台(一)Windows系统+VS2017 模拟设备端接入
目录 阿里物联网平台(一)Windows系统+VS2017 模拟设备端接入 阿里物联网平台(二).net 实现移动端(WEB.HTML)与设备端通讯 一.阿里物联网平台 平台地址:https://ac ...
- 阿里物联网平台产品、设备创建
(1)创建阿里云账号,开通物联网平台 产品 (2)进入控制台,点击产品,点击创建产品 (3)选择自定义产品,输入自己产品的名称,其他不用更改 (3)点击查看,有产品的密码等 设备 (1)点击添加设备, ...
- [IOT] 自制蓝牙工牌办公室定位系统 (一)—— 阿里物联网平台概览及打通端到云(硬核·干货)
目录: 老少皆宜.超长干货文警告 1.快速入门创建产品 -- 小白,打包带走去吹牛 2.代码分析 -- 老炮,快速了解能用上 2.1 从start.sh分析开发环境如何自动构建 2.2 从sample ...
最新文章
- IIS6.0 日期格式问题
- html中多边形图形怎么制作,CSS制作图形速查表
- asp利用dictionary创建二维数组
- 一个简单的blog系统(十一) 增加文章检索功能
- oracle11g-asm实例中asmlib和raw的使用问题
- 分享一个我现在用的Eclipse(ZendStudio)的PHP黑色背景主题,喜欢的请留言拿走。...
- mysql5.7.14多实例安装
- 怎么一步步编写简单的PHP的Framework(十九)
- SpringMVCfrom:form表单标签和input表单标签简介
- 电脑开机加速,一下子就提升了20几秒
- “北大数学系扫地僧” 等十人获奖,均分1000万元,达摩院2021青橙奖出炉
- oracle rfs进程过多,DATA GUARD的RFS进程的问题
- 文笔极佳的郭靖夫妇悼文
- UWB无线精准定位技术,超宽带测距通信交互,实时厘米级精度应用
- PHP“动能”运动膳食微信小程序的开发 计算机毕业设计源码504978
- 尚德自考的销售策略,尚德的陷阱,尚德是如何欺骗消费者的,315刚过,尚德就可以这样?
- Web3.0和元宇宙之间有什么联系?为什么说Web3.0是基础?
- 测试用例设计-翻页功能
- 对Android和iOS项目中的模块结构和类结构设计的探讨
- arcgispython编程案例_ArcGIS Python编程案例(1)-Python语言基础