Using Color Sensor TC34725 with Pbhub



  • Re: Using IR Remote sensor with PbHub

    Just following up this question from some months ago, I was wondering if anyone had been able to operate the Color Sensor via a Pbhub channel? (I have been trying for quite some time now and am out of ideas).

    My specific question when looking essentially at trying to extend the example TC34725 sketch to channel 0 in pbhub is that I don't understand how to get
    tcs.getRawData(&red, &green, &blue, &clear);
    to read data from the channel 0 address of the porthub?

    Just so that the Color Sensor sketch is here:

    #include "Adafruit_TCS34725.h"
    
    /* Example code for the Adafruit TCS34725 breakout library */
    
    /* Connect SCL    to analog 5
       Connect SDA    to analog 4
       Connect VDD    to 3.3V DC
       Connect GROUND to common ground */
    
    /* Initialise with default values (int time = 2.4ms, gain = 1x) */
    // Adafruit_TCS34725 tcs = Adafruit_TCS34725();
    
    /* Initialise with specific int time and gain values */
    Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_614MS, TCS34725_GAIN_1X);
    
    void setup(void) {
      Serial.begin(9600);
    
      if (tcs.begin()) {
        Serial.println("Found sensor");
      } else {
        Serial.println("No TCS34725 found ... check your connections");
        while (1);
      }
    
      // Now we're ready to get readings!
    }
    
    void loop(void) {
      uint16_t r, g, b, c, colorTemp, lux;
    
      tcs.getRawData(&r, &g, &b, &c);
      // colorTemp = tcs.calculateColorTemperature(r, g, b);
      colorTemp = tcs.calculateColorTemperature_dn40(r, g, b, c);
      lux = tcs.calculateLux(r, g, b);
    
      Serial.print("Color Temp: "); Serial.print(colorTemp, DEC); Serial.print(" K - ");
      Serial.print("Lux: "); Serial.print(lux, DEC); Serial.print(" - ");
      Serial.print("R: "); Serial.print(r, DEC); Serial.print(" ");
      Serial.print("G: "); Serial.print(g, DEC); Serial.print(" ");
      Serial.print("B: "); Serial.print(b, DEC); Serial.print(" ");
      Serial.print("C: "); Serial.print(c, DEC); Serial.print(" ");
      Serial.println(" ");
    }```


  • Hello @learly6

    I don't think you can use a PbHub for the TCS347225. The PbHub is meant for simple I/O whereas the TCS347225 is an I2C device. Did you mean a PaHub - which acts as an I2C switch? But normally you only need a PaHub if you have multiple of the same sensors which share the same I2C address.

    Thanks
    Felix



  • Hi @felmue ,
    Thanks for replying. I know that PbHub is meant for the simple I/O, but I was wondering if it were possible to use softwarewire or some other method to read the sensor data from a PbHub channel. My research supervisor has suggested I do this and has requested so without using a PaHub, but I don't fully understand how it would be possible.

    Thanks,
    L



  • Hello @learly6

    M5Stack devices already have an I2C port (port A). Is there a particular reason you cannot simply connect the TCS347225 to port A? What is the reason you want to use a PbHub?

    Thanks
    Felix



  • @felmue ,

    Right, because of the combination of sensors I am required to connect to the M5, I need to use a Hub. I am not only connecting the TC34725, but also a PIR motion, Ultrasonic, DLight, TOF, ENVIII, etc. (7 sensors as of now).

    I was thinking of something like this library to achieve this: http://todbot.com/blog/2010/09/25/softi2cmaster-add-i2c-to-any-arduino-pins/comment-page-2/

    Thanks,
    L



  • Hello @learly6

    in general all sensors which use I2C can be connected to port A in parallel - no need for a PaHub or PbHub. They only need to have different I2C addresses.

    You won't need the library you mentioned above. ESP32 allows to set almost any pins to be used for almost any function, e.g. I2C.

    Most of the sensors you mentioned above use I2C. Unfortunately two of them have the same address. So you either need a PaHub or you need to setup two I2C buses.

    • TC34725 (0x29)
    • Ultrasonic (0x57)
    • DLight (0x23)
    • ToF (0x29)
    • ENVIII (SHT30:0x44 , QMP6988:0x70)
    • PbHub (0x61)

    The PIR sensor uses a GPIO. You can either connect it directly to a GPIO of the M5Stack or you can use a PbHub.

    Thanks
    Felix



  • Hi,

    Right, all will be I2C except for the PIR and IR remote, which was part of my confusion (as to why the research supervisor chose a PbHub instead of a PaHub and also suggested this route instead of a parallel setup with grove hubs). But understanding that I don't need to do it using a PbHub, would it be possible using the softI2C library (or via some other method)?



  • Hello @learly6

    no, you don't need a softI2C library. The ESP32 in the M5Stack device already takes care of that for you. You can select almost any two pins to be used for I2C. This tutorial explains it quite nicely.

    Thanks
    Felix



  • This post is deleted!