界面演示
实物演示
包含两个终端节点以及一个协调器,协调器与上位机通过串口线连接,协调器与终端节点树形组网
硬件
cc2530
DHT11
超声波传感器
MQ-2
LED
三极管
直流电机
软件
Qt IAR Sqlyug Mysql
项目架构
智慧农业系统分为上位机和下位机,通信协议使用串口通信,硬件设置两个终端节点和一个协调器,彼此间利用Z-stack协议栈组网,终端节点负责实时采集各类传感器的数据,并将其发送给协调器。协调器通过串口线连接上位机,使用串口协议将接收到的数据按每秒一次的频率发送给上位机。
上位机将接收到的数据报进行进行可视化处理显示
通信协议
1 串口通信
串口通信是一种通过串行接口进行数据传输的通信方式。串口通信常见于许多设备之间的数据传输,例如计算机和外部设备如打印机、传感器、微控制器等之间的通信。
以下是串口通信的一般步骤:
- 确定串口参数:在进行串口通信之前,需要确定串口的参数,包括波特率(Baud rate)、数据位(Data
bits)、校验位(Parity)、停止位(Stop bits)等。这些参数需要在通信的两端设备上保持一致。 - 打开串口:在计算机或控制设备的软件中,打开串口并与目标设备建立连接。这需要使用相应的串口编程接口或库函数来实现。
- 发送数据:通过串口发送数据,可以将要发送的数据写入到串口缓冲区。数据可以是文本、二进制数据或者是特定的控制命令,根据需求来决定。
- 接收数据:在目标设备接收到数据时,它会将数据写入到串口缓冲区。在计算机或控制设备的软件中,可以通过读取串口缓冲区来获取接收到的数据。
- 处理数据:一旦接收到数据,你可以对其进行解析和处理。这可能包括将数据进行格式化、提取需要的信息、对数据进行逻辑判断等操作。
- 关闭串口:当通信结束时,需要关闭串口以释放资源并终止连接。
需要注意的是,在进行串口通信时,需要确保通信双方的串口参数一致,以及正确处理异常情况和错误校验等。此外,不同的编程语言和操作系统可能有不同的串口编程接口和库函数,你可以根据具体的开发环境来查找相应的文档和资料进行实现。
2 ZigBee通信
Zigbee是一种基于IEEE 802.15.4标准的低功耗、短距离无线通信技术,特别适用于物联网应用。它采用了网状网络拓扑结构和分层的协议架构,能够支持大规模的设备互联和数据传输。
以下是Zigbee通信的一般流程:
- 网络建立:在Zigbee网络中,一个设备可以充当协调器(Coordinator)、路由器(Router)或终端设备(End
Device)的角色。协调器负责网络的组网和管理,其他设备通过与协调器或其他路由器建立连接加入网络。一旦网络建立,设备之间就可以通过Zigbee进行通信。 - 设备发现和加入:设备可以通过主动广播或被动扫描的方式,发现并加入附近的Zigbee网络。加入过程中,设备会获得一个唯一的网络地址,并与网络中的其他设备进行关联。
- 路由选择:Zigbee网络采用网状拓扑结构,意味着数据可以通过多个路由器进行中转。路由器负责选择最佳的路径来转发数发数据,以保证稳定的通信。路由选择使用基于跳数(hops)和信号强度等指标来评估。
- 数据传输:在Zigbee网络中,设备可以通过点对点通信或广播方式进行数据传输。数据可以是传感器数据、控制命令或其他应用数据。传输时,数据会被封装到Zigbee帧中,并遵循Zigbee协议的规定来进行传输。
- 网络管理: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口变化,其实大体思路也是这样,协调器相当于中转站,负责接收上位机指令或者上传终端数据