目录

一、项目功能

二、视频演示

三、原理图

四、部分代码

五、设计资料

资料下载地址:基于STM32的Lora无线抄表系统

一、项目功能

基于LoRa的无线通信的电力抄表系统,采集节点数据,通过LoRa无线通信进行数据传输,最后再网关节点上显示。

二、视频演示

基于STM32的Lora无线抄表系统

三、原理图

主机原理图

从机原理图

四、部分代码

/*** @brief       串口X初始化函数* @param       baudrate: 波特率, 根据自己需要设置波特率值* @note        注意: 必须设置正确的时钟源, 否则串口波特率就会设置异常.*              这里的USART的时钟源在sys_stm32_clock_init()函数中已经设置过了.* @retval      无*/
void usart_init(uint32_t baudrate)
{/*UART 初始化设置*/g_uart1_handle.Instance = USART_UX;                                       /* USART_UX */g_uart1_handle.Init.BaudRate = baudrate;                                  /* 波特率 */g_uart1_handle.Init.WordLength = UART_WORDLENGTH_8B;                      /* 字长为8位数据格式 */g_uart1_handle.Init.StopBits = UART_STOPBITS_1;                           /* 一个停止位 */g_uart1_handle.Init.Parity = UART_PARITY_NONE;                            /* 无奇偶校验位 */g_uart1_handle.Init.HwFlowCtl = UART_HWCONTROL_NONE;                      /* 无硬件流控 */g_uart1_handle.Init.Mode = UART_MODE_TX_RX;                               /* 收发模式 */HAL_UART_Init(&g_uart1_handle);                                           /* HAL_UART_Init()会使能UART1 *//* 该函数会开启接收中断:标志位UART_IT_RXNE,并且设置接收缓冲以及接收缓冲接收最大数据量 */HAL_UART_Receive_IT(&g_uart1_handle, (uint8_t *)g_rx_buffer, RXBUFFERSIZE); __HAL_UART_DISABLE_IT(&g_uart1_handle,UART_IT_TC);__HAL_UART_ENABLE_IT(&g_uart1_handle, UART_IT_RXNE);//使能接收中断__HAL_UART_ENABLE_IT(&g_uart1_handle,UART_IT_IDLE);//使能空闲中断HAL_NVIC_SetPriority(USART1_IRQn, 5, 0);HAL_NVIC_EnableIRQ(USART1_IRQn);__HAL_UART_CLEAR_IDLEFLAG(&g_uart1_handle);
}/*** @brief       UART底层初始化函数* @param       huart: UART句柄类型指针* @note        此函数会被HAL_UART_Init()调用*              完成时钟使能,引脚配置,中断配置* @retval      无*/
void HAL_UART_MspInit(UART_HandleTypeDef *huart)
{GPIO_InitTypeDef gpio_init_struct;if (huart->Instance == USART_UX)                            /* 如果是串口1,进行串口1 MSP初始化 */{USART_TX_GPIO_CLK_ENABLE();                             /* 使能串口TX脚时钟 */USART_RX_GPIO_CLK_ENABLE();                             /* 使能串口RX脚时钟 */USART_UX_CLK_ENABLE();                                  /* 使能串口时钟 */gpio_init_struct.Pin = USART_TX_GPIO_PIN;               /* 串口发送引脚号 */gpio_init_struct.Mode = GPIO_MODE_AF_PP;                /* 复用推挽输出 */gpio_init_struct.Pull = GPIO_PULLUP;                    /* 上拉 */gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;          /* IO速度设置为高速 */HAL_GPIO_Init(USART_TX_GPIO_PORT, &gpio_init_struct);gpio_init_struct.Pin = USART_RX_GPIO_PIN;               /* 串口RX脚 模式设置 */gpio_init_struct.Mode = GPIO_MODE_AF_INPUT;    HAL_GPIO_Init(USART_RX_GPIO_PORT, &gpio_init_struct);   /* 串口RX脚 必须设置成输入模式 */#if USART_EN_RXHAL_NVIC_EnableIRQ(USART_UX_IRQn);                      /* 使能USART1中断通道 */HAL_NVIC_SetPriority(USART_UX_IRQn, 3, 3);              /* 组2,最低优先级:抢占优先级3,子优先级3 */
#endif}else if (huart->Instance == ATK_MW1278D_UART_INTERFACE)                 /* 如果是ATK-MW1278D UART */{ATK_MW1278D_UART_TX_GPIO_CLK_ENABLE();                              /* 使能UART TX引脚时钟 */ATK_MW1278D_UART_RX_GPIO_CLK_ENABLE();                              /* 使能UART RX引脚时钟 */ATK_MW1278D_UART_CLK_ENABLE();                                      /* 使能UART时钟 */gpio_init_struct.Pin    = ATK_MW1278D_UART_TX_GPIO_PIN;             /* UART TX引脚 */gpio_init_struct.Mode   = GPIO_MODE_AF_PP;                          /* 复用推挽输出 */gpio_init_struct.Pull   = GPIO_NOPULL;                              /* 无上下拉 */gpio_init_struct.Speed  = GPIO_SPEED_FREQ_HIGH;                     /* 高速 */HAL_GPIO_Init(ATK_MW1278D_UART_TX_GPIO_PORT, &gpio_init_struct);    /* 初始化UART TX引脚 */gpio_init_struct.Pin    = ATK_MW1278D_UART_RX_GPIO_PIN;             /* UART RX引脚 */gpio_init_struct.Mode   = GPIO_MODE_INPUT;                          /* 输入 */gpio_init_struct.Pull   = GPIO_NOPULL;                              /* 无上下拉 */gpio_init_struct.Speed  = GPIO_SPEED_FREQ_HIGH;                     /* 高速 */HAL_GPIO_Init(ATK_MW1278D_UART_RX_GPIO_PORT, &gpio_init_struct);    /* 初始化UART RX引脚 */HAL_NVIC_SetPriority(ATK_MW1278D_UART_IRQn, 0, 0);                  /* 抢占优先级0,子优先级0 */HAL_NVIC_EnableIRQ(ATK_MW1278D_UART_IRQn);                          /* 使能UART中断通道 */__HAL_UART_ENABLE_IT(huart, UART_IT_RXNE);                          /* 使能UART接收中断 */__HAL_UART_ENABLE_IT(huart, UART_IT_IDLE);                          /* 使能UART总线空闲中断 */}
}/*** @brief       串口数据接收回调函数数据处理在这里进行* @param       huart:串口句柄* @retval      无*/
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{if (huart->Instance == USART_UX)                    /* 如果是串口1 */{if ((g_usart_rx_sta & 0x8000) == 0)             /* 接收未完成 */{if (g_usart_rx_sta & 0x4000)                /* 接收到了0x0d(即回车键) */{if (g_rx_buffer[0] != 0x0a)             /* 接收到的不是0x0a(即不是换行键) */{g_usart_rx_sta = 0;                 /* 接收错误,重新开始 */}else                                    /* 接收到的是0x0a(即换行键) */{g_usart_rx_sta |= 0x8000;           /* 接收完成了 */}}else                                        /* 还没收到0X0d(即回车键) */{if (g_rx_buffer[0] == 0x0d)g_usart_rx_sta |= 0x4000;else{g_usart_rx_buf[g_usart_rx_sta & 0X3FFF] = g_rx_buffer[0];g_usart_rx_sta++;if (g_usart_rx_sta > (USART_REC_LEN - 1)){g_usart_rx_sta = 0;             /* 接收数据错误,重新开始接收 */}}}}}
}/*** @brief       串口X中断服务函数注意,读取USARTx->SR能避免莫名其妙的错误* @param       无* @retval      无*/
void USART_UX_IRQHandler(void)
{if((__HAL_UART_GET_FLAG(&g_uart1_handle,UART_FLAG_IDLE) != RESET)){ volatile uint32_t temp=0;  __HAL_UART_CLEAR_IDLEFLAG(&g_uart1_handle);temp     =   g_uart1_handle.Instance->SR;  temp   =   g_uart1_handle.Instance->DR;  temp   =   0; if(RS485_Uart1.Cnt >=4){RS485_Uart1.RcvFinish =   1;//HAL_NVIC_EnableIRQ (USART1_IRQn );}}if((__HAL_UART_GET_FLAG(&g_uart1_handle,UART_FLAG_RXNE) != RESET)){if(RS485_Uart1.Cnt >= 50)     RS485_Uart1.Cnt=0;RS485_Uart1.Buf[RS485_Uart1.Cnt]  =   g_uart1_handle.Instance->DR;RS485_Uart1.Cnt++;}

五、设计资料

本设计有详细使用和说明文档,上手容易!!

基于STM32的Lora无线抄表系统相关推荐

  1. 基于STM32的无线抄表系统

    目录 一.项目描述 二.原理图 三.实物 四.代码 六.论文 七.资料清单 资料下载地址:基于STM32无线抄表系统 一.项目描述 1.通过串口获取电表数据,并在OLED液晶上显示: 2. 通过ESP ...

  2. ZigBee无线抄表系统集中器设计

    0 引言 随着城市居民住宅建设日益发展,独立电能表数量迅速增多,抄表计量也日趋复杂.近年来用电形势越来越紧张,分时电价已势在必行.由于长距离室内外的布线存在着短路.断线隐患,错综复杂的线路使系统调试和 ...

  3. 无线抄表系统服务器,无线抄表系统(CN201610173907.7)-中国专利【掌桥科研】

    技术领域 本发明涉及无线信息传输领域,特别涉及一种智能抄表系统. 背景技术 传统的抄表系统一般由基表(如温度表.水表.气表等).采集器.集中器和服务器4大部分组成.其中,基表通过无线433或是470与 ...

  4. 无线抄表系统服务器,基于无线通信的远程抄表系统

    摘要: 信息化时代的到来,使得以IT技术为主要特征的智能化建筑成为现代城市的一大特色,其中电能的计量,自动抄收以及收费管理是智能建筑,楼宇自动化的重要组成部分.如何实现电能的准确计量,自动抄收是影响电 ...

  5. 无线抄表与服务器,基于Modbus协议的远程无线抄表系统的设计与实现

    摘要: 随着人民生活水平的日益提高,智能计量表在日常生活和工作中的使用越来越普及.但是传统人工抄表需要消耗大量的人力和物力,并且抄表人员需亲临现场或恶劣的环境,鉴于安全性和便捷性的考虑,远程智能抄表系 ...

  6. RS485远程无线抄表系统方案及工作原理Wireless Infrared Meter Reading controller

    RS-485远程抄表系统是有线远程抄表系统,这类抄表方式适合于低压集中抄表,一般电表都有RS-485接口,这类抄表方案硬件便宜,适用于小区.写字楼等电表比较集中的地方. 远程抄表分为综合应用层,数据管 ...

  7. 无线抄表系统服务器,无线集中抄表系统设计与实现

    摘要: 我国社会经济的发展,居民用电越来越普及,且用电量剧增,这需要更加合理化,精确化的电网管理.传统的小区采用人工上户抄表的方式,浪费大量人力物力,还容易引起漏抄,错抄,而且,由于用户较多,抄表员为 ...

  8. 基于flask的web集中抄表系统实现

    响应国网加快推进泛在电力物联网建设的要求 现设计基于flask的集中抄表系统 使用python语言开发 导入socketio flask sqlite3 Echarts库 史上最简单的web抄表系统, ...

  9. LoRa无线抄表物联网解决方案

    一.方案背景 在偏远地区的大型工厂中,电表水表数据的自动抄表有着重要的实用价值,准确.及时的数据传输直接影响到管理决策和经济效益. 传统的手工抄表费时费力,数据出现延迟和误差,没有可靠的保障,这导致了 ...

最新文章

  1. html表单颜色选择器,如何在Django管理中使用HTML5颜色选择器
  2. 【android-tips】如何在android应用中插入百度广告(附源码)
  3. hdu 5248(二分+贪心)
  4. JAVA中通过时间格式来生成唯一的文件名
  5. leetcode1338. 数组大小减半(贪心算法)
  6. .NET Web实时消息后台服务器推送技术-GoEasy
  7. 【课程作业】表达学习 人脸图像复原 实验记录
  8. Dijkstra算法求单源最短路径
  9. GIMP教程 1 图片剪裁
  10. Magicodes.IE已支持通过模板导出票据
  11. Java中IO流详细整合(含案例)
  12. android developer tiny share-20170603
  13. Geode中使用PDX序列化最佳实践
  14. 程序员找工作遇到的“了解、熟悉、精通”的三种技能要求实际上是这样的标准!
  15. 最后一个问题得到解决
  16. IDEA搜索关键字的快捷键
  17. LeetCode笔记:526. Beautiful Arrangement
  18. (四)Redis——搭建哨兵机制
  19. 帧数达不到144用144hz_为了“吃鸡”大出血 144Hz究竟是否必要
  20. 人群环境中基于深度强化学习的移动机器人避障算法

热门文章

  1. 计算机网络——共享式以太网
  2. 创新工场2014笔试算法题汇总
  3. 研报精选230512
  4. server 和 location 中的 root,和location语法
  5. Daniel J. Bernstein其人其事
  6. 软件过程各类模型详细介绍(重要)
  7. 大象php id移除技术,大象ID移除(切勿用于违法犯罪)
  8. 基于ROS搭建简易软件框架实现ROV水下目标跟踪(六)--电机模型文件
  9. Android media sistem,‎App Store 上的“Николай Стариков. Библиотека”
  10. python降维方法_机器学习数据降维方法总结(附python代码)