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体验