在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例嵌入式开发 → 基于STM32和zigbee的智能路灯

基于STM32和zigbee的智能路灯

嵌入式开发

下载此实例
  • 开发语言:C/C++
  • 实例大小:8.56KB
  • 下载次数:2
  • 浏览次数:60
  • 发布时间:2024-09-07
  • 实例类别:嵌入式开发
  • 发 布 人:贤人免进
  • 文件格式:.c
  • 所需积分:2
 相关标签: zigbee STM32 STM3 stm ST

实例介绍

【实例简介】

本系统中,通过光敏电阻实现对路灯亮度的感应,智能地调整路灯的亮度,提高路灯的节能效果。通过人体红外传感器实现对行人的感应,智能地调整路灯的亮度,提高行人的安全性。通过温度传感器实现对路灯温度的感应,防止路灯过热引起安全隐患。通过ZigBee无线通信技术,实现对路灯的远程监测和控制,提高路灯的管理效率和维护效果。通过WIFI进入云平台,再将通过ZigBee无线通信技术与云平台进行通信,实现对路灯的远程监测和控制。云平台将通过接收各种传感器的信号,实现对路灯的智能控制和调节。


【实例截图】应用场景可以变成校园、城市等,用于毕业论文或毕业设计
【核心代码】

#include "main.h"

#include "adc.h"

#include "tim.h"

#include "usart.h"

#include "gpio.h"

#include "./HAL/ds18b20/ds18b20.h"

#include "./HAL/delay/delay.h"

#define BEEP(a) (a?HAL_GPIO_WritePin(BEEP_GPIO_Port, BEEP_Pin, GPIO_PIN_SET):HAL_GPIO_WritePin(BEEP_GPIO_Port, BEEP_Pin, GPIO_PIN_RESET))

#define IR_IN HAL_GPIO_ReadPin(IR_IN_GPIO_Port,IR_IN_Pin)

uint8_t USART2_TX_BUF[200];

#define u2_printf(...)  HAL_UART_Transmit(&huart2,USART2_TX_BUF,sprintf((char *)USART2_TX_BUF,__VA_ARGS__),0xffff)

uint16_t time_1ms,time_500ms;          //计时变量1ms,500Ms

uint8_t uart2_value;                                                           //串口2相关变量

uint8_t uart2_buf[36],uart2_time,uart2_num;

uint8_t uart2_rx__flag;

uint16_t adc_value;                                                                   //adc

uint16_t light_value;                                                          //光照强度

uint16_t temp;                                                                                 //温度值

uint16_t light;                                                                          //灯的亮度

uint8_t Zigbee_Head[4] = {0xFC,0X00,0X01,0X02}; //ZigBee相关变量

uint8_t Zigbee_Data[14];

void SystemClock_Config(void);

/****

*******Zigbee发送包头,广播形式发送

*******输入:发送数据的长度

*****/

void Zigbee_Send_Head(uint8_t Data_Len)

{

       uint8_t i;

       Zigbee_Head[1] = Data_Len = 2;

       for(i=0;i<4;i )

              u2_printf("%c", Zigbee_Head[i]);

}

//监测函数

void Monitor_function(void)

{

       uint8_t i;

       if(time_500ms == 1)                                            //每500ms获取一次光照强度、温度

       {

              time_500ms = 0;

               HAL_ADC_Start(&hadc1);

              if(HAL_ADC_PollForConversion(&hadc1, 999) == HAL_OK)

                     adc_value = HAL_ADC_GetValue(&hadc1);

              HAL_ADC_Stop(&hadc1);

              light_value = (adc_value/4096.0)*100;               //获取光照值

              temp=Ds18b20_Read_Temp();

              Zigbee_Data[0]=0xa1;//通过ZigBee给主机发送温度、灯的亮度和光照强度

              Zigbee_Data[1]=temp/100%10;

              Zigbee_Data[2]=temp/10%10;

              Zigbee_Data[3]=temp/1%10;

              Zigbee_Data[4]=light/10;

              Zigbee_Data[5]=light_value/10%10;

              Zigbee_Data[6]=light_value/1%10;

              Zigbee_Send_Head(7);

              for(i=0; i<7; i )

                     u2_printf("%c", Zigbee_Data[i]);

       }    

}

int main(void)

{

  HAL_Init();

  SystemClock_Config();

  MX_GPIO_Init();

  MX_ADC1_Init();

  MX_TIM1_Init();

  MX_USART2_UART_Init();

  MX_TIM3_Init();

  HAL_TIM_Base_Start_IT(&htim1);

  HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_3);

  HAL_UART_Receive_IT(&huart2, &uart2_value, 1);

  Ds18b20_GPIO_Init();                             //温度检测模块引脚初始化

  while (1)

  {

              Monitor_function();                                //监测函数

              if(temp>=400 && temp<800)        //温度在40-80之间,蜂鸣器报警

              {

                     BEEP(1);

              }

              else

              {

                     BEEP(0);

              }

              if(IR_IN==0)                                                        //人体红外检测到人

              {

                     if(light_value<50)              //光照强度小于50,灯的亮度和光照强度成反比

                     {

                            light=1000-light_value*15;

                     }

                     else                                                                //光照强度大于等于50,灯不亮

                     {

                            light=0;

                     }

              }

__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_3,light); //灯的亮度

  }

}

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

{

       if(htim->Instance == htim1.Instance)           //定时器1触发中断

       {

              time_1ms ;

              if(time_1ms>= 500)

              {

                     time_1ms= 0;

                     time_500ms = 1;

              }

              if(uart2_num != 0)

              {

                     uart2_time ;

                     if(uart2_time >= 10)                //一帧数据接受完成

                     {

                            uart2_time = 0;

                            uart2_num = 0;

                            uart2_rx__flag = 1;

                     }

              }

       }

}

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)

{

       if(huart->Instance == huart2.Instance)//串口1触发中断

       {

              HAL_UART_Receive_IT(&huart2, &uart2_value, 1);

              uart2_buf[uart2_num ] = uart2_value;

              uart2_time = 0;

       }

}

void Error_Handler(void)

{

  __disable_irq();

  while (1)

  {

  }

}

#ifdef  USE_FULL_ASSERT

void assert_failed(uint8_t *file, uint32_t line)

{

}

#endif


标签: zigbee STM32 STM3 stm ST

实例下载地址

基于STM32和zigbee的智能路灯

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警