当前位置:   article > 正文

STM32+ESP8266(ESP32)+MQTT+阿里云物联网平台_smt32驱动esp8266mqtt协议上阿里云

smt32驱动esp8266mqtt协议上阿里云

1、阿里云物联网平台

- 阿里云物联网平台配置

产品-设备-编辑物模型-设备端开发-查看上报数据

在产品上添加物模型,然后设备是继承自产品的,因此也具有物模型

添加产品、添加设备、产品上添加物模型
在这里插入图片描述

- 使用IOT Studio 绘制界面显示温度、湿度、灯开关

在这里插入图片描述
绘制图形化界面,添加数据来源
在这里插入图片描述

2、mqtt.fx模拟MQTT客户端发布与订阅消息

在直接使用单片机与阿里云通信前,先利用mqtt.fx工具模拟客户端确认阿里云这边配置无问题。

(1)、获取连接阿里云的三要素

(2)、利用MQTT_Password生成连接标准MQTT协议需要的参数,填在MQTT.fx中,连接阿里云物联网平台

  • 1.Broker Address
  • Client ID
  • User Name
  • Password

    在MQTT.fx填写参数
    在这里插入图片描述
    连接成功
    在这里插入图片描述

在这里插入图片描述
可以看到设备状态变化
在这里插入图片描述

(3)、在产品中获取设备的发布和订阅主题,写入MQTT.fx

在这里插入图片描述
填写主题
在这里插入图片描述

(4)、发送数据、接收数据

在这里插入图片描述

设置发布主题后,客户端发送数据,阿里云平台收到数据,温度表和湿度表显示,点击开关,客户端mqtt.fx收到数据

在这里插入图片描述

3、通过at命令控制esp8266发布与订阅消息

(1) 给esp8266烧录mqtt固件

(2) 控制esp8266通过at指令发送消息和订阅消息

  • 1.AT+CWMODE=1 热点模式
  • 2.AT+CWJAP=“decadeylp”,“qweasdzxc” 连接Wifi wifi名 密码 2.4G热点
  • 3.AT+MQTTUSERCFG=0,1,“MQTT连接的client ID”,“用户名”,“密码”,0,0,“” 配置阿里云连接,根据阿里云三元素生成的
  • 4.AT+MQTTCONN=0,“ProductKey.iot-as-mqtt.cn-shanghai.aliyuncs.com”,1883,0
  • 5.AT+MQTTSUB=0,“/sys/ProductKey/device name/thing/service/property/set”,0 订阅MQTT主题
  • 6.AT+MQTTPUB=0,“/sys/ProductKey/device name/thing/event/property/post”,“{“params”: {“temp”:30,“humi”:20},“version”:“1.0.0”}”,0,0 发布数据

利用sscom串口工具,测试esp8266通过at指令发布订阅消息

4、编写stm32程序通过at命令控制esp8266发布与订阅消息

(1)、stm32程序通过控制esp8266发送at命令完成8266初始化,配置wifi网络

stm32与esp8266通过串口连接,通过串口发送at命令完成8266初始化,和上述通过串口工具直接向esp8266发送at命令一样,确保了stm32单片机和esp8266的成功通信。

(2)、发送温度湿度到阿里云物联网平台(发布消息)

利用定时器定时每5s,esp8266发送一次DHT11的数据

void esp8266_init(void)
{
	__HAL_UART_ENABLE_IT(&huart2,UART_IT_RXNE);           											//打开串口2接收中断
	
	printf("1.SETTING STATION MODE\r\n");
  OLED_printf(0,0,"1.SETTING STATION MODE                   ");
	while(esp8266_send_cmd((uint8_t *)"AT+CWMODE=1\r\n",strlen("AT+CWMODE=1\r\n"),"OK")!=0)
	{
		HAL_Delay(1000);
	}
	printf("2.CLOSE ESP8266 ECHO\r\n");
  OLED_printf(0,0,"2.CLOSE ESP8266 ECHO                     ");
	while(esp8266_send_cmd((uint8_t *)"ATE0\r\n",strlen("ATE0\r\n"),"OK")!=0)
	{
		HAL_Delay(1000);
	}
	printf("3.NO AUTO CONNECT WIFI\r\n"); 
  OLED_printf(0,0,"3.NO AUTO CONNECT WIFI                   ");
	while(esp8266_send_cmd((uint8_t *)"AT+CWAUTOCONN=0\r\n",strlen("AT+CWAUTOCONN=0\r\n"),"OK")!=0)
	{
		HAL_Delay(1000);
	}
	printf("4.RESET ESP8266\r\n");
  OLED_printf(0,0,"4.RESET ESP8266                          ");
	while(esp8266_reset() != 0)
	{
		HAL_Delay(5000);
	}
	printf("5.CONFIG WIFI NETWORK\r\n");
  OLED_printf(0,0,"5.CONFIG WIFI NETWORK                    ");
	while(esp8266_config_network() != 0)
	{
		HAL_Delay(8000);
	}
	//发送消息到阿里云
	printf("6.MQTT USER CONFIG\r\n");
  OLED_printf(0,0,"6.MQTT USER CONFIG                       ");
	while(esp8266_send_cmd((uint8_t *)"AT+MQTTUSERCFG=0,1,\""MQTT_CLIENT_ID"\",\""MQTT_USER_NAME"\",\""MQTT_PASSWD"\",0,0,\"\"\r\n",
                          strlen("AT+MQTTUSERCFG=0,1,\""MQTT_CLIENT_ID"\",\""MQTT_USER_NAME"\",\""MQTT_PASSWD"\",0,0,\"\"\r\n"),"OK")!=0)
	{
		HAL_Delay(2000);
	}
	printf("7.CONNECT MQTT BROKER\r\n");
  OLED_printf(0,0,"7.CONNECT MQTT BROKER                    ");
	while(esp8266_connect_server() != 0)
	{
		HAL_Delay(8000);
	}
	printf("8.SUBSCRIBE TOPIC\r\n");
  OLED_printf(0,0,"8.SUBSCRIBE TOPIC                ");
	while(esp8266_send_cmd((uint8_t *)"AT+MQTTSUB=0,\""SUB_TOPIC"\",0\r\n",strlen("AT+MQTTSUB=0,\""SUB_TOPIC"\",0\r\n"),"OK")!=0)
	{
		HAL_Delay(2000);
	}
	printf("9.ESP8266 INIT OK!!!\r\n");
  OLED_printf(0,0,"9.ESP8266 INIT OK!!!                ");
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58

(3)、接收阿里云物联网平台的命令控制LED灯亮灭(订阅消息)

/**
  * @brief          解析json数据
  * @param[in]      json_msg:json数据,json_len:json数据长度
  * @retval         返回0找到指定json数据,否则返回1
  */
uint8_t parse_json_msg(uint8_t *json_msg,uint8_t json_len)
{
  uint8_t retval =0;
  
  JSONStatus_t result;
  char query[] = "params.light";
  size_t queryLength = sizeof( query ) - 1;
  char * value;
  size_t valueLength;
  result = JSON_Validate((const char *)json_msg, json_len);
  if( result == JSONSuccess)
  {
    result = JSON_Search((char *)json_msg, json_len, query, queryLength,&value, &valueLength );
    if( result == JSONSuccess)
    {
      char save = value[valueLength];
      value[valueLength] = '\0';
      printf("Found: %s %d-> %s\n", query, valueLength,value);
      value[valueLength] = save;
      retval = 0;
    }
    else
    {
      retval = 1;
    }
  }
  else
  {
    retval = 1;
  }  
  return retval;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/920064
推荐阅读
相关标签
  

闽ICP备14008679号