STM32使用Wifi连接阿里云

2024-07-19 1264阅读

目录

1 实现功能

2 器件

3 AT指令

4 阿里云配置

4.1 打开阿里云

4.2 创建产品

4.3 添加设备

5 STM32配置

5.1 基础参数

5.2 功能定义

6 STM32代码

本文主要是记述一下,如何使用阿里云物联网平台,创建一个简单的远程控制小灯示例。

 完整工程:

https://download.csdn.net/download/qq_51458770/89550617

1 实现功能

STM32通过ESP8266模块,采用MQTT连接阿里云平台,之后可以和阿里云平台进行通信,可以向平台发布小灯的状态(开\关),也可以接收平台控制小灯的指令(开\关)。

2 器件

  • 单片机:STM32f103c8t6
  • Wif模块:ESP8266-01s
  • 外设: 小灯(STM32最小核心板自带PC13)

    3 AT指令

    这里只是简单看下wifi连接阿里云的AT指令,不需要过于纠结,可以往下继续看:

    1 基础指令
    1)重置wifi模块
    AT+RST
        
    2)设置模块为STA模式
    AT+CWMODE=1
    3)使模块连接上wifi
    AT+CWJAP="WIFI名称","WIFI密码"
    注意:若你的模块连接不上wifi,回复EEROR,首先先判断你的wifi是否是2.4G的频段,5G频道ESP8266不可用
    4)检查IP地址,看看是否正确连上wifi
    AT+CIFSR
    5)设置时区为:中国早上八点
    AT+CIPSNTPCFG=1,8,"ntp1.aliyun.com"
    到此,ESP8266的基本配置以及完成,下面就是MQTT协议连接上云平台的操作。
         
    2 使用MQTT指令连接到云平台
    需要先查看下阿里云的MQTT参数,在设备那里面有!!!
    1) 设置MQTT的登陆用户名与密码
    AT+MQTTUSERCFG=0,1,"NULL","username","passwd",0,0,""
    2) 设置MQTT的ClientID
    AT+MQTTCLIENTID=0,"clientId"
    注意:在自己的clientId中,需要在每个逗号前面加一个\符号,串口数据才能正确发送识别,否则会一直回复EEROR
    3)设置MQTT接入地址
    AT+MQTTCONN=0,"mqttHostUrl",port,1
    完成以上三步,设备就连接到了云平台(设备更新为在线)
    3. 订阅平台消息(设备上传/接收,平台接收/下发)
    订阅Topic是指在一个订阅服务中,用户可以选择关注或订阅感兴趣的话题或主题。
    通过订阅Topic,用户可以更加精准地获取自己的内容,提高信息的质量和效率。
    3 订阅Topic
    1)订阅平台消息
    AT+MQTTSUB=0,"subtopic",1
    2)设备上报数据
    AT+MQTTPUB=0,"pubtopic","data",0,0
    Eg:
    AT+RST    // 重置wifi模块
    AT+CWMODE=1   // 
    AT+CIPSNTPCFG=1,8,"ntp1.aliyun.com"   // 设置时区为:中国早上八点
    AT+CWJAP="HONORL","12345Lz."   // 使模块连接上wifi
    AT+MQTTUSERCFG=0,1,"NULL","ESP8266010&a1cRrS9qC4K","c9c3585b4841be49f67dc4da6d9e894074dd7fc956c429515bcf247a4bee7541",0,0,""   // 设置MQTT的登陆用户名与密码
    AT+MQTTCLIENTID=0,"a1cRrS9qC4K.ESP8266010|securemode=2\,signmethod=hmacsha256\,timestamp=1720315990667|"   //  设置MQTT的ClientID
    AT+MQTTCONN=0,"a1cRrS9qC4K.iot-as-mqtt.cn-shanghai.aliyuncs.com",1883,1   //  设置MQTT接入地址
    // AT+MQTTSUB=0,"topic",1
    AT+MQTTSUB=0,"/sys/a1cRrS9qC4K/ESP8266010/thing/service/property/set",1   // 订阅平台消息
    AT+MQTTPUB=0,"/sys/a1cRrS9qC4K/ESP8266010/thing/event/property/post","{params:{\"LightSwitch\":1}}",1,0   // 设备上报数据
    // 注意发布部分写代码时容易出问题——格式问题

    4 阿里云配置

    4.1 打开阿里云

    没有账号的话,注册登录下,之后搜索物联网平台,点击进去

    STM32使用Wifi连接阿里云

    4.2 创建产品

    STM32使用Wifi连接阿里云STM32使用Wifi连接阿里云

    4.3 添加设备

    STM32使用Wifi连接阿里云

    也可以直接到设备列表创建设备

    STM32使用Wifi连接阿里云STM32使用Wifi连接阿里云

    5 STM32配置

    5.1 基础参数

    关于wifi连接阿里云的一些参数,这些信息可以在MQTT连接参数里面找到:

    STM32使用Wifi连接阿里云

    需要先查看下阿里云的MQTT参数,在设备那里面有!!!
    1) 设置MQTT的登陆用户名与密码
    AT+MQTTUSERCFG=0,1,"NULL","username","passwd",0,0,""
    2) 设置MQTT的ClientID
    AT+MQTTCLIENTID=0,"clientId"
    注意:在自己的clientId中,需要在每个逗号前面加一个\符号,串口数据才能正确发送识别,否则会一直回复EEROR
    3)设置MQTT接入地址
    AT+MQTTCONN=0,"mqttHostUrl",port,1
    完成以上三步,设备就连接到了云平台(设备更新为在线)

    至于要订阅和发布的主题可以到产品里面去找:

    STM32使用Wifi连接阿里云

    以下以物模型通信topic为例说明。

    5.2 功能定义

    为了能够接收来自WiFi的数据(小灯状态),并显示小灯状态,需要创建一下功能定义:

    STM32使用Wifi连接阿里云STM32使用Wifi连接阿里云

    为了更好的区分控制功能和显示功能,我们这里再创建一个控制的功能定义,用于下发控制信息:

    STM32使用Wifi连接阿里云

    注意要发布上线,之后去设备那里就可以看到了

    STM32使用Wifi连接阿里云STM32使用Wifi连接阿里云STM32使用Wifi连接阿里云

    以上完成后就可以编写代码连接云平台并实现数据的收发。

    6 STM32代码

    6.1 main.c

    #include "string.h"
    #include "system.h"
    #include "SysTick.h"
    #include "led.h"
    #include "usart.h"
    #define PubTopic "/sys/a1cRrS9qC4K/ESP8266010/thing/event/property/post"   // 发布
    #define SubTopic "/sys/a1cRrS9qC4K/ESP8266010/thing/service/property/set"  // 订阅
    /*******************************************************************************
    * 函 数 名         : main
    * 函数功能		   : 主函数
    * 输    入         : 无
    * 输    出         : 无
    *******************************************************************************/
    int main()
    {
    	char buf[256];
    	int buf_len;
    	
    	SysTick_Init(72);
    	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  //中断优先级分组 分2组
    	LED_Init();
    	USART1_Init(115200);               // 串口波特率115200
    	GPIO_ResetBits(LED_PORT,LED_PIN);	 //LED=0 亮
    	delay_ms(1000);				           	 // 延迟
    	
    	printf("AT\r\n");									 // 第一步		AT
    	delay_ms(2000);										 // 延迟
    	printf("AT+GMR\r\n");							 // 第一步		版本号
    	delay_ms(2000);										 // 延迟
    	
    	printf("AT+CWJAP=\"%s\",\"%s\"\r\n", "HONORL", "12345Lz.");		// 第四步 wifi热点
    	
    	delay_ms(5000);					//延迟
    	delay_ms(5000);					//延迟
    	delay_ms(5000);					//延迟	
    	delay_ms(5000);					//延迟
    	GPIO_SetBits(LED_PORT,LED_PIN);		// LED=1	灭
    	printf("AT+CIPSNTPCFG=1,8,\"ntp1.aliyun.com\"\r\n");		// 第三步
    	delay_ms(3000);					//延迟
    	printf("AT+MQTTUSERCFG=0,1,\"NULL\",\"ESP8266010&a1cRrS9qC4K\",\"c9c3585b4841be49f67dc4da6d9e894074dd7fc956c429515bcf247a4bee7541\",0,0,\"\"\r\n");		//第五步
    	delay_ms(3000);					//延迟			
    	printf("AT+MQTTCLIENTID=0,\"a1cRrS9qC4K.ESP8266010|securemode=2\\,signmethod=hmacsha256\\,timestamp=1720315990667|\"\r\n");		//第六步
    	delay_ms(3000);					//延迟	
    	
    	printf("AT+MQTTCONN=0,\"a1cRrS9qC4K.iot-as-mqtt.cn-shanghai.aliyuncs.com\",1883,1\r\n");		// 第七步
    	delay_ms(3000);					//延迟
    	GPIO_ResetBits(LED_PORT,LED_PIN);	//LED=0 亮
    	//连接阿里云,让设备在线
    	//---------------------------------------------------------
    	//订阅发布指令
    	// printf("AT+MQTTSUB=0,%s,1\r\n",SubTopic);		//订阅指令
    	printf("AT+MQTTSUB=0,\"%s\",1\r\n", "/sys/a1cRrS9qC4K/ESP8266010/thing/service/property/set");		//订阅指令
    	delay_ms(5000);			//延迟
    	GPIO_SetBits(LED_PORT,LED_PIN);		//LED=1	灭
    	// 发布命令——测试使用
    	printf("AT+MQTTPUB=0,\"/sys/a1cRrS9qC4K/ESP8266010/thing/event/property/post\",\"{\\\"test\\\"}\",1,0\r\n");	
    	
    	delay_ms(3000);	
    	printf("AT+MQTTPUB=0,\"%s\",\"%s\",1,0\r\n", "/sys/a1cRrS9qC4K/ESP8266010/thing/event/property/post", "{params:{LedState:1}}");		//发数据{"LED":1}
      // 发数据{"LED":0}
    	delay_ms(5000);	
    	printf("AT+MQTTPUB=0,\"%s\", {\"LedState\":0},1,0\r\n", PubTopic);
    	
    	GPIO_ResetBits(LED_PORT,LED_PIN);	//LED=0 亮
    //---------------------------------------------------------	
    	while(1)
    	{
    		if(USART_RX_STA&0x8000) // 判断接收到完整的字符串  完成
    		{					   			
    				
    				if(strstr((const char*)USART_RX_BUF,"on"))//判断阿里云发下来的数据里是否有on
    				{
    						GPIO_ResetBits(LED_PORT,LED_PIN);	//LED=0 亮
    				}
    				if(strstr((const char*)USART_RX_BUF,"off"))//判断阿里云发下来的数据里是否有off
    				{
    						GPIO_SetBits(LED_PORT,LED_PIN);		//LED=1	灭
    				}	
    				memset(USART_RX_BUF,0,600);         //将接收区清0
    				USART_RX_STA=0;
    		}
    	}
    }
    

    完整工程:

    https://download.csdn.net/download/qq_51458770/89550617

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]