Discussion about this post

User's avatar
inzane's avatar

If you want to use multiple sensors and use the potential of i2c you could change the following part of the code:

// Constructor

StemmaSoilSensor(int addr) : PollingComponent (30000)

{

this->i2c_addr = addr;

}

within esphome you can now do the following (max. 4 sensors :-) ):

sensor:

- platform: custom

lambda: |-

auto soil_sensor = new StemmaSoilSensor(0x36); // no bridge 0x36

App.register_component(soil_sensor);

return {soil_sensor->temperature_sensor, soil_sensor->moisture_sensor};

sensors:

- name: "Plant Temperature"

- name: "Plant Moisture"

- platform: custom

lambda: |-

auto soil_sensor = new StemmaSoilSensor(0x37); // sensor with AD0 bridged 0x37

App.register_component(soil_sensor);

return {soil_sensor->temperature_sensor, soil_sensor->moisture_sensor};

sensors:

- name: "Plant Temperature 2"

- name: "Plant Moisture 2"

- platform: custom

lambda: |-

auto soil_sensor = new StemmaSoilSensor(0x38); // sensor with AD1 bridged 0x38

App.register_component(soil_sensor);

return {soil_sensor->temperature_sensor, soil_sensor->moisture_sensor};

sensors:

- name: "Plant Temperature 3"

- name: "Plant Moisture 3"

- platform: custom

lambda: |-

auto soil_sensor = new StemmaSoilSensor(0x39); // sensor with AD0 and AD1 bridged 0x39

App.register_component(soil_sensor);

return {soil_sensor->temperature_sensor, soil_sensor->moisture_sensor};

sensors:

- name: "Plant Temperature 4"

- name: "Plant Moisture 4"

As you can see you can use 4 Sensors now.

Also if you have trouble while compiling,

watch that you have includes and libraries

esphome:

name: here-your-name

includes:

- stemma_soil_sensor.h

libraries:

- Wire

Expand full comment
Brian Wilson's avatar

This is what I did to get it working with a raspberry pi pico w

soil_sensor.h

```

#include "esphome.h"

#include "Adafruit_seesaw.h"

class SoilSensor : public PollingComponent, public Sensor {

public:

Adafruit_seesaw ss;

Sensor *TemperatureSensor = new Sensor();

Sensor *MoistureSensor = new Sensor();

SoilSensor() : PollingComponent(60000) {}

void setup() override {

ss.begin(0x36);

}

void update() override {

auto temp = ss.getTemp();

auto capread = ss.touchRead(0);

TemperatureSensor->publish_state(temp);

MoistureSensor->publish_state(capread);

}

};

```

```

esphome:

includes:

- soil_sensor.h

libraries:

- adafruit/Adafruit seesaw Library

```

```

# pico w

i2c:

sda: 8

scl: 9

```

```

sensor:

- platform: custom

lambda: |-

auto soil_sensor = new SoilSensor();

App.register_component(soil_sensor);

return {soil_sensor->TemperatureSensor, soil_sensor->MoistureSensor};

sensors:

- name: "Temperature"

unit_of_measurement: '°C'

- name: "Moisture"

```

Expand full comment
15 more comments...

No posts