本文介绍了一个ZIGBEE小制作——使用CC2530来实现的红绿灯。这个例子使用协调器透传,可以接受别的控制单片机的串口命令,或者使用PC机的串口助手软件来给协调器发命令,控制节点中红绿灯的状态。节点上红黄绿三个交通灯都可以独立实现开,关或者闪烁。
  先说命令格式:

typedef struct
{uint8 Header_1;uint8 Header_2;uint8 NodeID;uint8 Command;uint8 Data;uint8 Tailer;
}UART_Format;

  Header_1、Header_2与Tailer是固定的帧头和帧尾,这里用EE,CCC和FF来表示。
  NodeID是设备号,如1号红绿灯可以使用0x01,2号使用0x02;
  Command表示是命令,如0xAA表明是周期消息,0xDD表明是节点对协调器命令的响应。
  Data是数据。这个例子中使用一个8位数据来表示红绿黄三个交通灯的状态,每个交通灯都有两个数据位, 00不亮01亮10闪烁,最高的两位预留,然后从高位到低位依次是红黄绿灯。假如红灯亮,黄灯闪烁绿灯不亮,那么data就是0001 1000,也就是0x18。
  下面是节点的代码:
  首先是IO口与宏定义。具体可根据自己的硬件写。我是用了红绿灯来演示,实际应用可以使用三极管或者继电器控制更高电压的交通灯。

//LED控制接口
#define LED_R                       P0_4
#define LED_Y                       P0_5
#define LED_G                       P0_6//1红2黄3绿   0亮起来 1不亮
#define ON          0
#define OFF         1

  截取节点的消息处理函数:(flag_X = 1 表示这个灯要闪烁。)

void SerialApp_ProcessMSGCmd( afIncomingMSGPacket_t *pkt )  //处理接收到的RF消息
{
。。。。。。switch ( pkt->clusterId ){case SERIALAPP_CLUSTERID1:  //处理各个传感器节数据    receiveData = (UART_Format *)(pkt->cmd.Data);HalLedBlink(HAL_LED_1,1,50,200);if((receiveData->Header_1==0xcc)&&(receiveData->Header_2==0xee)&&(receiveData->Tailer==0xff)) //校验包头包尾{if(receiveData->NodeID == 0x01) //地址,如果是发给自己的命令{            flag_R = 0;//先将所有的标识都置零flag_Y = 0;//这些标识用来标记是否闪烁flag_G = 0;Rsp.Command  = 0xDD;//DD表明是响应Rsp.Data  = receiveData->Data;switch (receiveData->Data){。。。。。。。case 0x06://RHG012   0不亮1亮2闪烁    0000 0110LED_R = OFF;LED_Y = ON;flag_G = 1;break;
。。。。。case 0x2a://RHG222   0不亮1亮2闪烁   0010 1010flag_ALL = 1;   //如果3个灯全部闪烁,特别定义这样一个变量flag_R = 1;  //保证同时亮灭flag_Y = 1;flag_G = 1;break;default :Rsp.Command  = 0xEF;//出错break;}//响应osal_set_event(SerialApp_TaskID, LED_BLINK_EVT);SerialApp_OTAData(&SerialApp_TxAddr, SERIALAPP_CLUSTERID1, &Rsp, sizeof(UART_Format));}}break;

  最后使用osal_set_event(SerialApp_TaskID, LED_BLINK_EVT);来设置了一个闪烁事件。这个事件的宏定义

#define LED_BLINK_EVT                       0X0004

 这个事件的处理函数:

UINT16 SerialApp_ProcessEvent( uint8 task_id, UINT16 events )
{(void)task_id;  // Intentionally unreferenced parameter
。。。。。。if ( events & LED_BLINK_EVT ) {if (flag_ALL){LED_R = 0;LED_Y = 0;LED_G = 0;flag_ALL = 0;}if (flag_R) LED_R = ! LED_R;if (flag_Y) LED_Y = ! LED_Y;  if (flag_G) LED_G = ! LED_G; osal_start_timerEx(SerialApp_TaskID, LED_BLINK_EVT, 1000);return (events ^ LED_BLINK_EVT);}
。。。。。。return ( 0 );  // Discard unknown events.
}

 处理函数也很简单,哪个状态位被标记过,就让其对应的灯状态反转,然后使用定时器计时1000毫秒再次反转,就实现了灯的闪烁。

 协调器的功能主要是将串口数据转发为无线数据,也会将节点执行命令的结果通过串口发给控制系统,代码就不列了。
 以上

一个使用CC2530实现的Zigbee红绿灯相关推荐

  1. CC2530/ESP32+传感器+ZigBee+MQTT+MYSQL+Springboot+Vue+Echarts的老人卫生间防摔倒自动报警系统

    CC2530/ESP32+传感器+ZigBee+MQTT+MYSQL+Springboot+Vue+Echarts的老人卫生间防摔倒自动报警系统 写在前言 运行效果展示 一代版本 ESP32+MQTT ...

  2. 一个基于CC2530的智能恒温空调的具体案例

    以下是一个基于CC2530的智能恒温空调的具体案例: 系统需求和功能 温度范围:18°C-28°C. 控制方式:手动.自动. 额外功能:温度报警.远程控制. 硬件设备 CC2530芯片作为主控芯片. ...

  3. 物联网之ZIGBEE学习(2) CC2530单片机与ZIGBEE

    我们学习ZIGBEE要绑定使用TI的CC2530单片机,为什么,为什么不用STM32,51,MSP430,Raspberry PI呢? 因此ZIGBEE和蓝牙,WIFI一样,是一种传输协议,如果要理解 ...

  4. 马斯克:我有一个大胆的想法!给红绿灯加个AI视觉「外挂」

      转载自:视学算法   编辑:好困 [导读]大半夜的,四下无人又没车,为何还要我等这么久的红灯?这两天,马斯克也在思考这个问题. 对于社畜来说,大城市的交通无非分为两种: 白天不让上班:晚上不让回家 ...

  5. CC2530模块进行ZigBee实验小结

    1.写在前面 从早上8点到12点,再从下午2点半整到了晚上8点,调试与安装,困难重重,因为资料给的开发软件和光盘上的开发软件不同,所以不得不将IAR装了卸装了卸:连线方面上,由于是独立完成实验,且资料 ...

  6. ZigBee——在CC2530的ZStack中添加定时任务

    在使用CC2530芯片进行ZigBee协议的开发时,我们往往使用TI公司提供的带有ZigBee协议栈的ZStack工程,接下来以其中的SampleApp为例,向其中添加自己需要的定时任务并设置周期和处 ...

  7. CC2530 CC2530F256RHAR 一款ZigBee SOC芯片

    ZigBee新一代SOC芯片CC2530是真正的片上系统解决方案,支持IEEE802.15.4标准/ZigBee/ZigBeeRF4CE和能源的应用.拥有庞大的快闪记忆体多达256个字节,CC2530 ...

  8. CC2530 ZigBee自组网模块

    +4dBm/Mesh自组网AT指令/远程配置 A40-C2G4A04Sx系列是基于TI CC2530开发符合ZigBee 2007/Pro协议规范,工作在2.4G频段的ZigBee自组网模块.应用层集 ...

  9. 【无线通信篇 | Zstack协议栈】CC2530 Zigbee Zstack协议栈组网项目及详细讲解篇

    演示视频:https://www.bilibili.com/video/BV1Ew411o7Fp 物联网无线通信技术,ZigBee无线传感网络 CC2530最大的特点就是一个拥有无线收发器(RF)的单 ...

  10. 关于Zigbee的常识

    什么叫物联网? 物联网是通过射频识别(RFID).红外感应器.全球定位系统.激光扫描器等信息传感设备,按约定的协议,把任何物体与互联网相连接,进行信息交换和通信,以实现对物体的智能化识别.定位.跟踪. ...

最新文章

  1. [渝粤教育] 西南科技大学 数据库应用 在线考试复习资料(1)
  2. SVG-不是图片的图片
  3. VC在windows下编写用于串行通讯的程序
  4. .net core 获取binary 文件_7.2 获取文本数据_Csv.Document
  5. JavaScript 详解:为什么写好的代码非常重要
  6. 设计模式之禅之设计模式-状态模式
  7. 谁说菜鸟不会数据分析
  8. django csrf 防跨站攻击
  9. int为什么是-32768到32767
  10. navicat mysql视图_Navicat教你如何做MySQL 视图
  11. 厉害了,苹果应用内购买抽成半年狂赚49亿美元
  12. ggplot2柱状图进阶画法
  13. eclipse官网下载不了eclipse开发工具的解决方法
  14. Minecraft作弊端介绍:PYRO CLIENT-一个平凡但神秘的存在
  15. C++11主要新增使用语法介绍
  16. WiFi配网~智能家居配网解决方案
  17. 恶意软件的历史和应对措施
  18. 猴子吃桃问题【Java】
  19. Type-infity Wasserstein Ball
  20. 虾皮API接口—按关键字搜索商品

热门文章

  1. [RK3399][Android7.1] 调试笔记 --- Recovery模式下无法挂载/data分区
  2. SuperCollider学习笔记(一)- 振荡器(Oscillators)
  3. 还没收到win11系统的推送?教你这样可以直接升级win11
  4. 产品设计方法论:用户体验五要素
  5. 别把职场当官斗,聪明人都在自我成长
  6. 阴阳师服务器维护稍后,《阴阳师》11月7日更新维护到几点 暂时无法进入服务器进行游戏...
  7. 【系统分析师之路】2016年系统分析师上午综合知识历年真题
  8. html闪星星特效,jquery和canvas炫酷星星闪烁特效插件
  9. 计算机专业夏令营英语面试范文,夏令营面试英文自我介绍
  10. Nacos源码系列之服务发现(二)