Miguel Montiel Vega
Published

Integration of the RAK12035 Sensor

This document outlines the complete process for adding and activating the RAK12035 sensor (a capacitive soil moisture sensor)

BeginnerWork in progress3 hours87
Integration of the RAK12035 Sensor

Things used in this project

Hardware components

WisBlock Base Board RAK5005-O
RAKwireless WisBlock Base Board RAK5005-O
×1
rak12035
×1
rak11300
×1
rak19007
×1

Software apps and online services

Arduino IDE
Arduino IDE
The Things Stack
The Things Industries The Things Stack

Hand tools and fabrication machines

Multitool, Screwdriver
Multitool, Screwdriver

Story

Read more

Code

2. Integration into the Existing Code:

Arduino
cpp
CopiarEditar
#define SOIL_SENSOR_PIN WB_A0 // Define the analog pin for the sensor

float readSoilHumidity() {
  int analogValue = analogRead(SOIL_SENSOR_PIN);
  float humidityPercentage = map(analogValue, 2600, 1300, 0, 100);
  humidityPercentage = constrain(humidityPercentage, 0, 100);
  return humidityPercentage;
}
cpp
CopiarEditar
void loop() {
  if (!bme.performReading()) {
    Serial.println("Error reading BME680 sensor data");
    return;
  }

  float temp = bme.temperature;
  float hum = bme.humidity;
  float pres = bme.pressure / 100.0;
  float iaq = bme.gas_resistance / 1000.0;
  float soilHumidity = readSoilHumidity();
  Serial.printf("T: %.2f°C, H: %.2f%%, P: %.2f hPa, IAQ: %.2f kΩ, Soil: %.2f%%\n", temp, hum, pres, iaq, soilHumidity);

  uint8_t payload[10];
  memcpy(payload, &temp, 2);
  memcpy(payload + 2, &hum, 2);
  memcpy(payload + 4, &pres, 2);
  memcpy(payload + 6, &iaq, 2);
  memcpy(payload + 8, &soilHumidity, 2);

  api.lorawan.send(payload, sizeof(payload), 2, false);

  delay(300000); // 5 minutes between readings
}

3. Update the Loop to Include Humidity:

Arduino
cpp
CopiarEditar
void loop() {
  if (!bme.performReading()) {
    Serial.println("Error reading BME680 sensor data");
    return;
  }

  float temp = bme.temperature;
  float hum = bme.humidity;
  float pres = bme.pressure / 100.0;
  float iaq = bme.gas_resistance / 1000.0;
  float soilHumidity = readSoilHumidity();

  Serial.printf("T: %.2f°C, H: %.2f%%, P: %.2f hPa, IAQ: %.2f kΩ, Soil: %.2f%%\n", temp, hum, pres, iaq, soilHumidity);

  uint8_t payload[10];
  memcpy(payload, &temp, 2);
  memcpy(payload + 2, &hum, 2);
  memcpy(payload + 4, &pres, 2);
  memcpy(payload + 6, &iaq, 2);
  memcpy(payload + 8, &soilHumidity, 2);

  api.lorawan.send(payload, sizeof(payload), 2, false);

  delay(300000); // 5 minutes between readings
}

Registration and Configuration in TTN:

Arduino
javascript
CopiarEditar
function decodeUplink(input) {
  return {
    data: {
      temperature: input.bytes[0] + (input.bytes[1] << 8),
      humidity: input.bytes[2] + (input.bytes[3] << 8),
      pressure: input.bytes[4] + (input.bytes[5] << 8),
      airQuality: input.bytes[6] + (input.bytes[7] << 8),
      soilHumidity: input.bytes[8] + (input.bytes[9] << 8)
    },
    warnings: [],
    errors: []

Credits

Miguel Montiel Vega
11 projects • 9 followers
Teacher at Maude Studio & Erasmus+ project member: "Developing Solutions to Sustainability Using IoT" (2022-1-PT01-KA220-VET-000090202)

Comments