|
//單片機頭文件
#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);
}
}
|
|