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]