72浏览
查看: 72|回复: 0

[ESP8266/ESP32] 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



程序代码

发送端程序代码:
  1. #include <Wire.h>
  2. #include <Adafruit_GFX.h>
  3. #include <Adafruit_SSD1306.h>
  4. #define SCREEN_WIDTH 128 // OLED display width, in pixels
  5. #define SCREEN_HEIGHT 64 // OLED display height, in pixels
  6. #define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)
  7. Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
  8. #include "DHT.h"
  9. #define DHTPIN 8     // DHT11连接到Arduino的引脚2
  10. #define DHTTYPE DHT11   // DHT型号为DHT11
  11. DHT dht(DHTPIN, DHTTYPE);
  12. int n = 10;
  13. char c;
  14. void setup() {
  15.   Serial1.begin(9600,SERIAL_8N1,/*rx =*/16,/*Tx =*/17);  
  16.   Serial.begin(9600);
  17.   dht.begin();
  18.   // 初始化I2C
  19.   Wire.begin(/*SDA=*/19, /*SCL=*/20);
  20.   // 初始化OLED
  21.   display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  22.   // 清屏
  23.   display.clearDisplay();
  24.   delay(500);
  25.   // 设置字号
  26.   display.setTextSize(1);
  27.   // 设置文字颜色
  28.   display.setTextColor(WHITE);
  29.   // 设置屏幕方向
  30.   display.setRotation(0);
  31.   display.display();
  32.   delay(2000);
  33. }
  34. void SendData(){
  35.   float temperature = dht.readTemperature();  // 读取温度数据
  36.   float humidity = dht.readHumidity();
  37.   // 串口发送
  38.   Serial1.print(F("Temperature: "));
  39.   Serial1.print(temperature);
  40.   Serial1.println(F("C "));
  41.   Serial1.print(F("Humidity: "));
  42.   Serial1.print(humidity);
  43.   Serial1.println(F("% "));
  44.   // 打印输出
  45.   // Serial.print(F("%  Temperature: "));
  46.   // Serial.print(temperature);
  47.   // Serial.println(F("°C "));
  48.   // Serial.print(F("Humidity: "));
  49.   // Serial.print(humidity);
  50.   
  51.   // 清屏、设置光标位置
  52.   display.clearDisplay();
  53.   display.setCursor(0, 0);
  54.   // 显示温湿度
  55.   display.println("Temperature: ");
  56.   display.println();
  57.   display.print(temperature, 1); // 显示温度,保留1位小数
  58.   display.println("C");
  59.   display.println();
  60.   display.println("Humidity: ");
  61.   display.println("");
  62.   display.print(humidity, 1); // 显示湿度,保留1位小数
  63.   display.println("%");
  64.   // 显示数据到OLED
  65.   display.display();
  66.   // 等待1秒再次更新数据
  67.   delay(1000);
  68. }
  69. // the loop routine runs over and over again forever:
  70. void loop() {
  71.   SendData();
  72.   delay(500);        // 延时500ms
  73. }
复制代码



接收端程序代码:

  1. #include <Wire.h>
  2. #include <Adafruit_GFX.h>
  3. #include <Adafruit_SSD1306.h>
  4. #define SCREEN_WIDTH 128 // OLED display width, in pixels
  5. #define SCREEN_HEIGHT 64 // OLED display height, in pixels
  6. #define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)
  7. Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
  8. int n = 10;
  9. char c;
  10. void setup() {
  11.   Serial1.begin(9600,SERIAL_8N1,/*rx =*/16,/*Tx =*/17);  
  12.   Serial.begin(9600);
  13.   dht.begin();
  14.   // 初始化I2C
  15.   Wire.begin(/*SDA=*/19, /*SCL=*/20);
  16.   // 初始化OLED
  17.   display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  18.   // 清屏
  19.   display.clearDisplay();
  20.   delay(500);
  21.   // 设置字号
  22.   display.setTextSize(1);
  23.   // 设置文字颜色
  24.   display.setTextColor(WHITE);
  25.   // 设置屏幕方向
  26.   display.setRotation(0);
  27.   display.display();
  28.   delay(2000);
  29. }
  30. void RecvData(){
  31.   // 获取串口缓冲区中是否已经接收到字符串
  32.   n = Serial1.available();
  33.   if(n > 0)
  34.   {
  35.     // 打印获取到的字符串字数
  36.     // Serial.print("Read ");
  37.     // Serial.print(n);
  38.     // Serial.print("chars. \n Rev:");
  39.     // 将获取的字符串打印出来
  40.       // 清屏、设置光标位置
  41.   display.clearDisplay();
  42.   display.setCursor(0, 0);
  43.     while(n--)
  44.     {
  45.       c = Serial1.read();
  46.       Serial.print(c);
  47.       display.print(c);
  48.     }
  49.     Serial.println();
  50.     display.println();
  51.     display.display();
  52.     // 等待1秒再次更新数据
  53.     delay(1000);
  54.   }
  55. }
  56. // the loop routine runs over and over again forever:
  57. void loop() {
  58. RecvData();
  59.   delay(500);        // 延时500ms
  60. }
复制代码




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





您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail