通用ESP8266连接阿里云物联网平台

最近在做毕业设计.毕竟本科4年,作为计算机嵌入式专业学生,又在嵌入式实验室学习三四年,不想糊弄自己,准备好好搞一个.最近突然决定要将硬件连接云平台,采用的是通用的ESP8266,于是乎就开始搞阿里云.整了两天终于调试完成,简单分享一下步骤,希望第一次接触阿里云物联网平台的同学有所帮助.前提是需要了解ESP8266的基本AT指令,了解MQTT协议,及阿里云基本的知识,否则步步懵.

一,注册阿里云创建设备,并获取设备三元组.

1.注册阿里云,钉钉,支付宝都可以,实名认证后,进入物联网平台(自己找一下,不断升级位置可能会改变)

 2.点击进入公共实例

3.新建产品(全部默认即可,即:直连设备,wifi,ICA)

4.选择所创建的产品,点击右侧设备管理

 

5.进入后点击添加设备,创建自己的设备此处为D001(当前显示离线,是因为我已经连接过了,刚创建完应该是未激活状态)然后点击右侧查看设备属性

 

6.在设备信息界面点击查看,查看并获取设备的三元组

此三元组是连接阿里云的重要信息,一键复制备用

二,准备连接阿里云,生成报文

此处仅演示连接报文,报文转换并不复杂,只需要细心不要出错,哪怕一点错误都连不上.

1.复制到记事本备用

 

2.首先明确阿里云我们自己创建设备的IP地址即我们一会要连接的地址(我的是华东2)

*.iot-as-mqtt.cn-shanghai.aliyuncs.com     端口号:1883  "*"为我们设备的ProductKey值

即我的设备地址为:

                        

3.生成MQTT协议的连接报文,首先是固定报头加可变报头

固定报头+可变包头如下:   10 ?? 00 04 4D 51 54 54 04 C2 00 64

4.接着是报文负载

负载1>>>(DEVICENAME)|securemode=3,signmethod=hmacsha1|

负载2>>>(DEVICENAME)&(PRODUCTKEY) 

负载3>>>ClientId(DEVICENAME)deviceName(DEVICENAME)productKey(PRODUCTKEY)

加密密钥(DeviceSecret)

将括号连其内容用我们的三元组替换,一定要细心,不要误删掉任何一个字母.

4.1对3做哈希加密:  输入负载3>>> 及 DeviceSecret点击HmacSHA1进行加密,得到加密后的一串数据

4.2 负载1,负载2替换及负载3替换加密后得到

 

4.3对上述得到的3串数据进行转换

转换成16进制码,并在前面加上转换16进制后报文的长度得到新的负载1,2,3

蓝色方框两个字节为对应的长度(16进制表示).

4.4得到最终连接报文

将新得到的负载报文1,2,3添加在固定加可变报文后,并将报文的第二个字节(??)更换为报文总长度(从??下一字节到最后一字节的长度),我的总长度为110转化为16进制为6E

 

到这里报文就完成了,一定要仔细,错误一个字节就连接不上.

三,打开网络助手,用串口模块连接ESP8266,准备调试

淘宝5块买的ESP8266 ,只需接TX,RX,VCC,GND,EN五个引脚,这里自己接一下.

1.连接完毕准备调试,在右侧一次装入AT指令

 

 

具体如下:

AT+RST

AT+CWMODE=1

AT+CWAUTOCONN=0

 AT+CWJAP="wifi名称","wifi密码"         根据自己的wifi修改

AT+CIPMODE=1

AT+CIPMUX=0

AT+CIPSTART="TCP","(ProductKey).iot-as-mqtt.cn-shanghai.aliyuncs.com",1883 

                         注意: 将(ProductKey)替换为自己设备对应值

AT+CIPSEND     进入透传模式,一定不要忘,不要猴急,一忘就叉屁.

10 6E 00 04 4D 51 54 54 04 C2**********************..... 进入透传后就开始发送连接报文,注意此时必须仪HEX形式发送.

只要不反返回Close就表示成功由于当前是以字符串形式显示,所以看不到回复的20 02 00 00 

此时把显示方式变为HEX模式 

发送ping包C0 00

回复D0 00即表示连接十分OK.

总结

mqtt协议并不是很难,报文格式了解清楚,就可以完成,手动生成报文过程中一定要小心,不要出错,哪怕多一个空格,就会被阿里云立马踢下去.一定要细致.

在网上找的资料大多数是说用蜂窝方式连接,设备选一个2G模组,以此种方式接进云平台,我特意测试,选用WIFI,不选模组,一样可以连接.(如果你不知道这个事可以忽略).

 

 

 

 

 

 

 

 

  • 38
    点赞
  • 290
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
### 回答1: 很抱歉,由于代码内容过多,无法在此回答中全部展示。不过,我可以为您提供一些关于如何连接阿里云物联网的指导方针: 1. 首先,您需要拥有一个阿里云账号并创建一个物联网套件。 2. 然后,您需要在STM32芯片上配置ESP8266模块,以便它可以通过Wi-Fi与阿里云服务器进行通信。 3. 接下来,您需要使用物联网套件的ProductKey、DeviceName和DeviceSecret等信息,在STM32代码中配置ESP8266连接阿里云物联网服务。 4. 最后,您可以在STM32代码中编写代码,通过ESP8266阿里云物联网服务进行通信,实现对设备状态的上传和下发控制命令等功能。 希望对您有所帮助。如果您需要更详细的代码示例,可以在网上搜索相关资料或者咨询技术专家。 ### 回答2: 为了实现STM32与ESP8266连接阿里云物联网的功能,在编写代码之前,需要了解一些基本的概念和步骤。 步骤1:搭建硬件连接 首先,将STM32与ESP8266通过串口进行连接。将STM32的串口TX引脚连接ESP8266的RX引脚,STM32的串口RX引脚连接ESP8266的TX引脚。确保电源和地线也正确连接。 步骤2:配置ESP8266 使用ESP8266的AT指令进行初始化和配置。例如,设置ESP8266工作模式、连接WiFi、连接阿里云服务器等。 步骤3:编写STM32代码 在STM32上编写代码,与ESP8266进行通信并发送数据到阿里云。 以下是一个简单的示例代码: #include "stm32f10x.h" #include <stdio.h> void USART1_SendChar(char c) { while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); USART_SendData(USART1, c); } void USART1_SendString(char* s) { while(*s) { USART1_SendChar(*s++); } } int main(void) { // 初始化串口 USART_InitTypeDef USART_InitStructure; USART_InitStructure.USART_BaudRate = 9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_Mode = USART_Mode_Tx; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_Init(USART1, &USART_InitStructure); USART_Cmd(USART1, ENABLE); // 连接ESP8266 USART1_SendString("AT+CWMODE=1\r\n"); // 设置ESP8266为Station模式 USART1_SendString("AT+CWJAP=\"SSID\",\"Password\"\r\n"); // 连接WiFi,将SSID和Password替换为你的WiFi信息 // 发送数据到阿里云 USART1_SendString("AT+CIPSTART=\"TCP\",\"YourAliyunHost\",8883\r\n"); // 连接阿里云服务器,将YourAliyunHost替换为阿里云服务器地址 USART1_SendString("AT+CIPSEND=10\r\n"); // 发送10个字节的数据 USART1_SendString("Hello World\r\n"); // 发送数据到阿里云 while (1) { // 循环执行其他任务 } } 以上代码,通过USART1与ESP8266进行串口通信,具体的AT指令通过USART1_SendString函数发送到ESP8266。通过修改对应的参数和指令,可以实现相应的功能。 需要注意的是,该代码仅为示例,实际需根据具体的硬件和需求进行适配和修改。同时,还需要根据阿里云物联网平台提供的文档,进行相关配置和认证等操作。 ### 回答3: 下面给出一个示例的代码来展示如何使用STM32和ESP8266连接阿里云物联网平台: ```c #include <stdio.h> #include <string.h> // ESP8266所需的AT指令宏定义 #define AT_COMMAND "AT\r\n" #define AT_RST_COMMAND "AT+RST\r\n" #define AT_CWMODE_COMMAND "AT+CWMODE=1\r\n" #define AT_CWJAP_COMMAND "AT+CWJAP=\"<ssid>\",\"<password>\"\r\n" #define AT_CIPSTART_COMMAND "AT+CIPSTART=\"TCP\",\"<aliyun server>\",<port>\r\n" #define AT_CIPSEND_COMMAND "AT+CIPSEND=<data_size>\r\n" void esp8266_send_command(char* command) { // 将命令发送给ESP8266模块 } void stm32_send_data(char* data) { // 将数据发送给STM32 } int main() { // 初始化STM32和ESP8266 // 重启ESP8266 esp8266_send_command(AT_RST_COMMAND); // 设置ESP8266为STA模式 esp8266_send_command(AT_CWMODE_COMMAND); // 连接到Wi-Fi网络 esp8266_send_command(AT_CWJAP_COMMAND); // 建立与阿里云服务器的TCP连接 esp8266_send_command(AT_CIPSTART_COMMAND); // 发送数据到阿里云物联网平台 char data[] = "{\"temperature\": 25, \"humidity\": 50}"; char command[50]; sprintf(command, "%s%d\r\n", AT_CIPSEND_COMMAND, strlen(data)); esp8266_send_command(command); stm32_send_data(data); return 0; } ``` 以上是一个简单的示例代码,你需要根据实际情况进行适当的修改和调整。其中,需要替换的内容有: - `<ssid>`和`<password>`:你要连接的Wi-Fi网络的SSID和密码。 - `<aliyun server>`:阿里云物联网平台的服务器地址。 - `<port>`:阿里云物联网平台的TCP端口号。 另外,你还需要根据具体外设的接口和协议规范,实现`esp8266_send_command`和`stm32_send_data`函数,以将命令发送给ESP8266模块并将数据发送给STM32。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值