關(guān)于本教程:
ESP32 基礎(chǔ)篇?????????????????????????????? ?
1.ESP32簡介????????????????????????????????????????????????????????????????
2.ESP32 Arduino 集成開發(fā)環(huán)境
3.VS 代碼和 PlatformIO
4.ESP32 引腳
5.ESP32 輸入輸出
6.ESP32 脈寬調(diào)制
7.ESP32 模擬輸入
8.ESP32 中斷定時(shí)器
9.ESP32 深度睡眠
ESP32 協(xié)議篇
1.ESP32 網(wǎng)絡(luò)服務(wù)器
2.ESP32 LoRa ?
3.ESP32 BLE
4.ESP32 BLE 客戶端-服務(wù)器
5.ESP32 藍(lán)牙
6.ESP32 MQTT
7.ESP32 ESP-NOW
8.ESP32 Wi-Fi
9.ESP32 WebSocket
10.ESP32 ESP-MESH
11.ESP32 郵箱
12.ESP32 短信
13.ESP32 HTTP 獲取 POST
14.HTTP GET Web APIs
15.HTTP POST Web APIs
?ESP32 服務(wù)器篇
持續(xù)更新,關(guān)注博主不迷路?。?!
?ESP32 傳感器模塊篇
持續(xù)更新,關(guān)注博主不迷路?。?!
ESP32 終極實(shí)戰(zhàn)篇
百余項(xiàng)ESP32實(shí)戰(zhàn)項(xiàng)目,敬請關(guān)注!??!
使用 Arduino IDE 和 LoRa 的 ESP32——入門
在本教程中,我們將探討 LoRa 的基本原理,以及如何使用 Arduino IDE 將其與 ESP32 一起用于物聯(lián)網(wǎng)項(xiàng)目。為了幫助您入門,我們還將向您展示如何使用 RFM95 收發(fā)器模塊創(chuàng)建簡單的 LoRa 發(fā)送器和 LoRa 接收器。
什么是LoRa?
LoRa 是一種無線數(shù)據(jù)通信技術(shù),它使用可由 Semtech LoRa 收發(fā)器芯片生成的無線電調(diào)制技術(shù)。
這種調(diào)制技術(shù)允許少量數(shù)據(jù)的遠(yuǎn)程通信(這意味著低帶寬)、高抗干擾性,同時(shí)最大限度地降低功耗。因此,它允許以低功率要求進(jìn)行長距離通信。
LoRa 頻率
LoRa 使用全球可用的免許可頻率。這些是使用最廣泛的頻率:
- 歐洲 868 MHz
- 北美 915 MHz
- 亞洲 433 MHz 頻段
LoRa應(yīng)用
LoRa 遠(yuǎn)距離和低功耗特性使其非常適合電池供電的傳感器和低功耗應(yīng)用:
- 物聯(lián)網(wǎng) (IoT)
- 智能家居
- 機(jī)器對機(jī)器通信
- 以及更多…
因此,LoRa 是在線圈電池或太陽能供電的傳感器節(jié)點(diǎn)上運(yùn)行的一個(gè)不錯(cuò)的選擇,可傳輸少量數(shù)據(jù)。
請記住,LoRa 不適用于以下項(xiàng)目:
- 需要高數(shù)據(jù)速率傳輸;
- 需要非常頻繁的傳輸;
- 或者在人口稠密的網(wǎng)絡(luò)中。
LoRa 拓?fù)浣Y(jié)構(gòu)
您可以在以下方面使用 LoRa:
?
- 點(diǎn)對點(diǎn)通信
- 或者搭建一個(gè) LoRa 網(wǎng)絡(luò)(以 LoRaWAN 為例)
點(diǎn)對點(diǎn)通信
在點(diǎn)對點(diǎn)通信中,兩個(gè)支持 LoRa 的設(shè)備使用射頻信號相互通信。
例如,這對于兩個(gè)配備 LoRa 收發(fā)器芯片的 ESP32 板之間的數(shù)據(jù)交換非常有用,這些板彼此相距較遠(yuǎn)或在沒有 Wi-Fi 覆蓋的環(huán)境中。
僅支持短距離通信的 Wi-Fi 或藍(lán)牙不同,兩個(gè)具有適當(dāng)天線的 LoRa 設(shè)備可以遠(yuǎn)距離交換數(shù)據(jù)。
您可以使用 LoRa 芯片輕松配置您的 ESP32,以在 200 米以上的距離可靠地傳輸和接收數(shù)據(jù)(您可以獲得更好的結(jié)果,具體取決于您的環(huán)境和 LoRa 設(shè)置)。還有其他 LoRa 解決方案可以輕松達(dá)到 30 公里以上的范圍。
LoRaWAN
您還可以使用 LoRaWAN 構(gòu)建 LoRa 網(wǎng)絡(luò)。
?LoRaWAN 協(xié)議是一種低功耗廣域網(wǎng) (LPWAN) 規(guī)范,源自 LoRa 聯(lián)盟標(biāo)準(zhǔn)化的 LoRa 技術(shù)。我們不會(huì)在本教程中探討 LoRaWAN,但有關(guān)更多信息,您可以查看LoRa Alliance和The Things Network網(wǎng)站。
LoRa 如何在您的家庭自動(dòng)化項(xiàng)目中發(fā)揮作用?
我們來看一個(gè)實(shí)際應(yīng)用。
想象一下,您想測量田地中的濕度。雖然,它離你家不遠(yuǎn),但它可能沒有 Wi-Fi 覆蓋。因此,您可以構(gòu)建一個(gè)帶有 ESP32 和濕度傳感器的傳感器節(jié)點(diǎn),該節(jié)點(diǎn)每天使用 LoRa 將濕度讀數(shù)發(fā)送一次或兩次到另一個(gè) ESP32。
?后來的 ESP32 可以訪問 Wi-Fi,它可以運(yùn)行一個(gè)顯示濕度讀數(shù)的網(wǎng)絡(luò)服務(wù)器。
?這只是一個(gè)示例,用于說明如何在 ESP32 項(xiàng)目中使用 LoRa 技術(shù)。
ESP32 與 LoRa
在本節(jié)中,我們將向您展示如何使用 Arduino IDE 通過 ESP32 開始使用 LoRa。例如,我們將構(gòu)建一個(gè)簡單的 LoRa 發(fā)送器和一個(gè) LoRa 接收器。
LoRa 發(fā)送器將發(fā)送一條“hello”消息,然后發(fā)送一個(gè)用于測試目的的計(jì)數(shù)器。此消息可以輕松替換為有用的數(shù)據(jù),例如傳感器讀數(shù)或通知。
要完成此部分,您需要以下組件:
2x ESP32 DOIT DEVKIT V1 開發(fā)板
2x LoRa 收發(fā)器模塊 (RFM95)
RFM95 LoRa 分線板(可選)
跳線
面包板 或 條板
選擇:2x TTGO LoRa32 SX1276 OLED
準(zhǔn)備 Arduino IDE
Arduino IDE 有一個(gè)附加組件,可讓您使用 Arduino IDE 及其編程語言對 ESP32 進(jìn)行編程。如果您還沒有準(zhǔn)備好 Arduino IDE 以使用 ESP32,請按照之前進(jìn)行操作。
安裝 LoRa 庫
有幾個(gè)庫可用于使用 ESP32 輕松發(fā)送和接收 LoRa 數(shù)據(jù)包。在這個(gè)例子中,我們將使用sandeep mistry 的 arduino-LoRa 庫。
打開您的 Arduino IDE,轉(zhuǎn)到Sketch?>?Include Library?>?Manage Libraries并搜索“?LoRa?”。選擇下圖中突出顯示的 LoRa 庫,并安裝它。
獲取 LoRa 收發(fā)器模塊
要使用 ESP32 發(fā)送和接收 LoRa 消息,我們將使用?RFM95 收發(fā)器模塊RFM95 收發(fā)器模塊RFM95 收發(fā)器模塊。所有 LoRa 模塊都是收發(fā)器,這意味著它們可以發(fā)送和接收信息。你需要其中的 2 個(gè)。
您還可以使用其他兼容模塊,例如基于 Semtech SX1276/77/78/79 的電路板,包括:RFM96W、RFM98W 等……
準(zhǔn)備 RFM95 收發(fā)器模塊
如果您有內(nèi)置 LoRa 的 ESP32 開發(fā)板,則可以跳過此步驟。
RFM95 收發(fā)器不適合試驗(yàn)板。一排普通的 2.54mm 接頭插針不適合收發(fā)器插針。連接之間的空間比平時(shí)短。
有幾個(gè)選項(xiàng)可用于訪問收發(fā)器引腳。
- 您可以將一些電線直接焊接到收發(fā)器上;
- 斷開插頭引腳并分別焊接每一個(gè);
- 或者您可以購買一個(gè)分線板,使引腳面包板更加友好。
我們已經(jīng)將接頭焊接到模塊,如下圖所示。
通過這種方式,您可以使用常規(guī)跳線訪問模塊的引腳,甚至可以放置一些插頭引腳將它們直接連接到條形板或面包板上。
天線
RFM95 收發(fā)器芯片需要一個(gè)連接到 ANA 引腳的外部天線。
您可以連接一個(gè)“真正的”天線,也可以使用如下圖所示的導(dǎo)線自己制作一個(gè)。一些分線板帶有一個(gè)特殊的連接器,用于添加合適的天線。
導(dǎo)線長度取決于頻率:
- 868 兆赫:86.3 毫米(3.4 英寸)
- 915 兆赫:81.9 毫米(3.22 英寸)
- 433 兆赫:173.1 毫米(6.8 英寸)
對于我們的模塊,我們需要使用直接焊接到收發(fā)器的 ANA 引腳的 86.3 mm 電線。請注意,使用合適的天線會(huì)擴(kuò)大通信范圍。
重要提示:您必須將天線連接到模塊。
連接 RFM95 LoRa 收發(fā)器模塊
RFM95 LoRa 收發(fā)模塊使用 SPI 通信協(xié)議與 ESP32 通信。因此,我們將使用 ESP32 默認(rèn)的 SPI 引腳。將兩個(gè) ESP32 板連接到相應(yīng)的收發(fā)器模塊,如下一個(gè)示意圖所示:
下面是 RFM95 LoRa 收發(fā)模塊和 ESP32 之間的連接:
- ANA:天線
- GND: GND
- DIO3:不接
- DIO4:不接
- 3.3伏:?3.3V
- DIO0:?? GPIO 2
- DIO1:不連接
- DIO2:不接
- GND:不接
- DIO5:不接
- RESET:GPIO 14
- NSS:GPIO 5
- SCK:GPIO 18
- MOSI:GPIO 23
- MISO:GPIO 19
- GND:不接
注意:?RFM95 收發(fā)模塊有 3 個(gè) GND 引腳。使用哪一個(gè)并不重要,但您至少需要連接一個(gè)。
出于實(shí)際原因,我們在條板上制作了這個(gè)電路。它更容易處理,而且電線不會(huì)斷開。如果您愿意,可以使用面包板。
LoRa 發(fā)送器代碼
打開您的 Arduino IDE 并復(fù)制以下代碼。此草圖基于 LoRa 庫中的示例。它使用 LoRa 每 10 秒傳輸一次消息。它發(fā)送一個(gè)“hello”,后跟一個(gè)在每條消息中遞增的數(shù)字。
??#include <SPI.h>
#include <LoRa.h>
//define the pins used by the transceiver module
#define ss 5
#define rst 14
#define dio0 2
int counter = 0;
void setup() {
//initialize Serial Monitor
Serial.begin(115200);
while (!Serial);
Serial.println("LoRa Sender");
//setup LoRa transceiver module
LoRa.setPins(ss, rst, dio0);
//replace the LoRa.begin(---E-) argument with your location's frequency
//433E6 for Asia
//866E6 for Europe
//915E6 for North America
while (!LoRa.begin(866E6)) {
Serial.println(".");
delay(500);
}
// Change sync word (0xF3) to match the receiver
// The sync word assures you don't get LoRa messages from other LoRa transceivers
// ranges from 0-0xFF
LoRa.setSyncWord(0xF3);
Serial.println("LoRa Initializing OK!");
}
void loop() {
Serial.print("Sending packet: ");
Serial.println(counter);
//Send LoRa packet to receiver
LoRa.beginPacket();
LoRa.print("hello ");
LoRa.print(counter);
LoRa.endPacket();
counter++;
delay(10000);
}
讓我們快速瀏覽一下代碼。
它首先包含所需的庫。
#include <SPI.h>
#include <LoRa.h>
然后,定義 LoRa 模塊使用的引腳。如果您遵循了之前的原理圖,則可以使用代碼中使用的引腳定義。如果您使用的是內(nèi)置 LoRa 的 ESP32 板,請檢查板中 LoRa 模塊使用的引腳并進(jìn)行正確的引腳分配。
#define ss 5
#define rst 14
#define dio0 2
你初始化counter從 0 開始的變量;
int counter = 0;
在里面setup(),您初始化串行通信。
Serial.begin(115200);
while (!Serial);
設(shè)置 LoRa 模塊的引腳。
LoRa.setPins(ss, rst, dio0);
并以指定頻率初始化收發(fā)模塊。
while (!LoRa.begin(866E6)) {
Serial.println(".");
delay(500);
}
您可能需要更改頻率以匹配您所在位置使用的頻率。選擇以下選項(xiàng)之一:
- 433E6
- 866E6
- 915E6
LoRa 收發(fā)器模塊偵聽其范圍內(nèi)的數(shù)據(jù)包。數(shù)據(jù)包來自哪里并不重要。為確保您只接收來自發(fā)送方的數(shù)據(jù)包,您可以設(shè)置一個(gè)同步字(范圍從 0 到 0xFF)。
LoRa.setSyncWord(0xF3);
接收方和發(fā)送方都需要使用相同的同步字。這樣,接收器將忽略任何不包含該同步字的 LoRa 數(shù)據(jù)包。
接下來,在loop()你發(fā)送 LoRa 數(shù)據(jù)包。你初始化一個(gè)數(shù)據(jù)包beginPacket()方法。
LoRa.beginPacket();
?您使用print()方法。正如您在以下兩行中看到的,我們發(fā)送了一條問候消息,然后是計(jì)數(shù)器。
LoRa.print("hello ");
LoRa.print(counter);
?然后,關(guān)閉數(shù)據(jù)包endPacket()方法。
LoRa.endPacket();
?此后,計(jì)數(shù)器消息在每個(gè)循環(huán)中遞增 1,每 10 秒發(fā)生一次。
counter++;
delay(10000);
測試發(fā)件人代碼
將代碼上傳到您的 ESP32 開發(fā)板。確保選擇了正確的板和 COM 端口。
之后,打開串行監(jiān)視器,然后按下 ESP32 啟用按鈕。您應(yīng)該會(huì)看到一條成功消息,如下圖所示。計(jì)數(shù)器應(yīng)每 10 秒遞增一次。
LoRa 接收器代碼
現(xiàn)在,拿起另一個(gè) ESP32 并上傳以下代碼(LoRa 接收器代碼)。此代碼使用您定義的同步字偵聽 LoRa 數(shù)據(jù)包,并在串行監(jiān)視器和 RSSI 上打印數(shù)據(jù)包的內(nèi)容。RSSI 測量相對接收信號強(qiáng)度。
#include <SPI.h>
#include <LoRa.h>
//define the pins used by the transceiver module
#define ss 5
#define rst 14
#define dio0 2
void setup() {
//initialize Serial Monitor
Serial.begin(115200);
while (!Serial);
Serial.println("LoRa Receiver");
//setup LoRa transceiver module
LoRa.setPins(ss, rst, dio0);
//replace the LoRa.begin(---E-) argument with your location's frequency
//433E6 for Asia
//866E6 for Europe
//915E6 for North America
while (!LoRa.begin(866E6)) {
Serial.println(".");
delay(500);
}
// Change sync word (0xF3) to match the receiver
// The sync word assures you don't get LoRa messages from other LoRa transceivers
// ranges from 0-0xFF
LoRa.setSyncWord(0xF3);
Serial.println("LoRa Initializing OK!");
}
void loop() {
// try to parse packet
int packetSize = LoRa.parsePacket();
if (packetSize) {
// received a packet
Serial.print("Received packet '");
// read packet
while (LoRa.available()) {
String LoRaData = LoRa.readString();
Serial.print(LoRaData);
}
// print RSSI of packet
Serial.print("' with RSSI ");
Serial.println(LoRa.packetRssi());
}
}
這代碼與上一張非常相似。只有loop()是不同的。
您可能需要更改頻率和 sycnword 以匹配發(fā)件人草圖中使用的那個(gè)。
在里面loop()該代碼使用parsePacket()方法。
int packetSize = LoRa.parsePacket();
如果有新數(shù)據(jù)包,我們會(huì)在它可用時(shí)讀取它的內(nèi)容。
要讀取傳入的數(shù)據(jù),您可以使用readString()方法。
while (LoRa.available()) {
String LoRaData = LoRa.readString();
Serial.print(LoRaData);
}
傳入的數(shù)據(jù)保存在LoRa數(shù)據(jù)變量并在串行監(jiān)視器中打印。
最后,接下來的兩行代碼以 dB 為單位打印接收到的數(shù)據(jù)包的 RSSI。
Serial.print("' with RSSI ");
Serial.println(LoRa.packetRssi());
測試 LoRa 接收器代碼
將此代碼上傳到您的 ESP32。此時(shí),您應(yīng)該有兩個(gè)具有不同代碼的 ESP32 板:發(fā)送器和接收器。
打開 LoRa 接收器的串行監(jiān)視器,然后按下 LoRa 發(fā)送器啟用按鈕。您應(yīng)該開始在接收器上獲取 LoRa 數(shù)據(jù)包。
恭喜!您已經(jīng)使用 ESP32 構(gòu)建了一個(gè) LoRa 發(fā)送器和一個(gè) LoRa 接收器。
更進(jìn)一步
現(xiàn)在,您應(yīng)該測試您所在區(qū)域的發(fā)送方和接收方之間的通信范圍。通信范圍根據(jù)您的環(huán)境而有很大差異(如果您住在高樓林立的農(nóng)村或城市地區(qū))。要測試通信范圍,您可以在 LoRa 接收器上添加一個(gè) OLED 顯示器,然后出去散散步,看看您可以通信多遠(yuǎn)(這是未來教程的主題)。
?在此示例中,我們只是發(fā)送一條問候消息,但我們的想法是用有用的信息替換該文本。文章來源:http://www.zghlxwxcb.cn/news/detail-442847.html
總結(jié)
總之,在本教程中,我們向您展示了 LoRa 技術(shù)的基礎(chǔ)知識(shí):文章來源地址http://www.zghlxwxcb.cn/news/detail-442847.html
- LoRa 是一種無線電調(diào)制技術(shù);
- LoRa允許少量數(shù)據(jù)的遠(yuǎn)距離通信,并且需要低功耗;
- 您可以在點(diǎn)對點(diǎn)通信或網(wǎng)絡(luò)中使用 LoRa;
- 如果您想監(jiān)控未被 Wi-Fi 網(wǎng)絡(luò)覆蓋且相距數(shù)米的傳感器,LoRa 會(huì)特別有用。
到了這里,關(guān)于【ESP32最全學(xué)習(xí)筆記(協(xié)議篇)——2.ESP32 LoRa】的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!