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

20250924_152856.png

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

STM32F103 Pinout.png
schematic.png
20250909_151148.jpg
20250909_173941.jpg
20250909_173948.jpg

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

20250927_202134.jpg

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

20250927_201928.jpg
20250927_201921.jpg
20250913_000716.jpg
20250913_185732.jpg
20250913_185736.jpg

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

20250913_185756.jpg
Screenshot 2025-09-27 213249.png

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.

Interface With Applications

20250913_192123.jpg
20250913_185744.jpg

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!