5

I'm working with a Bluetooth TPMS Sensor (TP630).

Here I have some important information about the sensor:

Description:

➤ Bluetooth Transmit Power: 0dbm MAX

➤ Processor: 8-bit MCU / S08 core, ARM M0

➤ Battery capacity: 140mAh (CR1632)

Specification:

➤ Tire pressure monitoring range: 100-900kpa

➤ Tire temperature monitoring range: -30 ℃ to +80 ℃

➤ Bluetooth operating frequency: 2.4GHz

➤ Sleep current: 2.4uA

➤ Working temperature: -30 ℃ to + 80 ℃

➤ Tire pressure monitoring accuracy: ± 10kpa

➤ Tire temperature monitoring accuracy: ± 3 ℃ enter image description here

What I want is to get Pressure and Temperature data from the sensor while is installed in the tire with a Raspberry Pi 3.

The app has the options to select the units that you want from the sensor: Temperature: Celsius - Fahrenheit Pressure: Bar - Psi - kpa

I'm currently reading data selecting Celsius and Psi units.

I've tested with the Android App and also with the RPi3 working with BlueZ 5.47 with great results, because I can receive data from the sensor using sudo bluetoothctl.

[bluetooth]# scan on
Discovery started
[CHG] Controller B8:27:EB:47:AE:DD Discovering: yes
[CHG] Device 04:B3:EC:00:1E:65 RSSI: -76
[CHG] Device 04:B3:EC:00:1E:65 UUIDs: 0000fbb0-0000-1000-8000-00805f9b34fb
[CHG] Device 04:B3:EC:00:1E:65 ManufacturerData Key: 0x00ac
[CHG] Device 04:B3:EC:00:1E:65 ManufacturerData Value:
  b2 00 52 01 12 17 0c 15 0e 65 1e 00 ec b3 04     ..R......e..... 
[CHG] Device 04:B3:EC:00:1E:65 AdvertisingFlags:
  06                                               .               
[CHG] Device 04:B3:EC:00:1E:65 ManufacturerData Key: 0x00ac
[CHG] Device 04:B3:EC:00:1E:65 ManufacturerData Value:
  b2 2e 52 01 12 45 0c 15 0e 65 1e 00 ec b3 04     ..R..E...e..... 
[CHG] Device 04:B3:EC:00:1E:65 ManufacturerData Key: 0x00ac
[CHG] Device 04:B3:EC:00:1E:65 ManufacturerData Value:
  b2 2e 52 00 12 44 0c 15 0e 65 1e 00 ec b3 04     ..R..D...e..... 
[CHG] Device 04:B3:EC:00:1E:65 ManufacturerData Key: 0x00ac
[CHG] Device 04:B3:EC:00:1E:65 ManufacturerData Value:
  b2 2e 51 00 12 43 0c 15 0e 65 1e 00 ec b3 04     ..Q..C...e..... 
[bluetooth]# 
[CHG] Device 04:B3:EC:00:1E:65 RSSI: -86
[CHG] Device 04:B3:EC:00:1E:65 ManufacturerData Key: 0x00ac
[CHG] Device 04:B3:EC:00:1E:65 ManufacturerData Value:
  b1 2e 51 00 12 42 0c 15 0e 65 1e 00 ec b3 04     ..Q..B...e..... 
[CHG] Device 04:B3:EC:00:1E:65 ManufacturerData Key: 0x00ac
[CHG] Device 04:B3:EC:00:1E:65 ManufacturerData Value:
  b2 2e 51 00 12 43 0c 15 0e 65 1e 00 ec b3 04     ..Q..C...e.....

Doing some tests with the sensor, this sensor works through events and also, it seems to send data to every device that can scan for BLE devices. Every relevant event in the sensor (pressure or temperature change) makes the sensor to send data through bluetooth and I can see it with the scan on function.

The problem is that I want to decode the current data from the sensor. I think this is the most difficult part of the issue and I want to know if you can help me with this part.

Currently the last data according with the android app is: Temperature: 26 ℃ Pressure: 21.0 Psi

I've compile some lectures from the sensor and figure out some parts of the array:

b2 00 52 01 12 17 0c 15 0e 65 1e 00 ec b3 04 06 <- Removing the sensor
b2 2e 52 01 12 45 0c 15 0e 65 1e 00 ec b3 04 06 <- Installing the sensor
b2 2e 52 00 12 44 0c 15 0e 65 1e 00 ec b3 04 06 <- Read #1
b2 2e 51 00 12 43 0c 15 0e 65 1e 00 ec b3 04 06 <- Read #2
b1 2e 51 00 12 42 0c 15 0e 65 1e 00 ec b3 04 06 <- Read #3
b2 2e 51 00 12 43 0c 15 0e 65 1e 00 ec b3 04 06 <- Read #4
b1 2e 51 00 12 42 0c 15 0e 65 1e 00 ec b3 04 06 <- Read #5 
b2 2e 51 00 12 43 0c 15 0e 65 1e 00 ec b3 04 06 <- Read #6
b1 2e 51 00 12 42 0c 15 0e 65 1e 00 ec b3 04 06 <- Read #7
|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  \_ AdvertisingFlags: 00 or 06
|  |  |  |  |  |  |  |  |  |  |  |  |  |  \____ ************************
|  |  |  |  |  |  |  |  |  |  |  |  |  \_______ ************************ 
|  |  |  |  |  |  |  |  |  |  |  |  \__________ ******* DEVICE ID ******
|  |  |  |  |  |  |  |  |  |  |  \_____________ ************************
|  |  |  |  |  |  |  |  |  |  \________________ ************************
|  |  |  |  |  |  |  |  |  \___________________ ************************
|  |  |  |  |  |  |  |  \______________________ No change Recorded
|  |  |  |  |  |  |  \_________________________ No change Recorded
|  |  |  |  |  |  \____________________________ No change Recorded
|  |  |  |  |  \_______________________________ Pressure???
|  |  |  |  \__________________________________ No change Recorded
|  |  |  \_____________________________________ No idea
|  |  \ _______________________________________ Temperature???
|  \___________________________________________ No idea
\______________________________________________ No idea

Did you know how to decode this array of data? How can I get this info from the Raspberry Pi if I only need to decode hex values?

  • Normally device not transmit the data(s) if no request from application. I suggest to install BLE explorer application on Android/Ios phone such as BLE UUID. When app. connect to device, it show the services and characteristics of device. You can use feature in app. to access relevant data. If it the way you can get data. Please update. – Supot Sae-Ea Jan 5 '18 at 6:09
3

I've been working on what I think is the same system. Here's my code;

https://github.com/ricallinson/tpms

Bytes 8 to 11 as a unit32 are pressure in kPa (divide by 1000).

Bytes 12 to 15 as a unit32 are temperature in Celsius (divide by 100).

No idea what the other data represents.

Not the answer you're looking for? Browse other questions tagged or ask your own question.