0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

LoRa模块SX1278与ESP32结合使用的方法-下

jf_78858299 来源:一板网电子技术论坛 作者:一板网电子技术论 2023-01-21 11:31 次阅读

在这里,我们主要解释一些重要的代码片段。

首先,包括所有必需的库。SPI.h用于ESP32LoRa之间的SPI通信,Wire.h库用于I2C设备之间的通信。您可以从此处下载所需的库:

● Wire.h

● SH1106.h

● Sandeep Mistry提供的LoRa库。

#include 
#include 
#include 
#include 
#include 
#include 
#include

然后为OLED显示器创建一个实例,该实例包括地址和连接显示器的引脚。

SH1106 display(0x3c, 21, 22);

之后,输入Wi-Fi名称和密码。ESP32需要互联网连接从网站获取天气数据。

const char* ssid = "Wi-fi Name";
const char* pass = "Password";

在接下来的几行代码中,定义连接LoRa模块的引脚。

#define ss 5
#define rst 14
#define dio0 2

现在,输入之前生成的API链接。使用此链接,我们将获得Jaipur的温度和湿度数据。

Const char* url = "http://api.weatherapi.com/v1/current.json?key=ade61a8aef37445d8c0100632202407&q=Jaipur";

在*setup()*函数中,我们将使用115200的波特率初始化串口监视器,并使用begin()函数初始化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()函数中,我们将检查ESP32是否接收到JSON文件,并使用以下代码在串口监视器上打印输出JSON数据。

int httpCode = https.GET();
  if (httpCode > 0) {
    String payload = https.getString();
    char charBuf[500];
    payload.toCharArray(charBuf, 500);
    Serial.println(payload);

之后,使用通过ArduinoJson Assistant生成的分词程序。此分词程序将为我们提供Jaipur的温度和湿度数据。

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

最后,我们将温度和湿度值发送到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()函数中,我们接收来自发送器模块的数据包。收到数据包后,Arduino开始读取它们作为字符并将其打印在LCD上。当它收到关键字“ 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设置的工作过程

我们将硬件和程序准备就绪后,将代码上传到ESP32和Arduino模块中。发射器模块会将温度和湿度值发送到接收器模块。接收器LoRa模块将数值在LCD上进行显示,如下所示。

!1672975269(1).png

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • API
    API
    +关注

    关注

    2

    文章

    1382

    浏览量

    60992
  • 代码
    +关注

    关注

    30

    文章

    4555

    浏览量

    66771
  • LoRa模块
    +关注

    关注

    5

    文章

    101

    浏览量

    13669
收藏 人收藏

    评论

    相关推荐

    SX1276 与SX1278扩频芯片的区别

    分别基于SX1278SX1276的RF透传模块方案APC340,硬件上分别支持433/470M与868/915M,实际测试中不同频段的APC340通信距离和穿透力方面几乎一致。在几乎相同环境和条件
    发表于 12-10 22:17

    sx1278模块编程问题,求解。

    谁用过sx1278模块,我根据别人的程序改编的51程序有问题,各位路过的朋友能不能帮我看一
    发表于 04-01 23:30

    请问LORA SX1278芯片如何实现点对点唤醒?

    最近在使用SX1278芯片,实现了其中的前导码唤醒,然后接收数据。但是如果手册里面只提到可以设置前导码的长度,没提到前导码的数值。也就是说如果一台设备在发送数据(带前导码),附近所有的设备都会被唤醒
    发表于 01-16 06:35

    STM32实现SX1278 Lora无线组网

    `STM32实现SX1278 Lora无线组网原理图PCB实物`
    发表于 08-26 16:11

    如何使用Lora模块SX1278实现ESP8266之间的无线通讯

    引入了LoRa技术来解决所有这些问题。使用单节电池,该设备可以运行一年。在本篇文章中,我们将使用LoRa模块SX1278与NodeMCU ESP
    发表于 02-16 07:46

    怎样去移植SX1278模块LoRa功能呢

    SX1278具有哪些功能呢?怎样去移植SX1278模块LoRa功能呢?
    发表于 02-21 07:20

    基于流行的SX1276/SX1278无线模块的E32 UART LoRa设备配置

    原作者:renzo mischianti - 2019年10月29日发布 - 2021年6月21日更新现在我们要学习的是基于流行的SX1276/SX1278无线模块的E32 UART LoRa
    发表于 02-22 06:51

    基于流行的SX1276/SX1278无线模块的E32 UART LoRa设备来发送复杂的结构和管理节电

    原作者:renzo mischianti - 2019年12月3日发布- 2021年6月21日更新现在我们将了解如何使用基于流行的SX1276/SX1278无线模块的E32 UART LoRa
    发表于 02-22 07:47

    SX1278产品手册

    SX1278 产品手册
    发表于 05-18 15:23 265次下载

    使用SX1278无线模块进行Lora接收和发送demo的代码资料免费下载

    本文档的主要内容详细介绍的是使用SX1278无线模块进行Lora接收和发送demo的代码资料免费下载
    发表于 06-17 08:00 155次下载

    用于Arduino、esp32esp8266的Ebyte LoRa E32(SX1278)设备:配置 - 第三部分

    原作者:renzo mischianti - 2019年10月29日发布 - 2021年6月21日更新现在我们要学习的是基于流行的SX1276/SX1278无线模块的E32 UART LoRa
    发表于 12-27 19:17 14次下载
    用于Arduino、<b class='flag-5'>esp32</b>或<b class='flag-5'>esp</b>8266的Ebyte <b class='flag-5'>LoRa</b> E32(<b class='flag-5'>SX1278</b>)设备:配置 - 第三部分

    LoRa模块SX1278ESP32结合使用的方法-上

    在本篇文章中,我们将学习如何将LoRa模块SX1278ESP32结合使用。在这里,我们将使用两个LoR
    的头像 发表于 01-21 11:30 2432次阅读
    <b class='flag-5'>LoRa</b><b class='flag-5'>模块</b><b class='flag-5'>SX1278</b>与<b class='flag-5'>ESP32</b><b class='flag-5'>结合</b>使用的<b class='flag-5'>方法</b>-上

    LLCC68与SX1278 LoRa模块的优势对比

    LLCC68和SX1278都是美国Semtech公司推出的LoRa芯片。思为无线用Semtech公司的芯片研发的LoRa模块,它们的各自的优势是什么?
    的头像 发表于 05-05 16:49 1045次阅读
    LLCC68与<b class='flag-5'>SX1278</b> <b class='flag-5'>LoRa</b><b class='flag-5'>模块</b>的优势对比

    SX1278无线串口透传模块LoRa扩频远距离通信

    电子发烧友网站提供《SX1278无线串口透传模块LoRa扩频远距离通信.pdf》资料免费下载
    发表于 09-19 14:47 6次下载

    LLCC68与SX1278 LoRa模块的优势对比?

    LLCC68和SX1278都是Semtech公司推出的LoRa调制解调器模块,属于LoRa模块家族。它们在无线通信领域都有着广泛的应用,但具
    的头像 发表于 03-08 16:37 305次阅读