[Solved] Connecting 3 ENV units via 1 to 3 Hub to M5 Stack



  • Hello,

    is it possible to connect 3 Env Units via a 1 to 3 Hub to a M5 Stack and reading measurements of each of them?

    Thanks & Best regards
    Thomas



  • I also found the I2C 1 Hub to 6 Expansion Unit. I guess that this would be a better choice to connect more than one ENV unit to a M5 Stack device. Am I right?



  • @thbonk said in Connecting 3 ENV units via 1 to 3 Hub to M5 Stack:

    I also found the I2C 1 Hub to 6 Expansion Unit. I guess that this would be a better choice to connect more than one ENV unit to a M5 Stack device. Am I right?

    Correct. With the other 1 to 3 Hub, you would have address conflicts. Use the 1 to 6 Expansion Unit.


  • M5Stack

    @thbonk yes use Pahub(the 1 to 6 Expansion Unit) would be a best choice to connect more than one ENV unit to a M5 Stack device.



  • @m5stack Do you have a link to an example to access the ENV sensors via I2C hub? I'm using the Arduino IDE.



  • Maybe you can use the ENV example,then set the ENV I2C Address(to their port I2C address).You can see the examples of ENV and PaHub.Like:

    // Defines
    #define PaHub_I2C_ADDRESS	0x70
    #define ENV1_ADD	<Your I2C address>
    #define ENV2_ADD	<Your I2C address>
    #define ENV3_ADD	<Your I2C address>
    #define ENV4_ADD	<Your I2C address>
    ...
    
    

  • M5Stack



  • @m5stack @sysdl132 I don't get it working. I have connected the PaHUB to my M5Stack and two ENV sensors to the PaHUB.

    When I run the PaHUB demo, it shows the addresses 0x5C, 0x70, 0x75 and 0x76 for channel 0 and 1, and 0x5C, 0x70, 0x75 for the remaining channels.

    I my own program, I added the class TCA9548A and DHT22 (I renamed TCA9548A to PaHUB).

    My setup function looks like this:

    #define PaHub_I2C_ADDRESS  0x70
    #define ENV_I2C_ADDRESS    0x76
    
    PaHUB pahub;
    
    void setup() {
      ez.begin();
      Wire.begin();
      pahub.address(PaHub_I2C_ADDRESS);
    }
    

    I defined a struct for my sensors:

    struct Sensor {
      uint8_t channel;
      DHT12   device;
      char*   name;
    };
    

    and an array of the struct which is initialized that way:

    struct Sensor sensors[] = {
      {0, DHT12(CELSIUS, ENV_I2C_ADDRESS), "Left"},
      {1, DHT12(CELSIUS, ENV_I2C_ADDRESS), "Hotspot"},
      {2, DHT12(CELSIUS, ENV_I2C_ADDRESS), "Right"},
      {3, DHT12(CELSIUS, ENV_I2C_ADDRESS), "Left"},
      {4, DHT12(CELSIUS, ENV_I2C_ADDRESS), "Hotspot"},
      {5, DHT12(CELSIUS, ENV_I2C_ADDRESS), "Right"}
    };
    

    This is how I'm reading the sensors:

    struct SensorValues readSensor(int channel) {
      struct SensorValues sensorValues;
      struct Sensor sensor = sensors[channel];
      uint8_t returnCode = pahub.selectChannel(sensor.channel);
    
      Serial.println(" ---------- readSensor() ----------");
      Serial.print("pahub.selectChannel(");
      Serial.print(sensor.channel);
      Serial.print(") = ");
      Serial.println(returnCode);
    
      if (returnCode == 0) {
        sensorValues.temperature = sensor.device.readTemperature();
        sensorValues.humidity = sensor.device.readHumidity(); 
      }
    
      Serial.println(" ---------- readSensor() ----------");
    
      return sensorValues;
    }
    

    Unfortunately I'm receiving always 0 for both the temperature and the humidity.
    Could anybody please give me a hint what I'm doing wrong?

    Thanks & Best regards
    Thomas


  • M5Stack

    @thbonk actually , the ENV Unit build-in two sensor IC. they I2C address is DHT12(0x5C) , BMP280(0x76), i saw your code. you was only define a 0x76 , but it is the BMP280 I2C address.



  • @m5stack I only want to read the temperature and the humidity of the sensors connected to the PaHUB.

    The M5Stck was connected to the Base BTC. The PaHUB was connected to the red Grove port and two ENV sensors were connected to channels 0 and 1 of the PaHUB. I then installed my application, but the ENV sensors connected to the PaHUB didn't deliver any values. When I queried the channels 2-5 of PaHUB I received values, but all were the same.

    So I disconnected the M5Stack from the Base BTC; afterwards I received the temperature and humidity of the two ENV sensors connected to channels 0 and 1 of the PaHUB.

    Is it somehow possible to connect the M5Stack to the Base BTC but read the sensors connected to the PaHUB? Or do I need the PbHUB to achieve this?

    Best regards
    Thomas


  • M5Stack

    @thbonk in the I2C bus, you can't use two same address device at the same time. so if you connect the BTC to the BASIC, when the PaHUB switch channal select ENV Unit, it will working not normal. beacuse BTC and ENV all used DHT12, also has same I2C address