Deja de funcionar un sensor al usar Heltec LoRa V32

A la hora de usar LoRa, he intentado programar 2 sensores, los cuales deben enviar los datos al receptor, sin embargo a la hora de enviar los datos los sensores no funcionan.
Los sensores usados son: BME280 y CCS811

Este codigo es en el que al enviar los datos, los sensores dejan de funcionar:

//Libraries for LoRa
#include <SPI.h>
#include <LoRa.h>

//Libraries for OLED Display
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

//Libraries for BME280
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

//Libraries for CCS811
#include "Adafruit_CCS811.h"
Adafruit_CCS811 ccs;

//define the pins used by the LoRa transceiver module
#define SCK 5
#define MISO 19
#define MOSI 27
#define SS 18
#define RST 14
#define DIO0 26

//433E6 for Asia
//866E6 for Europe
//915E6 for North America
#define BAND 866E6

//OLED pins
#define OLED_SDA 4
#define OLED_SCL 15
#define OLED_RST 16
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

TwoWire I2Cone = TwoWire(1);
Adafruit_BME280 bme;

//packet counter
int readingID = 0;

int counter = 0;
String LoRaMessage = "";

float temperature = 0;
float humidity = 0;
float pressure = 0;
float co2 = 0;

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RST);

//Initialize OLED display
void startOLED() {
  //reset OLED display via software
  pinMode(OLED_RST, OUTPUT);
  digitalWrite(OLED_RST, LOW);
  delay(20);
  digitalWrite(OLED_RST, HIGH);

  //initialize OLED
  Wire.begin(OLED_SDA, OLED_SCL);
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3c, false, false)) { // Address 0x3C for 128x32
    Serial.println(F("SSD1306 allocation failed"));
    for (;;); // Don't proceed, loop forever
  }
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(1);
  display.setCursor(0, 0);
  display.print("LORA SENDER");
}

//Initialize LoRa module
void startLoRA() {
  //SPI LoRa pins
  SPI.begin(SCK, MISO, MOSI, SS);
  //setup LoRa transceiver module
  LoRa.setPins(SS, RST, DIO0);

  while (!LoRa.begin(BAND) && counter < 10) {
    Serial.print(".");
    counter++;
    delay(500);
  }
  if (counter == 10) {
    // Increment readingID on every new reading
    readingID++;
    Serial.println("Starting LoRa failed!");
  }
  Serial.println("LoRa Initialization OK!");
  display.setCursor(0, 10);
  display.clearDisplay();
  display.print("LoRa Initializing OK!");
  display.display();
  delay(2000);
}

void startSensors() {

  I2Cone.begin(SDA, SCL, 100000);
  bool status1 = bme.begin(0x76, &I2Cone);
  if (!status1) {
    Serial.println("Could not find a valid BME280_1 sensor, check wiring!");
    while (1);
  }

  Serial.println("CO2, TVOC");
  if (!ccs.begin()) {                 // Intentar inicializar el sensor
    Serial.println("¡No se ha podido inicializar el sensor! Por favor, comprueba el cableado.");
    while (1);
  }
  while (!ccs.available());           // Esperar a que el sensor esté preparado

}
void getReadings() {

  co2 = ccs.geteCO2();    // Obtener y enviar el nivel del CO2 por el puerto serie
  temperature = bme.readTemperature();
  humidity = bme.readHumidity();
  pressure = bme.readPressure() / 100.0F;
}

void sendReadings() {
  LoRaMessage = String(readingID) + "/" + String(temperature) + "&" + String(humidity) + "#" + String(pressure);
  //Send LoRa packet to receiver
  LoRa.beginPacket();
  LoRa.print(LoRaMessage);
  LoRa.endPacket();

  display.clearDisplay();
  display.setCursor(0, 0);
  display.setTextSize(1);
  display.print("CO2:");
  display.setCursor(72, 0);
  display.print(co2);
  display.setCursor(0, 20);
  display.print("Temperature:");
  display.setCursor(72, 20);
  display.print(temperature);
  display.setCursor(0, 30);
  display.print("Humidity:");
  display.setCursor(54, 30);
  display.print(humidity);
  display.setCursor(0, 40);
  display.print("Pressure:");
  display.setCursor(54, 40);
  display.print(pressure);
  display.setCursor(0, 50);
  display.print("Reading ID:");
  display.setCursor(66, 50);
  display.print(readingID);
  display.display();
  Serial.print("Sending packet: ");
  Serial.println(readingID);
  readingID++;
}

void setup() {
  //initialize Serial Monitor
  Serial.begin(115200);
  startOLED();
  startSensors();
  startLoRA();
  delay(2000);
}
void loop() {
  Serial.print("EDITADO");     // No se permiten Palabras ofensivas
  if (ccs.available()) {              // Si el sensor está disponible
    if (!ccs.readData()) {
      getReadings();
      sendReadings();
    }
  }
  delay(1000);
}

Este codigo es sin enviar datos, en el que los sensores si funcionan:

//Libraries for BME280
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

#include "Adafruit_CCS811.h"
Adafruit_CCS811 ccs;
TwoWire I2Cone = TwoWire(1);
Adafruit_BME280 bme;

float temperature = 0;
float humidity = 0;
float pressure = 0;
float co2 = 0;

void setup() {
  Serial.begin(115200);

  I2Cone.begin(SDA, SCL, 100000);
  bool status1 = bme.begin(0x76, &I2Cone);
  if (!status1) {
    Serial.println("Could not find a valid BME280_1 sensor, check wiring!");
    while (1);
  }

  Serial.println("CO2, TVOC");
  if (!ccs.begin()) {                 // Intentar inicializar el sensor
    Serial.println("¡No se ha podido inicializar el sensor! Por favor, comprueba el cableado.");
    while (1);
  }
  while (!ccs.available());           // Esperar a que el sensor esté preparado

}

void loop() {


  if (ccs.available()) {              // Si el sensor está disponible
    if (!ccs.readData()) {            // Cuando haya datos
      co2 = ccs.geteCO2();    // Obtener y enviar el nivel del CO2 por el puerto serie
      temperature = bme.readTemperature();
      humidity = bme.readHumidity();
      pressure = bme.readPressure() / 100.0F;

      Serial.print("CO2:");
      Serial.println(co2);
      Serial.print("Temp:");
      Serial.println(temperature);
      Serial.print("Hum:");
      Serial.println(humidity);
      Serial.print("Press:");
      Serial.println(pressure);
    }
    else {
      Serial.println("ERROR!");       // Cuando ocurra un error
      while (1);                      // El dispositivo deja de funcionar
    }
  }
  delay(2000);                         // Hacer la medida cada 2 segundos(2000ms)
}

Aquí el circuito:

Gracias por vuestra atención!

Document de text nou (2).txt (7 Bytes)

Moderador:
He editado el código en la linea posterior al void loop por contener una palabra fuera de lugar.
Te pido que revises lo que postees porque usar lenguaje inapropiado es pasible de sanciones. Quedas advertido!
Respuesta si tienes alguna por privado, no en este hilo.

Cuando usas los programas ejemplos e LoRA funcionan?

Prueba sin tanto delay() y reemplaza por millis()

void loop() {
  
  if (ccs.available()) {              // Si el sensor está disponible
    if (!ccs.readData()) {
        getReadings();
        sendReadings();
    }
  }
  //delay(1000);
}

Acá una modificación que me parece es mas adecuada, incluso en GetReading podrian informar cuando el sensor de CO2 no esta respondiendo.

#include <Arduino.h>
//Libraries for LoRa
#include <SPI.h>
#include <LoRa.h>

//Libraries for OLED Display
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

//Libraries for BME280
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

//Libraries for CCS811
#include "Adafruit_CCS811.h"
Adafruit_CCS811 ccs;

//define the pins used by the LoRa transceiver module
#define SCK    5
#define MISO  19
#define MOSI  27
#define SS    18
#define RST   14
#define DIO0  26

//433E6 for Asia
//866E6 for Europe
//915E6 for North America
#define BAND 866E6

//OLED pins
#define OLED_SDA 4
#define OLED_SCL 15
#define OLED_RST 16
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

TwoWire I2Cone = TwoWire(1);
Adafruit_BME280 bme;

//packet counter
int readingID = 0;

int counter = 0;
String LoRaMessage = "";

float temperature = 0;
float humidity = 0;
float pressure = 0;
float co2 = 0;

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RST);

//Initialize OLED display
void startOLED() {
  //reset OLED display via software
  pinMode(OLED_RST, OUTPUT);
  digitalWrite(OLED_RST, LOW);
  delay(20);
  digitalWrite(OLED_RST, HIGH);

  //initialize OLED
  Wire.begin(OLED_SDA, OLED_SCL);
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3c, false, false)) { // Address 0x3C for 128x32
    Serial.println(F("SSD1306 allocation failed"));
    for (;;); // Don't proceed, loop forever
  }
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(1);
  display.setCursor(0, 0);
  display.print("LORA SENDER");
}

//Initialize LoRa module
void startLoRA() {
  //SPI LoRa pins
  SPI.begin(SCK, MISO, MOSI, SS);
  //setup LoRa transceiver module
  LoRa.setPins(SS, RST, DIO0);

  while (!LoRa.begin(BAND) && counter < 10) {
    Serial.print(".");
    counter++;
    delay(500);
  }
  if (counter == 10) {
    // Increment readingID on every new reading
    readingID++;
    Serial.println("Starting LoRa failed!");
  }
  Serial.println("LoRa Initialization OK!");
  display.setCursor(0, 10);
  display.clearDisplay();
  display.print("LoRa Initializing OK!");
  display.display();
  delay(2000);
}

void startSensors() {

  I2Cone.begin(SDA, SCL, 100000);
  bool status1 = bme.begin(0x76, &I2Cone);
  if (!status1) {
    Serial.println("Could not find a valid BME280_1 sensor, check wiring!");
    while (1);
  }

  Serial.println("CO2, TVOC");
  if (!ccs.begin()) {                 // Intentar inicializar el sensor
    Serial.println("¡No se ha podido inicializar el sensor! Por favor, comprueba el cableado.");
    while (1);
  }
  while (!ccs.available());           // Esperar a que el sensor esté preparado

}
void getReadings() {
  if (ccs.available()) {        // Si el sensor está disponible
      if (!ccs.readData()) {
          co2 = ccs.geteCO2();    // Obtener y enviar el nivel del CO2 por el puerto serie
      }
  }
  
  temperature = bme.readTemperature();
  humidity    = bme.readHumidity();
  pressure    = bme.readPressure() / 100.0F;
}

void sendReadings() {
  LoRaMessage = String(readingID) + "/" + String(temperature) + "&" + String(humidity) + "#" + String(pressure);
  //Send LoRa packet to receiver
  LoRa.beginPacket();
  LoRa.print(LoRaMessage);
  LoRa.endPacket();

  display.clearDisplay();
  display.setCursor(0, 0);
  display.setTextSize(1);
  display.print("CO2:");
  display.setCursor(72, 0);
  display.print(co2);
  display.setCursor(0, 20);
  display.print("Temperature:");
  display.setCursor(72, 20);
  display.print(temperature);
  display.setCursor(0, 30);
  display.print("Humidity:");
  display.setCursor(54, 30);
  display.print(humidity);
  display.setCursor(0, 40);
  display.print("Pressure:");
  display.setCursor(54, 40);
  display.print(pressure);
  display.setCursor(0, 50);
  display.print("Reading ID:");
  display.setCursor(66, 50);
  display.print(readingID);
  display.display();
  Serial.print("Sending packet: ");
  Serial.println(readingID);
  readingID++;
}

void setup() {
  //initialize Serial Monitor
  Serial.begin(115200);
  startOLED();
  startSensors();
  startLoRA();
  delay(2000);
}

void loop() {
  static unsigned long actualizoLoRA = 0;
 
  if (millis()- actualizoLoRA > 2000UL) {
      getReadings();            
      sendReadings();
      actualizoLoRA = millis();
  }
}

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.