物联网应用开发--传感器数据上传新大陆云平台(STM32+SHT20温湿度+ESP8266+TCP)

实现目标

1、掌握新大陆云平台传感器的创建

2、熟悉STM32 +HAL与ESP8266模块之间的通信

3、具体实现目标:(1)创建2个传感器:温度传感器,湿度传感器;(2)上传开发板上的SHT20温湿度传感器数据至云平台。


前言

1、 上期已实现云平台创建的执行器对开发板上的蜂鸣器和LED的控制,详细请参考教程:https://blog.csdn.net/luojuan198780/article/details/138860797

2、关于温湿度传感器SHT20 的知识请参考教程:https://blog.csdn.net/luojuan198780/article/details/139030385

一、项目创建

本次项目整体:创建5个执行器(已建)+温湿度传感器(待建)

1.1 温度传感器创建

说明:湿度传感器除了名称和温度传感器一样

1.2 温度传感器创建后整体效果

二、开发板连接图

开发板P7四个跳键帽接法如下图:

说明:单片机的USART1 用于调试信息打印;USART2用于与ESP8266模块通信。

三、STM32CubeMX 配置

3.1 GPIO配置

BEEP :初始电平为低电平,推挽输出;LED1-LED4:初始电平为高电平,推挽输出。

3.2 串口USART1配置

**USART1:**异步模式,波特率115200,功能:用于打印调试信息

3.3 串口USART2配置

USART2: 异步模式,波特率115200,开启DMA,开启中断。功能:用于与ESP8266通信

3.4 IIC 配置

(1)开启I2C,其它默认

(2)打开中断(USART2 、I2C1)

四、程序设计

说明:整个工程的代码量大,下面只列出整个工程中温湿度传感器数据上传函数。

4.1在CloudReference.h 修改wifi名称、密码以及设备标志、SecretKey

4.2 stm32App.c 中数据上传部分新增温湿度数据上传

cpp 复制代码
if(TimeCount >= 1000)//10S发送一次数据
{
	TimeCount=0;
	SHT20_GetValue();
	printf( "Temperature:%0.1fC,Humidity:%0.1f%%\r\n",sht20_info.tempreture,sht20_info.humidity);                   
	ESP8266_SendSensor(sht20_info.tempreture,sht20_info.humidity);									
	ClrAtRxBuf();
}

4.3 打开 WiFiToCloud.h 文件重新声明修改后函数

cpp 复制代码
//int8_t ESP8266_SendSensor(uint8_t sensor, char *TimeStr);
int8_t ESP8266_SendSensor(float sensor1,float sensor2);

4.4 修改WiFiToCloud.c文件中函数

修改ESP8266_SendSensor 函数形参个数,修改上传数据格式。

同时上传温湿度数据,数据类型为浮点型,具体格式见下:

sprintf((char *)TxetBuf,"{\"t\":3,\"datatype\":1,\"datas\":{\"temp\":\"%.1f\",\"hum\":\"%.1f\"},\"msgid\":001}",sensor1,sensor2);

协议文档下载:http://www.nlecloud.com/doc/resources.shtml

//传感器数据上传函数

cpp 复制代码
int8_t ESP8266_SendSensor(float sensor1,float sensor2)
{
	uint8_t TryGo = 0;
	int8_t error = 0;
	uint8_t TxetBuf[MAX_AT_TX_LEN];
	memset(TxetBuf,0x00,MAX_AT_TX_LEN);//清空缓存
	sprintf((char *)TxetBuf,"{\"t\":3,\"datatype\":1,\"datas\":{\"temp\":\"%.1f\",\"hum\":\"%.1f\"},\"msgid\":001}",sensor1,sensor2);
	//printf("%s\r\n",TxetBuf);
	if(ESP8266_IpSend((char *)TxetBuf, strlen((char *)TxetBuf)) < 0)
	{//发送失败
		error=-1;
	}
	else
	{//发送成功
		for(TryGo = 0; TryGo<50; TryGo++)//最多等待时间50*10=500ms
		{
			if(strstr((const char *)AT_RX_BUF, (const char *)"\"status\":0") == NULL)//检查响应状态是否为"上报成功"
			{
				error = -1;
			}
			else
			{
				error = 0;
				break;
			}
			HAL_Delay(10);
		}
	}
	return error;
}

五、实验效果

设备在线后,打开"实时数据"开关,可以看见传感器数据上传。

六、仿真实现


总结

工程代码:https://download.csdn.net/download/luojuan198780/89330194

相关推荐
scilwb4 小时前
RoboCon考核题——scilwb
单片机
点灯小铭5 小时前
基于STM32单片机智能RFID刷卡汽车位锁桩设计
stm32·单片机·汽车·毕业设计·课程设计
TDengine (老段)6 小时前
TDengine IDMP 高级功能(4. 元素引用)
大数据·数据库·人工智能·物联网·数据分析·时序数据库·tdengine
bai5459366 小时前
STM32 软件I2C读写MPU6050
stm32·单片机·嵌入式硬件
逼子格9 小时前
AT89C52单片机介绍
单片机·嵌入式硬件·51单片机·硬件工程师·硬件工程师真题·at89c52·器件手册
生涯にわたる学び11 小时前
ARM 实操 流水灯 按键控制 day53
arm开发·嵌入式硬件
whaosoft-14311 小时前
w嵌入式分享合集68
嵌入式硬件
David WangYang11 小时前
基于 IOT 的安全系统,带有使用 ESP8266 的语音消息
物联网·安全·语音识别
竹照煜_ysn13 小时前
STM32——软硬件I2C
stm32·嵌入式硬件·mongodb
Ronin-Lotus14 小时前
嵌入式硬件篇---电感串并联
嵌入式硬件