物联网智慧教室项目(九):ZigBee采集控制功能开发

一、zigbee采集控制功能实现

(一)zigbee采集控制功能硬件连接

在这里插入图片描述

(二)zigbee组网代码介绍及烧写

1、硬件连接

协调器连接

在这里插入图片描述

温湿度&风扇连接

在这里插入图片描述

2、代码路径

文件路径
智慧教室项目实战\day09\03-Zigbee源码
IAR工程路径
智慧教室项目实战\day09\03-Zigbee源码\Projects\zstack\Samples\ZigbeeApp\CC2530DB

3、代码编译配置

协调器编译

在这里插入图片描述

温湿度节点编译

在这里插入图片描述

风扇节点编译

在这里插入图片描述

三、STM32实现代码移植及分析

文件路径

智慧教室项目实战\02-智慧教室项目实战\day09\02-STM32需要移植的代码

zigbee应用协议解析实现

protocol.c protocol.h

zigbee串口数据接收

usart.c
    //主要配置使能uart1空闲中断
    
freertos.c
	//创建zigbee消息队列
    //在zigbee任务中进行接收消息,解析消息
stm32f4xx_it.c
    //zigbee消息入队

数据封装

CmdAndSensor.c
    //增加了风扇控制

webserver

httpserver-socket.c
    //传感器数据获取
    //风扇控制

触摸屏展示

TempDLG.c
HumDLG.c
LightDLG.c
    //增加传感器数据动态展示功能
FanDLG.c
    //增加实际的风扇控制功能

整体功能验证

二、Zigbee组网设计

(一)组网架构

使用Zigbee技术组建无线网络,网络中包含温湿度采集节点、风扇控制节点、Zigbee协调器

  • Zigbee协调器负责Zigbee网络组建,通过串口与STM32进行通信
  • STM32负责Zigbee传感器数据解析,和控制命令下发

在这里插入图片描述

(二)通信协议

协议格式

  1. 包头/版本:表示一包完整的数据/当前使用的协议版本

  2. 节点ID:在Zigbee网络里的节点ID号

  3. 节点类型:

    1. 0x0:温湿度传感器
    2. 0x01:风扇控制
  4. 数据长度:

    1. 范围:0~255
    2. 单位:字节
  5. 数据域:

  6. 温湿度传感器:温度+湿度(1+1字节)

  7. 风扇:风扇状态 (1个字节)

  8. CRC-8

  9. 8位循环冗余校验(保证通信可靠)

  10. 校验域为节点ID~数据域

包头 节点ID 节点类型 数据长度 数据域 CRC-8 包尾/版本
0x99 0x0~0XxFFFF 0x0~0xFF 0x0~0xFF xx CRC 0x01
温湿度协议格式

上行

包头 节点ID 节点类型 数据长度 数据域 CRC-8 包尾/版本
0x99 0x0001 0x00 2 温度:25℃,湿度:80% CRC 0x01
风扇协议格式

上行

包头 节点ID 节点类型 数据长度 数据域 CRC-8 包尾/版本
0x99 0x0002 0x01 1 开:0x01,关:0x00 CRC 0x01

下行

包头 节点ID 节点类型 数据长度 数据域 CRC-8 包尾/版本
0x99 0x0002 0x01 1 开:0x01,关:0x00 CRC 0x01

三、Zigbee组网设计

通信方式

Zigbee支持单播,组播,广播,绑定通信,根据我们功能定义,协调器可以采用广播通信,节点采用单播通信
协调器地址恒为:0x0000
广播地址为:0xFFFF
节点地址:采用短地址通信,但是地址是有协调器进行动态分配的

协议解析 组包设计

在实际的网络的通信中即有上行又有上行,需要我们通过代码具体实现

####设计思路

  1. 判断接收协议是否合法
    1. 检查协议头
    2. 检查协议尾
    3. 校验CRC
  2. 获取有效数据
  3. 解析数据
  4. 创建协议数据

四、协议组包拆包功能实现

CRC教研算法

在这里插入图片描述

/***************************************************************************
* File                  : protocol.c
* Function Name         : 
* Description           : 协议处理
* Version               : v1.0
* Author                : zhengdao.liu
* Date                  : 2019/8/22
* Parameter             :
* Return                :
* Note                  :
***************************************************************************/

#include "protocol.h"

#include "stdio.h"

#include "string.h"

extern UART_HandleTypeDef huart1;

ProtocolDataType  ProtocolData = {
   
    HEAD,
    NODE_ID,
    NODE_TYPE,
    DATA_LEN,
    0x0,
    0x0,
    TAIL,
};


/******************************************************************************
 * Name:    CRC-8               x8+x2+x+1
 * Poly:    0x07
 * Init:    0x00
 * Refin:   False
 * Refout:  False
 * Xorout:  0x00
 * Note:
 *****************************************************************************/
uint8 crc8(uint8 *data, uint8 length)
{
   
    uint8 i;
    uint8 crc = 0;        // Initial value
    while(length--)
    {
   
        crc ^= *data++;        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值