基于CC2530(ZigBee)设计的自动照明系统

1. 功能介绍 设计题目的名称: 基于zigbee的自动照明系统设计
一共使用3个cc2530 zigbee开发板,代号分别为abc。
a开发板当做主机: 上面连接了光感传感器,esp8266wifi模块。通过esp8266与手机app之间通信,esp8266创建热点,配置为tcp服务器模式; 手机app连接上esp8266的热点之后,再连接esp8266创建的服务器,完成通信。 手机app上通过按钮可以控制b,c开发板上led灯的开关。
手机app上可以设置自动照明的模式:
自动照明模式: 根据a开发板上的光感模块,采集光照强度,控制b、c开发板上的led灯开关。
手动模式: 手机app 上可以选择单独控制b、c开发板上的led灯开关。
支持设置光感阀值: 在手机app上可以设置a开发板的光感传感器阀值(也就是控制灯亮灭的阀值)。
支持设置亮度,也可以自动根据环境光控制亮度
b开发板当做从机节点: b开发板上使用板载的led灯,模拟家里卧室的照明设备,实现控制效果演示。
c开发板当做从机节点: c开发板上使用板载的led灯,模拟家里客厅的照明设备,实现控制效果演示。
2. 硬件介绍 2.1 esp8266 wifi 采用的esp8266系列无线模块是高性价比wifi soc模组,该系列模块支持标准的ieee802.11b/g/n协议,内置完整的tcp/ip协议栈。用户可以使用该系列模块为现有的设备添加联网功能,也可以构建独立的网络控制器。
cc2530开发板上本身就有一个esp8266专用的接口,插上去就行了。
es8266 wifi 模块接在 串口1 上面(p0.4/p0.5口) ,波特率为 115200 。
cc2530的串口0作为常规调试串口(p0_2和p0_3端口),可以把采集的ad数据打印到串口。 也可以自己打印其他一些调试信息。
2.2 光敏传感器 ​编辑
3. 项目代码 3.1 串口代码#include uart.h/*函数功能:串口0初始化*/void init_uart0(void){  percfg&=~(1<<0);  //串口0的引脚映射到位置1,即p0_2和p0_3  p0sel|=0x3<<2;   //将p0_2和p0_3端口设置成外设功能  u0baud = 216;     //32mhz的系统时钟产生115200bps的波特率  u0gcr&=~(0x1f<<0);//清空波特率指数  u0gcr|=11<<0;      //32mhz的系统时钟产生115200bps的波特率  u0ucr |= 0x80;    //禁止流控,8位数据,清除缓冲器  u0csr |= 0x3p0_1 key2-->p2_0  */void key_init(void){    p0sel&=~(0x1<<1); //配置p0_1处于通用gpio口模式    p0dir&=~(0x1<<1); //配置p0_1为输入模式    p0inp|= 0x1<<1;   //上拉          p2sel&=~(0x1<<0); //配置p2_0处于通用gpio口模式    p2dir&=~(0x1<<0); //配置p2_0为输入模式    p2inp|= 0x1<0;c--)        for(b=181;b>0;b--)            for(a=14;a>0;a--);}​​void delay10ms(void)   //误差 0us{    unsigned char a,b,c;    for(c=193;c>0;c--)        for(b=118;b>0;b--)            for(a=2;a>0;a--);}​/****************************************** * 函数描述:32m系统时钟下的毫秒延时函数 ******************************************/  void delayms(unsigned int ms)  {    unsigned int i,j;    for(i = 0; i < ms; i++)   {      for(j = 0;j =13)       {           recdatau1[lenu1]='\0';                     //串口打印数据           usart0_printf(wifi收到的数据:%s\n,(u8*)recdatau1);                     //卧室led开           if(strstr((char*)recdatau1,led1_on))           {                usart0_printf(卧室led开.\n);                u8 buff[100]=b:1---;                //发送数据                tx_data(buff,strlen((char*)buff));                //运行状态灯                led1 = !led1;           }           //卧室led关           else  if(strstr((char*)recdatau1,led1_off))           {                usart0_printf(卧室led关.\n);                 u8 buff[100]=b:0---;                //发送数据                tx_data(buff,strlen((char*)buff));                //运行状态灯                led1 = !led1;           }            //客厅led开           else  if(strstr((char*)recdatau1,led2_on))           {                 usart0_printf(客厅led开.\n);                 u8 buff[100]=c:1---;                //发送数据                tx_data(buff,strlen((char*)buff));                //运行状态灯                led1 = !led1;           }            //自动模式           else  if(strstr((char*)recdatau1,yes_auto_mode))           {                 usart0_printf(设置为自动模式.\n);                 mode=1;           }            //手动模式           else  if(strstr((char*)recdatau1,no_auto_mode))           {                  usart0_printf(设置为手动模式.\n);                 mode=0;           }           //阀值           else  if(strstr((char*)recdatau1,value:))           {                //运行状态灯                led1 = !led1;                                char *p=strstr((char*)recdatau1,value:);                if(p)               {                    int a=atoi(p+6);                    if(a>0)                   {                      switch_val=a;  //得到新的阀值                   }               }                                usart0_printf(设置新的阀值:%d.\n,switch_val);           }                     clearbuffu1(); //清理缓存       }                  time_cnt++;        delayms(10);                 //1秒钟时间到达       if(time_cnt>100)       {           time_cnt=0;                    //读取adc值--也就是光照传感器的值          gasdata = readgasdata();                    //发送光照传感器的值到上位机          usart0_printf(光照度:%d,模式:%d\n,gasdata,mode);                    //如果是自动模式          if(mode)         {               //根据阀值判断是否开启关闭卧室,客厅的led灯               if(gasdata  >  switch_val )               {                    //开灯                        u8 buff1[10]=b:1---;                    //发送数据                    tx_data(buff1,strlen((char*)buff1));                      //开灯                        u8 buff2[10]=c:1---;                    //发送数据                    tx_data(buff2,strlen((char*)buff2));               }               else               {                      //关灯                        u8 buff1[10]=b:0---;                    //发送数据                    tx_data(buff1,strlen((char*)buff1));                      //关灯                        u8 buff2[10]=c:0---;                    //发送数据                    tx_data(buff2,strlen((char*)buff2));                   }         }       }   }}


微雪电子PICkit3 PIC仿真器下载器简介
在orcad里面如何把接地符号的网络名显示出来
常用的防接反电路
两头随意转换的Type-C多功能扩展坞
“5G+”让空间距离不再遥远,还需要向更多领域扩展
基于CC2530(ZigBee)设计的自动照明系统
中国电信与清华大学签署合作协议,共推移动通信等关键技术研究
显示器可为大家带来更好的使用体验的设计
电脑软件老是崩溃怎么办
iphone8什么时候上市?iPhone8带来腮红金配色很亮眼?iphone 8外观设计、新功能、配置、价格更亮眼
客户满意度应是新兴技术的重中之重
以MSP430单片机为核心的智能无功补偿控制器设计
荣耀note9最新消息:荣耀note9配置确认,荣耀V9和荣耀9都发布开售了,荣耀note9你还在多远的未来?
漏磁通与哪些因素有关
吻合器环形刀直线刀和圆刀片锋利度检测仪
从创客空间到市场领先:无限可能,改变世界
通过SerDes远端I²C接口访问16位I²C外设寄存器地址
VR科普“任意门”等你开启
苹果计划在美国建整车厂,新车最快2024年亮相
开箱评测 卓力增压熨烫机TS3000体验