赞
踩
文章目录
本篇文章主要介绍stm32单片机如何利用esp8266向ONENET平台发送数据。个人能力有限,如果哪里有错误,还望各位大佬评批指正!!!
上图为esp826601s的硬件原理图。GND接地;VCC接3.3V!!!(这里特别关键,不要错接成5V,否则会出错);CH-PD接3.3V;TX和RX分别接TX和RX;
1.1 注册账号
我们首先需要用手机号注册一个账号,操作非常简单。
2.2 创建一个产品
点击控制台;
选择切换成旧版;
选择多协议接入;
点击添加产品后,会弹出参数设置。这里的参数随便设置,不会影响后面操作。
确定之后,会生成一个产品,如下所示,这里的产品id需要家人们记住
之后我们点进去产品,点击设备列表添加设备,输入设备属性,特别注意这里的鉴权信息需要大家记住。
添加设备成功后,我们还需要记住设备id 。
上述就对ONENET的基础操作完成了,我们需要记住产品id、设备id、鉴权信息。
因为onenet官方有例程所以我们直接移植(白嫖)就行了.
2.1下载例程
首先我们需要进入首页的论坛、社区下载开发板资料,这里我们下载裸机的就可以了。
2.2改写程序
首先我们用keil5先打开第8个例程(这里我们打开第八个是因为这里面有很多不同协议的例程,博主用的是MQTT协议)
打开之后我们需要对下面三个文件进行修改
我们首先打开onenet.c文件,对上面的三个宏定义进行修改分别是产品id、鉴权信息、设备id。
然后点开esp8266.c文件修改两个宏定义
1.我们需要修改成我们自己的热点名和密码(因为esp8266模块是需要借助手机热点或者路由器连接onenet的);
2.如果是用的MQTT旧版,我们就不需要修改。如果是别的需要修改ip地址和端口号;
此外我们还需要对esp8266.c为文件中的unsigned char *ESP8266_GetIPD(unsigned short timeOut)函数和ESP8266_Init()函数进行修改,这里是经验之谈,如果是0的话会接受不到数据。
ESP8266_GetIPD() 函数
- unsigned char *ESP8266_GetIPD(unsigned short timeOut)
- {
-
- char *ptrIPD = NULL;
-
- do
- {
- if(ESP8266_WaitRecive() == REV_OK)
- {
- ptrIPD = strstr((char *)esp8266_buf, "IPD,");
- if(ptrIPD == NULL)
- {
- //UsartPrintf(USART_DEBUG, "\"IPD\" not found\r\n");
- }
- else
- {
- ptrIPD = strchr(ptrIPD, ':');
- if(ptrIPD != NULL)
- {
- ptrIPD++;
- return (unsigned char *)(ptrIPD);
- }
- else
- return NULL;
-
- }
- }
-
- DelayXms(5);
- timeOut--;
-
- } while(timeOut>0);
-
- return NULL;
-
- }

ESP8266_Init()函数
- void ESP8266_Init(void)
- {
-
- GPIO_InitTypeDef GPIO_Initure;
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC, ENABLE);
-
- //ESP8266¸´Î»Òý½Å
- GPIO_Initure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_Initure.GPIO_Pin = GPIO_Pin_14;
- GPIO_Initure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOC, &GPIO_Initure);
-
- GPIO_WriteBit(GPIOC, GPIO_Pin_14, Bit_RESET);
- delay_ms(250);
- GPIO_WriteBit(GPIOC, GPIO_Pin_14, Bit_SET);
- delay_ms(500);
-
- ESP8266_Clear();
-
- UsartPrintf(USART_DEBUG, "\r\n0. AT\r\n");
- while(ESP8266_SendCmd("AT\r\n", "OK"))
- delay_ms(500);
-
- UsartPrintf(USART_DEBUG, "\r\n1. RST\r\n");
- ESP8266_SendCmd("AT+RST\r\n", " ");
- delay_ms(500);
- ESP8266_SendCmd("AT+CIPCLOSE\r\n", " ");
- delay_ms(500);
-
- UsartPrintf(USART_DEBUG, "\r\n2. CWMODE\r\n");
- while(ESP8266_SendCmd("AT+CWMODE=1\r\n", "OK"))
- delay_ms(500);
-
- UsartPrintf(USART_DEBUG, "\r\n3. AT+CWDHCP\r\n");
- while(ESP8266_SendCmd("AT+CWDHCP=1,1\r\n", "OK"))
- delay_ms(500);
-
- UsartPrintf(USART_DEBUG, "4. CWJAP\r\n");
- while(ESP8266_SendCmd(ESP8266_WIFI_INFO, "GOT IP"))
- delay_ms(500);
-
- UsartPrintf(USART_DEBUG, "5. CIPSTART\r\n");
- while(ESP8266_SendCmd(ESP8266_ONENET_INFO, "CONNECT"))
- delay_ms(500);
-
- UsartPrintf(USART_DEBUG, "6. ESP8266 Init OK\r\n");
-
- }

主函数中的
dataPtr = ESP8266_GetIPD(0);
需要改成
dataPtr = ESP8266_GetIPD(3);
最后我们只需要在主函数中调用OneNet_SendData(void)函数就行了。不过我们需要注意的是这里由于我们用的是上传温度的例程,如果需要上传别的数据,需要对OneNet_SendData()函数中的参数进行修改。
特别说明:上面的onenet的操作步骤只是基础,如果想更好的展示数据还需创建数据流模板(模板名字应与发送数据函数里面的定义相对应)。
本人在学习esp8266的时候几乎没人指点,所以走了很多弯路,过程虽然艰辛(到处观看教学视频),但庆幸自己一步一个脚印走下来了。希望这篇文章能够给初学者学习的时候贡献一份绵薄之力。同时如果这篇文章如果有不合适的地方(个人能力有限),希望各位大佬批评指正。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。