项目(智慧教室)第五部分,Zigbee采集控制功能实现

一。IAR工程针对Zigbee的修改

补充:硬件配置

(1)拨码开关拨到公口处,协调器的连接

(2)协调器的烧写(Zigbee协调器也需要烧写)

(4)温湿度模块的烧写

项目(智慧教室)第五部分,Zigbee采集控制功能实现_第1张图片

1.寻找Zigbee项目文件。

项目(智慧教室)第五部分,Zigbee采集控制功能实现_第2张图片

2.使用IAR,Zigbee协调器的选择,Zigbee协调器代码烧写

注意:协调器与节点的代码在一个工程文件下,所以会有协调器选择或温湿度节点的选择。

编译前选择coordinatorEB不要选错

项目(智慧教室)第五部分,Zigbee采集控制功能实现_第3张图片

编译下载

项目(智慧教室)第五部分,Zigbee采集控制功能实现_第4张图片

3.编译前选择风扇与温度

项目(智慧教室)第五部分,Zigbee采集控制功能实现_第5张图片

(1)宏定义选择--》温湿度选择#define TMEP_NODE

风扇选择--》FAN_NODE

项目(智慧教室)第五部分,Zigbee采集控制功能实现_第6张图片

二。keil工程的修改

1.向keil工程中移植protocol.c protocol.h

(1)protocol.c

(2)protocol.h。这是zigbee的移植文件

2.对ZIgbee串口数据的接受

2.1usart.c
    //主要配置使能uart1空闲中断-->串口中断的使能
    项目(智慧教室)第五部分,Zigbee采集控制功能实现_第7张图片

  __HAL_UART_ENABLE_IT(uartHandle,UART_IT_RXNE);

2.2freertos.c
    //在zigbee任务中进行接收消息,解析消息

(1)头文件的加入

项目(智慧教室)第五部分,Zigbee采集控制功能实现_第8张图片

#include "string.h"
#include "protocol.h"

(2)创建Zigbee消息队列

项目(智慧教室)第五部分,Zigbee采集控制功能实现_第9张图片

uint8_t ZigbeeBuff[40];
osMessageQId ZigbeeQueueHandle;

(3)Zigbee消息队列的初始化

项目(智慧教室)第五部分,Zigbee采集控制功能实现_第10张图片

  osMessageQDef(ZigbeeQueue, 40, uint8_t);
  ZigbeeQueueHandle = osMessageCreate(osMessageQ(ZigbeeQueue), NULL);  

(4)Zigbee消息接收

项目(智慧教室)第五部分,Zigbee采集控制功能实现_第11张图片

void Zigbee_Task(void const * argument)
{
  /* USER CODE BEGIN Zigbee_Task */
	uint8_t u8Index;
  /* Infinite loop */
  for(;;)
  {
	  //每次读取消息之前,把索引初始化为0
	  u8Index = 0;
	  //1、一直等待接收消息,第一个消息应该放在消息缓冲区的第一个元素上
		if(xQueueReceive(ZigbeeQueueHandle,&ZigbeeBuff[u8Index++],portMAX_DELAY)==pdPASS){
			while(xQueueReceive(ZigbeeQueueHandle,&ZigbeeBuff[u8Index++],50)){}
			//完成解析以后,要清空接收缓冲区,不然会出现问题
			  ProtocolParse(ZigbeeBuff,u8Index-1);
		    memset(ZigbeeBuff,0,40);						
		}
  }
  /* USER CODE END Zigbee_Task */
}

2.3stm32f4xx_it.c
    //zigbee消息入队

(1)添加头文件

项目(智慧教室)第五部分,Zigbee采集控制功能实现_第12张图片

#include "cmsis_os.h"

(2)声明外部Zigbee

项目(智慧教室)第五部分,Zigbee采集控制功能实现_第13张图片

extern osMessageQId ZigbeeQueueHandle;
extern UART_HandleTypeDef huart3;

(3)串口中断接受数据

项目(智慧教室)第五部分,Zigbee采集控制功能实现_第14张图片

	uint8_t u8Data;
	if(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_RXNE) == SET){
		u8Data = huart1.Instance->DR;
		xQueueSendFromISR(ZigbeeQueueHandle,&u8Data,NULL);
	}	

3.数据封装CmdAndSensor.c

(1)加入头文件,控制zigbee节点(风扇

项目(智慧教室)第五部分,Zigbee采集控制功能实现_第15张图片

#include "protocol.h"

FanControl((uint8_t)(Cmd));

4.httpserver-socket.c通信实现

(1)加入外部数据,修改

项目(智慧教室)第五部分,Zigbee采集控制功能实现_第16张图片

extern int SensorValue[3];

(2)得到数据字符串

项目(智慧教室)第五部分,Zigbee采集控制功能实现_第17张图片

static void Get_SensorValue(void *buffer, void *value)
{
	
	sprintf(buffer, "{\"temperature\":\"%d\",\"humidity\":\"%d\",\"light\":\"10021.1\"}", SensorValue[0], SensorValue[1]);
}

(2)对风扇的控制

<1>加入头文件

项目(智慧教室)第五部分,Zigbee采集控制功能实现_第18张图片

#include "protocol.h"

<2>实现对风扇的控制

项目(智慧教室)第五部分,Zigbee采集控制功能实现_第19张图片

static void Post_Cmd_Fan(void *buffer, void *value)
{
	if (strstr(value, On))
	{
		sprintf(buffer, "{\"Status\":\"On\"}");
		FanControl(0x01);
	}
	else if (strstr(value, Off))
	{
		sprintf(buffer, "{\"Status\":\"Off\"}");
		FanControl(0x0);
	}
	else
	{
		sprintf(buffer, "{\"Status\":\"Error\"}");
	}
}

5.对TempDLG.c修改

(1)修改外部数据(就是展示温湿度的数据

项目(智慧教室)第五部分,Zigbee采集控制功能实现_第20张图片

extern int SensorValue[3];

(2)定义一个字符串

项目(智慧教室)第五部分,Zigbee采集控制功能实现_第21张图片

	char       SensorBuff[10];

(3)页面展示数据

项目(智慧教室)第五部分,Zigbee采集控制功能实现_第22张图片

	sprintf(SensorBuff,"%d",SensorValue[0]);
    TEXT_SetText(hItem, SensorBuff);

6.LightDLG.c修改 (与上面一样)

(1)外部数据声明(收到的温湿度),声明字符串(数据改为字符串,这样才可以展示)

项目(智慧教室)第五部分,Zigbee采集控制功能实现_第23张图片

extern int SensorValue[3];
char SensorBuff[10];

(2)展示出来

项目(智慧教室)第五部分,Zigbee采集控制功能实现_第24张图片

	sprintf(SensorBuff,"%d",SensorValue[2]);
    TEXT_SetText(hItem, SensorBuff);

7.HumDLG.c(同上)

(1)使用外部声明数据,声明字符串

项目(智慧教室)第五部分,Zigbee采集控制功能实现_第25张图片

extern int SensorValue[3];

char SensorBuff[10];

(2)数据展示( 通过数据)

项目(智慧教室)第五部分,Zigbee采集控制功能实现_第26张图片

	sprintf(SensorBuff,"%d",SensorValue[1]);
    TEXT_SetText(hItem, SensorBuff);

8.FanDLG.c(风扇不需要加入数据)

项目(智慧教室)第五部分,Zigbee采集控制功能实现_第27张图片

#include "CmdAndSensor.h"

项目(智慧教室)第五部分,Zigbee采集控制功能实现_第28张图片

vFanCmd(status);  

你可能感兴趣的:(物联网项目:智慧农业,物联网,嵌入式硬件,单片机)