USB433 - Sniff & Transmit OOK 433.92 MHz
by TimeHack in Circuits > Remote Control
393 Views, 6 Favorites, 0 Comments
USB433 - Sniff & Transmit OOK 433.92 MHz

I recently finished a 433.92 MHz On-Off-Keyed (OOK) sniff & send module which uses USB with a host computer to listen for received signals and transmit data.
Intended for wireless outlet switch command mimicry, this can also be used to detect and repeat weather station data, garage door controllers, and much more, to automate and streamline aspects of your life. For complete and up-to-date project files, please visit this project's GitHub repository.
Supplies
Hardware:
STM32F103 Microcontroller (the STM32 Blue Pill can work; just pay attention to pinouts)
433 MHz OOK Receiver and Transmitter (I used SRX882 and STX882)
Optional: 3D Printer for printing the enclosure
Optional: LED's for user feedback
4x M3x12 hex socket screws
4x M3 hex nuts
Software:
KiCAD 6.0 (If you're modifying the PCB or generating the DRL files for PCB fabrication)
STM32CubeIDE (for flashing the STM32 with ease)
Optional: Hercules Setup Utility (for testing serial commands)
Electrical Connections





Once you have all supplies on hand, assemble the RX / TX modules and STM32 according to the processor connection diagrams attached here. If you're having the PCB fabricated from the GitHub files, you can skip this step.
If you're using the STM32 Blue Pill, connect the pins based on the attached STM32CubeIDE screenshot:
A0: TIM2_CH1 --> RX Data
A8: TIM1_CH1 --> TX Data
C13: USB_ACT --> User indication LED (active high)
B7: TX_ACT --> User indication LED (active high)
B6: RX_EN --> RX module Enable Pin & User indication LED (active high)
3.3V: VCC --> RX and TX Vin
Flashing Firmware

Now that hardware is built, flash your STM32 with the current firmware version from GitHub. Because the firmware was developed in STM32CubeIDE, that is the easiest route to flash; however, if you insist on using Arduino, you'll need to port the file structure with all driver, middleware, and source files to an Arduino project directory.
The custom PCB incorporates a header at the rear of the module for in-circuit programming the STM32, similar to the Blue Pill board, to make flashing easy using an STLink v2 (shown here) or v3.
Print & Assemble the Case





If you're using the project files included, there are STEP files for the top and bottom case to import to your preferred slicer. I recommend 100% infill, especially for the case top, as the nuts can strip in the hole if you use too much torque during assembly.
The PCB design incorporates connections for U.FL antennas. I used a U.FL to SMA coax to extend connections to the case exterior. The design makes assembly easy with cutouts on the sides to wrap the antenna wires around the board. The case bottom also uses the side of the enclosure to hold one hex face of the SMA connector for tightening the connector in place.
Be cautious of the position of the antenna coax, as it can get pinched between the case halves. Also ensure the M3 nuts are seated in their recesses, as the M3x12 screws are just long enough to catch and pull the case snug.
Finally, attach any external antennas to your module.
Testing


With assembly complete, connect your module via USB to your computer and open the serial port for it. I used Hercules setup utility for this task.
If it is functioning correctly, sending the command 'version' should return the current firmware version (2.1.0 as of this publishing). Attached is an API reference guide for this module, including status code meanings, command strings, and message structures for both synchronous and asynchronous messages.
In the test screenshot here, I followed these steps:
Check firmware version - passed
Check system status (code 256 means the transmit buffer is empty) - passed
Check system receiver mode (returned automatic receiver disable) - passed
Change receiver mode to always on - passed
Transmit a 24-bit word and verify transmit-complete and received-message messages are as expected - passed
Received word ignored the synchronization bit, as expected per default system settings
Transmitted word prepended a synchronization bit, as expected.
Both transmit-complete and received-message asynchronous messages were returned, as expected.
Downloads
Interface With Applications


Now you can use your USB433 module with other systems. I'm developing a python-based script to allow manual and daylight-adjusted / scheduled switching of wireless outlets via a local web server. Stay tuned for an instructions on how to deploy that.
I'm sure this system could be integrated to Home Assistant somehow, but I haven't looked into that too much. If anyone in the community wants to take a shot at that, I'd love to collaborate.
I look forward to what everyone comes up with using this!