当前位置:   article > 正文

stm32与esp8266上传的数据到ONENET_esp8266上传数据到onenet

esp8266上传数据到onenet

文章目录

 




前言

        本篇文章主要介绍stm32单片机如何利用esp8266向ONENET平台发送数据。个人能力有限,如果哪里有错误,还望各位大佬评批指正!!!




一、esp8266介绍及硬件连接

Center

      上图为esp826601s的硬件原理图。GND接地;VCC接3.3V!!!(这里特别关键,不要错接成5V,否则会出错);CH-PD接3.3V;TX和RX分别接TX和RX;


 



二、使用步骤



1.ONENET相关操作

1.1 注册账号

     我们首先需要用手机号注册一个账号,操作非常简单。

2.2 创建一个产品

        点击控制台;

watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6IGa5pWjLS3nu4jmnInml7Y=,size_20,color_FFFFFF,t_70,g_se,x_16

        选择切换成旧版;

watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6IGa5pWjLS3nu4jmnInml7Y=,size_20,color_FFFFFF,t_70,g_se,x_16

         选择多协议接入;

watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6IGa5pWjLS3nu4jmnInml7Y=,size_20,color_FFFFFF,t_70,g_se,x_16

        点击添加产品后,会弹出参数设置。这里的参数随便设置,不会影响后面操作。

 

watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6IGa5pWjLS3nu4jmnInml7Y=,size_16,color_FFFFFF,t_70,g_se,x_16

         确定之后,会生成一个产品,如下所示,这里的产品id需要家人们记住

watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6IGa5pWjLS3nu4jmnInml7Y=,size_20,color_FFFFFF,t_70,g_se,x_16

         之后我们点进去产品,点击设备列表添加设备,输入设备属性,特别注意这里的鉴权信息需要大家记住。

 watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6IGa5pWjLS3nu4jmnInml7Y=,size_17,color_FFFFFF,t_70,g_se,x_16

         添加设备成功后,我们还需要记住设备id 。

watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6IGa5pWjLS3nu4jmnInml7Y=,size_20,color_FFFFFF,t_70,g_se,x_16

         上述就对ONENET的基础操作完成了,我们需要记住产品id、设备id、鉴权信息。

 



2.程序改写

        因为onenet官方有例程所以我们直接移植(白嫖)就行了.

2.1下载例程

首先我们需要进入首页的论坛、社区下载开发板资料,这里我们下载裸机的就可以了。

watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6IGa5pWjLS3nu4jmnInml7Y=,size_20,color_FFFFFF,t_70,g_se,x_16

2.2改写程序

首先我们用keil5先打开第8个例程(这里我们打开第八个是因为这里面有很多不同协议的例程,博主用的是MQTT协议)

watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6IGa5pWjLS3nu4jmnInml7Y=,size_20,color_FFFFFF,t_70,g_se,x_16

        打开之后我们需要对下面三个文件进行修改

watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6IGa5pWjLS3nu4jmnInml7Y=,size_6,color_FFFFFF,t_70,g_se,x_16

         我们首先打开onenet.c文件,对上面的三个宏定义进行修改分别是产品id、鉴权信息、设备id。

watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6IGa5pWjLS3nu4jmnInml7Y=,size_20,color_FFFFFF,t_70,g_se,x_16

        然后点开esp8266.c文件修改两个宏定义

                1.我们需要修改成我们自己的热点名和密码(因为esp8266模块是需要借助手机热点或者路由器连接onenet的);

                2.如果是用的MQTT旧版,我们就不需要修改。如果是别的需要修改ip地址和端口号;

watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6IGa5pWjLS3nu4jmnInml7Y=,size_15,color_FFFFFF,t_70,g_se,x_16

               
watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6IGa5pWjLS3nu4jmnInml7Y=,size_20,color_FFFFFF,t_70,g_se,x_16

                 此外我们还需要对esp8266.c为文件中的unsigned char *ESP8266_GetIPD(unsigned short timeOut)函数和ESP8266_Init()函数进行修改,这里是经验之谈,如果是0的话会接受不到数据。

            ESP8266_GetIPD()    函数

  1. unsigned char *ESP8266_GetIPD(unsigned short timeOut)
  2. {
  3. char *ptrIPD = NULL;
  4. do
  5. {
  6. if(ESP8266_WaitRecive() == REV_OK)
  7. {
  8. ptrIPD = strstr((char *)esp8266_buf, "IPD,");
  9. if(ptrIPD == NULL)
  10. {
  11. //UsartPrintf(USART_DEBUG, "\"IPD\" not found\r\n");
  12. }
  13. else
  14. {
  15. ptrIPD = strchr(ptrIPD, ':');
  16. if(ptrIPD != NULL)
  17. {
  18. ptrIPD++;
  19. return (unsigned char *)(ptrIPD);
  20. }
  21. else
  22. return NULL;
  23. }
  24. }
  25. DelayXms(5);
  26. timeOut--;
  27. } while(timeOut>0);
  28. return NULL;
  29. }

                ESP8266_Init()函数

  1. void ESP8266_Init(void)
  2. {
  3. GPIO_InitTypeDef GPIO_Initure;
  4. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC, ENABLE);
  5. //ESP8266¸´Î»Òý½Å
  6. GPIO_Initure.GPIO_Mode = GPIO_Mode_Out_PP;
  7. GPIO_Initure.GPIO_Pin = GPIO_Pin_14;
  8. GPIO_Initure.GPIO_Speed = GPIO_Speed_50MHz;
  9. GPIO_Init(GPIOC, &GPIO_Initure);
  10. GPIO_WriteBit(GPIOC, GPIO_Pin_14, Bit_RESET);
  11. delay_ms(250);
  12. GPIO_WriteBit(GPIOC, GPIO_Pin_14, Bit_SET);
  13. delay_ms(500);
  14. ESP8266_Clear();
  15. UsartPrintf(USART_DEBUG, "\r\n0. AT\r\n");
  16. while(ESP8266_SendCmd("AT\r\n", "OK"))
  17. delay_ms(500);
  18. UsartPrintf(USART_DEBUG, "\r\n1. RST\r\n");
  19. ESP8266_SendCmd("AT+RST\r\n", " ");
  20. delay_ms(500);
  21. ESP8266_SendCmd("AT+CIPCLOSE\r\n", " ");
  22. delay_ms(500);
  23. UsartPrintf(USART_DEBUG, "\r\n2. CWMODE\r\n");
  24. while(ESP8266_SendCmd("AT+CWMODE=1\r\n", "OK"))
  25. delay_ms(500);
  26. UsartPrintf(USART_DEBUG, "\r\n3. AT+CWDHCP\r\n");
  27. while(ESP8266_SendCmd("AT+CWDHCP=1,1\r\n", "OK"))
  28. delay_ms(500);
  29. UsartPrintf(USART_DEBUG, "4. CWJAP\r\n");
  30. while(ESP8266_SendCmd(ESP8266_WIFI_INFO, "GOT IP"))
  31. delay_ms(500);
  32. UsartPrintf(USART_DEBUG, "5. CIPSTART\r\n");
  33. while(ESP8266_SendCmd(ESP8266_ONENET_INFO, "CONNECT"))
  34. delay_ms(500);
  35. UsartPrintf(USART_DEBUG, "6. ESP8266 Init OK\r\n");
  36. }

                主函数中的

	dataPtr = ESP8266_GetIPD(0);

                需要改成

	dataPtr = ESP8266_GetIPD(3);

 

                最后我们只需要在主函数中调用OneNet_SendData(void)函数就行了。不过我们需要注意的是这里由于我们用的是上传温度的例程,如果需要上传别的数据,需要对OneNet_SendData()函数中的参数进行修改。

 


        特别说明:上面的onenet的操作步骤只是基础,如果想更好的展示数据还需创建数据流模板(模板名字应与发送数据函数里面的定义相对应)。



总结

           本人在学习esp8266的时候几乎没人指点,所以走了很多弯路,过程虽然艰辛(到处观看教学视频),但庆幸自己一步一个脚印走下来了。希望这篇文章能够给初学者学习的时候贡献一份绵薄之力。同时如果这篇文章如果有不合适的地方(个人能力有限),希望各位大佬批评指正。

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/398004
推荐阅读
相关标签
  

闽ICP备14008679号