基于STM32F407VGT6的ESP8266接入阿里云教程(详细)

目录

1 阿里云平台

1-1 阿里云注册

 1-2 创建产品和设备

1-3 创建物模型

2 MQTT.fx接入阿里云

3 ESP8266接入阿里云


1 阿里云平台

1-1 阿里云注册

为了方便理解,本次阿里云注册采用全新账号重零开始:

第一步:进入阿里云官网 https://www.aliyun.com/​​​​​​

点击左上角登录按钮并完成登录,一般用支付宝扫码登录就OK

第二步:登录完成后,点击右上角控制台

进入到控制台界面

进入到控制台界面后,最近访问的那里是没有物联网平台的,所以我们要去搜索物联网平台,在控制台中上搜索框搜索:物联网平台,并点击物联网平台,如图所示

 第三步:进入到物联网平台

 1-2 创建产品和设备

第一步:点击公共实例,没激活的朋友可以去激活一下,需要等个3-5分钟

 第二步:点击左边导航栏的设备管理,展开后点击产品

 第三步:点击创建产品

 按照图片上设置并点击确认:

 第四步:确认成功后,会弹出一个新页面不要急着关掉它

 这里出现了两行话,一是叫你添加设备,二是叫你添加物模型

先去添加设备

第四步:添加设备

 进入到设备界面后,点击添加设备

 点击后,会出现一个框,按图设置后点击确认:

 点击确认后,又会弹出一个框,这个框不要急着删,点击一键复制设备证书,如图:

 复制后用word文档或者文本保存起来:

表1-1 设备证书中相关参数说明

参数说明
ProductKey设备所隶属产品的Key,即物联网平台为产品颁发的全局唯一标识符
DeviceName设备在产品内的唯一标识符。DeviceName与设备所属产品的ProductKey组合,作为设备标识,用来与物联网平台进行连接认证和通信
DeviceSecret物联网平台为设备颁发的设备密钥,用于认证加密。需与DeviceName成对使用


1-3 创建物模型 里面会有你的productkey、devicename和驱动密码,走到这步后,我们的设备创建完成,下一步我们去创建物模型;

第一步:回到产品界面

 点击咱们刚刚新建产品后的查看:

 点击查看后进入到产品查看界面并找到功能定义,点击功能定义

 进入到功能定义后,我们会发现尚未添加任何功能,所以我们要添加功能

点击上图箭头所指的编辑草稿,进入到功能添加界面,点击添加自定义功能

根据自己的需求添加功能,这里以温度为例子

 按图填入,注意标识符,一定要填一个功能相关的,因为收发数据需要用到这东西,搞定之后往下拉找到确认按钮并点击,那么我们就能在功能定义界面看到我们新添加的物模型

 大家不要急着退出这个页面,如果我们想在设备物模型数据中看到我们刚刚添加的功能(温度),我们需要把这个新加的功能给发布上线,在功能定义页面找到发布上线按钮(蓝色的),点击

好,这样我们就完成了物模型的创建,我们去看看效果吧

点击设备->找到新加的设备后的查看->进入之后点击物模型数据

 那么在物模型数据里面我们就可以看到刚刚新加的功能啦

到此阿里云基础搭建完成 

/************************************

第二点MQTT.fx接入阿里云明天写

************************************/

2 MQTT.fx接入阿里云

2-1 MQTT.fx连接阿里云

完成了第一大点后,我们就可以使用MQTT.fx接入阿里云去测试一下我们的设备了,废话不多说咱们开始

第一步:安装MQTT.fx,相关安装包稍后会给链接

 双击直接进去傻瓜式安装就OK,安装过程的话我们直接省略,直接下一步

第二步:打开MQTT.fx

 双击这个紫色图标的快捷方式(应该安装完,在桌面生成的)

打开后软件长这样

 第三步:设置MQTT.fx,点击小齿轮进入设置

进入设置页面后,如下图点击新建:

新建后按图设置,详细参数说明在图片下面表格

2-1  设置基本信息相关参数说明

参数说明
Profile Name输入您的自定义名称
Profile Type选择为 MQTT Broker
MQTT Broker Profile Settings
Broker Address

连接域名。

格式:${YourProductKey}.iot-as-mqtt.${region}.aliyuncs.com

其中,${region}需替换为您物联网平台服务所在地域的代码。地域代码,请参见地域和可用区。如:alxxxxxxxxxx.iot-as-mqtt.cn-shanghai.aliyuncs.com

${YourProductKey}需要替换为ProductKey

a1UTSkcjwld.iot-as-mqtt.cn-shanghai.aliyuncs.com
Broker Port设置为:1883
Client ID

填写mqttClientId,用于MQTT的底层协议报文。

格式:${clientId}|securemode=3,signmethod=hmacsha1|

完整示例:12345|securemode=3,signmethod=hmacsha1|

其中,

${clientId}为设备的ID信息。可取任意值,长度在64字符以内。建议使用设备的MAC地址或SN码。

securemode为安全模式,TCP直连模式设置为securemode=3TLS直连为securemode=2

signmethod为算法类型,支持hmacmd5hmacsha1

说明 输入Client ID信息后,请勿单击Generate

ESP32|securemode=3,signmethod=hmacsha1|

 第四步:单击User Credentials,设置User NamePassword,如图所示

 设置用户名和密码,用户相关信息说明如表

参数说明
User Name

由设备名DeviceName、符号(&)和产品ProductKey组成。

固定格式:${YourDeviceName}&${YourPrductKey}

完整示例如:device&alxxxxxxxxxx
Password

密码由参数值拼接加密而成。

您可以使用物联网平台提供的生成工具自动生成Password

单击下载Password生成小工具。

使用Password生成小工具的输入参数:

productKey:设备所属产品Key。可在控制台设备详情页查看。

deviceName:设备名称。可在控制台设备详情页查看。

deviceSecret:设备密钥。可在控制台设备详情页查看。

timestamp:(可选)时间戳。

clientId:设备的ID信息,与Client ID${clientId}一致。

method:选择签名算法类型,与Client IDsignmethod确定的加密方法一致。

xxxx)

第五步:Password生成工具

打开“软件工具\mqtt签名工具\sign.html,按照上文参数规则填入信息后点击生成,如图:

 然后点击Generate

 最终得到:

username:Smart_home&h2ot07Dvyl7

password:78D1DBB44CEF072CE3B3255BC69DD8A941E55051

然后点击Apply应用,然后就可以close掉了

第六步:点击Connect

 正常连接的结果如图:

 连接成功的话会显示一个绿灯,而且阿里云设备页,会显示设备在线

如果不成功的话,会显示一个红灯,那么就需要大家检查一下设置里面有没有设置错东西了

 是不是非常神奇,如果大家跟着教程来的话,应该来到这步是没问题的

2-2 MQTT.fx的消息订阅和发布

从物联网平台发送消息,在MQTT.fx上接收消息,测试MQTT.fx与物联网平台连接是否成功

1、在MQTT.fx上,单击Subscribe

2、输入一个设备具有订阅权限的Topic,单击Subscribe,订阅这个Topic

那个这个Topic在哪找呢?

打开阿里云产品页面并进入产品查看页面

 

点击Topic类列表

接着Topic类列表->物模型通信Topic

复制设备设备设置的Topic类

接着回到mqtt.fx->subscribe,如图:

 记得修改topic类里面的devicename,最后点击subscribe

这是订阅成功后的效果:

 接下来去验证是否能接收到云端过来的信息,回到阿里云设备查看页面,然后点击在线调试

 按照上图顺序点击后,进入到在线调试页面

 返回mqtt.fx,查看是否能接收到

{"method":"thing.service.property.set","id":"1227312958","params:{"temperature":55},"version":"1.0.0"}

 注意黑色输出框,我们要注意格式,同样我们向云端发布数据,1、找到发布数据topic;2、按照格式给阿里云发过去,完事

在这里我们给物模型数据发送一个32过去,然后再去看看物模型数据温度那有没有改变

 然后我们就能看到

 到此应该大家已经明白了大致原理,接下来就剩下用代码来实现这些过程的环节了

 有空的话更新

3 ESP8266接入阿里云

当然下面有某盘连接,想支持一下也可以用积分下载宝子们:

积分下载连接:https://download.csdn.net/download/hedada833/87569444?spm=1001.2014.3001.5503


链接:https://pan.baidu.com/s/1Rgz7pg5pViF4cgiLvTnwqg 
提取码:sq7k 

password生成工具&软件连接

链接:https://pan.baidu.com/s/15aMSpXRN7zlFM2F3SlSo-w?pwd=ozxc 
提取码:ozxc 

  • 11
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
好的,下面是使用STM32F407VGT6和ESP-01 ESP8266连接阿里云的代码,使用的是STM32CUBE环境。请注意,以下代码仅供参考,需要根据实际情况进行修改和适配。 首先,需要在阿里云的物联网平台上创建设备并获取设备的三元组信息,包括ProductKey、DeviceName和DeviceSecret。同时,需要在阿里云的物联网平台上创建Topic,用于消息的发布和订阅。 然后,在STM32CUBE中创建一个新工程,并配置好所需的外设和引脚。在代码中,我使用了USART2作为与ESP8266通信的串口,并将其连接到STM32的PA3和PA2引脚上。 接下来是代码实现: ```c #include "main.h" #include <string.h> #include <stdio.h> UART_HandleTypeDef huart2; char esp_response[100]; char mqtt_topic[100]; char mqtt_msg[100]; void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_USART2_UART_Init(void); static void MX_NVIC_Init(void); void esp8266_init(void); void esp8266_send_command(char* command, uint32_t timeout); void esp8266_connect_wifi(char* ssid, char* password); void esp8266_mqtt_connect(char* product_key, char* device_name, char* device_secret); void esp8266_mqtt_publish(char* topic, char* message); void esp8266_mqtt_subscribe(char* topic); int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_USART2_UART_Init(); MX_NVIC_Init(); esp8266_init(); esp8266_connect_wifi("your_wifi_ssid", "your_wifi_password"); esp8266_mqtt_connect("your_product_key", "your_device_name", "your_device_secret"); while (1) { sprintf(mqtt_topic, "/%s/%s/update", "your_product_key", "your_device_name"); sprintf(mqtt_msg, "{\"id\":123,\"params\":{\"test\":%d}}", 1); esp8266_mqtt_publish(mqtt_topic, mqtt_msg); HAL_Delay(1000); } } void esp8266_init(void) { HAL_Delay(5000); esp8266_send_command("AT\r\n", 1000); esp8266_send_command("AT+CWMODE=1\r\n", 1000); esp8266_send_command("AT+CIPMUX=0\r\n", 1000); } void esp8266_send_command(char* command, uint32_t timeout) { memset(esp_response, 0, sizeof(esp_response)); HAL_UART_Transmit(&huart2, (uint8_t*)command, strlen(command), 1000); HAL_UART_Receive(&huart2, (uint8_t*)esp_response, sizeof(esp_response), timeout); } void esp8266_connect_wifi(char* ssid, char* password) { char command[100]; sprintf(command, "AT+CWJAP=\"%s\",\"%s\"\r\n", ssid, password); esp8266_send_command(command, 5000); } void esp8266_mqtt_connect(char* product_key, char* device_name, char* device_secret) { char command[100]; sprintf(command, "AT+TCPSTART=\"%s.iot-as-mqtt.cn-shanghai.aliyuncs.com\",1883\r\n", product_key); esp8266_send_command(command, 5000); HAL_Delay(1000); sprintf(command, "AT+MQTTSTART\r\n"); esp8266_send_command(command, 5000); HAL_Delay(1000); sprintf(command, "AT+MQTTACCQ=0,\"%s|%s|0|%d\",60,1,\"%s\"\r\n", product_key, device_name, 0, device_secret); esp8266_send_command(command, 5000); HAL_Delay(1000); } void esp8266_mqtt_publish(char* topic, char* message) { char command[100]; sprintf(command, "AT+MQTTPUB=\"%s\",0,0,0,\"%s\"\r\n", topic, message); esp8266_send_command(command, 5000); } void esp8266_mqtt_subscribe(char* topic) { char command[100]; sprintf(command, "AT+MQTTSUB=\"%s\",0\r\n", topic); esp8266_send_command(command, 5000); } void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; /** Initializes the RCC Oscillators according to the specified parameters * in the RCC_OscInitTypeDef structure. */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLM = 8; RCC_OscInitStruct.PLL.PLLN = 336; RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; RCC_OscInitStruct.PLL.PLLQ = 7; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } /** Initializes the CPU, AHB and APB buses clocks */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK) { Error_Handler(); } } static void MX_USART2_UART_Init(void) { huart2.Instance = USART2; huart2.Init.BaudRate = 115200; huart2.Init.WordLength = UART_WORDLENGTH_8B; huart2.Init.StopBits = UART_STOPBITS_1; huart2.Init.Parity = UART_PARITY_NONE; huart2.Init.Mode = UART_MODE_TX_RX; huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE; huart2.Init.OverSampling = UART_OVERSAMPLING_16; if (HAL_UART_Init(&huart2) != HAL_OK) { Error_Handler(); } } static void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; __HAL_RCC_GPIOA_CLK_ENABLE(); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2|GPIO_PIN_3, GPIO_PIN_RESET); GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF7_USART2; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); } static void MX_NVIC_Init(void) { HAL_NVIC_SetPriority(USART2_IRQn, 0, 0); HAL_NVIC_EnableIRQ(USART2_IRQn); } void USART2_IRQHandler(void) { HAL_UART_IRQHandler(&huart2); } void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { // TODO: 处理ESP8266返回的数据 } ``` 在上述代码中,我们使用了esp8266_send_command()函数来向ESP8266发送AT指令,并使用HAL_UART_Receive()函数来接收ESP8266的响应。在esp8266_mqtt_connect()函数中,我们使用了阿里云提供的MQTT连接流程,包括建立TCP连接、启动MQTT服务、申请MQTT连接、设置连接参数等步骤。在esp8266_mqtt_publish()函数中,我们使用了阿里云提供的MQTT发布消息流程,将消息发布到指定的Topic上。 在main函数中,我们先初始化ESP8266,连接到WiFi网络,然后连接到阿里云的物联网平台,最后使用esp8266_mqtt_publish()函数发布消息到指定的Topic上。 需要注意的是,在HAL_UART_RxCpltCallback()函数中,我们需要对ESP8266返回的数据进行处理。具体实现方式取决于你所使用的ESP8266模块和阿里云的物联网平台。 希望这份代码能对你有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值