基于ZigBee协议的智慧农业

界面演示

在这里插入图片描述
在这里插入图片描述

实物演示

在这里插入图片描述

包含两个终端节点以及一个协调器,协调器与上位机通过串口线连接,协调器与终端节点树形组网

硬件

cc2530
DHT11
超声波传感器
MQ-2
LED
三极管
直流电机

软件

Qt IAR Sqlyug Mysql

项目架构

智慧农业系统分为上位机和下位机,通信协议使用串口通信,硬件设置两个终端节点和一个协调器,彼此间利用Z-stack协议栈组网,终端节点负责实时采集各类传感器的数据,并将其发送给协调器。协调器通过串口线连接上位机,使用串口协议将接收到的数据按每秒一次的频率发送给上位机。
上位机将接收到的数据报进行进行可视化处理显示

通信协议

1 串口通信

串口通信是一种通过串行接口进行数据传输的通信方式。串口通信常见于许多设备之间的数据传输,例如计算机和外部设备如打印机、传感器、微控制器等之间的通信。
以下是串口通信的一般步骤:

  1. 确定串口参数:在进行串口通信之前,需要确定串口的参数,包括波特率(Baud rate)、数据位(Data
    bits)、校验位(Parity)、停止位(Stop bits)等。这些参数需要在通信的两端设备上保持一致。
  2. 打开串口:在计算机或控制设备的软件中,打开串口并与目标设备建立连接。这需要使用相应的串口编程接口或库函数来实现。
  3. 发送数据:通过串口发送数据,可以将要发送的数据写入到串口缓冲区。数据可以是文本、二进制数据或者是特定的控制命令,根据需求来决定。
  4. 接收数据:在目标设备接收到数据时,它会将数据写入到串口缓冲区。在计算机或控制设备的软件中,可以通过读取串口缓冲区来获取接收到的数据。
  5. 处理数据:一旦接收到数据,你可以对其进行解析和处理。这可能包括将数据进行格式化、提取需要的信息、对数据进行逻辑判断等操作。
  6. 关闭串口:当通信结束时,需要关闭串口以释放资源并终止连接。
    需要注意的是,在进行串口通信时,需要确保通信双方的串口参数一致,以及正确处理异常情况和错误校验等。此外,不同的编程语言和操作系统可能有不同的串口编程接口和库函数,你可以根据具体的开发环境来查找相应的文档和资料进行实现。

2 ZigBee通信

Zigbee是一种基于IEEE 802.15.4标准的低功耗、短距离无线通信技术,特别适用于物联网应用。它采用了网状网络拓扑结构和分层的协议架构,能够支持大规模的设备互联和数据传输。
以下是Zigbee通信的一般流程:

  1. 网络建立:在Zigbee网络中,一个设备可以充当协调器(Coordinator)、路由器(Router)或终端设备(End
    Device)的角色。协调器负责网络的组网和管理,其他设备通过与协调器或其他路由器建立连接加入网络。一旦网络建立,设备之间就可以通过Zigbee进行通信。
  2. 设备发现和加入:设备可以通过主动广播或被动扫描的方式,发现并加入附近的Zigbee网络。加入过程中,设备会获得一个唯一的网络地址,并与网络中的其他设备进行关联。
  3. 路由选择:Zigbee网络采用网状拓扑结构,意味着数据可以通过多个路由器进行中转。路由器负责选择最佳的路径来转发数发数据,以保证稳定的通信。路由选择使用基于跳数(hops)和信号强度等指标来评估。
  4. 数据传输:在Zigbee网络中,设备可以通过点对点通信或广播方式进行数据传输。数据可以是传感器数据、控制命令或其他应用数据。传输时,数据会被封装到Zigbee帧中,并遵循Zigbee协议的规定来进行传输。
  5. 网络管理:Zigbee网络具有自组织和自修复的能力,可以动态地管理设备加入和离开网络,以及路由选择和优化。网络管理功能由协调器负责执行。
    需要注意的是,Zigbee通信使用的是特定的硬件和协议栈,通常需要使用相应的开发工具和库函数进行编程和配置。开发者可以使用Zigbee开发套件或相关开发平台来进行应用程序的开发和测试。

数据库技术

登录数据表设计
在这里插入图片描述

采集数据表设计
在这里插入图片描述

Zstack协议栈实现主要思路


//回调函数
static void rxCB(uint8 port,uint8 event){
  uint8 buf[50];
  uint8 rxLength=0;//接收字符的大小
  rxLength=Hal_UART_RxBufLen(0);//已经接收到的字符个数
  if(rxLength>0){
    HalUARTRead(0,buf,11);//接收到数据
//    if(osal_memcmp(buf,"hello world",11)){
//      HalUARTWrite(0,buf,11);
//      HalUARTWrite(0,"\r\n",2);
//    }
    if(osal_memcmp(buf,"255",3)){
      HalLedSet(HAL_LED_1,HAL_LED_MODE_TOGGLE);
    }else if(osal_memcmp(buf,"254",3)){
      HalLedSet(HAL_LED_1,HAL_LED_MODE_TOGGLE);
    }
    
    
  }
}

上述只演示了收到字符串255或253会让灯的IO口变化,其实大体思路也是这样,协调器相当于中转站,负责接收上位机指令或者上传终端数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值