I2C level converter with temperature sensors in pixhawk

Celsius Fast-Response, ±0.1°C Temperature Sensor (I2C) How can ı use this sensors in pixhawk?And ı am currently using QGC.
Thank you.

Hi esat,

You don’t need to use an I2C level converter if using a Celsius with a Pixhawk, the logic is already at 3.3v. Simply plug the sensor in to the Pixhawk I2C port. ArduSub and our version of QGC have native support.


Thank you Adam.How can ı get data in QGC?


ArduSub and our version of QGC have native support for the Celsius temperature sensor. Simply check the option to display “Hi-res Water Temp.” in the Value Widget Setup (gear icon next to artificial horizon).


I don’t see “Hi-res Water Temp.”. And ı saw temperature(1),temperature(2) and temperature(3). I choosed temperature(3) and nothing has changed.

Temp 3 shows that you need to update. Update thru bluerobotics links coz they maintain it themselves.
Check that it has good connection on pixhawk and in right port

You can get our recommended version of QGC here: Downloads

Thank you for your reply.But I downloaded new version and I didn’t see temperature.

How is the sensor connected? What version of ArduSub are you using?

I plug in I2C.(https://www.bluerobotics.com/store/electronics/celsius-sensor-r1/) (in pixhawk)
And I use the latest version.

Please make sure you are using ArduSub 3.5.3. You can look at Vehcle Setup → Summary → Frame → Version in QGC.

Hi, i tried the above but i don’t get a reading from the Hi-res Water temp. We are running the latest version of QGC and using ArduSub 3.5.3. I was able to find the Fast-Response, ±0.1°C Temperature Sensor on the I2C bus on the pixhawk by scanning the bus by an aruino uno which found it as an 0x77 adress. I was also able to read the temperature through the serial monitor on my arduino uno. Any tips for troubleshooting?

We have verified this is working here with ArduSub 3.5.3 and QGroundControl-BlueRobotics-Rev6. Can you verify your QGC and Ardusub software versions?

The QGC version is in the application window title bar, the ardusub version is here.

Thanks for your reply, i was not using the Qgroundcontrol with the blue robotics flavour :). I now have 4 temp readings in the monitor:

  1. temperature -1
  2. External temperature = 46
  3. Water temp 41.13
  4. Hi res water temp = 26.9

I guess no 2 and 3 are internal temp sensors in the pixhawk since they are fairly high and increasing.

If i connect only a bar02 sensor to the I2C bus the hi res water temp (no 4) is alive and respons when i touch the pressure sensor.

If i connect only a Fast-Response, ±0.1°C Temperature Sensor to the I2C bus the hi res water temp (no 4) is blank (–,–) .

If I connect the Fast-Response, ±0.1°C Temperature Sensor to an ardunino uno it works fine.

1 Like

and yes running ardusub 3.5.3…:slight_smile:

1 Like

#1 is for battery temperature or something, we don’t use it.

#2 is internal temperature (on the circuit board)

#3 is the temperature from the Bar30 sensor

#4 is the temperature from the Celsius sensor.

It is assumed that the Bar30 is being used on the vehicle. This is why when you unplug it, the temperature value from the Celsius moves to the #3 field.

hm, it does not make sense.

Case 1. No external sensors attached.

Internal temp and Water temp shows up, high readings and are increasing. Seems like both of these are related to pixhawk internal temp sensors. Hi-res water temp = --,–.

Case 2. Only Bar02 sensor connected.

Hi-res water temp comes to life. It respons when touching the Bar02 sensor.

Case 3. Only Celsius Fast-Response, ±0.1°C Temperature Sensor (from now on called only Celsius sensor)

Hi-res water temp goes back to --,–. Internal temp and water temp are still high and not changing when touching the Celsius sensor.

Case 4. Both Bar02 and Celcius sensor connected.

same as case 2. Hi res water temp responds when touching the Bar02 sensor. No response when touching the celsius sensor.

more details:

Both sensors are still working correctly when connected to arduino uno.


I got the TSYS01 to work with Pixhawk 2.1 after i changed:

bool TSYS01::init()


_dev = std::move(hal.i2c_mgr->get_device(1, TSYS01_ADDR));


_dev = std::move(hal.i2c_mgr->get_device(2, TSYS01_ADDR));


… in the TSYS01.cpp driver.

What autopilot board are you using?

ArduSub - Pixhawk 2 - Cube - board px4-v3.

Jacob, is the TSYS01 driver written for Pixhawk 1?