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 ℃
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?