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



  • @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



  • I keep finding this thread whenever I search using ENV II over PaHUB, so instead of openning a new one I wanted to continue on this.

    I am new to development boards however I am an experienced platform developer.

    I have a Core2 and I want to use PaHUB and add couple of more units to read. I have no problem reading data via using Wire command over PaHUB like using 4way Relay.

    However, I have no idea how to use BMP and SHT over PaHUB. I have tried combining examples without any luck and tried above without any luck.

    Question is after portselect, how come bmp access to right address? If you can point me to any direcon, I will be grateful.

    Cheers.