在這里,我們主要解釋一些重要的代碼片段。
首先,包括所有必需的庫。SPI.h用于ESP32與LoRa之間的SPI通信,Wire.h庫用于I2C設(shè)備之間的通信。您可以從此處下載所需的庫:
● Wire.h
● SH1106.h
● Sandeep Mistry提供的LoRa庫。
#include
#include
#include
#include
#include
#include
#include
然后為OLED顯示器創(chuàng)建一個實例,該實例包括地址和連接顯示器的引腳。
SH1106 display(0x3c, 21, 22);
之后,輸入Wi-Fi名稱和密碼。ESP32需要互聯(lián)網(wǎng)連接從網(wǎng)站獲取天氣數(shù)據(jù)。
const char* ssid = "Wi-fi Name";
const char* pass = "Password";
在接下來的幾行代碼中,定義連接LoRa模塊的引腳。
#define ss 5
#define rst 14
#define dio0 2
現(xiàn)在,輸入之前生成的API鏈接。使用此鏈接,我們將獲得Jaipur的溫度和濕度數(shù)據(jù)。
Const char* url = "http://api.weatherapi.com/v1/current.json?key=ade61a8aef37445d8c0100632202407&q=Jaipur";
在*setup()*函數(shù)中,我們將使用115200的波特率初始化串口監(jiān)視器,并使用begin()函數(shù)初始化OLED顯示屏和LoRa通信。
Serial.begin(115200);
Serial.println(ssid);
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
}
LoRa.setPins(ss, rst, dio0);
while (!LoRa.begin(433E6)) {
}
LoRa.setSyncWord(0xF3);
}
在void loop()函數(shù)中,我們將檢查ESP32是否接收到JSON文件,并使用以下代碼在串口監(jiān)視器上打印輸出JSON數(shù)據(jù)。
int httpCode = https.GET();
if (httpCode > 0) {
String payload = https.getString();
char charBuf[500];
payload.toCharArray(charBuf, 500);
Serial.println(payload);
之后,使用通過ArduinoJson Assistant生成的分詞程序。此分詞程序?qū)槲覀兲峁㎎aipur的溫度和濕度數(shù)據(jù)。
const size_t capacity = JSON_OBJECT_SIZE(2) + JSON_OBJECT_SIZE(3) + JSON_OBJECT_SIZE(8) + JSON_OBJECT_SIZE(23) + 490;
DynamicJsonDocument doc(capacity);
const char* json = "{"location":{"name":"Jaipur","region":"Rajasthan","country":"India","lat":26.92,"lon":75.82,"tz_id":"Asia/Kolkata","localtime_epoch":1595741089,"localtime":"2020-07-26 10:54"},"current":{"last_updated_epoch":1595740520,"last_updated":"2020-07-26 10:45","temp_c":31,"temp_f":87.8,"is_day":1,"condition":{"text":"Mist","icon":"//cdn.weatherapi.com/weather/64x64/day/143.png","code":1030},"wind_mph":0,"wind_kph":0,"wind_degree":0,"wind_dir":"N","pressure_mb":1008,"pressure_in":30.2,"precip_mm":0,"precip_in":0,"humidity":66,"cloud":50,"feelslike_c":32.2,"feelslike_f":89.9,"vis_km":5,"vis_miles":3,"uv":8,"gust_mph":7.2,"gust_kph":11.5}}";
deserializeJson(doc, json);
long current_last_updated_epoch = current["last_updated_epoch"];
const char* current_last_updated = current["last_updated"]; //
int current_temp_c = current["temp_c"]; // 31
int current_humidity = current["humidity"]; // 66
最后,我們將溫度和濕度值發(fā)送到LoRa接收器。
LoRa.beginPacket();
LoRa.print("Temperature: ");
LoRa.print(current_temp_c);
LoRa.print("c");
LoRa.print("Humidity: ");
LoRa.print(current_humidity);
LoRa.endPacket();
Arduino LoRa接收器代碼
同樣,首先我們添加LoRa模塊和LCD的庫,并定義LCD連接到的引腳。
#include
#include
#include
constintrs = 8, en = 7, d4 = 6, d5 = 5, d6 = 4, d7 = 3;
LiquidCrystallcd(rs, en, d4, d5, d6, d7);
在loop()函數(shù)中,我們接收來自發(fā)送器模塊的數(shù)據(jù)包。收到數(shù)據(jù)包后,Arduino開始讀取它們作為字符并將其打印在LCD上。當(dāng)它收到關(guān)鍵字“ c”時,它將剩余信息打印在第二行。
void loop() {
intpacketSize = LoRa.parsePacket();
if (packetSize) {
Serial.print("Received packet '");
while (LoRa.available()) {
char incoming = (char)LoRa.read();
if (incoming == 'c')
{
lcd.setCursor(0, 1);
}
else
{
lcd.print(incoming);
}
ESP32 LoRa設(shè)置的工作過程
我們將硬件和程序準(zhǔn)備就緒后,將代碼上傳到ESP32和Arduino模塊中。發(fā)射器模塊會將溫度和濕度值發(fā)送到接收器模塊。接收器LoRa模塊將數(shù)值在LCD上進(jìn)行顯示,如下所示。
!
-
API
+關(guān)注
關(guān)注
2文章
1620瀏覽量
64059 -
代碼
+關(guān)注
關(guān)注
30文章
4900瀏覽量
70758 -
LoRa模塊
+關(guān)注
關(guān)注
5文章
142瀏覽量
14678
發(fā)布評論請先 登錄
請問LORA SX1278芯片如何實現(xiàn)點對點喚醒?
如何使用Lora模塊SX1278實現(xiàn)ESP8266之間的無線通訊
基于流行的SX1276/SX1278無線模塊的E32 UART LoRa設(shè)備配置
基于流行的SX1276/SX1278無線模塊的E32 UART LoRa設(shè)備來發(fā)送復(fù)雜的結(jié)構(gòu)和管理節(jié)電
SX1278無線模塊特點及引腳功能

使用SX1278無線模塊進(jìn)行Lora接收和發(fā)送demo的代碼資料免費下載
用于Arduino、esp32或esp8266的Ebyte LoRa E32(SX1278)設(shè)備:配置 - 第三部分

LLCC68與SX1278 LoRa模塊的優(yōu)勢對比

SX1278無線串口透傳模塊LoRa擴(kuò)頻遠(yuǎn)距離通信
LoRa模塊 SX1278詳解

評論