stm32与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()    函数

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

近年来,随着物联网技术的飞速发展,越来越多的物联网应用出现在我们的生活和工作中。其中,stm32f103和esp8266wifi模块作为常见的物联网开发板和wifi模块,被广泛应用于物联网领域。 移动onenet平台作为国内领先的物联网云平台,提供了强大的云端存储、数据分析以及远程监控等功能,为物联网应用提供了极大的便捷性和品质保证。因此,将stm32f103通过esp8266wifi模块使用tcp协议连接至移动onenet平台,具有很高的实际应用价值。 具体实现流程如下: 1. 首先,搭建硬件环境,将stm32f103和esp8266wifi模块连接起来,保证硬件完好无损。 2. 在移动onenet平台上创建设备,并获取其设备ID、APIKey等重要参数,以便在后续代码编写中使用。 3. 在stm32f103开发板上编写相应的程序代码,通过esp8266wifi模块连接至WiFi网络,获取IP地址,并使用tcp协议建立与onenet平台的连接。 4. 将所需数据上传onenet平台,包括发送的数据内容、数据流名称、设备ID等信息。 5. 在onenet平台上进行相应的数据处理和分析,获取实时监测数据、趋势分析、告警信息等相关内容。 总的来说,stm32f103通过esp8266wifi模块使用tcp协议连接至移动onenet平台,不仅能够实现数据的实时监测和远程控制,更能为物联网应用提供完整的云端解决方案,助力企业实现数字化转型和升级,提高竞争力和核心价值。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值