简介
LoRa Radio Module-868MHZ是一款体积小、微功率、低功耗、高性能、远距离的无线数据传输模块。具备内部自动扩频计算和前导 CRC 纠错处理能力。使用时,不改变用户的任何数据和协议,采用半双工通讯,实现串口无线数据收发传输的功能。 模块采用的是基于扩频跳频技术,在稳定性、抗干扰能力以及接收灵敏度上都超越其他类型的模块。模块使用的是低功耗高速处理器,在数据处理能力、运算速度方面均比以往有所提高。模块支持普通透明传输方式,不改变用户数据和协议,便可以使用,所发数据即所收数据;也可以建立一对多的星型网络通讯结构,中心模块通过相应节点模块的地址呼叫节点模块,节点模块通过透传方式作出应答,节点之间不会相互干扰,影响数据传输,非常适合无线水表、气表、传感器测量、监测等低功耗数据传输的应用环境。模块间的通信距离3到5千米,通信范围广,若再加入中继模块提供中继路由,可有效扩大通讯范围,在距离上足可覆盖许多应用网络。用户还可以通过上位机软件或用 AT 命令根据实际需求灵活配置模块的网络ID、工作频率、串口速率、扩频因子、扩频带宽等参数,操作简单,使用方便。模块主要应用在传感网络、无线抄表、智能家居等领域。
注意事项: 在同一网络中,模块的无线信号参数都应设置为相同参数,避免因模块之间信号参数不一致导致不能通信。
技术规格
- 工作电压:2.1~3.6V(电池供电) 或者 4.5~5.5V
- 供电电压:2.1~3.6V(电池供电) 或者 4.5~5.5V
- 工作频段:868MHz
- 调制方式:LoRa 扩频
- 输出功率:≤20dBm
- 接收灵敏度:-148dBm
- 发射电流:≤120mA
- 接收电流:≤15.2mA
- 休眠电流:≤3.9uA
- 休眠时间:可选 2S ,4S,6S,8S,10S
- 呼吸时间:可选 2ms,4ms,8ms,16ms,32ms,64ms
- 唤醒时间:即时唤醒
- 通信接口:TTL串口通信
- 串口速率:1200~57600,9600bps(默认)
- 串口校验:8E1、8O1、8N1 (可选)
- 使用环境:-40°C - + 80°C,10% ~90% 相对湿度,无冷凝
- 产品尺寸:34.2*18.4 mm
引脚说明
| | |
| ------------------------------------------------------------------------- | |
|
: | |
标号 | 名称 | 功能描述 |
1 | GND | 电源地(与用户设备共地) |
2 | VCC | 2.1~3.6V(电池供电) 或者 4.5~5.5V |
3 | EN | 低电平工作,高电平休眠 |
4 | RXD | 数据输入,接用户的 TXD |
5 | TXD | 数据输出,接用户的 RXD |
6 | AUX | 通讯状态指示,可用于唤醒用户设备 |
7 | SET | 低电平进入快速通道,在中心-节点模式下有效 |
表名
EN、RXD、TXD、AUX、SET这几个脚都是 3.3V 电平,如果用户是 5V 的MCU,为了稳定,建议做电平转换,否则容易丢包或者误码率高。
使用教程
此教程实现功能是无线模块调试,步骤如下:
注:下图标号和以下标号相对应。
- ①通过电脑主机向主模块发送数据;
- ②通过主模块向从模块发送数据;
- ③从模块接收到数据后,并上传指示数据给连接从模块的电脑;
- ④当电脑接收到的数据后,从模块端电脑通过串口软件给从模块发送一组数据;
- ⑤从模块将接收到的数据传输给无线主模块;
- ⑥主模块接收到数据后,将数据显示在1602显示屏上。
- 主模块(Master):连接有Gravity LCD1602 RGB Backlight Module模块的系统
- 从模块(Slave):未连接有Gravity LCD1602 RGB Backlight Module模块的系统
准备
- 硬件
- 2 x Arduino UNO控制板
- 2 x LoRa Radio Module-868MHZ模块
- 2 x USB线
- 若干 杜邦线
- 1 x Gravity LCD1602 RGB Backlight Module模块
- 1 x FT232 USB转TTL 串口线
- 软件
- Arduino IDE (根据能够使用的Arduino版本来选择,不要盲目追求最新版本), 点击下载Arduino IDE
- JXYL-参数配置软件,JXYL-参数配置软件
配置
- 使用USB转TTL 串口线,与LoRa Radio Module-868MHZ模块连接好,且将EN引脚拉低。
- 准备好后,打开JXYL-参数配置软件,波特率选择9600bps打开串口,点击Read All,读取模块信息。
- 可对模块如上图进行参数选择,设置该模块RF_Mode为Central模式即中心模式,为主模块(Master),地址为0001。(示例程序配置)
- 设置好上一个模块后,重新设置一个未设置的模块,将串口线以及EN引脚连接好
- 改变模块RF_Mode为Node模式即节点模式,为从模块(Slave),地址为0010,其它参数与之前设置的模块一致,否则无法通信。(示例程序配置)
说明
- A、B、C、D:软件串口,波特率9600
- E:载波频率,850 ~ 930MHz内任意设置(需要与天线相匹配);立即生效。相互通信的模块必须使用相同的频率。通过使用不同的频率可以建立多条通讯线路,或者多个网络分组,从而允许同一个地方多套设备同时使用,但相邻的频率最好相隔 1MHz 以上。遇到干扰时也可以修改频率避开干扰。※注意此参数要避开 32M 的倍数频率,否则模块的接收灵敏度就会很低,影响距离。
- F:工作模式,可选 normal(正常模式)、Central(中心模式)和 Node(节点模式);掉电后保存。
- G:扩频因子,可选 128/256/512/1024/2048(默认)/4096;只在标准模式下有效。相互通信的模块必须使用相同的扩频因子。如果其他参数一致,扩频因子越大,模块的接收灵敏度越高,模块的传输距离就越远,但传输时间就越长。
- H:扩频带宽,可选 62.5(不推荐)/125(默认)/250/500;只在标准模式下有效。相互通信的模块必须使用相同的扩频带宽。设置调制信号是在多宽的频率下调制。调制带宽越小接收灵敏度也越高,传输距离越远,建议最低扩频带宽 125k。
- I:模块ID,可配置为 1~65535;立即生效。只在节点模式下起作用,其他模式下没有启用。
- J:网络ID,可配置为 1~255;立即生效。可以通过设置不同的网络 ID 号分组通讯。
- K:发射功率,可选 1~7 级;默认 7 级,立即生效。同等条件下功率越大距离越远,但功耗越高,如果需要降低功耗或者减少对外界的干扰,可降低发射功率。
- L:休眠时间,可选 2S,4S,6S,8S,10S;在中心、节点模式下有效。主要是指节点模块的休眠时间。同一个网络的中心模块和节点模块要设置一样的休眠时间才能稳定通讯。休眠时间越长,模块越省电,但是中心模块发送数据到节点模块所需要的时间也就越长。
- M:呼吸时间,可选 2/4/8/16/32/64ms。中心、节点模式下有效。指节点模块被唤醒后持续的时间。并且同一个网络的中心模块和节点模块要设置相 同的呼吸时间才可以通信。呼吸时间越短,节点模块就会越省电,但是中心到节点的之间的通信距离就越短。
- N:串口速率,可选 1200/2400/4800/9600(默认)/19200/38400/57600bps;断电重启后生效。与模块连接的设备必须采用相同的串口速率;串口速率越高,延迟越小,但单位时间进入模块的数据量越大,可能导致模块无法及时处理,造成数据溢出。
- O:串口校验,可选 8N1(默认)/8E1/8O1;断电重启后生效。与模块连接的设备必须采用同样的串口校验,否则数据会乱码;模块数据位是 8 位的,有些设备是 7 位或者 9 位,注意区分。模块在设置模式下面的串口参数是 9600bps,8N1
- P:写参数,一次性写入软件界面当前所显示的模块参数。
- Q:读参数,一次性读取模块当前参数。
- R:状态栏,提示模块串口是否成功打开或者参数是否成功读取或写入,Time Out 表示失败、Success 表示成功。
- 上述设置完成后,根据电路连接图,连接电路,且分别下载样例代码,有LCD1602显示屏的下载主模块(Master)代码程序;另一个下载从模块(Slave)代码程序。
- 主模块发送数据00 0A 11 22 33,其中00 0A是从节点的地址,在之后的数据为用户需要发送的数据,11 22是自定义命令,33在此处无用,(此处16进制发送)
- 从模块收到数据后,判断前两位是否11 22,若是,向pc串口发送'!',此时可从串口发送任意数据,上述示例发送“ DFRobot www.dfrobot.com ”
- 主模块接收到从模块的数据后,分别显示在LCD1602显示屏和串口上
- 注:在标准—节点这种模式下,主模块在选择从模块发送数据时是需要带地址的,发送地址时需要使用十六进制,否则从模块无法接收
接线图
样例代码
[https://pan.baidu.com/s/1o7QqV2q/请先下载Gravity LCD1602 RGB Backlight Module库]
|
主模块(Master)代码程序
/*!
* @file Master.ino
* @brief LoRa Radio Module-868MHZ.
* @n [Get the module here]()
* @n This example is a Master of the application.
* @n [Connection and Diagram](https://wiki.dfrobot.com.cn/index.php?title=(SKU:TEL0115)LoRa_Radio_Module-868MHZ)
*
* @copyright [DFRobot](https://www.dfrobot.com), 2016
* @copyright GNU Lesser General Public License
*
* @author [lijun](ju.li@dfrobot.com)
* @version V1.0
* @date 2017-01-20
*/
#include <Wire.h>
#include "DFRobot_RGBLCD.h"
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
DFRobot_RGBLCD lcd(0x7c >> 1, 0xc0 >> 1, 16, 2); //parameter1:LCD address; parameter2:RGB address; 16 characters and 2 lines of show
const char EN = 4; //
const char AUX = 5; //
unsigned int buffer_RTT[64] = {}; //
void setup()
{
pinMode(EN, OUTPUT);
//pinMode(AUX, INPUT);
Serial.begin(9600);
mySerial.begin(9600);
lcd.init();
digitalWrite(EN, LOW); //低电平无线模块工作,高电平模块休�
}
void loop()
{
while (Serial.available() < 1); //等待PC串口数据
while (Serial.available() > 0)
{
char data;
data = Serial.read();
delay(2);
mySerial.write(data); //转发串口数据给无线模块
}
Serial.flush();
mySerial.flush();
while (mySerial.available() < 1); //等待无线模块数据
while (mySerial.available() > 0)
{
char data;
for (int i = 0; i < 64; i++)
{
data = mySerial.read();
buffer_RTT[i] = (char)data; //接收无线模块数据
Serial.write(data); //转发无线模块数据给串口
delay(2);
}
mySerial.flush();
}
lcd.setCursor(0, 0 );
for (int i = 0; i < 16; i++) lcd.write(buffer_RTT[i]); //显示前32个接收的数据
lcd.setCursor(0, 1 );
for (int i = 16; i < 32; i++) lcd.write(buffer_RTT[i]); //
delay(1000);
}
|}
|
从模块(Slave)代码程序
/*!
* @file Slave.ino
* @brief LoRa Radio Module-868MHZ.
* @n [Get the module here]()
* @n This example is a Slave of the application.
* @n [Connection and Diagram](https://wiki.dfrobot.com.cn/index.php?title=(SKU:TEL0115)LoRa_Radio_Module-868MHZ)
*
* @copyright [DFRobot](https://www.dfrobot.com), 2016
* @copyright GNU Lesser General Public License
*
* @author [lijun](ju.li@dfrobot.com)
* @version V1.0
* @date 2017-01-20
*/
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
const char EN = 4; //
const char AUX = 5; //
const char LED = 13; //
unsigned int buffer_receive[40] = {};
unsigned int buffer_RTT[40] = {};
int flag = HIGH;
void setup()
{
pinMode(EN, OUTPUT); //
pinMode(AUX, INPUT); //
pinMode(LED, OUTPUT);
Serial.begin(9600);
mySerial.begin(9600);
}
void loop()
{
digitalWrite(EN, HIGH); //低电平无线模块工作,高电平模块休�
while (digitalRead(AUX) != 0); //检测是否接收到信息,并输出低电平给单片机,用于唤醒无线模块
digitalWrite(EN, LOW); //
while (mySerial.available() < 1); //等待接收无线数据
while (mySerial.available() > 0)
{
char data;
for (int i = 0; i < 40; i++)
{
data = mySerial.read();
buffer_RTT[i] = (char)data; //接收无线数据
delay(2);
}
mySerial.flush();
}
while (buffer_RTT[0] == 0x11 && buffer_RTT[1] == 0x22) //判断数据命令是否符合
{
digitalWrite(EN, LOW); //
digitalWrite(LED, flag);
flag = !flag;
Serial.print('!'); //发送!给PC串口
delay(2);
while (Serial.available() < 1); //等待PC串口数据
while (Serial.available() > 0)
{
char data;
data = Serial.read();
delay(2);
mySerial.write(data); //转发串口数据给无线模块
}
Serial.flush();
mySerial.flush();
buffer_RTT[40] = {0};
break;
}
}
|}
结果
在LCD1602显示屏和串口上显示 DFRobot和www.dfrobot.com
常见问题
还没有客户对此产品有任何问题,欢迎通过qq或者论坛联系我们!
更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。 |
更多
[Link DFRobot商城购买链接]