stm32与esp8266上传的数据到ONENET

文章目录

  • 前言
  • 一、esp8266介绍及硬件连接
  • 二、操作步骤
    • 1.ONENET相关操作
    • 2.改写程序
    • 3.发送数据
  • 总结




前言

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




一、esp8266介绍及硬件连接

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




二、使用步骤



1.ONENET相关操作

1.1 注册账号

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

2.2 创建一个产品

        点击控制台;

stm32与esp8266上传的数据到ONENET_第1张图片

        选择切换成旧版;

stm32与esp8266上传的数据到ONENET_第2张图片

         选择多协议接入;

stm32与esp8266上传的数据到ONENET_第3张图片

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

stm32与esp8266上传的数据到ONENET_第4张图片

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

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

 stm32与esp8266上传的数据到ONENET_第5张图片

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

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



2.程序改写

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

2.1下载例程

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

stm32与esp8266上传的数据到ONENET_第6张图片

2.2改写程序

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

stm32与esp8266上传的数据到ONENET_第7张图片

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

stm32与esp8266上传的数据到ONENET_第8张图片

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

stm32与esp8266上传的数据到ONENET_第9张图片

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

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

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

stm32与esp8266上传的数据到ONENET_第10张图片

               
stm32与esp8266上传的数据到ONENET_第11张图片

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

你可能感兴趣的:(stm32,python,嵌入式硬件)