As I moved my whole setup to a FHEM server with a SIGNALduino this project is now deprecated. This does not mean that its not working or will stop working in the future.
The good news is that if you want to change your existing setup to FHEM as well you probably already have everything to do that.
For example, with a C1101 module all you need to do is swap the GDO0 and GDO2 connections and you have a SIGNALduino ready to flash.
- Make sure you have a HEX file of the current firmware to be able to go back
- If using CC1101: switch cables for
GD0
andGD2
- Download correct hex file (esp/nano/CC1101) from SIGNALduino releases
- Upload hex using avrdude or esptool.py
- See the homebridge-433-arduino project for the FHEM server setup
Arduino/ESP based 433MHz home control transceiver
This Arduino code allows you to create a cheap 433MHz wireless transceiver to control electric switches and other home appliances. It can use USB or WiFi to connect to a computer to receive and send commands. It is mainly used for the homebridge-433-arduino plugin but can of course be used otherwise as well.
The project uses the PlatformIO IDE and runs on Arduino as well as ESP hardware. To decode signals the rc-switch or ESPiLight libraries can be used. Simple 433MHz receiver/sender hardware or more advanced CC1101 based transceiver modules are supported to send and receive 433MHz switch signals.
This is not meant to be an advanced firmware but a hobby software that is simple to use, build and understand.
- Download and install the PlatformIO IDE, i.e. VisualStudioCode (see https://platformio.org)
- Clone or download this github repository, e.g.
git clone https://github.com/normen/arduino-433
- Open the project folder in PlatformIO
- Configure the platformio.ini build options if needed (see below)
- Configure the code as needed (see below)
- Connect the desired microcontroller and transceiver hardware (see below)
- Build and upload the project to your Arduino or ESP
Alternatively you can copy-paste the code in src/main.cpp
into the Arduino IDE and install the needed boards as well as the libraries listed under lib_deps
in the platformio.ini
file. Comment out the #include "Arduino.h"
line in main.cpp when using Arduino IDE. Note that using PlatformIO is recommended!
The recommended setup is the D1 Mini board with a C1101 transceiver module and ESPiLight mode enabled. This gives you the simplest hardware connection, best radio preformance and the largest amount of supported switches out-of-the-box. For other options see the documentation below.
Simply uncomment the #define USE_CC1101
and #define USE_ESPILIGHT
lines in the src/main.ccp
file and connect the D1 Mini and C1101 boards according to the table below.
ESP8266 / CC1101
------------------------------------
3V3 (3,3V) / VCC
G (GND) / GND
D5 (SCK) / SCK
D6 (MISO) / MISO
D7 (MOSI) / MOSI
D8 (SS) / CSN
D1 (PWM) / GDO0 (TX)
D2 (PWM) / GDO2 (RX)
- ESP8266 / D1 Mini Board (3.3V) - recommended with CC1101, needed for WiFi and ESPiLight
- Arduino Micro (5V) - best for the simple receivers/senders as they work at 5V
- Arduino Nano (3.3V) - for CC1101 without WiFi or ESPiLight
- Other Arduinos, ESP32 (see below)
The PlatformIO project is by default set up for the D1 Mini board. Support for Arduino Micro is also prepared, change default_envs
in platformio.ini to micro
to switch. See the PlatformIO documentation on how to compile for other boards / hardware. Note that you will have to change the input/output pin values in the software for each type of microcontroller (see below).
- Use 5V power
- Cheap (0.5-2$)
- For the sender these modules (e.g FS1000A) seem to work fine for me
- For the receiver the very cheap modules didn't receive from very far for me
- Uses 5V power
- These "superheterodyne" (NOT superregeneration) receivers worked much better for me than the simple receivers
- Still Cheap (2-5$)
- Uses 3.3V power
- Can receive and send in one module
- Configurable via SPI
- Often comes with a proper antenna
- These modules work much better in general but might be more expensive (8-15$)
For the simple modules and the superheterodyne receiver, connect a 173mm piece of solid wire as antenna to the ANT pin, connect VCC to 5V on the micorcontroller board and connect GND to ground on the microcontroller board. See below for which pin on the microcontroller to use for the receiver/sender DATA pins.
For the CC1101 module, see this repository for info and images showing how to connect these transceivers to various microcontrollers. See below for enabling support for the CC1101 module in the transceiver code.
To configure the transceiver open src/main.cpp
and change/uncomment the following #define
parameters.
These values are needed and represent the input (receiver) and output (transmitter) pins. The microcontroller has to support interrupts on the input pin for the receiver, almost any output pin can be used for the transmitter. Note that these are actual pin numbers, not interrupt numbers.
Usual Values:
- ESP8266
- Receiver on pin
D2
(IRQ4) - Sender on pin
D1
- Receiver on pin
- Arduino Micro
- Receiver on pin
3
(IRQ 0) - Sender on pin
4
- Receiver on pin
- Arduino Nano
- Receiver on pin
2
(IRQ 0) - Sender on pin
6
- Receiver on pin
You can use a more advanced CC1101 based transceiver module instead of simple 433MHz receiver/sender pairs. These modules also have send and receive pins but are additionally connected via SPI for configuration.
Works on Arduino and ESP.
You can use WiFi to connect to the computer instead of USB.
This will create a websocket server to send/receive data in addition to the serial port, default hostname is arduino-433
, port 80. Specify your WiFi credentials in #define WIFI_SSID "ssid_here"
and #define WIFI_PASS "pass_here"
.
Works on ESP.
You can use ESPilight insted of rc-switch to decode switches.
The send/receive data format will change to JSON, with type
and message
content. Additionally pilight debug messages, always beginning with pilight
might be generated.
Works on ESP.
If you have a 433 device that doesn't work you can try and download a different version of the rcswitch library and run a "discovery application" that suggests how to extend the rcswitch.cpp file to add support for the unknown signal:
https://github.com/Martin-Laclaustra/rc-switch/tree/protocollessreceiver
Use the protocollessreceiver
branch in that repository, it includes the Arduino discovery application example.
Note: If you're using homebridge-433-arduino you can skip this section unless you're interested in the interna of the transceiver communication.
In its default mode the transceiver will use the USB serial port to send rc-switch data (code, pulse, protocol) in a format like 12345/123/1
when any 433MHz codes are received and decoded. When receiving serial data in the same format the transceiver will send the corresponding 433MHz data and return an OK
message. The serial data is terminated by \n
.
In ESPiLight mode the transceiver will send received signals in a JSON based format like {"type":"switch_type","message":{"id":"A3","unit":"20","state":"off"}}
. When sending data the format changes slightly to {"type":"switch_type","message":{"id":"A3","unit":"20","off":1}}
. See the ESPiLight documentation for more info.
Accordingly, the transceiver will only ever output 4 types of messages:
- Message
OK
-> after receiving a message and sending the corresponding code - Message starting with
{
-> JSON data when using ESPiLight - Message starting with
pilight
-> debug data when using ESPiLight - Message starting with a number -> code/pulse/protocol message when using rc-switch
Note that when sending RC data the transceiver can not receive any new commands, wait until the OK
message has been sent back before sending any new commands.
Published under the MIT License.
- Version 1.1
- Use C1101 library from arduino library manager