Bare Si4463 radio modules: where are working Arduino examples hiding?
Different project from my pigpio question. We have a water tank about 900 m from the building, no power to spare and no cable. I bought a pair of bare Si4463 modules (433 MHz, SPI) because the datasheet range figures looked great, planning one at the tank on an Arduino Pro Mini and one on the Pi that already sends everything to Hermetry.
Problem: I can’t find a single example that just sends a packet. Silicon Labs’ material assumes their own tools, and everything I find on GitHub is either half finished or for a different board. Has anyone actually used these with Arduino?
HC-12 modules are an Si4463 with a small MCU on top that gives you a plain serial port. If you don’t need anything fancy, that’s the lazy route.
Kevin’s right that HC-12 is the easy way. With bare modules, the piece most people miss is that the Si446x chips don’t have a register map you just poke. You load a configuration blob that Silicon Labs’ WDS tool generates (radio_config.h) for your frequency, modulation and data rate, and send it to the chip at startup.
The library that works for me is RadioHead, driver RH_RF24, which supports Si4460/4461/4463. It ships with a set of ready configurations, so you don’t need WDS unless you want something unusual. Minimal sender:
#include <SPI.h>
#include <RH_RF24.h>
RH_RF24 rf24(10, 2, 9); // CS, nIRQ, SDN
void setup() {
Serial.begin(9600);
if (!rf24.init()) Serial.println("init failed");
rf24.setFrequency(433.92);
rf24.setTxPower(0x4f);
}
void loop() {
uint8_t msg[] = "lvl=182";
rf24.send(msg, sizeof(msg));
rf24.waitPacketSent();
delay(60000);
}
Two traps. SDN is active high, so if you leave it floating the chip sits in shutdown and init fails. And these modules run at 3.3V: a 5V Pro Mini needs level shifting on SPI, or use the 3.3V/8 MHz Pro Mini, which is also better for battery life.
On the Pi end, read the packet and publish lvl as a key the same way you do for your other devices.
+1 RadioHead. And make sure you’re legal on 433 MHz power and duty cycle where you are before you crank setTxPower.
SDN was floating. Tied it through the library pin and init succeeded on the first try. Sender at the tank, receiver on a second Pro Mini that passes lines to the Pi over USB, 900 m with RSSI around -95. Tank level is in Hermetry as tank.level_cm. Thanks Eric, and Maria for the reminder about power limits, I backed it off.
- You must be logged in to reply to this topic.
Join the conversation
Sign in to ask and answer, like helpful posts and mark the reply that solved your problem. Every contribution earns points and levels.

