实现目标
1、掌握新大陆云平台传感器的创建
2、熟悉STM32 +HAL与ESP8266模块之间的通信
3、具体实现目标:(1)创建2个传感器:温度传感器,湿度传感器;(2)上传开发板上的SHT20温湿度传感器数据至云平台。
一、项目创建
上期已实现云平台创建的执行器对开发板上的蜂鸣器和LED的控制,详细请参考网址教程:https://blog.csdn.net/luojuan198780/article/details/138860797
本次项目整体:创建5个执行器(已建)+温湿度传感器(待建)
1.1 温度传感器创建
说明:湿度传感器除了名称和温度传感器一样
1.2 温度传感器创建后整体效果
二、开发板连接图
开发板P7四个跳键帽接法如下图:
说明:单片机的USART1用于调试信息打印;USART2用于与ESP8266模块通信。
三、STM32CubeMX 配置
1.GPIO配置
BEEP:初始电平为低电平,推挽输出;LED1-LED4:初始电平为高电平,推挽输出。
2.串口USART1配置
USART1:异步模式,波特率115200,功能:用于打印调试信息
3.串口USART2配置
USART2: 异步模式,波特率115200,开启DMA,开启中断。功能:用于与ESP8266通信
4.IIC1 配置
(1)开启I2C,其它默认
(2)打开中断(USART2 、I2C1)
四、程序设计
说明:整个工程的代码量大,下面只列出整个工程中温湿度传感器数据上传函数。
4.1 stm32App.c 中数据上传部分新增温湿度数据上传
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);
// ESP8266_SendSensor(lock, (char *)"2018-06-20 14:10:26");
ClrAtRxBuf();
}
4.2 打开 WiFiToCloud.h 文件重新声明修改后函数
//int8_t ESP8266_SendSensor(uint8_t sensor, char *TimeStr);
int8_t ESP8266_SendSensor(float sensor1,float sensor2);
4.3 修改WiFiToCloud.c文件中函数
修改ESP8266_SendSensor函数形参个数,修改上传数据格式。
同时上传温湿度数据,数据类型为浮点型,具体格式见下:
sprintf((char *)TxetBuf,"{\"t\":3,\"datatype\":1,\"datas\":{\"temp\":\"%.1f\",\"hum\":\"%.1f\"},\"msgid\":001}",sensor1,sensor2);
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;
}