前提:
非物联网专业出身,网络协议一知半解(就是没学过),最近调试一块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+阿里物联网平台相关推荐

  1. 关于NB-IOT模块链接阿里物联网平台的学习笔记-记录

    关于NB-IOT模块链接阿里物联网平台思路的学习笔记-记录 叙述 调试思路总结 调试过程 AT命令-方式一 AT命令-方式二 AT命令-方式三 软件 关于遇到问题 总结 叙述 前一段是写了一篇&quo ...

  2. MCU接入阿里物联网平台遇到的各种坑

    使用阿里物联网sdk3.2.0 1.cJson相关坑,修改了cJSON_malloc和cJSON_free的指向以后,忘记修改realloc的指向了,结果csjon创建字符串的时候调用了系统的real ...

  3. 阿里物联网平台的使用

    此处我们不使用具体的硬件设备来与物联网平台进行交互,我们可以使用MQTT.fx软件来模拟相关的硬件设备,让该设备与阿里物联网平台进行通信. 下篇我们将介绍如何使用esp8266 实际与阿里物联网平台进 ...

  4. ESP8266 接入阿里物联网平台实现远程控制LED

    上一篇我们介绍了阿里物联网平台的使用,并使用MQTT.fx软件来模拟实际的硬件设备.这一篇来实际操作如何使用esp8266接入到阿里物联网平台中,并控制一个LED灯.阿里物联网平台实际上是一个一站式的 ...

  5. ESP32/ESP8266/ESP32C3系列模组 AT固件MQTT 对接阿里物联网平台

    文章目录 一.前言 二.一机一密接入 三.一型一密接入 四.订阅&发布 4.1 订阅 4.2 发布 五.总结 一.前言 本文介绍如何使用AT指令MQTT接入阿里云物联网平台,包括一机一密.一型 ...

  6. 阿里物联网平台“云产品流转”设置方法(新版)

    今天得空,研究一下阿里物联网平台新版"云产品流转"设置方法.手头只有一片ESP32,考虑先将消息发送给平台,然后平台再将消息转发给自己,这样消息转了一圈,还是回到自己手里!主要目的 ...

  7. 阿里物联网平台(一)Windows系统+VS2017 模拟设备端接入

    目录 阿里物联网平台(一)Windows系统+VS2017 模拟设备端接入 阿里物联网平台(二).net 实现移动端(WEB.HTML)与设备端通讯 一.阿里物联网平台 平台地址:https://ac ...

  8. 阿里物联网平台产品、设备创建

    (1)创建阿里云账号,开通物联网平台 产品 (2)进入控制台,点击产品,点击创建产品 (3)选择自定义产品,输入自己产品的名称,其他不用更改 (3)点击查看,有产品的密码等 设备 (1)点击添加设备, ...

  9. [IOT] 自制蓝牙工牌办公室定位系统 (一)—— 阿里物联网平台概览及打通端到云(硬核·干货)

    目录: 老少皆宜.超长干货文警告 1.快速入门创建产品 -- 小白,打包带走去吹牛 2.代码分析 -- 老炮,快速了解能用上 2.1 从start.sh分析开发环境如何自动构建 2.2 从sample ...

最新文章

  1. Redis 常用监控信息命令总结
  2. Linux Shell高级技巧(一)
  3. 并发的发展历史-线程的出现
  4. 第9步 spring 配置 springmvc配置
  5. 如何优雅的激怒C/C++程序员
  6. Hashcat从入门到入土(一)
  7. mysql的错误代码4999_mysql相关错误以及对应解决方法总结
  8. HDU-1151 Air Raid
  9. Sqlite3 数据库基本操作
  10. 天的故事 V1.0.2
  11. 【中秋快乐】求问meta-learning和few-shot learning的关系是什么?
  12. java分页计算_java分页算法
  13. 最实用的清理IE命令 ClearMyTracksByProcess
  14. qt高亮快捷键_Qt常用快捷键
  15. mq中消息消费的几种方式
  16. 反转!南大通报“教师性侵学生”事件,举报人因读研时未获国奖虚假举报
  17. a1465苹果笔记本_苹果笔记本开机“文件夹图标里有个问号”,大神一根线完美修复...
  18. 【MapBox实战】生成地图+绘制区域+纠偏
  19. cookies、sessions、token区别
  20. qbo 点云数据(距离)的获取

热门文章

  1. python中序列_python中什么是序列
  2. 2021双十一自动浏览脚本,京东淘宝自动化脚本末班车
  3. html5文本框里插图片文字,word应用教程:在文本框内插入图片
  4. CF1438D Powerful Ksenia
  5. 计算n个整数中有多少个正整数、多少个负整数,并计算这些整数的总和和平均值
  6. int、time和timestamp区别
  7. 如何用十六进制换算十进制
  8. 不要再「外包」AI 模型了!最新研究发现:有些破坏机器学习模型安全的「后门」无法被检测到...
  9. js 正则 验证密码输入,必须为6-15位,含有数字字母,或者符号
  10. MySQL提权——udf提权