I need to decode a 433MHz remote control code by using a 433MHz cc1101 SPI transceiver, connected to a ESP32 module. I’m using Arduino IDE.
The cc1101 SPI transceiver is a chinese module such as the blue ones found in: link
It is, basically, a 3.3V cc1101 module featuring SPI, 433MHz radio with 10mW max power.
I successfully tested a pair of these modules by making them programatically exchanging data with each other by using Arduino lib SmartRC-CC1101-Driver-Lib, running on ESP32 WROOM-32D modules, namely by using CC1101 lib default examples “cc1101_New_Receive_method_advanced” and “cc1101_New_Transmitt_method_Serial_advanced”.
The remote control, on the other hand, is an ordinary fixed 433MHz frequency remote cloner like the one found in: link
(“This product can copy the remote control with the following chip inside: PT2264, PT2262, PT2260, PT2240, SC2262, SC2260, EV1527, SCT527, HS1527, HS2240, SCL1527, FP1527“)
The remote is also proven to be working as it is opening my garage door. Besides, I was able to decode it using a different 433MHz “Superheterodyne RF Receiver” module (running on an Arduino Mega), such as the one found in: link
This radio module major features include:
- RF frequency : 433.92 MHz
- Frequency band : +/- 150KHz
- Transmission rates : 2KHz to 10KHz
- RF Operating mode : ASK /OOK superheterodyne wireless reception
Using Arduino lib RF433any with this “Superheterodyne RF Receiver” module, following output for my remote is produced:
Data: 0b 80 a8
-----CODE START-----
// [WRITE THE DEVICE NAME HERE]
rf.register_Receiver(
RFMOD_TRIBIT, // mod
10368, // initseq
0, // lo_prefix
0, // hi_prefix
0, // first_lo_ign
342, // lo_short
996, // lo_long
0, // hi_short (0 => take lo_short)
0, // hi_long (0 => take lo_long)
376, // lo_last
10368, // sep
24 // nb_bits
);
-----CODE END-----
Other libs, such as rc-switch, also return same code (0b 80 a8 – or 753832). With less radio settings details though.
Unfortunately, I’m not able to decode my remote with my cc1101 modules (I would like to receive the 0b 80 a8 – or 753832 – code in my ESP32). Apparently, I’m receiving nothing at all!
Is it even possible to receive my remote code with this cc1101 module? Assuming so, which SmartRC-CC1101-Driver-Lib settings (as shown in the below Appendix) are required for this to work?
Of course, I’m willing to use any other ESP32 Arduino lib (along with its required settings) that may solve my issue.
Thank you!
Appendix - Here’s a complete list of SmartRC-CC1101-Driver-Lib lib default settings:
ELECHOUSE_cc1101.setCCMode(1); // set config for internal transmission mode.
ELECHOUSE_cc1101.setModulation(0); // set modulation mode. 0 = 2-FSK, 1 = GFSK, 2 = ASK/OOK, 3 = 4-FSK, 4 = MSK.
ELECHOUSE_cc1101.setMHZ(433.92); // Here you can set your basic frequency. The lib calculates the frequency automatically (default = 433.92).The cc1101 can: 300-348 MHZ, 387-464MHZ and 779-928MHZ. Read More info from datasheet.
ELECHOUSE_cc1101.setDeviation(47.60); // Set the Frequency deviation in kHz. Value from 1.58 to 380.85. Default is 47.60 kHz.
ELECHOUSE_cc1101.setChannel(0); // Set the Channelnumber from 0 to 255. Default is cahnnel 0.
ELECHOUSE_cc1101.setChsp(199.95); // The channel spacing is multiplied by the channel number CHAN and added to the base frequency in kHz. Value from 25.39 to 405.45. Default is 199.95 kHz.
ELECHOUSE_cc1101.setRxBW(812.50); // Set the Receive Bandwidth in kHz. Value from 58.03 to 812.50. Default is 812.50 kHz.
ELECHOUSE_cc1101.setDRate(99.97); // Set the Data Rate in kBaud. Value from 0.02 to 1621.83. Default is 99.97 kBaud!
ELECHOUSE_cc1101.setPA(10); // Set TxPower. The following settings are possible depending on the frequency band. (-30 -20 -15 -10 -6 0 5 7 10 11 12) Default is max!
ELECHOUSE_cc1101.setSyncMode(2); // Combined sync-word qualifier mode. 0 = No preamble/sync. 1 = 16 sync word bits detected. 2 = 16/16 sync word bits detected. 3 = 30/32 sync word bits detected. 4 = No preamble/sync, carrier-sense above threshold. 5 = 15/16 + carrier-sense above threshold. 6 = 16/16 + carrier-sense above threshold. 7 = 30/32 + carrier-sense above threshold.
ELECHOUSE_cc1101.setSyncWord(211, 145); // Set sync word. Must be the same for the transmitter and receiver. (Syncword high, Syncword low)
ELECHOUSE_cc1101.setAdrChk(0); // Controls address check configuration of received packages. 0 = No address check. 1 = Address check, no broadcast. 2 = Address check and 0 (0x00) broadcast. 3 = Address check and 0 (0x00) and 255 (0xFF) broadcast.
ELECHOUSE_cc1101.setAddr(0); // Address used for packet filtration. Optional broadcast addresses are 0 (0x00) and 255 (0xFF).
ELECHOUSE_cc1101.setWhiteData(0); // Turn data whitening on / off. 0 = Whitening off. 1 = Whitening on.
ELECHOUSE_cc1101.setPktFormat(0); // Format of RX and TX data. 0 = Normal mode, use FIFOs for RX and TX. 1 = Synchronous serial mode, Data in on GDO0 and data out on either of the GDOx pins. 2 = Random TX mode; sends random data using PN9 generator. Used for test. Works as normal mode, setting 0 (00), in RX. 3 = Asynchronous serial mode, Data in on GDO0 and data out on either of the GDOx pins.
ELECHOUSE_cc1101.setLengthConfig(1); // 0 = Fixed packet length mode. 1 = Variable packet length mode. 2 = Infinite packet length mode. 3 = Reserved
ELECHOUSE_cc1101.setPacketLength(0); // Indicates the packet length when fixed packet length mode is enabled. If variable packet length mode is used, this value indicates the maximum packet length allowed.
ELECHOUSE_cc1101.setCrc(1); // 1 = CRC calculation in TX and CRC check in RX enabled. 0 = CRC disabled for TX and RX.
ELECHOUSE_cc1101.setCRC_AF(0); // Enable automatic flush of RX FIFO when CRC is not OK. This requires that only one packet is in the RXIFIFO and that packet length is limited to the RX FIFO size.
ELECHOUSE_cc1101.setDcFilterOff(0); // Disable digital DC blocking filter before demodulator. Only for data rates ≤ 250 kBaud The recommended IF frequency changes when the DC blocking is disabled. 1 = Disable (current optimized). 0 = Enable (better sensitivity).
ELECHOUSE_cc1101.setManchester(0); // Enables Manchester encoding/decoding. 0 = Disable. 1 = Enable.
ELECHOUSE_cc1101.setFEC(0); // Enable Forward Error Correction (FEC) with interleaving for packet payload (Only supported for fixed packet length mode. 0 = Disable. 1 = Enable.
ELECHOUSE_cc1101.setPRE(0); // Sets the minimum number of preamble bytes to be transmitted. Values: 0 : 2, 1 : 3, 2 : 4, 3 : 6, 4 : 8, 5 : 12, 6 : 16, 7 : 24
ELECHOUSE_cc1101.setPQT(0); // Preamble quality estimator threshold. The preamble quality estimator increases an internal counter by one each time a bit is received that is different from the previous bit, and decreases the counter by 8 each time a bit is received that is the same as the last bit. A threshold of 4∙PQT for this counter is used to gate sync word detection. When PQT=0 a sync word is always accepted.
ELECHOUSE_cc1101.setAppendStatus(0); // When enabled, two status bytes will be appended to the payload of the packet. The status bytes contain RSSI and LQI values, as well as CRC OK.