本LoRa模组系列博客学习由 安信可科技 - 官方博客 技术分享,如有疑问请留言或联系邮箱。

  • 【安信可LoRa模组专题①】安信可LoRa快速入门指南
  • 【安信可LoRa模组专题②】快速搭建远程控制灯LoRa智能灯控【51单片机篇】

文章目录

  • 前言
  • 设备组成
  • 一.远程灯控(开关)
    • 1.1原理分析
    • 1.2基本通信
    • 1.3应用层逻辑设计
  • 二.远程灯控(指定设备)
    • 2.1原理分析
    • 2.2主机代码
    • 2.3从机代码
  • 总结
  • 联系我们

前言

今天我们来深度解析一下Lora在照明设备中的应用原理。

这里Lora的优势以及劣势我就不多加赘述了,大家可以上网搜索一下,做过或者接触过物联网设备开发的朋友应该比较清楚,无线模块在这个行业中所占的比重,无线控制其实就是A端发送一个信号,B端收到以后做出相应动作的一个过程

设备组成

今天我们用的设备比较简单,就是入门级的STC主控MCU加上含一片SX1278芯片的Ra-01模块,需要两个,外加两根弹簧天线。

安信可淘宝店是默认一个Ra-01模组配送一根433MHz弹簧天线的,很方便。 推荐bug一个!

另外生成的HEX文件,用串口烧录。

如果不明白的朋友可以看我们的上一篇文章,其中有介绍这个主控的详细接线以及烧录测试流程。

【安信可LoRa模组专题①】安信可LoRa快速入门指南

一.远程灯控(开关)

1.1原理分析

我们目前手上有两个同样的设备,烧录同样的程序,程序运行在MCU中,通过外接的SPI驱动Ra-01射频模块发射和接收数据,接收端接收到这个数据做出响应,实现一个远程控制灯开和关的方案。

1.2基本通信

首先需要两个模组间能够进行通信,代码中需要编辑发射机以及接收机;
     这里我们定义出接收机和发送机的逻辑代码,完成发送和接收,这部分我直接放在了主函数中了,可以把他放在单独文件中这样就便于观察条理了。

else {P32 = 1;RF_EX0_STATUS = SX1276ReadBuffer( REG_LR_IRQFLAGS);if (RF_EX0_STATUS > 0) {if ((RF_EX0_STATUS & 0x40) == 0x40) {CRC_Value = SX1276ReadBuffer( REG_LR_MODEMCONFIG2);if (CRC_Value & 0x04 == 0x04) {SX1276WriteBuffer(REG_LR_FIFOADDRPTR, 0x00);SX1278_RLEN = SX1276ReadBuffer(REG_LR_NBRXBYTES);lpTypefunc.lpSwitchEnStatus(enOpen);lpTypefunc.lpByteWritefunc(0x00);for (RF_REC_RLEN_i = 0; RF_REC_RLEN_i < SX1278_RLEN;RF_REC_RLEN_i++) {recv[RF_REC_RLEN_i] = lpTypefunc.lpByteReadfunc();}lpTypefunc.lpSwitchEnStatus(enClose);recv[RF_REC_RLEN_i] = '\0';RF_RECEIVE();                        uartSendString(recv);P17 = 0;}} else if ((RF_EX0_STATUS & 0x04) == 0x04) {if ((RF_EX0_STATUS & 0x01) == 0x01) { //表示CAD 检测到扩频信号 模块进入了接收状态来接收数据SX1276LoRaSetOpMode(Stdby_mode);SX1276WriteBuffer(REG_LR_IRQFLAGSMASK, IRQN_RXD_Value); //打开发送中断SX1276WriteBuffer(REG_LR_HOPPERIOD, PACKET_MIAX_Value);SX1276WriteBuffer( REG_LR_DIOMAPPING1, 0X02);SX1276WriteBuffer( REG_LR_DIOMAPPING2, 0x00);SX1276LoRaSetOpMode(Receiver_mode);} else {                          SX1276LoRaSetOpMode(Stdby_mode);SX1276WriteBuffer(REG_LR_IRQFLAGSMASK,IRQN_SEELP_Value);   //打开发送中断SX1276WriteBuffer( REG_LR_DIOMAPPING1, 0X00);SX1276WriteBuffer( REG_LR_DIOMAPPING2, 0X00);SX1276LoRaSetOpMode(Sleep_mode);//PA_SEELP_OUT();}}else {SX1276LoRaSetOpMode(Stdby_mode);SX1276WriteBuffer(REG_LR_IRQFLAGSMASK, IRQN_RXD_Value);  //打开发送中断SX1276WriteBuffer(REG_LR_HOPPERIOD, PACKET_MIAX_Value);SX1276WriteBuffer( REG_LR_DIOMAPPING1, 0x02);SX1276WriteBuffer( REG_LR_DIOMAPPING2, 0x00);SX1276LoRaSetOpMode(Receiver_mode);}RF_REC_RLEN_i = 0;SX1276WriteBuffer( REG_LR_IRQFLAGS, 0xff);Delay1s(300);} else {P17 = 1;}}

编辑通信内容代码
     我们定义两组通信,分别为内容分别为1和2,这个对应后面逻辑中的两个按键。

SX1276WriteBuffer( REG_LR_IRQFLAGS, 0xff);FUN_RF_SENDPACKET("1",1);Delay1s(1000);SX1276WriteBuffer( REG_LR_IRQFLAGS, 0xff);
SX1276WriteBuffer( REG_LR_IRQFLAGS, 0xff);FUN_RF_SENDPACKET("2",1);Delay1s(1000);SX1276WriteBuffer( REG_LR_IRQFLAGS, 0xff);

1.3应用层逻辑设计

如上所示,我们的通信步骤就完成了,接下来就是触发逻辑以及响应逻辑的应用层代码了,这一部分
     我就需要结合我们的应用设备功能来设计,如设备组成图所示,我们的硬件资源一共有10个LED和两个按键,我们就以目前资源来来做一个按键控制灯的逻辑。
按照原理图定义IO口

#ifndef __GPIO_H
#define __GPIO_H#define KEY                                  P30
#define KEY2                                 P31#define led                                  P16
#define led2                                 P35#define UART_TX_PIN                          P31

按键控制逻辑

     if (P30 == 0) {P17 = 1;P32 = 0;SX1276WriteBuffer( REG_LR_IRQFLAGS, 0xff);FUN_RF_SENDPACKET("1",1);Delay1s(1000);SX1276WriteBuffer( REG_LR_IRQFLAGS, 0xff);} else if (P31 == 0) {P17 = 1;P32 = 0;SX1276WriteBuffer( REG_LR_IRQFLAGS, 0xff);FUN_RF_SENDPACKET("2",1);Delay1s(1000);SX1276WriteBuffer( REG_LR_IRQFLAGS, 0xff);}
                     if(recv[0] == '1') {P35 = ~P35;}else if(recv[0] == '2'){P16=0;P35=1;}

至此我们就完成了远程控制灯开关的逻辑编写了,很简单,我们利用提供的源码稍作修改就能做出这个效果。

二.远程灯控(指定设备)

2.1原理分析

上述的设备应用在实际场景中已经能做到星型组网,但是这个组网的通信方式就不是很符合灯控设备的控制逻辑。
因为在我们上述所写的代码中,这个设备是全频段通信的,也就是说同一个固件,我烧录在不同设备中,只要我按下按键,所有的设备都会响应。
所以我们接下来做的操作就是在这个代码的基础上做出修改让我们的主控可以随意控制多个设备。
一对多单个控制的话方式很多,我先来做一种最简单的方法,按键A控制发射在470频段,按键B控制发送在480频段。

2.2主机代码

下面是我们计算好的频段

unsigned char Frequency[3] = { 0x6c, 0x80, 0x00 };//470Mhz
//unsigned char Frequency[3] = { 0x6c, 0x80, 0x00 };//430Mhz 频率设置
//unsigned char Frequency[3] = { 0x6c, 0x80, 0x12 };//475.5Mhz 频率设置
//unsigned char Frequency[3] = { 0x78, 0x10, 0x00 };//480.25Mhz 频率设置
//unsigned char Frequency[3] = { 0x78, 0x20, 0x00 };//480.5Mhz 频率设置

在按键B处定义出按键数组,表示按下按键B模块跳到480频段发送数据2

     } else if (P31 == 0) {Frequency[0] = 0x78;Frequency[1] = 0x20;Frequency[2] = 0x00;SX1276LoRaSetRrequency();SX1276WriteBuffer( REG_LR_IRQFLAGS, 0xff);FUN_RF_SENDPACKET("2",1);Delay1s(1000);SX1276WriteBuffer( REG_LR_IRQFLAGS, 0xff);}
#define IRQN_TXD_Value                               0xF7
#define IRQN_RXD_Value                               0x9F
#define IRQN_CAD_Value                               0xFA
#define IRQN_SEELP_Value                             0xFF
#define PACKET_MIAX_Value                            0xff
extern unsigned char Frequency[3];

2.3从机代码

在这里,我们要单独生成480和470频段的接收机代码固件,分别烧录到我们的从机模块中,我们只要控制以下代码段就可以完成对不同频段的控制效果。(这里的从机代码,我们可以直接使用第一节中的灯控代码即可)

unsigned char Frequency[3] = { 0x6c, 0x80, 0x00 };//470Mhz
//unsigned char Frequency[3] = { 0x6c, 0x80, 0x00 };//430Mhz 频率设置
//unsigned char Frequency[3] = { 0x6c, 0x80, 0x12 };//475.5Mhz 频率设置
//unsigned char Frequency[3] = { 0x78, 0x10, 0x00 };//480.25Mhz 频率设置
//unsigned char Frequency[3] = { 0x78, 0x20, 0x00 };//480.5Mhz 频率设置

总结

第一步:我们首先要确保能够通信,然后在通信的基础上我们再来对收到的值进行判断,并且做出相对的输出结果(控制灯的方案)到这里我们完成了最主要的内容——通信部分。
第二步:然后我们考虑需要实现的一个主机控制不同的设备,这样我们可以把从机工作在不同频段,主机切换频段来完成通信。

本篇文章主要在于介绍Lora的多点控制的原理,非常简单,只是其中的一种方案,后面有机会我再介绍LoRa其他的控制收发的原理,其他方案更贴近于实际的设备控制如果需要源码的小伙伴可以点击下方邮箱私信。

联系我们

公司官网:https://www.ai-thinker.com
开发资料:https://docs.ai-thinker.com/
官方论坛:http://bbs.ai-thinker.com
商务合作:sales@aithinker.com
技术支持:support@aithinker.com
联系地址:广东省深圳市宝安区西乡街道华丰智慧创新港C座410室
联系电话:0755-29162996

【安信可LoRa模组专题②】快速搭建远程控制灯LoRa智能灯控【51单片机篇】相关推荐

  1. 【安信可LoRa模组专题①】安信可LoRa快速入门指南

    本LoRa模组系列博客学习由 安信可科技 - 官方博客 技术分享,如有疑问请留言或联系邮箱. [安信可LoRa模组专题①]安信可LoRa快速入门指南 [安信可LoRa模组专题②]快速搭建远程控制灯Lo ...

  2. 微信小程序控制硬件第17篇 : 腾讯连连小程序通过LLSync蓝牙协议控制安信可PB-02模组,无需网络实现蓝牙本地通讯。(附带源码)

    文章目录 前言 一.注册腾讯物联开发平台设备 新建项目 新建产品 创建数据模板 选择设备开发方式 交互开发配置 新建设备 二.设备端操作 硬件简介与连接 准备软件环境 工程目录 烧录步骤 三.腾讯连连 ...

  3. 安信可ESP-C3-12F模组应用之物联网时钟

    目录 1. 项目功能简介 2. 硬件准备 3. 源码分析 3.1 NTP时间获取分析 3.2 MAX7219 八位数码管驱动分析 3.3 DS1302 RTC时钟模块驱动分析 3.4 工程源码获取 4 ...

  4. 安信可 ESP32-S3 模组上驱动摄像头 OV2640,实现远程拍照并 HTTP 传输到阿里云对象存储OSS,并显示在微信小程序上。(深度好文,全部开源)

    文章目录 一. ESP32-S3 特性 CPU 和存储 外设接口和传感器 功耗特性 二. 准备工作 硬件 软件 接线 三.通讯协议和原理 3.1 模组拍照上传服务器 3.2 小程序下发指令给模组拍照给 ...

  5. 【BW16 应用篇】安信可BW16模组/开发板AT指令实现MQTT通讯

    文章目录 前言 1 固件烧录 2 EMQ服务器搭建 2.1 软件获取 2.2 启动EMQ服务 3 设备端联网配置 3.1 AT指令配置 3.2 信息交互 联系我们 前言 本文主要介绍安信可BW16模组 ...

  6. 【安信可NB-IoT模组EC系列应用笔记⑥】AT指令HTTP请求一篇就够

    AT指令HTTP请求一篇就够 前言 一.测试准备 二.配置入网 1. 指令列表 三.HTTP GET请求 1. 发送简单的GET请求 (1)指令列表: (2)请求结果 2.自定义头部的GET请求 (1 ...

  7. 【TB-02模组专题⑤】微信小程序通讯TB02 模块控制 STM32 单片机LED灯

    本<安信可ble mesh蓝牙模组TB-02模组专题>系列博客学习由官方博客 CSDN安信可博客 潜心所力所写.如有不对之处,请留言,我们及时更改. 1.BLE MESH开发环境linux ...

  8. 安信可TG-12F模组学习笔记 ① 在AliOS-Thing架构上快速开发实现一个天猫精灵插座。

    文章目录 一.前言 二.环境搭建 获取SDK 三.编译代码和烧录固件 四.烧录阿里云五元组 第一步:获取到模块的mac地址 第二步:到阿里云新建产品: 第三步:人即交互设置: 第四步:生成调试设备: ...

  9. 5G WiFi 安信可 BW16 模组 RTL8720DN 入门笔记 1 :搭建Arduino IDE 开发环境,点亮一盏LED灯。

    文章目录 前言 一.认识RTL8720DN 二.认识 BW16 三.环境搭建 Step 1: 安装 Arduino IDE Step 2: 下载编译依赖环境 Step 3: 复制编译依赖环境工具到Ar ...

最新文章

  1. Android的Gson的使用方法,实现Json结构间相互转换
  2. java exec mvn_maven---常用插件之EXEC
  3. 什么是千兆光纤收发器?其产品标准具体有哪些?
  4. 转载 300年前的黑色“巫女”
  5. WEB可以调节的框架页
  6. [css] 你对响应式设计的理解是什么?知道它基本的原理是吗?要想兼容低版本的IE怎么做呢?
  7. AcWing之重建二叉树
  8. Greenplum小把戏 - 你所不知道的时间戳长度玩法
  9. C语言为四维数组申请动态内存空间的方法(二)
  10. Vue.js 源码分析(十七) 指令篇 v-if、v-else-if和v-else 指令详解
  11. ios知识整理 (未完成)
  12. php 数组去impload,你真的了解 load 方法么?
  13. 【运维心得】如何一步切换企业邮箱主域名
  14. geek_How-To Geek正在寻找远程全职技术作家
  15. 应用程序图标变成白色
  16. maximo安全组没有添加用户的权限
  17. gif太大了怎么压缩?教你一招轻松压缩gif大小
  18. php中die是什么意思,PHP中die()和exit()有什么区别?
  19. NFT会接力Defi,成为下一个热点么?
  20. 用了两年的电脑,它哭着对我说:“我不行了”QAQ

热门文章

  1. Qt 添加菜单栏和工具栏
  2. 2020阿里社招面试心得(成功拿到offer)
  3. checkbox全选 反选的实现方式
  4. Android 热敏打印机开发(蓝牙)
  5. 新版犀牛书该不该入手?来一次开箱评测!
  6. 洛古P2196 题解 兼本人第一篇题解
  7. excel减法函数_Excel基础知识-四则运算(函数篇)
  8. Ubantu安装KDE桌面环境_下载KDE主题
  9. 分析与处理时间序列数据的常用方法总结
  10. 6. 数值微积分与方程求解