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
}