ESP8266 接入阿里云物联网云平台

AT指令集参考资料

乐鑫科技:基础 AT 命令集

概念浅析

  • 物模型

是对设备在云端的功能描述,包括设备的属性、服务和事件。物联网平台通过定义一种物的描述语言来描述物模型,称之为TSL(即 Thing Specification Language),采用JSON格式,您可以根据TSL组装上报设备的数据。
在这里插入图片描述

  • 属性

设备的功能模型之一,一般用于描述设备运行时的状态,如环境监测设备所读取的当前环境温度等。属性支持GET和SET请求方式。应用系统可发起对属性的读取和设置请求。

  • 期望属性值

通过期望属性值功能,设置您希望的设备属性值。若设备在线,将实时更新属性值;若设备离线,期望属性值将缓存在云端。设备上线后,获取期望属性值,并更新属性值。

  • 服务

设备的功能模型之一,设备可被外部调用的能力或方法,可设置输入参数和输出参数。相比于属性,服务可通过一条指令实现更复杂的业务逻辑,如执行某项特定的任务。

  • 事件

设备的功能模型之一,设备运行时的事件。事件一般包含需要被外部感知和处理的通知信息,可包含多个输出参数。例如,某项任务完成的信息,或者设备发生故障或告警时的温度等,事件可以被订阅和推送。

  • 数据解析脚本

针对采用透传格式/自定义数据格式的设备,需要在云端编写数据解析脚本,将设备上报的二进制数据或自定义的JSON数据,转换为物联网平台支持的Alink JSON数据格式;将平台下发的Alink JSON格式数据,转换为设备支持的格式。

  • 设备影子

是一个JSON文档,用于存储设备或者应用的当前状态信息。每个设备都会在云端有唯一的设备影子。无论该设备是否连接到Internet,您都可以使用设备影子通过MQTT协议或HTTP协议获取和设置设备的状态。

  • Topic

Topic是UTF-8字符串,是发布(Pub)/订阅(Sub)消息的传输中介。可以向Topic发布或者订阅消息。

  • Topic类

同一产品下不同设备的Topic集合,用 p r o d u c t k e y 和 {productkey}和 productkey{deviceName}通配一个唯一的设备,一个Topic类对一个ProductKey下所有设备通用。

  • 发布

操作Topic的权限类型,对应的英文名称为Pub。可以往此类Topic中发布消息。

  • 订阅

操作Topic的权限类型,对应的英文名称为Sub。可以从此类Topic中订阅消息。


设备接入流程

接入流程


步骤

  1. 准备ESP8266 12-F 模组,连接串口线接入PC
  2. 更新AT固件库,使用最近版本固件库安信可固件库 - 波特率选择115200
  3. 输入指令测试模块的AT指令通信功能 参考ESP-AT 用户指南中的说明
# 测试模块是否能正常接收AT指令
AT 

# 测试模块当前的工作模式,是AP \ 还是STATION站点
AT + CWMODE ? 

# 设置为站点模式,准备接入家里的路由器AP
AT + CWMODE = 1

# 输入路由器的ssid、password
AT+CWJAP="chamberlain","mypassword"

# ESP8266 可以定期从指定的 NTP 服务器获取准确的时间信息
AT+CIPSNTPCFG=1,8,“ntp1.aliyun.com”

# 查看本地IP地址和MAC地址 - 如果能正常响应,说明模块已经正常接入路由器
AT + CIFSR

# mqtt 客户端和阿里云通信配置 ( 通过阿里云配置工具生成,需要在物联网平台设备页面,查看productKey、 DeviceName、DeviceName 三个参数,然后用工具生成clientId、userName,password ... )
# 这里需要格外注意,clientId中的逗号要进行转义: , 转义成  \,
AT+MQTTUSERCFG=0,1,"12345|securemode=3\,signmethod=hmacsha1|","myled1&k0r3du8umbF","***",0,0,""

# mqtt 客户端和阿里云通信配置 ( 通过这个AT指令,物联网平台的设备正式连通、处于online状态 )
AT+MQTTCONN=0,"k0r3du8umbF.iot-as-mqtt.cn-shanghai.aliyuncs.com",1883,1

可参考csdn博客:ESP-01S使用AT指令连接阿里云

该博客做法是:
在平台的产品上自定义一个topic,然后设备esp8266-01 通过AT指令:AT+MQTTSUB=0,"/k0r3du8umbF/myled1/user/get",1,订阅该主题

进入物联网平台,找到实际的设备,在设备下找到topic列表,显示该设备定于的主题,然后进入该主题,点击发布消息,这实际订阅该主题的设备就会收到信息。


  • 扩展
    当我们用单片机开发ESP8266相关的应用时,需要注意:发送给8266的时候,模块响应的数据,如果接收的的数据是AT OK , 其实我们在处理的时候,需要转换成十六进制的形式处理:41 54 0D 0A 0D 0A 4F 4B 0D 0A 这里面包含了0D ( \r :回车控制符 ) \ 0A (\n : 换行控制符)

在单片机处理的时候,需要注意处理这些\r\n 转义字符,而不仅仅是处理asicc 对应的字母或者数字、符号等等。


ESP8266 收发数据

参考esp8266通过MQTT-AT指令连接阿里云互联网平台并收发数据

设备订阅topic & 设备接收topic发布的内容

目的: 测试设备订阅某个主题,当某个主题发布消息的时候,设备是否能收到通知,具体操作步骤如下:
在阿里云物联网平台上,在产品下面的Topic例表中 -> 自定义Topic 中
在这里插入图片描述

# 通过串口助手,将设备通过AT指令订阅产品的某一个Topic主题
AT+MQTTSUB=0,"/k0r3du8umbF/${deviceName}/user/get",1

在设备已订阅Topic中点击发布消息:
在这里插入图片描述

设备端接收到,主题发布的信息:
设备端接收到,主题发布的信息

设备上报数据到云平台

步骤:

  1. 在产品下方新建:2个物模型数据 CurrentTemperature , Humidity
    在这里插入图片描述

  2. 通过AT指令,将设备通过串口助手,发布到属性上报的主题上,JSON数据格式要严格依照阿里云平台的规定进行,特殊字符需要进行转义,发布mqtt命令指令说明参考:AT+MQTTPUB:发布 MQTT 消息(字符串)

# 串口调试助手发布mqtt消息给平台的:属性上报主题
# 这里的json数据格式可以,在平台的设备模拟中,进行测试,然后copy输出日志中的json即可(注意“,’都需要进行转义)
AT+MQTTPUB=0,"/sys/k0r3du8umbF/doorLight/thing/event/property/post","{\"id\":1705385300790\,\"params\":{\"Humidity\":85\,\"CurrentTemperature\":26}\,\"version\":\"1.0\"\,\"method\":\"thing.event.property.post\"}",0,0

串口发送AT指令到云平台(前提:需要建立mqtt与阿里云的连接):

在这里插入图片描述
设备数据上报(发布到属性上报topic后),平台设备物模型数据中,立马更新当前最新的设备数据。
在这里插入图片描述


设备远程控制

腾讯云物联网平台使用手册
这里举例腾讯云平台的操作:

  • 1、使用物模型协议的设备,当需要通过云端控制设备时,设备需订阅下发 Topic 接收云端指令:
    • 下发 Topic: $thing/down/property/{ProductID}/{DeviceName}
    • 响应 Topic: $thing/up/property/{ProductID}/{DeviceName}
  • 2、请求
    • 远程控制请求消息格式:
    {
        "method": "control",
        "clientToken": "123",	
        "params": {
            "power_switch": 1,
            "color": 1,
            "brightness": 66	
        }
    }
    

在这里插入图片描述

  • 3响应。
    在这里插入图片描述

断开MQTT连接

AT + MQTTCLEAN = 0

阿里云使用mqtt调试小结

  • 记住,主题topic是平台为了物联网设备方便进行数据传输而设置的一种机制,他就是一个标识符
  • 设备端只有2种身份,发布者 | 订阅者 , 他们和topic(broker 代理者来管理)是各自独立分开的
  • 设备端能否收到数据,取决于设备是否订阅了某个主题 & 主题是否有收到其他设备发布到改主题上数据的载荷

  • 当我们使用mqtt.fx 工具连接的时候,其实就是相当于模拟了一台物联网终端设备(输入用户账号密码,mqtt服务器的域名)
  • 当设备发布了物模型 属性数据到特定主题:/sys/k0r3dSfdkXp/${deviceName}/thing/event/property/post 的时候,平台就帮你管理了这个设备的属性集合

  • AT + WIFI 指令集
    WiFi指令集通常用于管理和配置WiFi模块的网络连接。这些指令包括连接到WiFi网络、获取IP地址、设置网络参数等。它们操作于网络层和数据链路层,确保设备能够在物理层和数据链路层上与WiFi网络进行通信,从而建立网络连接。

  • AT + MQTT 指令集
    MQTT指令集则用于控制设备与MQTT服务器之间的通信。MQTT是一种应用层协议,通常运行在TCP 传输协议栈之上。MQTT指令集中的指令涉及到建立与MQTT服务器的连接、发布消息、订阅主题等操作,属于应用层协议的控制

这两者有何关系呢?

+---------------------+            +-----------------------+
|    单片机 (客户端)   |            |       服务器 (服务器端) |
+---------------------+            +-----------------------+
|                     |            |                       |
|                     |            |                       |
|    +-------------+  |    互联网   |  +-----------------+  |
|    | wifi        |  | <--------> |  |   网络接口      |  |
|    +-------------+  |            |  +-----------------+  |
|                     |            |                       |
|    +-------------+  |            |                       |
|    |   处理逻辑   |  |            |                       |
|    +-------------+  |            |                       |
|                     |            |                       |
+---------------------+            +-----------------------+
这里AT + WIFI 指令集,只能建立网络层、数据链路层的网络连接



AT + MQTT 指令集,能建立设备于服务端的mqtt服务器的通信通道、进行实现数据交换
设备和服务器的mqtt服务的通讯是建立在TCP 传输层 协议层的基础上的
没有网络层、数据链路层作为载体,设备就无法与云端通讯。

设备要和云端建立通讯的步骤:

  • 连接路由器:

使用ESP8266的AT指令,通过指定路由器的SSID和密码,连接到WiFi网络。这一步骤涉及到物理层、数据链路层和网络层的建立。

  • 获取IP地址:

成功连接到WiFi网络后,ESP8266会从路由器获取分配的IP地址,这使得设备可以在网络中被识别和访问。

  • 建立TCP连接:

使用AT指令,通过TCP协议与云平台的服务器建立连接。这涉及到传输层的建立,确保数据的可靠传输。

  • 实现数据上传:

一旦建立了与云平台的TCP连接,ESP8266可以通过AT指令将采集到的数据封装成消息,然后通过TCP连接发送给云平台服务器。

  • 数据处理和存储:

云平台服务器接收到ESP8266发送的数据后,会进行相应的处理和存储。这包括数据解析、存储到数据库、触发事件等操作。

  • 响应与反馈:

云平台服务器可能会对ESP8266发送的数据做出响应,例如发送确认消息、执行特定的命令等。ESP8266可以通过TCP连接接收并处理来- 自服务器的响应。

  • 保持连接和定时上传:

为了确保通信的稳定性和持续性,ESP8266可能会定时发送心跳消息,以保持与云平台服务器的TCP连接活跃。同时,设备也可以根据实际需求定时上传数据到云平台。


可以参考:
计算机网络知识点全面总结


+-------------------------------------------------------+
|               应用层 (Application Layer)       Mqtt 协议 |
+-------------------------------------------------------+
+-------------------------------------------------------+
|                 传输层 (Transport Layer)                  |
+-------------------------------------------------------+
|           TCP/UDP 协议 (TCP/UDP Protocol)               |
+-------------------------------------------------------+
|                  网络层 (Network Layer)                   |
+-------------------------------------------------------+
|            IP 协议 (IP Protocol)                         |
+-------------------------------------------------------+
|                 数据链路层 (Data Link Layer)               |
+-------------------------------------------------------+
|           WiFi/Ethernet 接口 (WiFi/Ethernet Interface)    |
+-------------------------------------------------------+


小结ding

  1. 为什么设备发布数据到某个主题上,物联网平台就能更新温度、湿度这两个数据呢,原理是什么?
    答:
    在这里插入图片描述

  2. 上报数据到云平台,不需要先订阅某个主题吗?直接通过publish指令,上报就行了么?为什么啊?

    答:
    在这里插入图片描述


拓展 ( GPT提问 )

阿里云物联网平台,提供设备端SDK,这里的设备端SDK,和我平时使用ESP8266 +STM32 开发,有何区别?

阿里云物联网平台提供的设备端SDK与您平时使用ESP8266+STM32开发的主要区别在于它们的目的、功能范围和集成程度。下面分别从几个方面对比说明:

目的与集成程度:

ESP8266+STM32开发:这种组合通常是指将ESP8266作为Wi-Fi模块,用于实现设备的无线网络连接;STM32作为主控MCU,负责设备的传感器数据采集、控制逻辑执行、与ESP8266的通信等任务。这种方式下,您需要分别对ESP8266和STM32进行独立开发,然后通过串口、SPI、I²C等方式将两者连接起来协同工作。整个系统的设计、集成、调试等工作需要您自行完成。

阿里云物联网平台设备端SDK:该SDK专为接入阿里云物联网平台而设计,目的是简化设备端与云端的交互流程,让设备能快速、安全地连接至阿里云,实现远程监控、控制、数据上报等功能。SDK已高度集成,通常包含网络连接、身份认证、消息收发、OTA升级等模块,只需将其集成到您的设备端代码中,按照文档指引进行配置和调用即可。

功能范围:

ESP8266+STM32开发:这种组合涵盖了设备的全部功能,包括硬件驱动、传感器接口、控制逻辑、Wi-Fi连接、数据传输等。您需要全面考虑设备的软硬件设计、电源管理、故障处理、安全性等多个方面。

阿里云物联网平台设备端SDK:专注于设备与云端的通信部分,主要提供以下功能:

  • 网络连接:SDK内部一般已经集成了MQTT、CoAP、HTTP等常见的物联网通信协议,您无需深入了解这些协议细节,只需配置好相关参数(如服务器地址、端口、设备凭证等)即可建立连接。
  • 身份认证:支持阿里云物联网平台的设备认证机制,如使用设备密钥、X.509证书等方式进行身份验证和加密通信,确保数据安全。
  • 消息收发:提供简洁的API来订阅、发布Topic消息,方便设备与云端进行双向通信,实现状态上报、命令接收等功能。
  • OTA升级:部分SDK还支持Over-The-Air (OTA)固件升级功能,允许设备通���云端远程更新固件,简化设备维护。

开发难度与资源投入:

ESP8266+STM32开发:由于需要自行设计和实现大部分功能,开发周期可能较长,技术门槛相对较高,需要投入更多时间和精力在软硬件设计、调试、测试等方面。但这种方式灵活性高,可根据项目需求定制化开发。

阿里云物联网平台设备端SDK:使用SDK可以大幅降低设备接入云端的复杂性,缩短开发周期,减少技术门槛。SDK通常附带详细的文档、示例代码和开发者社区支持,便于快速上手。不过,您需要遵循阿里云物联网平台的规则和接口规范,牺牲一定的定制化自由度。

总结来说,使用阿里云物联网平台设备端SDK相较于直接使用ESP8266+STM32开发,前者更侧重于设备与云端的无缝对接,提供了一站式的解决方案,简化了网络连接、身份认证、消息收发等核心功能的实现。而后者则需要自行设计和整合所有功能,虽有更高的定制自由度,但开发工作量和复杂性也相应增加。选择哪种方式应根据项目的具体需求、团队技术能力、时间成本等因素综合考虑。

  • 12
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将ESP8266连接阿里云,需要进行以下步骤: 1. 注册阿里云账号并开通物联网平台服务。 2. 在阿里云物联网平台上创建设备,获取设备的Product Key、Device Name和Device Secret。 3. 下载并安装Arduino IDE,安装ESP8266板卡支持库和PubSubClient库。 4. 编写ESP8266的代码,使用PubSubClient库连接阿里云物联网平台的MQTT服务器,并在代码中输入设备的Product Key、Device Name和Device Secret。 5. 上传代码到ESP8266板子上并测试连接是否成功。 以下是一个简单的示例代码,可以将其作为参考: ```C++ #include <ESP8266WiFi.h> #include <PubSubClient.h> const char* ssid = "YOUR_SSID"; const char* password = "YOUR_PASSWORD"; const char* server = "YOUR_PRODUCT_KEY.iot-as-mqtt.cn-shanghai.aliyuncs.com"; const int port = 1883; const char* clientID = "ESP8266Client"; const char* topic = "/YOUR_PRODUCT_KEY/YOUR_DEVICE_NAME/user/get"; const char* mqttUser = "YOUR_DEVICE_NAME&YOUR_PRODUCT_KEY"; const char* mqttPass = "YOUR_DEVICE_SECRET"; WiFiClient wifiClient; PubSubClient mqttClient(wifiClient); void setup() { Serial.begin(115200); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); } Serial.println("WiFi connected"); mqttClient.setServer(server, port); mqttClient.setCallback(callback); connect(); } void loop() { if (!mqttClient.connected()) { connect(); } mqttClient.loop(); } void connect() { while (!mqttClient.connected()) { Serial.println("Connecting to MQTT server..."); if (mqttClient.connect(clientID, mqttUser, mqttPass)) { Serial.println("Connected to MQTT server"); mqttClient.subscribe(topic); } else { Serial.print("Failed to connect to MQTT server, rc="); Serial.print(mqttClient.state()); Serial.println(" retrying in 5 seconds"); delay(5000); } } } void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Received message: "); for (int i=0; i<length; i++) { Serial.print((char)payload[i]); } Serial.println(); } ``` 其中,需要将YOUR_SSID和YOUR_PASSWORD替换为自己的WiFi名称和密码,将YOUR_PRODUCT_KEY、YOUR_DEVICE_NAME和YOUR_DEVICE_SECRET替换为设备的Product Key、Device Name和Device Secret。 在setup()函数中,连接WiFi并设置MQTT服务器信息,连接MQTT服务器并订阅消息。在loop()函数中,检查MQTT连接是否断开,如果断开则重新连接。在callback()函数中,处理接收到的消息。 注意,以上代码只是一个简单的示例,实际应用中需要根据具体需求进行修改和完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值