005-STM32+ESP8266+AIR202/302基本控制篇--Android和ESP8266连接阿里云物联网平台,并通过云平台实现远程温湿度采集和继电器控制(预注册方式)

<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/ESA2GJK1DH1K_A/" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>

实现的功能

Android和ESP8266连接阿里云平台,并实现Android和ESP8266之间通信控制.

 

 

 

 

前要

为了使得这一节可以单独使用,这节将重新开始注册一个新的产品!

其余的细节问题请用户参考前面的内容!

 

开通阿里云物联网平台

https://www.aliyun.com/

1.搜索阿里云物联网平台(如果没有开通请自行开通)

 

 

 

 

创建产品(并在产品下面添加设备)

 

1.创建产品

 

 

 

2.设置下产品的名称

 

 

 

 

 

 

3.添加设备,设备名字我写的是ESP8266

 

 

 

 

 

 

 

4.点击查看

 

 

 

 

 

 

 

 

 

 

注意地域!后面有说明!

 

5.打开单片机程序源码,并修改上面的三个参数

 

 

 

 

 

 

 

 

6.关于地域,请参考

 

 

 

 

7.我的是上海,所以填写的是  cn-shanghai

 

 

 

 

 

8.修改连接路由器的信息

 

 

 

 

 

 

 

9.下载并查看打印

打印连接成功,并在每个一段时间发布消息.

然后后台上面显示上线

 

 

 

 

 

再添加一个设备,作为Android接入

1.添加设备,设备名字我写的是 Android

 

 

 

 

 

2.点击查看

 

 

 

 

 

 

3.打开本节Android源码,并修改上面相应的参数

 

 

 

 

 

 

 

4.安装到手机并打开,如果日志打印有 Connect Success

说明已经接入了阿里云

 

 

 

配置规则引擎(如果前面配置了这个规则,无需重复配置)

1.规则引擎 ,云产品流转,创建规则

 

 

 

 

 

2.选择编写 SQL

 

 

 

 

 

 

 

3.添加操作

 

 

 

 

4.注意①自己填写   ${TargetDevice}

 

 

 

5.启动规则

 

 

 

 

 

 

 

 

 

 

 

 

点击APP右上角菜单,选择添加设备

1.点击添加设备

 

 

 

 

2.输入WiFi模块程序中使用的注册的设备的名字

 

 

 

3.然后点击确定,页面上将添加一个设备,点击这个设备

 

 

 

4.控制页面会显示当前单片机采集的温湿度数据,还有开关状态

 

 

 

 

5.控制继电器

   

 

 

 

 

 

 

 

  

 

 

 

 

 

 

 

源码说明

我再解释下一个事情:

阿里云注册的一个设备就作为了一个mqtt客户端,你可以把这个设备作为单片机使用也可以作为APP使用.

一个设备的信息同一时间只能一个设备去用,如果同时使用,就会挤掉线!!!!

 

1.整体通信流程说明

APP和单片机设备都是作为了阿里云注册的设备接入.

其实就是阿里云上面注册的两个设备通信.

这节的APP软件使用的云端注册的设备名字为 Android 的设备接入云平台

发布的主题是:  /{ProductKey}/{DeviceName}/user/update

即:/a1kalhdMH2Z/Android/user/update

 

订阅的主题为:/{ProductKey}/{DeviceName}/user/get

即:/a1kalhdMH2Z/Android/user/get

 

这节的单片机使用的云端注册的设备名字为 ESP8266 的设备接入云平台

发布的主题是:  /{ProductKey}/{DeviceName}/user/update

即:/a1kalhdMH2Z/ESP8266/user/update

 

订阅的主题为:/{ProductKey}/{DeviceName}/user/get

即:/a1kalhdMH2Z/ESP8266/user/get

 

APP和单片机设备各自作为阿里云的设备接入阿里云服务器.

然后APP 添加设备的时候是添加的单片机设备注册的名字

然后APP发布的消息为:(以控制继电器吸合为例)

{"TargetDevice":"ESP8266","DeviceName":"Android","data":"switch","bit":"1","status":"1"}

 

TargetDevice 字段的值是 ESP8266,是APP添加的设备的名字.

DeviceName 字段的值是 Android ,是APP本身设备的名字.

这条信息发给云平台以后,经过了转发规则

 

注:(提取数据)  /a1kalhdMH2Z/+/user/update  里面的 + 代表任意字符串

意思是提取符合主题 /a1kalhdMH2Z/任意/user/update  里面的所有消息

上面的就提取了  

{"TargetDevice":"ESP8266","DeviceName":"Android","data":"switch","bit":"1","status":"1"}

 

 

 

 

注:(对数据进行操作)   发布到另一个 Topic    /a1kalhdMH2Z/${TargetDevice}/user/get 

${TargetDevice}意思是提取消息里面字段为 TargetDevice 的字段值,然后替换上面的  ${TargetDevice}

咱的消息是 {"TargetDevice":"ESP8266","DeviceName":"Android","data":"switch","bit":"1","status":"1"}

所以最终消息转发给下面的主题(也就是单片机订阅的主题)

/a1kalhdMH2Z/ESP8266/user/get 

然后单片机就收到了消息 {"TargetDevice":"ESP8266","DeviceName":"Android","data":"switch","bit":"1","status":"1"}

 

 

 

单片机接收到消息以后,提取 "DeviceName":"Android"

然后用自己的发布主题发布消息  /a1kalhdMH2Z/ESP8266/user/update

消息为:

{"TargetDevice":"Android","DeviceName":"ESP8266","data":"switch","bit":"1","status":"1"}

 

TargetDevice 字段的值改为了 Android

DeviceName 字段的值为单片机自己的设备名字  ESP8266

 

消息发给了服务器,然后经过转发规则,同理 ,消息便会转发给了APP

最后APP 提取消息里面的数据,就完成了通信

 

 

2.APP程序执行流程说明

 

1.作为阿里云的一个设备接入云平台

 

 

 

 

 

2.添加一个设备,并把添加的设备的名字存储到数据库

 

 

 

 

3.点击跳转到控制页面时把设备名字传递过去

 

 

 

4.控制页面获取设备名称并组合发送的消息

 

 

 

5.组合自己的自定义主题

 

 

 

6.发送消息

 

 

 

7.接收处理消息

 

 

 

 

 

 

 

 

3.单片机程序执行流程

1.作为阿里云的一个设备接入云平台

 

 

 

2.接收到数据以后,提取字段DeviceName 的值 Android

把TargetDevice字段的值改为 Android

DeviceName 字段的值改为 ESP8266

用自己的主题发送消息

 

 

 

结语

当前的程序虽然实现了设备之间的通信,

1.但是呢设备是咱先在云平台上面注册,然后把信息写到单片机和APP里面.

2.需要APP先发信息给设备,设备才可以发信息给APP,因为设备需要在信息中

提取 DeviceName 字段的值 ,才知道要发给谁.

 

对于 1  而言咱后面有动态注册.

APP和单片机通过程序自己去注册一个设备

然后用自己注册的设备连接上云平台.

当然,为了让APP获取单片机的设备名字

单片机注册的时候可以使用WiFi模块的MAC地址或者GPRS模块的 IMEI

 

对于2而言我也没什么好的解决方式

 

posted on 2020-10-22 07:40  广源时代  阅读(790)  评论(0编辑  收藏  举报

导航

支付宝 QQ群