|
//单片机头文件
#include "stm32f10x.h"
//网络协议层
#include "onenet.h"
//网络设备
#include "esp8266.h"
//硬件驱动
#include "delay.h"
#include "usart.h"
#include "i2c.h"
#include "sht20.h"
//C库
#include <string.h>
#include <stdlib.h>
extern unsigned char data_bytes;
extern unsigned char m_cmd, rev_cmd_cnt;
extern unsigned char r_addr, r_len;
/*
************************************************************
* 函数名称: Hardware_Init
*
* 函数功能: 硬件初始化
*
* 入口参数: 无
*
* 返回参数: 无
*
* 说明: 初始化单片机功能以及外接设备
************************************************************
*/
void Hardware_Init(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中断控制器分组设置
Delay_Init(); //systick初始化
Usart1_Init(115200); //串口1,打印信息用
Usart2_Init(115200); //串口2,驱动ESP8266用
IIC_Init(); //IIC初始化
UsartPrintf(USART_DEBUG, " Hardware init OK\r\n");
}
/*
************************************************************
* 函数名称: main
*
* 函数功能:
*
* 入口参数: 无
*
* 返回参数: 0
*
* 说明:
************************************************************
*/
int main(void)
{
unsigned char *dataPtr = NULL;
Hardware_Init(); //初始化外围硬件
ESP8266_Init(); //初始化ESP8266
while(OneNet_DevLink()) //接入OneNET
DelayXms(500);
while(1)
{
dataPtr = ESP8266_GetIPD(0);
if(dataPtr != NULL)
OneNet_RevPro(dataPtr, data_bytes);
if(rev_cmd_cnt > 0) //如果收到平台的查询命令
{
--rev_cmd_cnt;
//根据命令码、寄存器地址、寄存器地址长度吧要上传的值放入链表里
//本例程命令码为3代表查询传感器数据,为4代表控制相关外设
switch(m_cmd)
{
case 3: //控制外设
{
unsigned short *value_table = malloc(r_len << 1);
_Bool flag = 1;
SHT20_GetValue();
if(value_table != NULL)
{
switch(r_addr)
{
//010300010001D5CA
case 1: value_table[0] = (unsigned short)(sht20_info.tempreture * 100); break;
//01030002000125CA
case 2: value_table[0] = (unsigned short)(sht20_info.humidity * 100); break;
default: flag = 0; break;
}
if(flag)
OneNet_SendData(value_table, r_len);
free(value_table);
}
}
break;
default:
break;
}
}
DelayXms(10);
}
}
|
|