豆爸 发表于 2024-4-22 03:19:15

FireBeetle 2 Board ESP32 C6之初体验(2)基于LoRa的温湿度采集

本帖最后由 豆爸 于 2024-4-22 03:39 编辑

关于LoRa

LoRa是Semtech公司开发的一种低功耗局域网无线标准。它最大特点是在同样的功耗条件下比其他无线方式传播的距离更远,实现了低功耗和远距离的统一,在同样的功耗下比传统的无线射频通信距离扩大3-5倍。主要频段:470MHz,亚洲其他地区主要是902-928MHz,欧洲主要是868MHz,美洲主要是915mHz。
LoRa技术被广泛应用于智能仪表、智慧城市、智慧社区、智慧农业等领域。

项目目标


[*]发送端:实现现场温湿度的采集与显示,并将现场采集到的温湿度通过LoRa发送到接受端
[*]接收端:实现将通过LoRa接收到的数据,在OLED上显示

硬件清单

   1、发送端:


[*]FireBeetle 2 Board ESP32 C6 *1
[*]扩展版 *1
[*]LoRa模块 *1
[*]DHT11温湿度传感器 *1
[*]0.96" OLED屏 I2C*1



   2、接收端:


[*]FireBeetle 2 Board ESP32 C6 *1
[*]扩展版 *1
[*]LoRa模块 *1
[*]0.96" OLED屏 I2C*1



程序代码

发送端程序代码:
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET   4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

#include "DHT.h"
#define DHTPIN 8   // DHT11连接到Arduino的引脚2
#define DHTTYPE DHT11   // DHT型号为DHT11
DHT dht(DHTPIN, DHTTYPE);

int n = 10;
char c;

void setup() {
Serial1.begin(9600,SERIAL_8N1,/*rx =*/16,/*Tx =*/17);
Serial.begin(9600);
dht.begin();

// 初始化I2C
Wire.begin(/*SDA=*/19, /*SCL=*/20);
// 初始化OLED
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
// 清屏
display.clearDisplay();
delay(500);
// 设置字号
display.setTextSize(1);
// 设置文字颜色
display.setTextColor(WHITE);
// 设置屏幕方向
display.setRotation(0);
display.display();
delay(2000);
}

void SendData(){
float temperature = dht.readTemperature();// 读取温度数据
float humidity = dht.readHumidity();
// 串口发送
Serial1.print(F("Temperature: "));
Serial1.print(temperature);
Serial1.println(F("C "));
Serial1.print(F("Humidity: "));
Serial1.print(humidity);
Serial1.println(F("% "));
// 打印输出
// Serial.print(F("%Temperature: "));
// Serial.print(temperature);
// Serial.println(F("°C "));
// Serial.print(F("Humidity: "));
// Serial.print(humidity);

// 清屏、设置光标位置
display.clearDisplay();
display.setCursor(0, 0);

// 显示温湿度
display.println("Temperature: ");
display.println();
display.print(temperature, 1); // 显示温度,保留1位小数
display.println("C");
display.println();

display.println("Humidity: ");
display.println("");
display.print(humidity, 1); // 显示湿度,保留1位小数
display.println("%");


// 显示数据到OLED
display.display();
// 等待1秒再次更新数据
delay(1000);
}

// the loop routine runs over and over again forever:
void loop() {
SendData();
delay(500);      // 延时500ms
}



接收端程序代码:

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET   4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

int n = 10;
char c;

void setup() {
Serial1.begin(9600,SERIAL_8N1,/*rx =*/16,/*Tx =*/17);
Serial.begin(9600);
dht.begin();

// 初始化I2C
Wire.begin(/*SDA=*/19, /*SCL=*/20);
// 初始化OLED
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
// 清屏
display.clearDisplay();
delay(500);
// 设置字号
display.setTextSize(1);
// 设置文字颜色
display.setTextColor(WHITE);
// 设置屏幕方向
display.setRotation(0);
display.display();
delay(2000);
}

void RecvData(){
// 获取串口缓冲区中是否已经接收到字符串
n = Serial1.available();
if(n > 0)
{
    // 打印获取到的字符串字数
    // Serial.print("Read ");
    // Serial.print(n);
    // Serial.print("chars. \n Rev:");
    // 将获取的字符串打印出来
      // 清屏、设置光标位置
display.clearDisplay();
display.setCursor(0, 0);
    while(n--)
    {
      c = Serial1.read();
      Serial.print(c);
      display.print(c);
    }
    Serial.println();
    display.println();
    display.display();
    // 等待1秒再次更新数据
    delay(1000);
}
}


// the loop routine runs over and over again forever:
void loop() {
RecvData();
delay(500);      // 延时500ms
}









页: [1]
查看完整版本: FireBeetle 2 Board ESP32 C6之初体验(2)基于LoRa的温湿度采集