2-STM32+ESP8266连接onenet并上传数据(HTTP)

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

上一篇文章内容链接为下
1-ESP8266-AT指令初试化及部分基础知识
2-STM32+ESP8266连接onenet并上传数据(HTTP)

一、预备知识小插曲

ESP8266,onenet云平台,STM32三部分在结合使用前最好还是分别学习了解一下,效率更高,在开发过程中哪里有问题就有针对性了。

1、了解8266的基础知识(模式、初始化、操作过程,并用串口助手测试)–上一篇博客,下为链接
ESP8266-AT指令初试化及部分基础知识-点我
2、了解了onenet云平台(翻翻官方文档看一看)
onenet云平台开发文档–点我

3、串口助手发送AT指令控制ESP8266连接onenet云平台,并上传数据(主要了解8266整个初始化及连接云端传输数据的过程及数据格式)–下文第三部分已经涉及

4、在原来已有的基础上(STM32控制OLED上显示温湿度)尝试添加ESP8266部分代码进行合并并修改,实现连接onenet云平台并上传温湿度–下面链接是之前程序移植部分
博客跳转链接-STM32串口实验基础上移植oled和dht11

5、由于HTTP协议适合于简单数据上报场景,所以又尝试使用MQTT协议上传数据的同时实现云端对开关的远程控制–下一篇博客

6、在这两天使用onenet的过程中发现web可视化有旋转的那种开关,但不知道下发的数据能不能充分利用一下,突然想着过几天能不能尝试做一个远程调节灯光亮度的功能(PWM控制灯光)–整理完这几天的学习后会尝试一做一下

批注:其实在真正接触8266和onenet前还在B站跟着原子哥的STM32视频课程学习了一段时间的STM32基础知识,感觉还是非常有必要的

二、onenet云平台新建产品和设备

在准备工作做好之后,便开始了新的学习之旅,首先在onenet云平台创建产品和设备

1、在控制台首页切换至旧版本
01-ONENET控制台首页-请点我
2-STM32+ESP8266连接onenet并上传数据(HTTP)
2、选择全部产品-多协议接入,
2-STM32+ESP8266连接onenet并上传数据(HTTP)
3、创建http协议下的产品和设备
在HTTP协议下自己创建产品,在产品之下再对应创建一个设备即可(下方为官方文档)-也可以自行百度新建产品和设备的博客

02-onenet创建产品
03-创建设备
2-STM32+ESP8266连接onenet并上传数据(HTTP)

4、查看密钥和设备ID
产品和设备创建完毕后,保存我们需要的密钥和设备id

2-STM32+ESP8266连接onenet并上传数据(HTTP)
2-STM32+ESP8266连接onenet并上传数据(HTTP)
04-协议使用场景–请点我

5、素材获取
自己根据下方提供的素材进行整合到自己程序中去就可以,素材内容为下,点击连接获取:
2-STM32+ESP8266连接onenet并上传数据(HTTP)
onenet.c和ESP8266.c素材连接提取码:aavj

6、修改参数信息
在onenet.c文件的代码中要进行修改为自己的设备ID和密钥
2-STM32+ESP8266连接onenet并上传数据(HTTP)
7、修改wifi名和密码
在esp8266.c文件的代码中修改要连接的wifi名和wifi密码
2-STM32+ESP8266连接onenet并上传数据(HTTP)

三、使用串口助手连接onenet并且传输数据

1、ESP8266初始化
连接onenet云平台的IP地址:183.230.40.33,端口号:80

1.AT+CWMODE=1   设置为STA模式
2.AT+CWJAP_DEF="study_test1","esp8266test"   连接 WIFI(串口助手)
3.AT+CIPMUX=0   设置单连接
4AT+CIPSTART="TCP","183.230.40.33",80  输入服务器地址+端口号连接tcp服务器
5.AT+CIPMODE=1    进入透传模式
6.AT+CIPSEND      准备发送数据(发送此指令收到ok和>后即可发送数据)

2-STM32+ESP8266连接onenet并上传数据(HTTP)
2、发送数据

上一步已经连接云端并开启了数据透传模式,接下来即可通过串口助手发送数据,type=3的话下面发送的数据格式就比较简单了
2-STM32+ESP8266连接onenet并上传数据(HTTP)

POST /devices/7058xxx72/datapoints?type=3 HTTP/1.1
api-key:XNmVBSWyYSxxxxxxxxxxxLXA3KM=
Host:api.heclouds.com
Connection:close
Content-Length:59

{"hum":25,"temp":65}

3、数据上传成功
出现下面这样就是上传消息成功(由于串口助手只能发一行数据就换了一个)
2-STM32+ESP8266连接onenet并上传数据(HTTP)
4、云端查看数据
onenet云平台具体设备的数据流展示处即可看到上传的数据
2-STM32+ESP8266连接onenet并上传数据(HTTP)
5、相对于阿里云的一个好处

发现onenet的物模型有一个好处,不需要手动创建物模型,在上传数据时可以随意添加新的变量,你只要上传新的属性和数值就会自动创建对应的物模型,如果是阿里云的话是不行的,只要属性名称,数据类型有一个对应不起来,都不会正常显示数据,此处随意添加了一个烟雾浓度属性

2-STM32+ESP8266连接onenet并上传数据(HTTP)

通过以上方法即可实现使用串口助手发送AT指令控制8266上传数据

四、STM32+ESP8266+onenet使用方法

(一)、博君一笑

在正文开始之前先说一下我最才开始遇到的问题:STM32串口2接收不到8266反馈信息

我在刚开始便遇到了问题,在程序整合逻辑代码均没错误之后,使用串口2给ESP8266发送控制指令进行初始化,结果永远收不到反馈消息,也就一直没有初始化成功,还没开始,就这样结束了?

怎么可能放弃呢,于是就一点一点的排除,先单独用USB调试ESP8266完全没问题,再使用串口2发送和接收数据测试也没问题,然后又借助逻辑分析仪分析出每次串口都发送出了AT指令,的确是没有返回数据,或者只反馈回一小部分错误信息,调了得一个小时吧。

在快要放弃的时候突然看到8266的红色指示灯很暗,突然想到会不会是供电不稳定啊,结果真的是杜邦线连接导致电压不稳,后来直接用USB供电就完全没问题了。希望遇到同样电压不稳问题的朋友,不要再把宝贵的时间浪费在这里了。

下面是我的开发板,接线比较多,杜邦线接来接去可能也就导致接触不良才出现以上电压不稳的问题,有点惨,供大家一笑。
2-STM32+ESP8266连接onenet并上传数据(HTTP)

(二)、正文开始

上面已经说过使用串口助手模拟设备给8266发送指令连接云平台并发送数据的方法,接下来只需要把串口助手发送数据换为STM32发送即可。

STM32两个串口的功能:
串口1的功能:负责打印信息(可以看到程序执行到了什么地方,主要用于观察程序执行过程即调试过程中修改错误使用)。
串口2功能:主要用于实现和8266的数据交互过程,发送数据和接收数据。

函数小鬼还有五秒到达战场…

1、ESP8266的初始化函数:
使能引脚,设置工作模式,连接路由器,设置单连接,连接TCP服务器等

void ESP8266_Init(void)
{

GPIO_InitTypeDef GPIO_Initure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

//ESP8266复位引脚
GPIO_Initure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Initure.GPIO_Pin = GPIO_Pin_13;					//GPIOC13-复位
GPIO_Initure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_Initure);

GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_RESET);
delay_ms(250);
GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_SET);
delay_ms(500);

ESP8266_Clear();

printf("1. AT\r\n");
while(ESP8266_SendCmd("AT\r\n", "OK"))//AT测试
	delay_ms(500);

printf("2. CWMODE\r\n");
while(ESP8266_SendCmd("AT+CWMODE=1\r\n", "OK"))//设置为STA模式
	delay_ms(500);

printf( "3. AT+CWDHCP\r\n");
while(ESP8266_SendCmd("AT+CWDHCP=1,1\r\n", "OK"))//开启DHCP
	delay_ms(500);

printf("4. CWJAP\r\n");
while(ESP8266_SendCmd(ESP8266_WIFI_INFO, "GOT IP"))//链接路由器
	delay_ms(500);

printf( "5. CIPSTART\r\n");
while(ESP8266_SendCmd(ESP8266_ONENET_INFO, "CONNECT"))//连接TCP服务器
	delay_ms(500);

printf("6. ESP8266 Init OK\r\n");//打印一下信息表明8266初试化成功

 }

2、上传数据到平台
从此函数开始下一个函数是前一个函数中调用过的函数

(小插曲)函数使用1-C语言中清空数组的办法

void OneNet_SendData(void)
{
char buf[256];
memset(buf, 0, sizeof(buf));//清空数组内容
OneNet_FillBuf(buf);	//封装数据流(把需要上传的数据封装到里面)
ESP8266_SendData((unsigned char *)buf, strlen(buf));	//上传已经封装好的数据

 }

3、封装数据函数
把需要上传的数据整合到一个数组里

(小插曲)函数使用2-sprintf格式化函数

(小插曲)函数使用3-strcat拼接函数

void OneNet_FillBuf(char *buf)
{
	char text[24];//存放临时数据
	char buf1[128];//最终的数据
	
	memset(text, 0, sizeof(text));
	memset(buf1, 0, sizeof(buf1));
	
	//要开始构造json格式了
	
	strcpy(buf1, "{");
	//buf1={
	
	memset(text, 0, sizeof(text));
	sprintf(text, "\"temp\":%d.%d,",temperatureH,temperatureL);//格式化温度
	strcat(buf1, text);
	//buf1={ \"Temperature\":20.3,
	
	memset(text, 0, sizeof(text));
	sprintf(text, "\"hum\":%d.%d", humidityH,humidityL);//格式化湿度
	strcat(buf1, text);
	//buf1={ \"Temperature\":20.3 , \"Humidity\":65.0
	
	strcat(buf1, "}");
	//buf1={ \"Temperature\":20.3 , \"Humidity\":65.0}
	
	//格式化数据
	sprintf(buf, "POST /devices/%s/datapoints?type=3 HTTP/1.1\r\napi-key:%s\r\nHost:api.heclouds.com\r\n"
					"Content-Length:%d\r\n\r\n",
	
					DEVID, APIKEY, strlen(buf1));			
	strcat(buf, buf1);//把要发送的数据拼接到buf发送数据的后面

	//此时buf含有所有需要上传的数据(设备id,apikey,数据长度,采集的数据)
	printf("pub_buf=%s\r\n",buf);

}

4、发送数据
在允许发送数据后,开始发送上一步封装好的数据

void ESP8266_SendData(unsigned char *data, unsigned short len)
{
char cmdBuf[32];
ESP8266_Clear();								//清空接收缓存
//先发送要发送数据的指令做准备
sprintf(cmdBuf, "AT+CIPSEND=%d\r\n", len);		//发送命令
if(!ESP8266_SendCmd(cmdBuf, ">"))				//收到‘>’时可以发送数据
{
	//既然准备完毕即可开始发送数据
	Usart_SendString(USART2, data, len);		//发送设备连接请求数据
}
}

5、平台返回数据检测
检测反馈会的数据是发送成功还是失败

(小插曲)函数使用4-strstr字符串匹配函数

void OneNet_RevPro(unsigned char *dataPtr)
{

if(strstr((char *)dataPtr, "CLOSED"))
{
	printf("TCP CLOSED\r\n");
}
else
{
	//这里用来检测是否发送成功
	if(strstr((char *)dataPtr, "succ"))
	{
		printf("Tips:	Send OK\r\n");
	}
	else
	{
		printf("Tips:	Send Err\r\n");
	}
}

ESP8266_Clear();

}

6、主函数的内容

int main(void)
 {	

unsigned char *dataPtr = NULL;
unsigned short timeCount = 0;	//发送间隔变量
 
delay_init();	    	 //延时函数初始化	  
NVIC_Configuration(); 	 //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
LED_Init();			     //LED端口初始化
OLED_Init();			//初始化OLED   
OLED_Clear();    
 
uart_init(115200);//串口1初始化
uart2_init(115200);//串口2初始化
DHT11_Init();//DHT11初始化
 
ESP8266_Init();					//初始化ESP8266
printf("8266_INIT_END\n");//初始化结束
while(1) 
{		
	if(++timeCount >= 500)		//间隔5s
	{
			
		if( Read_DHT11(&DHT11_Data)==SUCCESS)	//获取温湿度数据(温湿度均有整数位,小数位--湿度小数位忽略)
		{
			//printf("temp %d hum %d",DHT11_Data.temp_int,DHT11_Data.humi_int);
			OLED_ShowString(8,4,"TEMP:"); //显示温度
			OLED_ShowNum(48,4,DHT11_Data.temp_int,2,16);
			OLED_ShowChar(70,4,'.');
			OLED_ShowNum(85,4,DHT11_Data.temp_deci,1,16);
			
			//printf("temp=%d.%d\n",DHT11_Data.temp_int,DHT11_Data.temp_deci);
			
			printf("hum=%d.%d\n",DHT11_Data.humi_int,DHT11_Data.humi_deci);
			
			OLED_ShowString(8,2,"HUM:"); //显示湿度
			OLED_ShowNum(48,2,DHT11_Data.humi_int,2,16);
			OLED_ShowChar(70,2,'%'); 
			delay_ms(100);
		
			//将温湿度的各位赋值给对应的参数,上传云端时使用
			humidityH=DHT11_Data.humi_int;	  //湿度整数部分
			humidityL=DHT11_Data.humi_deci;	  //湿度小数部分
			temperatureH=DHT11_Data.temp_int;   //温度整数部分
			temperatureL=DHT11_Data.temp_deci;   //温度小数部分
			printf("hum temp=%d .%d %d .%d\r\n",humidityH,humidityL,temperatureH,temperatureL);
			
		}
		  printf( "OneNet_SendData\r\n");//通过串口1发送数据(表示下一步要发送数据了)
				
			OneNet_SendData();//发送数据给onenet
			
			printf("PUB_data_end\n");
		
			timeCount = 0;
			
			ESP8266_Clear();
	}
	//ESP8266的返回格式为	"+IPD,x:yyy"	x代表数据长度,yyy是数据内容
	dataPtr = ESP8266_GetIPD(0);//获取平台返回的数据
	if(dataPtr != NULL)//如果返回数据不为空
		OneNet_RevPro(dataPtr);//平台返回数据检测
	
	delay_ms(10);
	
}

}

最终代码整合下载链接

五、接下来将整理以下内容

3-STM32+ESP8266连接onenet上传数据+远程控制(MQTT)链接文章来源地址https://www.toymoban.com/news/detail-405183.html

STM32+ESP8266将本地采集的温湿度上传云端(MQTT)

STM32+ESP8266实现本地温湿度的上传和云端对开关的远程控制(MQTT)

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

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

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

相关文章

  • STM32+NRF2401+ESP8266采集温度数据发送到oneNET平台

    工作不是搞这个的,只是感兴趣,哈哈,做了一个小实验;记录一下实验过程吧!         使用的是正点原子STM32F103ZET6的主板,主板连接的硬件有DHT11(温度湿度模块) + BH1750(光照度采集模块)+ NRF2401(WIFI模块,主要是发送采集的数据到STMF103C8T6模块上,当然C8T6也连接一个

    2024年02月03日
    浏览(47)
  • STM32系列(HAL库)——使用ESP8266-01S物联网模块连接Onenet云平台上报DHT11温湿度

    本篇主要讲解如何使用ESP8266-01S物联网模块连接Onenet云平台,并上报DHT11模块的温湿度数据。本文单片机主控采用STM32F405RGT6,使用其他主控的话基本要求有2个串口,一个串口用于调试使用,另一个用于ESP模块通讯。 1.软件 CubeMX Keil5 串口调试助手 Onenet云平台账户 2.硬件 STM32开

    2024年02月02日
    浏览(79)
  • STM32发送数据ESP8266固件烧录MQTT和AT指令调试与链接OneNET

    STM32连接ESP8266发送数据到OneNET平台 1.硬件型号:ESP8266-01s 和 USBTTL转接口模块 2.固件:1471_esp8266-at_mqtt-1m(MQTT透传AT固件(固件号:1471)) 3.固件烧录工具:flash_download_tool_3.9.4 固件下载和烧录工具均可在安信可官网下载安信可AT固件下载 本文章使用的是XCOM V2.6 串口助手 4.On

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

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

    2024年02月04日
    浏览(59)
  • stm32+esp8266+onenet (MQTT)

    使用stm32采集温湿度/MQ2的数值用过 esp8266 +mqtT协议把数据传输给onenet平台 并且能通过onenet下发指令控制led灯的亮灭 新增产品 为产品添加设备 修改程序中对应的信息如下 修改可以联网的路由器和密码 配置成功后,采集数据,上传到onenet 打开onenet数据可视化界面,新建空白项

    2023年04月27日
    浏览(48)
  • 基于STM32+ESP8266+FreeRTOS+安卓App上位机+MQTT连接OneNET的智能家居项目(软件开源篇附百度网盘链接)

      本篇文章主要是分享智能家居项目中的下位机STM32+FreeRTOS的代码部分。以下是项目最终的效果 stm32 esp8266 语音控制智能家居_哔哩哔哩_bilibili   另外附上main函数中的部分代码,完整代码会在文章末尾放上百度网盘链接,可以自行下载。 链接:https://pan.baidu.com/s/1IS-OMLy2_pyWyM

    2024年02月08日
    浏览(46)
  • STM32+ESP8266+OneNet共同完成温度显示功能

    这次实验对应的是我的本科毕业设计,目标是完成一个温度测试平台,具有本地显示,远程显示,算法后台校正的功能。为了适应当前信息化的物联网发展方向,本文选择一款分辨率可调的高线性度CMOS温度传感器作为感温芯片,运用STM32F103C8T6作为微控制器主控芯片,使用W

    2024年02月20日
    浏览(91)
  • ESP8266连接oneNET云平台(HTTP协议)方法和步骤——超详细教程

    文章目录 一、 注册oneNET平台和配置 二、 ESP8266连接云平台 1. ESP8266简介 2. 发AT指令 总结 1.,进入中国移动物联网开放平台 OneNET - 中国移动物联网开放平台   首先点击右上角注册,之后点击控制台,(选择切换旧版,旧版好用一些)。 2.添加产品 选择HTTP协议之后 点击右上角

    2023年04月15日
    浏览(55)
  • STM32 ESP8266 物联网智能温室大棚 (附源码 PCB 原理图 设计文档)_stm32 esp8266 onenet 温室

    系统启动后,单片机控制相关传感器进行环境参数的采集,将数据传回单片机处理后,通过OLED显示屏将相关环境指数实时显示。用户可以在手机端打开APP与本系统进行通信,更加便捷地查看监测数据。结构框图如下所示。 硬件部分包含主控芯片、传感器模块,OLED模块,WIF

    2024年04月23日
    浏览(52)
  • 【OneNet】| stm32+esp8266-01s—— OneNet初体验 | 平台注册及设备创建 | demo使用

    系列文章目录 失败了也挺可爱,成功了就超帅。 最近准备耍下 Onenet平台 。下载了官方demo 遇到几个问题 1、创建接入设备 因为平台网页界面更新了 一些创建接口找不到 网上的资料都是旧版网页上的 搞了一番才找到 2、跑Demo时 串口打印乱码 故此分享下希望可以对你有帮助

    2024年02月03日
    浏览(49)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包