Soil probe project

Hi, I am running into errors, a lot of them. As I am completely green to the tech world, but am working on a project that requires knowledge of it. I am trying to upload code to an ESP32-C3-DevKitM-1 (microcontroller) to connect the following sensors: BMP280 (pressure & altitude), SEN0137 (humidity & temp), Mikroe UV2 (ultraviolet), TSL2561 (visible light), SEN0159 (co2), SEN0322 (oxygen), TEL0132 (gps), SEN0604 (soil EC, pH, Temp, and moisture), SEN0605 (NPK).

here is the code I have so far.. any help would be greatly appreciated.

#include <Wire.h>
#include <Arduino.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <Adafruit_BMP280.h>
#include <Adafruit_SI1145.h>
#include <Adafruit_TSL2591.h>
#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLE2902.h>

// I2C addresses for SEN0604 and SEN0605 sensors
#define SEN0604_ADDRESS 0x50
#define SEN0605_ADDRESS 0x51

// DHT and Soil Moisture pins
#define DHTPIN 4
#define DHTTYPE DHT22
#define SOIL_MOISTURE_PIN A0

// Sensor Variables
float ec, ph, temp, moisture;
float nitrogen, phosphorus, potassium;

// Sensor Initialization
DHT dht(DHTPIN, DHTTYPE);
Adafruit_BMP280 bmp;
Adafruit_SI1145 uv = Adafruit_SI1145();
Adafruit_TSL2591 tsl = Adafruit_TSL2591(2591);

// BLE UUIDs
#define SERVICE_UUID "12345678-1234-1234-1234-123456789012"
#define CHARACTERISTIC_UUID "87654321-4321-4321-4321-210987654321"

BLEServer* pServer = NULL;
BLECharacteristic* pCharacteristic = NULL;
bool deviceConnected = false;

// BLE Callback Class
class MyServerCallbacks: public BLEServerCallbacks {
  void onConnect(BLEServer* pServer) {
    deviceConnected = true;
  };

  void onDisconnect(BLEServer* pServer) {
    deviceConnected = false;
  }
};

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

  // Initialize I2C
  Wire.begin(8, 9); // ESP32-C3 Default I2C: SDA=8, SCL=9

  // Initialize Sensors
  dht.begin();

  if (!bmp.begin()) {
    Serial.println("BMP280 not detected. Check wiring!");
    while (1);
  }

  if (!uv.begin()) {
    Serial.println("SI1145 not detected!");
    while (1);
  }

  if (!tsl.begin()) {
    Serial.println("TSL2591 not detected!");
    while (1);
  }

  // Check SEN0604 and SEN0605
  Serial.println("Checking SEN0604 and SEN0605...");
  if (!checkSensor(SEN0604_ADDRESS)) {
    Serial.println("Error: SEN0604 not detected.");
  } else {
    Serial.println("SEN0604 detected.");
  }
  if (!checkSensor(SEN0605_ADDRESS)) {
    Serial.println("Error: SEN0605 not detected.");
  } else {
    Serial.println("SEN0605 detected.");
  }

  // Initialize BLE
  BLEDevice::init("ESP32-C3 Soil Probe");
  pServer = BLEDevice::createServer();
  pServer->setCallbacks(new MyServerCallbacks());
  BLEService *pService = pServer->createService(SERVICE_UUID);
  
  pCharacteristic = pService->createCharacteristic(
                      CHARACTERISTIC_UUID,
                      BLECharacteristic::PROPERTY_READ |
                      BLECharacteristic::PROPERTY_NOTIFY
                    );
  pCharacteristic->addDescriptor(new BLE2902());
  pService->start();

  BLEAdvertising *pAdvertising = BLEDevice::getAdvertising();
  pAdvertising->addServiceUUID(SERVICE_UUID);
  pAdvertising->setScanResponse(true);
  BLEDevice::startAdvertising();
  Serial.println("BLE Ready and Advertising...");
}

void loop() {
  // Read and print sensor data
  readDHTSensor();
  readBMP280();
  readSoilMoisture();
  readUVSensor();
  readLightSensor();
  readSEN0604();
  readSEN0605();

  // Send data over BLE if connected
  if (deviceConnected) {
    String data = "EC: " + String(ec) + " mS/cm\n" +
                  "pH: " + String(ph) + "\n" +
                  "Temperature: " + String(temp) + " °C\n" +
                  "Moisture: " + String(moisture) + " %\n" +
                  "Nitrogen: " + String(nitrogen) + " mg/kg\n" +
                  "Phosphorus: " + String(phosphorus) + " mg/kg\n" +
                  "Potassium: " + String(potassium) + " mg/kg\n";
    pCharacteristic->setValue(data.c_str());
    pCharacteristic->notify();
  }

  delay(2000);
}

// Function to check I2C sensor connection
bool checkSensor(uint8_t address) {
  Wire.beginTransmission(address);
  return (Wire.endTransmission() == 0);
}

// Function to read DHT sensor
void readDHTSensor() {
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  if (!isnan(h) && !isnan(t)) {
    Serial.print("Humidity: "); Serial.print(h); Serial.println(" %");
    Serial.print("Temperature: "); Serial.print(t); Serial.println(" °C");
  } else {
    Serial.println("DHT Sensor error!");
  }
}

// Function to read BMP280
void readBMP280() {
  float pressure = bmp.readPressure();
  float altitude = bmp.readAltitude(1013.25);
  Serial.print("Pressure: "); Serial.print(pressure); Serial.println(" Pa");
  Serial.print("Altitude: "); Serial.print(altitude); Serial.println(" m");
}

// Function to read soil moisture
void readSoilMoisture() {
  int soilMoisture = analogRead(SOIL_MOISTURE_PIN);
  Serial.print("Soil Moisture: "); Serial.println(soilMoisture);
}

// Function to read UV sensor
void readUVSensor() {
  uint16_t uvIndex = uv.readUV();
  Serial.print("UV Index: "); Serial.println(uvIndex / 100.0);
}

// Function to read light sensor
void readLightSensor() {
  uint16_t visible = tsl.getLuminosity(TSL2591_VISIBLE);
  Serial.print("Visible Light: "); Serial.println(visible);
}

// Function to read SEN0604
void readSEN0604() {
  Wire.beginTransmission(SEN0604_ADDRESS);
  Wire.write(0x00);
  Wire.endTransmission();

  Wire.requestFrom(SEN0604_ADDRESS, 8);
  if (Wire.available() >= 8) {
    ec = Wire.read() * 0.1;
    ph = Wire.read() * 0.1;
    temp = Wire.read() * 0.1;
    moisture = Wire.read() * 0.1;
  } else {
    Serial.println("Error reading from SEN0604.");
  }
}

// Function to read SEN0605
void readSEN0605() {
  Wire.beginTransmission(SEN0605_ADDRESS);
  Wire.write(0x00);
  Wire.endTransmission();

  Wire.requestFrom(SEN0605_ADDRESS, 6);
  if (Wire.available() >= 6) {
    nitrogen = Wire.read() * 0.1;
    phosphorus = Wire.read() * 0.1;
    potassium = Wire.read() * 0.1;
  } else {
    Serial.println("Error reading from SEN0605.");
  }
}

And the errors you say you're running into would be?

(BTW, the general consensus is that those NPK sensors are a sham on a par with golf ball detectors, so don't waste your time with them.)

Below is the error code(s) I am running into when trying to load onto Microcontroller board, through Arduino Cloud:

In file included from /var/run/arduino/directories-user/libraries/ESP32_BLE_Arduino/src/BLEAdvertising.h:15,
from /var/run/arduino/directories-user/libraries/ESP32_BLE_Arduino/src/BLEServer.h:19,
from /run/arduino/sketches/Plantwatch-prototype-v6/Plantwatch-prototype-v6.ino:7:
/var/run/arduino/directories-user/libraries/ESP32_BLE_Arduino/src/FreeRTOS.h:61:28: error: 'ringbuf_type_t' has not been declared
Ringbuffer(size_t length, ringbuf_type_t type = RINGBUF_TYPE_NOSPLIT);
^~~~~~~~~~~~~~
In file included from /var/run/arduino/directories-user/libraries/ESP32_BLE_Arduino/src/BLECharacteristic.h:17,
from /var/run/arduino/directories-user/libraries/ESP32_BLE_Arduino/src/BLEServer.h:20,
from /run/arduino/sketches/Plantwatch-prototype-v6/Plantwatch-prototype-v6.ino:7:
/var/run/arduino/directories-user/libraries/ESP32_BLE_Arduino/src/BLEDescriptor.h:25:7: error: redefinition of 'class BLEDescriptor'
class BLEDescriptor {
^~~~~~~~~~~~~
In file included from /var/run/arduino/directories-user/libraries/ArduinoBLE/src/BLECharacteristic.h:25,
from /var/run/arduino/directories-user/libraries/ArduinoBLE/src/BLEService.h:23,
from /var/run/arduino/directories-user/libraries/ArduinoBLE/src/BLEDevice.h:25,
from /run/arduino/sketches/Plantwatch-prototype-v6/Plantwatch-prototype-v6.ino:6:
/var/run/arduino/directories-user/libraries/ArduinoBLE/src/BLEDescriptor.h:28:7: note: previous definition of 'class BLEDescriptor'
class BLEDescriptor {
^~~~~~~~~~~~~
In file included from /var/run/arduino/directories-user/libraries/ESP32_BLE_Arduino/src/BLEServer.h:20,
from /run/arduino/sketches/Plantwatch-prototype-v6/Plantwatch-prototype-v6.ino:7:
/var/run/arduino/directories-user/libraries/ESP32_BLE_Arduino/src/BLECharacteristic.h:53:7: error: redefinition of 'class BLECharacteristic'
class BLECharacteristic {
^~~~~~~~~~~~~~~~~
In file included from /var/run/arduino/directories-user/libraries/ArduinoBLE/src/BLEService.h:23,
from /var/run/arduino/directories-user/libraries/ArduinoBLE/src/BLEDevice.h:25,
from /run/arduino/sketches/Plantwatch-prototype-v6/Plantwatch-prototype-v6.ino:6:
/var/run/arduino/directories-user/libraries/ArduinoBLE/src/BLECharacteristic.h:45:7: note: previous definition of 'class BLECharacteristic'
class BLECharacteristic {
^~~~~~~~~~~~~~~~~
In file included from /var/run/arduino/directories-user/libraries/ESP32_BLE_Arduino/src/BLEServer.h:21,
from /run/arduino/sketches/Plantwatch-prototype-v6/Plantwatch-prototype-v6.ino:7:
/var/run/arduino/directories-user/libraries/ESP32_BLE_Arduino/src/BLEService.h:49:7: error: redefinition of 'class BLEService'
class BLEService {
^~~~~~~~~~
In file included from /var/run/arduino/directories-user/libraries/ArduinoBLE/src/BLEDevice.h:25,
from /run/arduino/sketches/Plantwatch-prototype-v6/Plantwatch-prototype-v6.ino:6:
/var/run/arduino/directories-user/libraries/ArduinoBLE/src/BLEService.h:28:7: note: previous definition of 'class BLEService'
class BLEService {
^~~~~~~~~~
/run/arduino/sketches/Plantwatch-prototype-v6/Plantwatch-prototype-v6.ino: In function 'void setup()':
/run/arduino/sketches/Plantwatch-prototype-v6/Plantwatch-prototype-v6.ino:87:14: error: 'init' is not a member of 'BLEDevice'
BLEDevice::init("ESP32-C3 Soil Probe");
^~~~
/run/arduino/sketches/Plantwatch-prototype-v6/Plantwatch-prototype-v6.ino:88:24: error: 'createServer' is not a member of 'BLEDevice'
pServer = BLEDevice::createServer();
^~~~~~~~~~~~
/run/arduino/sketches/Plantwatch-prototype-v6/Plantwatch-prototype-v6.ino:92:31: error: 'class BLEService' has no member named 'createCharacteristic'; did you mean 'addCharacteristic'?
pCharacteristic = pService->createCharacteristic(
^~~~~~~~~~~~~~~~~~~~
addCharacteristic
/run/arduino/sketches/Plantwatch-prototype-v6/Plantwatch-prototype-v6.ino:94:42: error: 'PROPERTY_READ' is not a member of 'BLECharacteristic'
BLECharacteristic::PROPERTY_READ |
^~~~~~~~~~~~~
/run/arduino/sketches/Plantwatch-prototype-v6/Plantwatch-prototype-v6.ino:95:42: error: 'PROPERTY_NOTIFY' is not a member of 'BLECharacteristic'
BLECharacteristic::PROPERTY_NOTIFY
^~~~~~~~~~~~~~~
/run/arduino/sketches/Plantwatch-prototype-v6/Plantwatch-prototype-v6.ino:97:47: error: no matching function for call to 'BLECharacteristic::addDescriptor(BLE2902*)'
pCharacteristic->addDescriptor(new BLE2902());
^
In file included from /var/run/arduino/directories-user/libraries/ArduinoBLE/src/BLEService.h:23,
from /var/run/arduino/directories-user/libraries/ArduinoBLE/src/BLEDevice.h:25,
from /run/arduino/sketches/Plantwatch-prototype-v6/Plantwatch-prototype-v6.ino:6:
/var/run/arduino/directories-user/libraries/ArduinoBLE/src/BLECharacteristic.h:91:8: note: candidate: 'void BLECharacteristic::addDescriptor(BLEDescriptor&)'
void addDescriptor(BLEDescriptor& descriptor);
^~~~~~~~~~~~~
/var/run/arduino/directories-user/libraries/ArduinoBLE/src/BLECharacteristic.h:91:8: note: no known conversion for argument 1 from 'BLE2902*' to 'BLEDescriptor&'
/run/arduino/sketches/Plantwatch-prototype-v6/Plantwatch-prototype-v6.ino:98:13: error: 'class BLEService' has no member named 'start'
pService->start();
^~~~~
/run/arduino/sketches/Plantwatch-prototype-v6/Plantwatch-prototype-v6.ino:100:45: error: 'getAdvertising' is not a member of 'BLEDevice'
BLEAdvertising *pAdvertising = BLEDevice::getAdvertising();
^~~~~~~~~~~~~~
/run/arduino/sketches/Plantwatch-prototype-v6/Plantwatch-prototype-v6.ino:103:14: error: 'startAdvertising' is not a member of 'BLEDevice'
BLEDevice::startAdvertising();
^~~~~~~~~~~~~~~~
/run/arduino/sketches/Plantwatch-prototype-v6/Plantwatch-prototype-v6.ino: In function 'void loop()':
/run/arduino/sketches/Plantwatch-prototype-v6/Plantwatch-prototype-v6.ino:127:22: error: 'class BLECharacteristic' has no member named 'notify'
pCharacteristic->notify();
^~~~~~
Multiple libraries were found for "Wire.h"
Used: /run/arduino/directories-data/packages/esp32/hardware/esp32/2.0.17/libraries/Wire
Not used: /run/arduino/directories-data/internal/FlexWire_1.2.1_1fc5f1d1a14af0e7
Multiple libraries were found for "BLEServer.h"
Used: /run/arduino/directories-data/internal/ESP32_BLE_Arduino_1.0.1_8ea2f3fb01d5c4be
Not used: /run/arduino/directories-data/internal/Seeed_Arduino_rpcBLE_1.0.0_8b4c5e8dbcca40e3
Not used: /run/arduino/directories-data/packages/esp32/hardware/esp32/2.0.17/libraries/BLE
Multiple libraries were found for "DHT.h"
Used: /run/arduino/directories-data/internal/DHT_kxn_3.4.4_e8785b1b9c67af18
Not used: /run/arduino/directories-data/internal/dht11esp8266examples_1.0.10_a9e082c0a22a7d7d
Not used: /run/arduino/directories-data/internal/uKit_Explore_1.2.28_13a98cd71cc29e10
Not used: /run/arduino/directories-data/internal/dht11esp8266_1.0.10_3c072ef8d61af961
Not used: /run/arduino/directories-data/internal/esp826611_1.0.16_00334015f1bcaea0
Not used: /run/arduino/directories-data/internal/DHT_sensor_library_1.4.6_c312b1aec24f4efc
Not used: /run/arduino/directories-data/internal/servodht11_1.0.10_7ab49b0e5e1d849a
Not used: /run/arduino/directories-data/internal/NanoPlayBoard_0.1.1_96e8fd2355834992
Not used: /run/arduino/directories-data/internal/Grove_Temperature_And_Humidity_Sensor_2.0.2_261181fd4a96dafa
Not used: /run/arduino/directories-data/internal/Modular_1.0.1_0da2bcec860c0503
Not used: /run/arduino/directories-data/internal/DHT118266_1.0.16_554bbe218f876118
Multiple libraries were found for "Adafruit_Sensor.h"
Used: /run/arduino/directories-data/internal/Adafruit_Unified_Sensor_1.1.15_c4f0a59ad82fa17d
Not used: /run/arduino/directories-data/internal/ClimaStick_1.3.1_233fdd430f7c3408
Multiple libraries were found for "Adafruit_I2CDevice.h"
Used: /run/arduino/directories-data/internal/Adafruit_BusIO_1.17.0_108eb3f39211207c
Not used: /run/arduino/directories-data/internal/VEGAIoT_BusIO_1.0.0_68606b9abaf94dc3
Not used: /run/arduino/directories-data/internal/EIS_INTERBOT_1.0.0_4c1ce07692fbb2fd
Not used: /run/arduino/directories-data/internal/EIS_0.0.1_7b9a78c117637fbc
Multiple libraries were found for "SPI.h"
Used: /run/arduino/directories-data/packages/esp32/hardware/esp32/2.0.17/libraries/SPI
Not used: /run/arduino/directories-data/internal/EventEthernet_1.0.0_bd9dd894ef7641f8
Multiple libraries were found for "BLEDevice.h"
Used: /run/arduino/directories-data/internal/ArduinoBLE_1.3.7_41ae5cc36c6d1baf
Not used: /run/arduino/directories-data/internal/BLEPeripheral_0.4.0_6be6946591f1a8b6
Not used: /run/arduino/directories-data/internal/ESP32_BLE_Arduino_1.0.1_8ea2f3fb01d5c4be
Not used: /run/arduino/directories-data/internal/Seeed_Arduino_rpcBLE_1.0.0_8b4c5e8dbcca40e3
Not used: /run/arduino/directories-data/internal/STM32duinoBLE_1.2.8_f9a918ecb63ccfba
Not used: /run/arduino/directories-data/internal/VEGA_ArduinoBLE_1.0.0_b0f76b1d3c4af35c
Not used: /run/arduino/directories-data/packages/esp32/hardware/esp32/2.0.17/libraries/BLE

It looks like you have one or more wrong sensor or device libraries for that source code. Please post a link to where did you found the code and/or the project you are trying to reproduce.

The best approach for beginners is to get each part of the project working separately, using the recommended sensor or device library and the library example(s) for each sensor in turn. Then start putting the pieces together.

Don't waste your time with this scam:

The code was generated via CodeGPT, based on the sensors selected and what the objectives are.

I will double check all libraries.

Sorry to hear that.

chatGPT doesn't know the coding rules, the code it produces very often does not work, and Arduino forum members are very unlikely to help. Good luck with your project!

Oh dear. Well, good luck with ChatGPT. You'll need it.

Then you should ask CodeGPT why it doesn't work.

Better, give it the complete list of error messages, ask it to fix the code and identify the correct libraries to install.

Let us know how that goes.

Have you considered researching, reading and learning? Start by learning one device at a time.

Did you ask the ChatGPT for a connection and wiring diagram too?

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