智能路灯平台灯具控制系统的设计与实现
目录
摘要
研究过程与总体设计:
关键技术:NB-IOT模块与STM32 MQTT通信协议
代码实现:
MQTT服务器的连接:打开 MQTT 客户端网络及连接客户端至 MQTT 服务器。
订阅与发布:订阅激活、开\关路灯相关主题;发布反馈结果及状态信息相关主题。
硬件看门狗:程序出现死循环时,通过及时喂狗让系统进行复位让系统更加可靠稳定。
配置信息存储:FLASH的读写。
STM32通用定时器:定时上发路灯状态
效果展示及系统测试:远程打开/关闭路灯及路灯异常检测
摘要
随着科技社会的不断发展,传统路灯已经不能满足绿色、环保、节能生活的需求。越来越多的照明系统开始通过网络控制平台进行在线管理,实现新时代新理念的智能生活。针对目前节能生活的迫切需求,经过此次项目开发,设计并实现了智能灯具控制系统。
经过系统需求获取与分析、设计、实现、测试等环节完成了本设计,构建了用例模型、分析模型,设计了系统体系结构、部署方案、配置信息存储方案。系统以NB-IoT技术、MQTT协议为基础运用Stm32单片机和NB-IoT模块,串口调试工具、Keil等工具进行开发,通过订阅MQTT服务器发布的主题进行通信实现对继电器的实时控制。系统能远程控制多个区域的多个路灯如打开、关闭路灯,路灯异常检测,激活路灯。通过看门狗电路,大大提高了系统可靠性,解决了单片机系统程序运行失控死循环的问题。
系统利用NB-IoT技术覆盖范围广、连接多、成本低、功耗低的优点,解决了传统路灯系统电力浪费过大、维护成本过高的问题,满足了功能性需求及在可靠性方面的非功能性需求,达到了系统设计目标。
研究过程与总体设计:
关键技术:NB-IOT模块与STM32 MQTT通信协议
代码实现:
MQTT服务器的连接:打开 MQTT 客户端网络及连接客户端至 MQTT 服务器。
AT+QMTOPEN=<TCP_connectID>,"<host_name>",<port>AT+QMTCONN=<TCP_connectID>,"<clientID>"[,"<username>"[,"<password>"]]订阅与发布:订阅激活、开\关路灯相关主题;发布反馈结果及状态信息相关主题。
AT+QMTSUB=<TCP_connectID>,<msgID>,"<topic1>",<qos1>[,"<topic 2>",<qos2>…] AT+QMTPUB=<TCP_connectID>,<msgID>,<qos>,<retain>,"<topic>","<msg>"
硬件看门狗:程序出现死循环时,通过及时喂狗让系统进行复位让系统更加可靠稳定。
硬件看门狗的原理:在外界的干扰下,单片机系统将出现程序运行失控,并导致无限循环。看门狗电路是为了避免这种情况。硬件看门狗实际上就是一个定时器,有一个输入和输出,它的功能是定期检查芯片内部的情况,一旦发生错误就向芯片发出重启信号。外界干扰会影响单片机的正常工作,从而导致单片机控制系统发生不可预料的后果。使用硬件看门狗,可以预防程序发生死循环。应用看门狗电路后单片机可以在无人状态下连续工作。硬件看门口电路,利用一个定时器来监控主程序的运行。
void IWDG_Init(u8 prer,u16 rlr) {IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //使能对寄存器IWDG_PR和IWDG_RLR的写操作IWDG_SetPrescaler(prer); //设置IWDG预分频值:设置IWDG预分频值为64IWDG_SetReload(rlr); //设置IWDG重装载值IWDG_ReloadCounter(); //按照IWDG重装载寄存器的值重装载IWDG计数器IWDG_Enable(); //使能IWDG } //喂独立看门狗 void IWDG_Feed(void) {IWDG_ReloadCounter();//reload }配置信息存储:FLASH的读写。
在进行开发时,需要将网络配参数进行保存保存,如IP地址、端口号、ClientID、用户名、密码等信息在单片机FLASH指定地址进行存储,下次连接需要使用这些数据时,直接从FLASH中读取。
//解锁 FLASH_Unlock(); //清除标志位FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGAERR | FLASH_FLAG_WRPERR); //清空状态指示标志位 FLASHStatus = 1; //擦除预写入页FLASHStatus = FLASH_ErasePage(STARTADDR);//擦除整页 //写入配置信息 for(i=0;i<300;i++){FLASH_FastProgramWord(STARTADDR, str100[i]);STARTADDR =STARTADDR +4;}FLASH_Lock();}STM32通用定时器:定时上发路灯状态
平台询问路灯状态与路灯主动上发状态的设计,双重保障。让路灯管理更加实时可靠。在收到询问消息前,物联网智能设备处于低功耗模式,更好的减少资源消耗,平台定时询问路灯状态后,智能路灯会上发实时状态,当然它也会定时上发自己的状态。
路灯状态获取:采用光照传感器检测路灯故障,当路灯出现故障,打开路灯时光照传感器采集到的adc值低于额定值,打开路灯就被定义为打开异常,此时硬件设备发布打开异常的消息,MQTT服务器接收到后将异常显示在前端页面,提醒巡检员进行维修。
//光照传感器ADC数据的采集adc1=(float)((float)ADC_ConvertedValue*VREF)/MAX_CONVERTD; //PC0printf("adc1=%f \r\n",adc1);val = (int )adc1 ;printf("val=%d \r\n",val); /******************************************************************************* 定时器设置 *******************************************************************************/ #include "timer.h" #include "usart.h" #include <stm32l1xx.h> unsigned char Timeout; unsigned char uart1_getok;volatile u32 sec=1;void TIM3_Int_Init(u16 arr,u16 psc) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能//定时器TIM3初始化TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_timTIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断//中断优先级NVIC设置NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //TIM3中断NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占优先级0级NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //从优先级3级NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能NVIC_Init(&NVIC_InitStructure); //初始化NVIC寄存器TIM_Cmd(TIM3, ENABLE); //使能TIMx }//定时器3中断服务程序 void TIM3_IRQHandler() //TIM3中断 { if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查TIM3更新中断发生与否{TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除TIMx更新中断标志 //LED1=!LED1; }sec++; } /******************************************************************************* 设置主动上发状态的时间 *******************************************************************************/if(sec%20 == 0){ printf("\r\n主动定时报告\r\n主动定时报告\r\n主动定时报告\r\n主动报告\r\n主动定时报告\r\n");fa();}效果展示及系统测试:远程打开/关闭路灯及路灯异常检测
打开路灯:
关闭路灯:
路灯异常测试:
在打开路灯前用不透明纸片遮挡光照传感器,模拟路灯打开异常状态,即打开路灯时灯泡不亮的状态。打开路灯时光照传感器采集到的adc值不在额定范围内,打开路灯就被定义为打开异常,此时硬件设备会向MQTT服务器发布打开异常的主题,路灯的状态结果将会是:在线-打开异常。如图标记部分所示为了模拟路灯打开异常状态,用纸片遮住光照传感器。
路灯异常检测:
总结
以上是生活随笔为你收集整理的智能路灯平台灯具控制系统的设计与实现的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 达梦数据库DCA培训心得
- 下一篇: Windows 2000系统编程 (1)