STM32+ESP8266接入云(3)

这篇具有很好参考价值的文章主要介绍了STM32+ESP8266接入云(3)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

解析数据

         进入阿里云的IOT Stdio,点击新建项目。STM32+ESP8266接入云(3)

         新建项目后点击新建Web应用。名称

 STM32+ESP8266接入云(3)

        应用名称随便填写 

         STM32+ESP8266接入云(3)

        创建完成后我们进入应用。

        在左侧组件处拖入一个指示灯和一个开关。

STM32+ESP8266接入云(3)

         点击指示灯组件,点击配置数据源

 STM32+ESP8266接入云(3)

        选择我们的产品、数据、和属性。

STM32+ESP8266接入云(3)

         我们还可以配置开和关的显示颜色。

STM32+ESP8266接入云(3)

        点击按钮,配置交互动作。STM32+ESP8266接入云(3)

         选择设备和属性,设置值位置点击数据来源,选择组件值

STM32+ESP8266接入云(3)

         配置完成后进入预览,点击按钮,在esp8266就会收到来自平台的json格式的数据,MCU端需要做的就是解析来自平台的数据,进而达到控制下位机的目的。

+MQTTSUBRECV:0,"/sys/hq42unqMiBQ/test/thing/service/property/set",101,
{"method":"thing.service.property.set","id":"2067652254","params":
{"LEDSwitch1":1},"version":"1.0.0"}

         我们需要解析的是 "params" 后面的数据,但是这个数据的长短不一,是根据自己设置的模型来的。所以我我们在解析的时候就利用这一特性,直接解析。

         打开一个定时器,定时1ms。·STM32+ESP8266接入云(3)

         打开中断。STM32+ESP8266接入云(3)

         在之前工程的基础上,生成新的工程。

         打开定时器中断。

HAL_TIM_Base_Start_IT(&htim7);

         重写回调函数。

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) //中断回调函数
{
    static uint16_t dis_cnt,flash_cnt;
    if( htim -> Instance == TIM7)//定时器7
    {
        dis_cnt++;
        if(dis_cnt==5)//延时5ms
        {
            dis_cnt=0;
            wait_flag=1;//解析延时标志位
        }
        flash_cnt++;
        if(flash_cnt==2000)//显示延时
        {
            flash_flag=1;//显示延时标志位
        }
    }
}

        这里使用的是非阻塞的延时,如果是直接使用HAL_Delay的话,会影响其它的函数进行,所以在定时器7中的延时标志位就是用于这个地方。

unsigned char ESP8266_rx(unsigned short timeOut)
{
    //char buf[20];
    char *ptrIPD = NULL;
    char *ptrIPD_2 = NULL;
    char *ptrIPD_3 = NULL;
    char *ptrIPD_4 = NULL;
    int i = timeOut;
    if( i && wait_flag)
    {
        wait_flag=0;
        if(ESP8266_WaitRecive() == OK)//如果接收完成
        {
            ptrIPD = strstr((char *)ESP8266_Buf,"params");//搜索标识符头
            if(ptrIPD == NULL)//如果没找到,可能是标识符头的延迟,还是需要等待一会,但不会超过设定的时间
            {
                return 0;//没有找到则返回0
            }
            else
            {
                ptrIPD = strchr(ptrIPD, ':');//找到params后面的'  : '
                if(ptrIPD != NULL)
                {
                    ptrIPD+=3;//找到: 后地址向后移动三位,就是标识符,
                    ptrIPD_2 = strchr(ptrIPD, ':'); //在标识符的后方第一个:就是标识符的值
                    if (ptrIPD!=NULL)
                    {
                        memset(buf,0,sizeof(buf));
                        ptrIPD_2++;
                        buf[0]=*ptrIPD_2;
                        if(atoi(buf)==1)
                        {
                            flag_buf=1;
                        }
                        else
                        {
                            flag_buf=0;
                        }
                    }
                    ptrIPD_3 = strchr(ptrIPD, ':');//解析标识符
                    if (ptrIPD!=NULL)
                    {
                        memset(buf,0,sizeof(buf));
                        for (int i=20; i>=0;i--)
                        {
                            buf[20-i]=*(ptrIPD_3-i);
                            if(buf[20-i]=='{')
                            {
                                ptrIPD_4=(ptrIPD_3-i+2);
                                memset(buf,0,sizeof(buf));
                                for(int j=0;j<20;j++)
                                {
                                    buf[j]=*(ptrIPD_4+j);
                                    if(buf[j]=='"')
                                    {
                                        buf[j]=0;
                                        return 1 ;
                                    }
                                }
                                break;
                            }
                        }
                    }
                }
            }
        }
        i--;
    }
    return 0;		//超时还未找到,返回0

        在判断的时候只需要使用下方函数进行判断,这样子就不会影响在多个标识符时,出现大概率的失误。

        strcmp函数解析

if(!(strcmp(buf,"LED1")))

         将按钮的值和灯的值绑定。点击按钮配置数据源。

STM32+ESP8266接入云(3)

         在预览中点击按钮,esp8266接收到如下的数据。所以如果是绑定了数据源,所以改变按钮1的值就下发关于LED的数据。

+MQTTSUBRECV:0,"/sys/hq42unqMiBQ/test/thing/service/property/set",95,
{"method":"thing.service.property.set","id":"1433329632","params":
{"LED1":0},"version":"1.0.0"}

        解析后将LED1的数据上报到云。文章来源地址https://www.toymoban.com/news/detail-410776.html

if(!(strcmp(buf,"LED1")))
      {
          memset(buf, 0, sizeof(buf));
          if(flag_buf == 1 )
          {
              led_info.led1=1;
              memset(data, 0, sizeof(data));
              sprintf(data,"AT+MQTTPUB=0,\"/sys/hq42unqMiBQ/test/thing/event/property/post\",\"{\
					\\\"params\\\":{\\\"LED1\\\":%d}\\\,\
					\\\"method\\\":\\\"thing.event.property.post\\\"}\",0,0\r\n",led_info.led1);
              while(ESP8266_SendCmd(data,"OK"));
              ESP8266_Clear();
          }
          else
          {
              led_info.led1=0;
              memset(data, 0, sizeof(data));
              sprintf(data,"AT+MQTTPUB=0,\"/sys/hq42unqMiBQ/test/thing/event/property/post\",\"{\
					\\\"params\\\":{\\\"LED1\\\":%d}\\\,\
\\\"method\\\":\\\"thing.event.property.post\\\"}\",0,0\r\n",led_info.led1);
              while(ESP8266_SendCmd(data,"OK"));
              ESP8266_Clear();
          }
      }

到了这里,关于STM32+ESP8266接入云(3)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 阿里云飞燕平台STM32+ESP8266

    我的完整实验是阿里云飞燕平台+MQTT+STM32+ESP8266+DHT11的一个简单物联网 1.学习使用阿里云飞燕平台,以及云智能APP的连接。创建产品和模拟连接,其中使用MQTT来模拟设备,后续就是STM32+ESP8266的程序编写。源程序可私信。内容来自我的实验报告,内容比较粗糙只能说能看! 2.在

    2024年02月04日
    浏览(36)
  • STM32+ESP8266+APP连接阿里云监测环境温湿度系列笔记1:阿里云物联网平台配置及数据上传

            在数据传递过程中阿里云物联网平台相当于服务器,ESP8266为客户端,通过路由器连接服务器时需要在物联网平台创建设备,具体过程如下: 1. 首先 在物联网平台创建公共实例,并点击进入, 图1 2.可见设备接入物联网平台的整体流程如图2中红色方框所示, 接下

    2024年02月04日
    浏览(44)
  • STM32+ESP8266(AT固件)连接阿里云物联网 保姆级教学(附代码)--4. Web数据可视化

    提示:这里是从实际应用如何使用教学配置,未从原理讲解,适合小白从零开始到成功,比较有成就感 STM32+ESP8266(AT固件)连接阿里云物联网系列保姆级教学 1. 创建产品和设备 2. 设置产品Topic数据和功能定义设备物模型数据显示 3. 硬件连接+代码修改 4. Web数据可视化 5.功能

    2024年04月10日
    浏览(45)
  • 第十章 STM32+ESP8266接入机智云 实现小型IOT智能家居项目

    前言 最近有不少小伙伴私信留言,想要我推出一章能够通过APP进行远程控制并获取传感器信息的实验教程。说实话在嵌入式毕设里边,这算是中等偏上水平的了。刚好我也有兴趣写写。全篇4700多字,我写的很详细,按着文章一步一步操作即可。(建议跟同学集资购买模块,

    2024年02月03日
    浏览(38)
  • 【学习笔记】stm32+ESP8266+阿里云+云智能APP

    个人笔记。实现的功能是通过手机APP实现对stm32上小灯的控制。 硬件环境: 1.stm32F103 2.Node MCU-ESP8266 3.安卓手机 硬件连接: ESP8266              STM32 RX                           PA2 TX                            PA3 RST                          PA4 VCC 3V3 GND GND 配置阿

    2024年01月21日
    浏览(46)
  • 基于STM32+FreeRtos+ESP8266+MQTT连接阿里云

    实现通过stm32f103c8t6+操作系统(freertos)读取dht12温湿度传感器的数据,采用ESP8266连接网络,经过MQTT协议连接阿里云IOT,进行数据的传输,以及服务器发送数据控制LED的亮灭,包括消息的发布和订阅等操作,完成云端和设备端的通讯。 首先,我们使用MQTT.fx模拟器,通过模拟的

    2024年02月06日
    浏览(38)
  • 新手小白必看——基于STM32+ESP8266模块连接阿里云平台读取传感器数据(从0到1,包教包会)

    目录 前言             本次我们学习一下STM32F103驱动ESP8266去连接阿里云的实操过程,在次过程中我会详细讲解开发过程中遇到的问题以及面对问题的解决,希望大家在这篇博客里面也有所收获。 一、ESP8266WIFI模块的固件库刷新(MQTT) 1.固件库刷新 1.1 固件库烧录下载 1.2 固

    2024年04月26日
    浏览(33)
  • STM32驱动ESP8266连接阿里云(1)----使用AT指令连接阿里云

    购买的ESP8266一般没带MQTT固件,所以无法通过MQTT指令与云平台通信,需要烧录固件。 MQTT固件可以在安信可科技进行下载。 交流qun:6_15061293。 https://docs.espressif.com/projects/esp-at/zh_CN/release-v2.2.0.0_esp8266/index.html 下载器可以使用乐鑫官方的下载器。 https://www.espressif.com.cn/zh-hans/s

    2024年02月03日
    浏览(47)
  • ESP8266+STM32+阿里云保姆级教程(AT指令+MQTT)

    前言:在开发过程中,几乎踩便了所有大坑小坑总结出的文章,我是把坑踩满了,帮助更过小白快速上手,如有错误之处,还麻烦各位大佬帮忙指正、 目录 一、ESP-01s介绍         1、ESP-01s管脚功能:                 模组启动模式说明:         2、初始配置和

    2024年02月19日
    浏览(34)
  • 猿创征文 | 【STM32】ESP8266 wifi模块创建阿里云产品

    📑博客主页:@丘比特惩罚陆 💖欢迎关注:点赞收藏⭐留言✒ 💬系列专栏:嵌入式、web前端、笔记专栏 🎮 加入社区: 灌水乐园 🥇人生格言:选对方向,每走一步都是进步! ✒️欢迎大佬指正,一起学习!一起加油! 👏 希望大家能小手一动,帮忙点个赞! 😁资源邮箱

    2023年04月18日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包