前言
- 👑由于无线传感器网络(也即是Zigbee)作为🌐
物联网工程
的一门必修专业课,具有很强的实用性,因此很多院校都开设了zigbee的实训课程; - 👑同时最近很多使用了我的单片机课设的同学又来私信咨询我
基于Zigbee的的课程设计
的相关问题; - 👑所以为了帮助各位有需要的同学顺利完成自己的课程设计,有个顺利的假期,同时为了方便各位想要学习ZigBee的同学查找学习,建立了本专栏。
- 💞但是由于笔者正在读研,每天的任务比较重,只能在从实验室回来后,晚上抽一个小时的时间来写,所以,更新不易,靠爱发电。
正在更新中~ ✨

🚨 我的项目环境:
- 平台:Windows 11
- 编译器:IAR for 8051 8.10
- Zigbee协议栈:Zstack-CC2530-2.5.1a
- 芯片型号:CC2530
🎊无线传感器网络专栏地址:【Zigbee课程设计系列文章】(附详细使用教程+完整代码+原理图+完整课设报告)
提示:以下是本篇文章正文内容,下面案例可供参考,代码链接以及电路图已经放在文末,点击获取,如失效请私信
基于ZigBee的无线压力采集系统(附详细使用教程+完整代码+原理图+完整课设报告)
1 实物图与功能介绍
- 终端数据采集:基于 HX711 压力传感器完成物理量到数字信号的转换,终端节点通过 ADC 采样实现压力数据的实时获取
- 无线数据传输组网:各终端节点通过 ZigBee 协议栈构建的无线传感器网络,将压力数据帧以 IEEE 802.15.4 标准格式发送至协调器节点
- 协调器数据处理:协调器节点通过处理事件解析机制,对多终端上传的压力数据进行聚合处理与校验
- LCD数据展示:协调器通过 SPI 接口驱动 LCD 显示模块,实时展示各终端节点的压力数据
- 串口数据交互接口:协调器将汇总的压力数据按自定义通信协议打包,通过 UART 接口传输至 PC 端监控软件
2 系统设计
2.1 系统框架
2.2 硬件选型
3 硬件设计原理图
4 软件设计
4.1 HX711驱动代码
unsigned long Weight_Maopi = 0; //皮重
#define GapValue 400
//****************************************************
//延时函数
//****************************************************
void Delay__hx711_us(void)
{
asm("nop");
asm("nop");
}
//****************************************************
//读取HX711
//****************************************************
unsigned long HX711_Read(void) //增益128
{
unsigned long count;
}
//****************************************************
//称重
//****************************************************
long Get_Weight()
{
}
//****************************************************
//获取毛皮重量
//****************************************************
void Get_Maopi()
{
Weight_Maopi = HX711_Read();
}
void hx711_init()
{}
4.2 协调器定时器处理函数
if ( events & SAMPLEAPP_SEND_PERIODIC_MSG_EVT )
{
//协调器定时输出数据
{
uint8 buff[20]={0};
uint8 i=0;
for(i = 0;i<nodeCount;i++){
//串口输出字符串
sprintf(buff,"Net:%04X Weight:%dg\r\n",nodeDataArray[i].netAddress,nodeDataArray[i].Weight);
HalUARTWrite(0, buff, osal_strlen(buff));
// OLED显示
sprintf(buff,"%04X G:%dg", nodeDataArray[i].netAddress, nodeDataArray[i].Weight);
//HalUARTWrite(0, buff, osal_strlen(buff));
HalLcdWriteString(buff, HAL_LCD_LINE_3+i); //LCD显示
}
}
osal_start_timerEx( SampleApp_TaskID, SAMPLEAPP_SEND_PERIODIC_MSG_EVT,
(SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT ));
return (events ^ SAMPLEAPP_SEND_PERIODIC_MSG_EVT);
}
4.3 协调器接收无线信息处理函数
void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
{
uint16 flashTime;
switch ( pkt->clusterId )
{
case SAMPLEAPP_P2P_CLUSTERID:
if(pkt->cmd.Data[0]==1){
uint16 netAddress = pkt->srcAddr.addr.shortAddr; //读出数据包的 16 位短地址
long weight = (long)pkt->cmd.Data[1] << 0 |
(long)pkt->cmd.Data[2] << 8 |
(long)pkt->cmd.Data[3] << 16 |
(long)pkt->cmd.Data[4] << 24;
UpdateWeight(netAddress, weight);
}
break;
4.4 终端节点无线发送压力函数
void SampleApp_Send_P2P_Message( void )
{
uint8 buf[10]={0};
int len=0;
char strTemp[20];
long weight=Get_Weight(); //称重
if(weight>=0){
buf[0]=1;
//LCD 显示
..........
//格式化数据上传协调器
.................
len=5;
}
else{}
if ( AF_DataRequest( &SampleApp_P2P_DstAddr, &SampleApp_epDesc,
SAMPLEAPP_P2P_CLUSTERID,
len,
buf,
&SampleApp_TransID,
AF_DISCV_ROUTE,
AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
{
}
else
{
// Error occurred in request to send.
}
}
5 链接
资料详情
下载链接1🔐:点击跳转下载➡️基于无线传感器网络的压力采集系统(附详细使用教程+完整代码+原理图+完整课设报告)
链接易失效,亦可直接私信我要!