Arduino开发实例-Lora 数据发送与接收

Lora 数据发送与接收

预计到2025年,我们将有250亿台设备连接到互联网。 相当于今天的地球人口多三倍。 随着物联网和工业4.0的概念,互联车辆和智能城市的迅速普及,这种情况最有可能发生。 我们已经有少数无线协议,如BLE、Wi-Fi、蜂窝等,但是这些技术对于IoT传感器节点而言并不理想,因为它们需要在不消耗大量电能的情况下将信息长距离传输。 这导致了LoRa技术的兴起,该技术可以以低功耗执行超远距离传输。

1、什么是Lora

LoRa 的名字是远距离无线电(Long Range Radio), 它是由Semtech公司引入的一种无线射频技术。LoRa技术可用于将双向信息传输到长距离而不会消耗很多功率。 利用这个特性,传感器只需使用小电池就可以传输其数据。

通常,Lora可以达到15-20km的距离,并且可以使用电池工作数年。 请记住,LoRa,LoRaWAN和LPWAN是三种不同的术语,不应相互混淆。

LoRa 主要在全球免费频段运行(即非授权频段),包括 433、868、915 MHz 等。LoRa 网络构架由终端节点、网关、网络服务器和应用服务器四部分组成,应用数据可双向传输。

LoRa 是创建长距离通讯连接的物理层或无线调制, 相较于传统的 FSK 技术以及稳定性和安全性不足的短距离射频技术,LoRa 基于 CSS 调制技术(Chirp Spread Spectrum)在保持低功耗的同时极大地增加了通讯范围,且 CSS 技术数十年已经广受军事和空间通讯所采用,具有传输距离远、抗干扰性强等特点。

此外,LoRa 技术不需要建设基站,一个网关便可控制较多设备,并且布网方式较为灵活,可大幅度降低建设成本。

Lora技术基础与特点

  • 1、LoRa是一种低功耗广域网通信(LPWAN)技术中的一种,是Semtech公司采用和推广的一种基于扩频技术的超远距离无线传输技术。比sigfox的FSK技术更加灵敏,传送距离更远,更节能。
  • 2、LoRa是物理层(PHY)协议,能被应用在几乎所有的网络技术中。
  • 3、LoRa主要在全球免费频段运行,频率范围从137MHz-1050MHz,常见的主要是433MHz、868MHz、915MHz等
  • 4、LoRa(远程)扩频技术,可解调低于-20dB的噪声。确保了高灵敏度、可靠的网络连接,同时提高了网络效率并消除了干扰。
  • 5、LoRa无需再借助中继器,极大地简化了系统设计并降低了总部署成本。
  • 6、相较于3G和4G蜂窝网络,LoRa技术对嵌入式应用而言可扩展性更强,性价比更高。

  
在这里插入图片描述

2、硬件准备

  • Arduino UNO R3 开发板两块
  • Lobra SX1278 收发模块两个

在这里插入图片描述

  • 杜邦线若干
  • 数据线两条
  • 笔记本电脑(台式)一台

Arduino UNO R3开发板通过数据线连接到电脑。Lobra SX1278的与Arduino的SPI接口连接如下:
在这里插入图片描述

LoRa SX1278 模块 Arduino UNO 开发板引脚
3.3V 3.3V
Gnd Gnd
En/Nss D10
G0/DIO0 D2
SCK D13
MISO D12
MOSI D11
RST D9

在这里插入图片描述

3、软件准备

在这里插入图片描述
在这里插入图片描述

4、代码实现

数据发送端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <SPI.h>
#include <LoRa.h>

int counter = 0;

void setup() {
Serial.begin(9600);
while (!Serial);

Serial.println("LoRa Sender");
// 使用433M频率
if (!LoRa.begin(433E6)) {
Serial.println("Starting LoRa failed!");
while (1);
}
}

void loop() {
Serial.print("Sending packet: ");
Serial.println(counter);

// 发送数据包
LoRa.beginPacket();
LoRa.print("hello ");
LoRa.print(counter);
LoRa.endPacket();
counter++;

delay(5000);
}

数据接收端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <SPI.h>
#include <LoRa.h>

void setup() {
Serial.begin(9600);
while (!Serial);

Serial.println("LoRa Receiver");

if (!LoRa.begin(433E6)) {
Serial.println("Starting LoRa failed!");
while (1);
}
}

void loop() {
// 解析接收的数据包
int packetSize = LoRa.parsePacket();
if (packetSize) {
// received a packet
Serial.print("Received packet '");

// read packet
while (LoRa.available()) {
Serial.print((char)LoRa.read());
}

// print RSSI of packet
Serial.print("' with RSSI ");
Serial.println(LoRa.packetRssi());
}
}

将程序分别编译、烧写到开发板上,运行结果如下:

在这里插入图片描述

文章来源: https://iotsmart.blog.csdn.net/article/details/114445526