LSatan / SmartRC-CC1101-Driver-Lib

This driver library can be used for many libraries that use a simple RF ASK module, with the advantages of the cc1101 module. It offers many direct setting options as in SmartRF Studio and calculates settings such as MHz directly.
Other
390 stars 84 forks source link

Receive long(er) telegrams e.g. wMBUS - possible? (ESP32 + CC1101) #147

Open Whopper500 opened 3 months ago

Whopper500 commented 3 months ago

Hello, I try to receive wireless MBUS Telegrams e.g. from Smoke Detectors, Water Meters and Heat Cost Allocators. I war able to configure the CC1101 in the Examples according to the wMBUS specifications (see code below). I receive Telegrams successfully, but the Telegrams seem to be repeated within the Serial-Print?!

Is it not possible to receive longer Telegrams than xx Bytes? (32? 61? 64?) How can I adapt the library in order to receive longer telegrams?

Here is the code: `

include

const uint8_t WMBUS_T_CC1101_CONFIG_LEN = 47; const uint8_t WMBUS_T_CC1101_CONFIG_BYTES[] = { CC1101_IOCFG2,0x06, // GDO2 output pin configuration CC1101_IOCFG1,0x2E, // GDO1 output pin configuration CC1101_IOCFG0,0x00, // GDO0 output pin configuration //IOCFG0=0x02 (TX) or 0x00 (RX) CC1101_FIFOTHR,0x7, // RX FIFO and TX FIFO thresholds CC1101_SYNC1,0x3D, // Sync word, high INT8U // ACHTUNG! In anderen Skripts falsch herum! 0x3D CC1101_SYNC0,0x54, // Sync word, low INT8U // ACHTUNG! In anderen Skripts falsch herum! 0x54 CC1101_PKTLEN,0xFF, // Packet length CC1101_PKTCTRL1,0x0, // Packet automation control // original: 0x4, disable APPEND_STATUS //PKTCTRL1=0x4 !!!!!!! CC1101_PKTCTRL0,0x0, // Packet automation control CC1101_ADDR,0x0, // Device address CC1101_CHANNR,0x0, // Channel number CC1101_FSCTRL1,0x8, // Frequency synthesizer control CC1101_FSCTRL0,0x0, // Frequency synthesizer control CC1101_FREQ2,0x21, // Frequency control word, high INT8U CC1101_FREQ1,0x6B, // Frequency control word, middle INT8U CC1101_FREQ0,0xD0, // Frequency control word, low INT8U CC1101_MDMCFG4,0x5C, // Modem configuration // MDMCFG4=0x5C (RX:103 kbaud) or 0x5B (TX:100 kbaud) CC1101_MDMCFG3,0x4, // Modem configuration // MDMCFG3=0x4 (RX:103 kbaud) or 0xF8 (TX:100 kbaud) CC1101_MDMCFG2,0x5, // Modem configuration CC1101_MDMCFG1,0x22, // Modem configuration CC1101_MDMCFG0,0xF8, // Modem configuration CC1101_DEVIATN, 0x44, // Modem deviation setting // DEVIATN= 0x44 (RX: 38 kHz) or 0x50 (TX: 50 kHz) CC1101_MCSM2,0x7, // Main Radio Control State Machine configuration CC1101_MCSM1,0x00, // Main Radio Control State Machine configuration CC1101_MCSM0,0x18, // Main Radio Control State Machine configuration CC1101_FOCCFG,0x2E, // Frequency Offset Compensation configuration CC1101_BSCFG,0xBF, // Bit Synchronization configuration CC1101_AGCCTRL2,0x43, // AGC control CC1101_AGCCTRL1,0x9, // AGC control CC1101_AGCCTRL0,0xB5, // AGC control CC1101_WOREVT1,0x87, // High INT8U Event 0 timeout CC1101_WOREVT0,0x6B, // Low INT8U Event 0 timeout CC1101_WORCTRL,0xFB, // Wake On Radio control CC1101_FREND1,0xB6, // Front end RX configuration CC1101_FREND0,0x10, // Front end TX configuration CC1101_FSCAL3,0xEA, // Frequency synthesizer calibration CC1101_FSCAL2,0x2A, // Frequency synthesizer calibration CC1101_FSCAL1,0x0, // Frequency synthesizer calibration CC1101_FSCAL0,0x1F, // Frequency synthesizer calibration CC1101_RCCTRL1,0x41, // RC oscillator configuration CC1101_RCCTRL0,0x0, // RC oscillator configuration CC1101_FSTEST,0x59, // Frequency synthesizer calibration control CC1101_PTEST,0x7F, // Production test CC1101_AGCTEST,0x3F, // AGC test CC1101_TEST2,0x81, // Various test settings CC1101_TEST1,0x35, // Various test settings CC1101_TEST0,0x9 // Various test settings };

void setup(){

Serial.begin(115200);
Serial.println();
Serial.println("Start");

ELECHOUSE_cc1101.setSpiPin(14, 12, 13, 15);
if (ELECHOUSE_cc1101.getCC1101()) {
    Serial.println("Connection OK");
} else {
    Serial.println("Connection Error");
}
ELECHOUSE_cc1101.Init();
for (uint8_t i = 0; i < WMBUS_T_CC1101_CONFIG_LEN; i++) {
    ELECHOUSE_cc1101.SpiWriteReg(WMBUS_T_CC1101_CONFIG_BYTES[i << 1],
                                 WMBUS_T_CC1101_CONFIG_BYTES[(i << 1) + 1]);
}
ELECHOUSE_cc1101.SpiStrobe(CC1101_SCAL);
if (ELECHOUSE_cc1101.SpiReadStatus(CC1101_VERSION) != 4) {
    Serial.println(
        "WARNING! CC1101_VERSION should be equal 4! Is there any "
        "connection issue?");
}
ELECHOUSE_cc1101.SetRx();
Serial.println("device initialized");

ELECHOUSE_cc1101.setCrc(0);

Serial.println("Rx Mode"); }

int len = 0; String txt = ""; byte buffer[500] = {0};

void loop(){ //Checks whether something has been received. //When something is received we give some time to receive the message in full.(time in millis) if (ELECHOUSE_cc1101.CheckRxFifo(100)){

//CRC Check. If "setCrc(false)" crc returns always OK! if (ELECHOUSE_cc1101.CheckCRC()){

//Get received Data and calculate length len = ELECHOUSE_cc1101.ReceiveData(buffer); txt = "[" + String(len) + "]"; buffer[len] = '\0';

//Print received in bytes format. for (int i = 0; i<len; i++){ if ((String(buffer[i], HEX)).length() == 2) { txt += String(buffer[i], HEX); } else { txt += "0" + String(buffer[i], HEX); } } Serial.println(txt); memset(buffer, 0, sizeof(buffer)); txt = "";

} } } `

The telegram in the buffer for a smoke detector looks like: 5e442515180658010c1a48537a7500502584d6aa51170c6ba75ea2ee35949fd99dfc94ad8cad40cf07040121b2f92cda17e27549e869bb2da1345b9c2c5866b4b45e442515180658010c1a48537a7500502584d6aa51170c6ba75ea2ee35949fd99dfc94ad8cad40cf07040121b2f92cda17e27549e869bb2da1345b9c2c5866b45e442515180658010c1a48537a7500502584d6aa51170c6ba75ea2ee35949fd99dfc94ad8cad40cf07040121b2f92cda17e27549e869bb2da1345b9c2c586666b45e442515180658010c1a48

As you can see, the telegram repeats itself: 5e442515180658010c1a48537a7500502584d6aa51170c6ba75ea2ee35949fd99dfc94ad8cad40cf07040121b2f92cda17e27549e869bb2da1345b9c2c5866b4b4 5e442515180658010c1a48537a7500502584d6aa51170c6ba75ea2ee35949fd99dfc94ad8cad40cf07040121b2f92cda17e27549e869bb2da1345b9c2c5866b4 5e442515180658010c1a48537a7500502584d6aa51170c6ba75ea2ee35949fd99dfc94ad8cad40cf07040121b2f92cda17e27549e869bb2da1345b9c2c586666b4 5e442515180658010c1a48

A correct telegram looks like this: 5e442515485001000c1a7a23005025568aed71e43af834900bec738e08c4fa2637b8915fb401fd6296f19c3aeeceebc3164b967cd5445e6aafe90f416314191cb1839210b7cd2efe168911fd465dab56ccda9c82862b90f29353ab57532b49

I don´t understand the reason for this behavior. What I could find out by myself in the last couple of days is:

I would appreciate any help! Thanks in advance

ebuyusufkaratas commented 1 month ago

Hi, Have you made any progress?