Receiving Data from TPMS Sensor (T12-6) Using ESP32 & CC1101 - Sync Word Issue

Hi everyone,

I’m trying to receive data from a TPMS pressure sensor for trucks, model T12-6, using an ESP32 and a CC1101 module. However, I’m struggling to find the correct sync word to use in the function cc1101.setSyncWord().

Here’s what I’ve done so far:

  • Set the frequency based on the sensor’s specifications (though I’m not entirely sure if it’s correct).
  • Tried different sync words, but none seem to work.
  • Captured some RF data using an SDR, but I’m not confident in identifying the sync word correctly.

If anyone has experience with decoding TPMS signals or has successfully received data from the T12-6 sensor, I’d really appreciate some guidance on how to determine the correct sync word.

Thanks in advance for your help!

This is my code:

#include <RadioLib.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_SH110X.h>

#define SCREEN_WIDTH 128 // OLED display width,  in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

#define CC1101_CS_PIN    4
#define CC1101_GDO0_PIN  5
#define CC1101_GDO2_PIN  17
#define CC1101_SCK_PIN   18
#define CC1101_MISO_PIN  19
#define CC1101_MOSI_PIN  23
#define CC1101_RST_PIN   -1 // Falls kein Reset-Pin verwendet wird

#define SCL 32
#define SDA 33

SPIClass newSPI(HSPI);

// Initialisiere das CC1101-Modul
CC1101 cc1101 = new Module(CC1101_CS_PIN, CC1101_GDO0_PIN, CC1101_RST_PIN, CC1101_GDO2_PIN, newSPI, SPISettings(2000000, MSBFIRST, SPI_MODE0));
Adafruit_SH1106G display = Adafruit_SH1106G(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

void setup() 
{
  pinMode(CC1101_SCK_PIN, OUTPUT);
  pinMode(CC1101_MOSI_PIN, OUTPUT);
  pinMode(CC1101_MISO_PIN, INPUT);
  pinMode(CC1101_CS_PIN, OUTPUT);
  pinMode(CC1101_GDO0_PIN, INPUT);
  pinMode(CC1101_GDO2_PIN, INPUT);

  Serial.begin(115200);
  Wire.begin(SDA, SCL);
  display.begin(0x3C, true);

  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0, 0);
  display.println("BONJOUR");
  display.display();



  Serial.println("Start Setup");

  newSPI.begin(CC1101_SCK_PIN, CC1101_MISO_PIN, CC1101_MOSI_PIN, CC1101_CS_PIN);

  int state = cc1101.begin();
  if (state == RADIOLIB_ERR_NONE) {
    Serial.println("CC1101 initialized successfully.");
  } else {
    Serial.print("CC1101 initialization failed, code ");
    Serial.println(state);
    while (true);
  }
  
  // Konfiguriere das CC1101-Modul für eine einfache OOK-Wetterstation
  cc1101.setFrequency(433.92);  // Setze die Frequenz auf 433 MHz
  cc1101.setBitRate(9.6);       // Setze die Bitrate auf 17.24 kbps
  cc1101.setOutputPower(10);    // Setze die Sendeleistung auf 10 dBm
  uint8_t syncWord[2] = { 211, 145 }; // Mot de synchronisation générique
  cc1101.setSyncWord(syncWord, 2);  // Passer un tableau de 2 octets

  cc1101.disableSyncWordFiltering(true);
  cc1101.setCrcFiltering(false); // Deaktiviert die CRC-Prüfung für einfache Wetterstationen
  cc1101.setOOK(true);          // Setze die Modulation auf OOK (ASK)
  cc1101.setFrequencyDeviation(60); // Setze Frequenzabweichung auf 40 kHz
  cc1101.setRxBandwidth(250.0); // Setze Empfangsbandbreite auf 270 kHz
  cc1101.setRxBandwidth(200.0); 
}

void loop() 
{
  // Daten, die gesendet werden sollen
  uint8_t data[] = {0xAA , 0xAA , 0xAA , 0xAA , 0xAA , 0xAA , 0xAA , 0xAA , 0xAA , 0xAA , 0xAA , 0xAA , 0xAA};
  int state = false;
  // Sende Daten
  
  state = cc1101.transmit(data, sizeof(data));
  
  // Überprüfe, ob das Senden erfolgreich war
  if (state == RADIOLIB_ERR_NONE) {
    Serial.println("Data sent successfully.");
  } else if (state == RADIOLIB_ERR_TX_TIMEOUT) {
    Serial.println("Transmit timeout!");
  } else {
    Serial.print("Send failed, code ");
    Serial.println(state);
  }

  // Empfange Daten
  uint8_t byteArr[64];
  state = cc1101.receive(byteArr, sizeof(byteArr));

  // Überprüfe, ob der Empfang erfolgreich war
  if (state == RADIOLIB_ERR_NONE) {
    Serial.println("Data received!");
    Serial.print("Data: ");
    display.clearDisplay();
    display.setTextSize(1);
    display.setTextColor(WHITE);
    display.setCursor(0, 0);
    display.println("Data:");

    for (int i = 0; i < sizeof(byteArr); i++) {
      Serial.print(byteArr[i], HEX);
      Serial.print(" ");
      display.println(byteArr[i], HEX);
    }
    display.display();
    Serial.println();
  } else if (state == RADIOLIB_ERR_CRC_MISMATCH) {
    Serial.println("CRC error!");
  } else if (state == RADIOLIB_ERR_RX_TIMEOUT) {
    Serial.println("Receive timeout!");
    display.clearDisplay();
    display.setTextSize(1);
    display.setTextColor(WHITE);
    display.setCursor(0, 0);
    display.println("Receive timeout!");
    display.display();
    

  } else {
    Serial.print("Receive failed, code ");
    Serial.println(state);
    display.clearDisplay();
    display.setTextSize(1);
    display.setTextColor(WHITE);
    display.setCursor(0, 0);
    display.println("Receive failed, code ");
    display.println(state);
    display.display();
  }

  delay(500); // Warte 2 Sekunden, bevor du erneut sendest
}

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.