From 295f4e8a669d76c07a405397a83dd579291c012b Mon Sep 17 00:00:00 2001 From: aixiao Date: Wed, 12 Apr 2023 14:56:55 +0800 Subject: [PATCH] Raspberry pi & Raspberry Pico 433MHZ: transmit, receive, relay --- 433/433Utils/.gitignore | 22 + 433/433Utils/.gitmodules | 3 + 433/433Utils/LICENSE | 21 + 433/433Utils/README.md | 67 ++ 433/433Utils/RPi_utils/Makefile | 20 + 433/433Utils/RPi_utils/README.md | 17 + 433/433Utils/RPi_utils/RFSniffer.cpp | 102 +++ 433/433Utils/RPi_utils/codesend.cpp | 67 ++ 433/433Utils/RPi_utils/send.cpp | 62 ++ 433/433Utils/rc-switch/.gitignore | 17 + 433/433Utils/rc-switch/.travis.yml | 70 ++ 433/433Utils/rc-switch/RCSwitch.cpp | 744 ++++++++++++++++++ 433/433Utils/rc-switch/RCSwitch.h | 182 +++++ 433/433Utils/rc-switch/README.md | 42 + .../ReceiveDemo_Advanced.ino | 24 + .../examples/ReceiveDemo_Advanced/output.ino | 70 ++ .../ReceiveDemo_Simple/ReceiveDemo_Simple.ino | 29 + .../rc-switch/examples/SendDemo/SendDemo.ino | 57 ++ .../TypeA_WithDIPSwitches.ino | 40 + .../TypeA_WithDIPSwitches_Lightweight.ino | 43 + .../TypeB_WithRotaryOrSlidingSwitches.ino | 40 + .../TypeC_Intertechno/TypeC_Intertechno.ino | 40 + .../examples/TypeD_REV/TypeD_REV.ino | 41 + .../examples/Webserver/Webserver.ino | 154 ++++ 433/433Utils/rc-switch/keywords.txt | 57 ++ 433/433Utils/rc-switch/library.json | 21 + 433/433Utils/rc-switch/library.properties | 10 + 433/rc-switch-pico/.gitignore | 16 + 433/rc-switch-pico/CMakeLists.txt | 23 + 433/rc-switch-pico/LICENSE | 21 + .../examples/Receive/CMakeLists.txt | 31 + .../examples/Receive/Receive.cc | 235 ++++++ .../examples/Transmit/CMakeLists.txt | 21 + .../examples/Transmit/Transmit.cc | 101 +++ 433/rc-switch-pico/pico_sdk_import.cmake | 62 ++ 433/rc-switch-pico/pioasm/pioasm | Bin 0 -> 804016 bytes 433/rc-switch-pico/radio-switch.cc | 728 +++++++++++++++++ 433/rc-switch-pico/radio-switch.h | 170 ++++ 433/rc-switch-pico/readme.md | 23 + circuits/Smart home.fzz | Bin 10981 -> 9354 bytes 40 files changed, 3493 insertions(+) create mode 100644 433/433Utils/.gitignore create mode 100644 433/433Utils/.gitmodules create mode 100644 433/433Utils/LICENSE create mode 100644 433/433Utils/README.md create mode 100644 433/433Utils/RPi_utils/Makefile create mode 100644 433/433Utils/RPi_utils/README.md create mode 100644 433/433Utils/RPi_utils/RFSniffer.cpp create mode 100644 433/433Utils/RPi_utils/codesend.cpp create mode 100644 433/433Utils/RPi_utils/send.cpp create mode 100644 433/433Utils/rc-switch/.gitignore create mode 100644 433/433Utils/rc-switch/.travis.yml create mode 100644 433/433Utils/rc-switch/RCSwitch.cpp create mode 100644 433/433Utils/rc-switch/RCSwitch.h create mode 100644 433/433Utils/rc-switch/README.md create mode 100644 433/433Utils/rc-switch/examples/ReceiveDemo_Advanced/ReceiveDemo_Advanced.ino create mode 100644 433/433Utils/rc-switch/examples/ReceiveDemo_Advanced/output.ino create mode 100644 433/433Utils/rc-switch/examples/ReceiveDemo_Simple/ReceiveDemo_Simple.ino create mode 100644 433/433Utils/rc-switch/examples/SendDemo/SendDemo.ino create mode 100644 433/433Utils/rc-switch/examples/TypeA_WithDIPSwitches/TypeA_WithDIPSwitches.ino create mode 100644 433/433Utils/rc-switch/examples/TypeA_WithDIPSwitches_Lightweight/TypeA_WithDIPSwitches_Lightweight.ino create mode 100644 433/433Utils/rc-switch/examples/TypeB_WithRotaryOrSlidingSwitches/TypeB_WithRotaryOrSlidingSwitches.ino create mode 100644 433/433Utils/rc-switch/examples/TypeC_Intertechno/TypeC_Intertechno.ino create mode 100644 433/433Utils/rc-switch/examples/TypeD_REV/TypeD_REV.ino create mode 100644 433/433Utils/rc-switch/examples/Webserver/Webserver.ino create mode 100644 433/433Utils/rc-switch/keywords.txt create mode 100644 433/433Utils/rc-switch/library.json create mode 100644 433/433Utils/rc-switch/library.properties create mode 100644 433/rc-switch-pico/.gitignore create mode 100644 433/rc-switch-pico/CMakeLists.txt create mode 100644 433/rc-switch-pico/LICENSE create mode 100644 433/rc-switch-pico/examples/Receive/CMakeLists.txt create mode 100644 433/rc-switch-pico/examples/Receive/Receive.cc create mode 100644 433/rc-switch-pico/examples/Transmit/CMakeLists.txt create mode 100644 433/rc-switch-pico/examples/Transmit/Transmit.cc create mode 100644 433/rc-switch-pico/pico_sdk_import.cmake create mode 100644 433/rc-switch-pico/pioasm/pioasm create mode 100644 433/rc-switch-pico/radio-switch.cc create mode 100644 433/rc-switch-pico/radio-switch.h create mode 100644 433/rc-switch-pico/readme.md diff --git a/433/433Utils/.gitignore b/433/433Utils/.gitignore new file mode 100644 index 0000000..7a9421a --- /dev/null +++ b/433/433Utils/.gitignore @@ -0,0 +1,22 @@ +# Mac stuff +.DS_Store + +# Compiled Object files +*.slo +*.lo +*.o + +# Compiled Dynamic libraries +*.so +*.dylib + +# Compiled Static libraries +*.lai +*.la +*.a + +# Compiled executables +RPi_utils/RFSniffer +RPi_utils/codesend +RPi_utils/send + diff --git a/433/433Utils/.gitmodules b/433/433Utils/.gitmodules new file mode 100644 index 0000000..2ddc352 --- /dev/null +++ b/433/433Utils/.gitmodules @@ -0,0 +1,3 @@ +[submodule "rc-switch"] + path = rc-switch + url = https://github.com/sui77/rc-switch.git diff --git a/433/433Utils/LICENSE b/433/433Utils/LICENSE new file mode 100644 index 0000000..d48be88 --- /dev/null +++ b/433/433Utils/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-2016 Ninja Blocks Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/433/433Utils/README.md b/433/433Utils/README.md new file mode 100644 index 0000000..2ab7379 --- /dev/null +++ b/433/433Utils/README.md @@ -0,0 +1,67 @@ +# About 433Utils + +433Utils is a collection of code and documentation designed to assist you in the connection and usage of RF 433MHz transmit and receive modules to/with your Arduino and Rapberry Pi. + +It consists of two main sections- Arduino sketches and Raspberry Pi command line utilities. You'll find those in appropriately named folders. + +Despite the name, 433Utils also works with 315MHz transmit and receive modules (tested). + +## Requirements + +1. An Arduino (two is ideal) +2. A Raspberry Pi +3. The git commandline tool, on both your Arduino IDE machine and your RPi +4. RF 433MHz modules; a transmitter and receiver +5. A Ninja Block and account + +## Installation + +### Arduino\_Sketches + +Place the Sketches in your normal Arduino Sketches location. Install any required libraries: + +1. Servo motor library (Should be included in the Arduino IDE) +2. _Arduino_ [rc_switch](http://code.google.com/p/rc-switch/) library + +### RPi\_utils + +From your RPi, clone this archive: + +1. ```git clone --recursive git://github.com/ninjablocks/433Utils.git``` (recursive ensure that the rc-switch submodule gets populated which is needed by RPi\_utils) + +2. ```cd 433Utils/RPi_utils``` + +3. (As per the original rc_switch distribution) Follow the instructions to install the [wiringpi](https://projects.drogon.net/raspberry-pi/wiringpi/download-and-install/) library. +After that you can compile the example programs by executing *make*. + +## Usage + +### send +```sudo ./send systemCode unitCode command``` + +This command is unaltered from the original rc\_switch distribution. + + +### codesend +```sudo ./codesend decimalcode``` + +This command uses a single Ninja Blocks compatible decimal code. Sniff out codes using the RF\_Sniffer.ino Arduino sketch, included in this distribution. + +You can use codesend to control the wireless servo on your Arduino. +(The sketch is Servo\_Receive\_Demo.ino) + +I've implemented the most bare-bones of controls here. Try: + +```sudo ./codesend 500000 # to move the servo up``` + +```sudo ./codesend 500001 # to move the servo down``` + +```sudo ./codesend 500002 # to move the servo left``` + +```sudo ./codesend 500003 # to move the servo right``` + +```sudo ./codesend 500004 # to move the servo home``` + +## Issues + +Due to limitiations in the implementation of interrupt-driven routines in the underlying RCSwitch library, it is currently not possible to use both the send and receive functionality within the one program. diff --git a/433/433Utils/RPi_utils/Makefile b/433/433Utils/RPi_utils/Makefile new file mode 100644 index 0000000..b30f34a --- /dev/null +++ b/433/433Utils/RPi_utils/Makefile @@ -0,0 +1,20 @@ + +# Defines the RPI variable which is needed by rc-switch/RCSwitch.h +CXXFLAGS=-DRPI +CFLAGS += -Wall -Os -g + +all: send codesend RFSniffer + +send: ../rc-switch/RCSwitch.o send.o + $(CXX) $(CFLAGS) $(CXXFLAGS) $(LDFLAGS) $+ -o $@ -lwiringPi -lwiringPiDev -lcrypt + +codesend: ../rc-switch/RCSwitch.o codesend.o + $(CXX) $(CFLAGS) $(CXXFLAGS) $(LDFLAGS) $+ -o $@ -lwiringPi -lwiringPiDev -lcrypt + +RFSniffer: ../rc-switch/RCSwitch.o RFSniffer.o + $(CXX) $(CFLAGS) $(CXXFLAGS) $(LDFLAGS) $+ -o $@ -lwiringPi -lwiringPiDev -lcrypt + + +clean: + $(RM) ../rc-switch/*.o *.o send codesend servo RFSniffer + diff --git a/433/433Utils/RPi_utils/README.md b/433/433Utils/RPi_utils/README.md new file mode 100644 index 0000000..7a0fedf --- /dev/null +++ b/433/433Utils/RPi_utils/README.md @@ -0,0 +1,17 @@ +# About + +rcswitch-pi is for controlling rc remote controlled power sockets +with the raspberry pi. Kudos to the projects [rc-switch](http://code.google.com/p/rc-switch) +and [wiringpi](https://projects.drogon.net/raspberry-pi/wiringpi). +I just adapted the rc-switch code to use the wiringpi library instead of +the library provided by the arduino. + + +## Usage + +First you have to install the [wiringpi](https://projects.drogon.net/raspberry-pi/wiringpi/download-and-install/) library. +After that you can compile the example program *send* by executing *make*. +It uses wiringPi pin no 2 by default. You may want to change the used GPIO pin before compilation of the codesend.cpp source file. (Good Resource for Pin Details https://pinout.xyz/pinout/wiringpi) + +## Note +The 'RF\_Sniffer' code is as yet untested. It _should_ work, but it is still being tested thoroughly. It's provided to allow you to start playing with it now. diff --git a/433/433Utils/RPi_utils/RFSniffer.cpp b/433/433Utils/RPi_utils/RFSniffer.cpp new file mode 100644 index 0000000..da07200 --- /dev/null +++ b/433/433Utils/RPi_utils/RFSniffer.cpp @@ -0,0 +1,102 @@ +/* + RFSniffer + + Usage: ./RFSniffer [] + [] = optional + + Hacked from http://code.google.com/p/rc-switch/ + by @justy to provide a handy RF code sniffer +*/ + +#include "../rc-switch/RCSwitch.h" +#include +#include +#include + + +RCSwitch mySwitch; + + + +void light() +{ + digitalWrite(25, LOW); + usleep(200000); + digitalWrite(25, HIGH); + + //printf("%d\n", digitalRead(25)); +} + +int main(int argc, char *argv[]) { + + // This pin is not the first pin on the RPi GPIO header! + // Consult https://projects.drogon.net/raspberry-pi/wiringpi/pins/ + // for more information. + int PIN = 7; + + if(wiringPiSetup() == -1) { + printf("wiringPiSetup failed, exiting..."); + return 0; + } + + int pulseLength = 0; + if (argv[1] != NULL) pulseLength = atoi(argv[1]); + + mySwitch = RCSwitch(); + if (pulseLength != 0) mySwitch.setPulseLength(pulseLength); + mySwitch.enableReceive(PIN); // Receiver on interrupt 0 => that is pin #2 + + pinMode(25, OUTPUT); + + + #define LIVE 1 + + static int i=0; + unsigned long value = 0; + static int values[LIVE] = {0}; + + while(1) { + while(1) { + if (mySwitch.available()) { + value = mySwitch.getReceivedValue(); + values[i] = value; + + if (value == 0) + { + printf("Unknown encoding\n"); + } + else + { + light(); + printf("i=%d, Received %lu\n", i, values[i] ); + } + + fflush(stdout); + mySwitch.resetAvailable(); + + if (i != 0) { + if (values[1] == values[0]+1) + printf("有我的按钮发来数据\n"); + } + if (i != 1) { + if (values[0] == values[1]+1) + printf("有我的按钮发来数据\n"); + } + + + if (i==LIVE) { + i=0; + break; + } + i=i+1; + } + + } + + usleep(100); + } + + + return 0; +} + diff --git a/433/433Utils/RPi_utils/codesend.cpp b/433/433Utils/RPi_utils/codesend.cpp new file mode 100644 index 0000000..b10105f --- /dev/null +++ b/433/433Utils/RPi_utils/codesend.cpp @@ -0,0 +1,67 @@ +/* +Usage: ./codesend decimalcode [protocol] [pulselength] +decimalcode - As decoded by RFSniffer +protocol - According to rc-switch definitions +pulselength - pulselength in microseconds + + 'codesend' hacked from 'send' by @justy + + - The provided rc_switch 'send' command uses the form systemCode, unitCode, command + which is not suitable for our purposes. Instead, we call + send(code, length); // where length is always 24 and code is simply the code + we find using the RF_sniffer.ino Arduino sketch. + +(Use RF_Sniffer.ino to check that RF signals are being produced by the RPi's transmitter +or your remote control) +*/ +#include "../rc-switch/RCSwitch.h" +#include +#include + +int main(int argc, char *argv[]) +{ + + // This pin is not the first pin on the RPi GPIO header! + // Consult https://projects.drogon.net/raspberry-pi/wiringpi/pins/ + // for more information. + int PIN = 7; + + // Parse the first parameter to this command as an integer + int protocol = 0; // A value of 0 will use rc-switch's default value + int pulseLength = 0; + int bitLength = 24; + + // If no command line argument is given, print the help text + if (argc == 1) { + printf("Usage: %s decimalcode [protocol] [pulselength] [bitlength]\n", argv[0]); + printf("decimalcode\t- As decoded by RFSniffer\n"); + printf("protocol\t- According to rc-switch definitions\n"); + printf("pulselength\t- pulselength in microseconds\n"); + printf("bitlength\t- bit length\n"); + return -1; + } + // Change protocol and pulse length accroding to parameters + char *eptr; + unsigned long code = strtoul(argv[1], &eptr, 10); + if (argc >= 3) + protocol = atoi(argv[2]); + if (argc >= 4) + pulseLength = atoi(argv[3]); + if (argc >= 5) + bitLength = atoi(argv[4]); + + if (wiringPiSetup() == -1) + return 1; + printf("sending code[%lu]\n", code); + RCSwitch mySwitch = RCSwitch(); + if (protocol != 0) + mySwitch.setProtocol(protocol); + if (pulseLength != 0) + mySwitch.setPulseLength(pulseLength); + mySwitch.enableTransmit(PIN); + + mySwitch.send(code, bitLength); + + return 0; + +} diff --git a/433/433Utils/RPi_utils/send.cpp b/433/433Utils/RPi_utils/send.cpp new file mode 100644 index 0000000..f004120 --- /dev/null +++ b/433/433Utils/RPi_utils/send.cpp @@ -0,0 +1,62 @@ +/* + Usage: ./send + Command is 0 for OFF and 1 for ON + */ + +#include "../rc-switch/RCSwitch.h" +#include +#include + +int main(int argc, char *argv[]) +{ + + /* + output PIN is hardcoded for testing purposes + see https://projects.drogon.net/raspberry-pi/wiringpi/pins/ + for pin mapping of the raspberry pi GPIO connector + */ + int PIN = 7; + const char *code[6] = { "00000", "10000", "01000", "00100", "00010", "00001" }; + + if (argc < 4) { + printf("Sending 433 MHz remote plug control codes, hardcoded on wiringpi pin %d.\n", PIN); + printf("Usage: %s [pulseLength]\n", argv[0]); + printf("systemCode - First five settings of Type A 10 pole DIP switch, e.g. 11111\n"); + printf("unitCode - Switch number [1 .. 5] or [10000 .. 00001]\n"); + printf("command - 0 for OFF and 1 for ON\n"); + printf("pulseLength - optional pulse length\n"); + return -1; + } + + char *systemCode = argv[1]; + const char *unitCode; + if (strlen(argv[2]) == 5) { + unitCode = argv[2]; + } else if (atoi(argv[2]) > 0 and atoi(argv[2]) < 6) { + unitCode = code[atoi(argv[2])]; + } else { + return -1; + } + int command = atoi(argv[3]); + + if (wiringPiSetup() == -1) + return 1; + printf("sending systemCode[%s] unitCode[%s] command[%i]\n", systemCode, unitCode, command); + RCSwitch mySwitch = RCSwitch(); + if (argv[4] != NULL) + mySwitch.setPulseLength(atoi(argv[4])); + mySwitch.enableTransmit(PIN); + + switch (command) { + case 1: + mySwitch.switchOn(systemCode, unitCode); + break; + case 0: + mySwitch.switchOff(systemCode, unitCode); + break; + default: + printf("command[%i] is unsupported\n", command); + return -1; + } + return 0; +} diff --git a/433/433Utils/rc-switch/.gitignore b/433/433Utils/rc-switch/.gitignore new file mode 100644 index 0000000..d0972bb --- /dev/null +++ b/433/433Utils/rc-switch/.gitignore @@ -0,0 +1,17 @@ +# Mac stuff +.DS_Store + +# Compiled Object files +*.slo +*.lo +*.o + +# Compiled Dynamic libraries +*.so +*.dylib + +# Compiled Static libraries +*.lai +*.la +*.a + diff --git a/433/433Utils/rc-switch/.travis.yml b/433/433Utils/rc-switch/.travis.yml new file mode 100644 index 0000000..d8de894 --- /dev/null +++ b/433/433Utils/rc-switch/.travis.yml @@ -0,0 +1,70 @@ +language: c +python: + - "2.7" + +# Cache PlatformIO packages using Travis CI container-based infrastructure +cache: + pip: true + directories: + - "~/.platformio" + +env: + - > + PLATFORMIO_CI_SRC=$PWD/examples/Webserver + ARDUINOIDE_CI_SRC=$PLATFORMIO_CI_SRC/Webserver.ino + BOARDS="--board=diecimilaatmega328 --board=uno --board=esp01" + - > + PLATFORMIO_CI_SRC=$PWD/examples/ReceiveDemo_Simple + ARDUINOIDE_CI_SRC=$PLATFORMIO_CI_SRC/ReceiveDemo_Simple.ino + BOARDS="--board=diecimilaatmega328 --board=uno --board=esp01" + - > + PLATFORMIO_CI_SRC=$PWD/examples/TypeC_Intertechno + ARDUINOIDE_CI_SRC=$PLATFORMIO_CI_SRC/TypeC_Intertechno.ino + BOARDS="--board=diecimilaatmega328 --board=uno --board=esp01 --board=attiny25 --board=attiny24" + - > + PLATFORMIO_CI_SRC=$PWD/examples/TypeD_REV + ARDUINOIDE_CI_SRC=$PLATFORMIO_CI_SRC/TypeD_REV.ino + BOARDS="--board=diecimilaatmega328 --board=uno --board=esp01 --board=attiny25 --board=attiny24" + - > + PLATFORMIO_CI_SRC=$PWD/examples/TypeA_WithDIPSwitches + ARDUINOIDE_CI_SRC=$PLATFORMIO_CI_SRC/TypeA_WithDIPSwitches.ino + BOARDS="--board=diecimilaatmega328 --board=uno --board=esp01 --board=attiny25 --board=attiny24" + - > + PLATFORMIO_CI_SRC=$PWD/examples/TypeA_WithDIPSwitches_Lightweight + ARDUINOIDE_CI_SRC=$PLATFORMIO_CI_SRC/TypeA_WithDIPSwitches_Lightweight.ino + BOARDS="--board=diecimilaatmega328 --board=uno --board=esp01 --board=attiny25 --board=attiny24" + - > + PLATFORMIO_CI_SRC=$PWD/examples/TypeB_WithRotaryOrSlidingSwitches + ARDUINOIDE_CI_SRC=$PLATFORMIO_CI_SRC/TypeB_WithRotaryOrSlidingSwitches.ino + BOARDS="--board=diecimilaatmega328 --board=uno --board=esp01 --board=attiny25 --board=attiny24" + - > + PLATFORMIO_CI_SRC=$PWD/examples/SendDemo + ARDUINOIDE_CI_SRC=$PLATFORMIO_CI_SRC/SendDemo.ino + BOARDS="--board=diecimilaatmega328 --board=uno --board=esp01" + - > + PLATFORMIO_CI_SRC=$PWD/examples/ReceiveDemo_Advanced + ARDUINOIDE_CI_SRC=$PLATFORMIO_CI_SRC/ReceiveDemo_Advanced.ino + BOARDS="--board=diecimilaatmega328 --board=uno --board=esp01" + +before_install: + # Arduino IDE + - "/sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_1.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :1 -ac -screen 0 1280x1024x16" + - sleep 3 + - export DISPLAY=:1.0 + - wget http://downloads.arduino.cc/arduino-1.8.10-linux64.tar.xz + - tar xf arduino-1.8.10-linux64.tar.xz + - sudo mv arduino-1.8.10 /usr/local/share/arduino + - sudo ln -s /usr/local/share/arduino/arduino /usr/local/bin/arduino + +install: + # Arduino IDE + - ln -s $PWD /usr/local/share/arduino/libraries/rc-switch + # PlatformIO + # - pip install -U platformio + # - platformio update + +script: + # Arduino IDE + - arduino --verify --board arduino:avr:uno ${ARDUINOIDE_CI_SRC} + # PlatformIO + # - platformio run --lib="." ${BOARDS} diff --git a/433/433Utils/rc-switch/RCSwitch.cpp b/433/433Utils/rc-switch/RCSwitch.cpp new file mode 100644 index 0000000..e1e9279 --- /dev/null +++ b/433/433Utils/rc-switch/RCSwitch.cpp @@ -0,0 +1,744 @@ +/* + RCSwitch - Arduino libary for remote control outlet switches + Copyright (c) 2011 Suat Özgür. All right reserved. + + Contributors: + - Andre Koehler / info(at)tomate-online(dot)de + - Gordeev Andrey Vladimirovich / gordeev(at)openpyro(dot)com + - Skineffect / http://forum.ardumote.com/viewtopic.php?f=2&t=46 + - Dominik Fischer / dom_fischer(at)web(dot)de + - Frank Oltmanns / .(at)gmail(dot)com + - Andreas Steinel / A.(at)gmail(dot)com + - Max Horn / max(at)quendi(dot)de + - Robert ter Vehn / .(at)gmail(dot)com + - Johann Richard / .(at)gmail(dot)com + - Vlad Gheorghe / .(at)gmail(dot)com https://github.com/vgheo + - Matias Cuenca-Acuna + + Project home: https://github.com/sui77/rc-switch/ + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include "RCSwitch.h" + +#ifdef RaspberryPi + // PROGMEM and _P functions are for AVR based microprocessors, + // so we must normalize these for the ARM processor: +#define PROGMEM +#define memcpy_P(dest, src, num) memcpy((dest), (src), (num)) +#endif + +#if defined(ESP8266) + // interrupt handler and related code must be in RAM on ESP8266, + // according to issue #46. +#define RECEIVE_ATTR ICACHE_RAM_ATTR +#define VAR_ISR_ATTR +#elif defined(ESP32) +#define RECEIVE_ATTR IRAM_ATTR +#define VAR_ISR_ATTR DRAM_ATTR +#else +#define RECEIVE_ATTR +#define VAR_ISR_ATTR +#endif + +/* Format for protocol definitions: + * {pulselength, Sync bit, "0" bit, "1" bit, invertedSignal} + * + * pulselength: pulse length in microseconds, e.g. 350 + * Sync bit: {1, 31} means 1 high pulse and 31 low pulses + * (perceived as a 31*pulselength long pulse, total length of sync bit is + * 32*pulselength microseconds), i.e: + * _ + * | |_______________________________ (don't count the vertical bars) + * "0" bit: waveform for a data bit of value "0", {1, 3} means 1 high pulse + * and 3 low pulses, total length (1+3)*pulselength, i.e: + * _ + * | |___ + * "1" bit: waveform for a data bit of value "1", e.g. {3,1}: + * ___ + * | |_ + * + * These are combined to form Tri-State bits when sending or receiving codes. + */ +#if defined(ESP8266) || defined(ESP32) +static const VAR_ISR_ATTR RCSwitch::Protocol proto[] = { +#else +static const RCSwitch::Protocol PROGMEM proto[] = { +#endif + { 350, { 1, 31}, { 1, 3}, { 3, 1}, false }, // protocol 1 + { 650, { 1, 10}, { 1, 2}, { 2, 1}, false }, // protocol 2 + { 100, { 30, 71}, { 4, 11}, { 9, 6}, false }, // protocol 3 + { 380, { 1, 6}, { 1, 3}, { 3, 1}, false }, // protocol 4 + { 500, { 6, 14}, { 1, 2}, { 2, 1}, false }, // protocol 5 + { 450, { 23, 1}, { 1, 2}, { 2, 1}, true }, // protocol 6 (HT6P20B) + { 150, { 2, 62}, { 1, 6}, { 6, 1}, false }, // protocol 7 (HS2303-PT, i. e. used in AUKEY Remote) + { 200, { 3, 130}, { 7, 16}, { 3, 16}, false }, // protocol 8 Conrad RS-200 RX + { 200, { 130, 7}, { 16, 7}, { 16, 3}, true }, // protocol 9 Conrad RS-200 TX + { 365, { 18, 1}, { 3, 1}, { 1, 3}, true }, // protocol 10 (1ByOne Doorbell) + { 270, { 36, 1}, { 1, 2}, { 2, 1}, true }, // protocol 11 (HT12E) + { 320, { 36, 1}, { 1, 2}, { 2, 1}, true } // protocol 12 (SM5212) +}; + +enum { + numProto = sizeof(proto) / sizeof(proto[0]) +}; + +#if not defined( RCSwitchDisableReceiving ) +volatile unsigned long RCSwitch::nReceivedValue = 0; +volatile unsigned int RCSwitch::nReceivedBitlength = 0; +volatile unsigned int RCSwitch::nReceivedDelay = 0; +volatile unsigned int RCSwitch::nReceivedProtocol = 0; +int RCSwitch::nReceiveTolerance = 60; +const unsigned int VAR_ISR_ATTR RCSwitch::nSeparationLimit = 4300; +// separationLimit: minimum microseconds between received codes, closer codes are ignored. +// according to discussion on issue #14 it might be more suitable to set the separation +// limit to the same time as the 'low' part of the sync signal for the current protocol. +unsigned int RCSwitch::timings[RCSWITCH_MAX_CHANGES]; +#endif + +RCSwitch::RCSwitch() +{ + this->nTransmitterPin = -1; + this->setRepeatTransmit(10); + this->setProtocol(1); +#if not defined( RCSwitchDisableReceiving ) + this->nReceiverInterrupt = -1; + this->setReceiveTolerance(60); + RCSwitch::nReceivedValue = 0; +#endif +} + +/** + * Sets the protocol to send. + */ +void RCSwitch::setProtocol(Protocol protocol) +{ + this->protocol = protocol; +} + +/** + * Sets the protocol to send, from a list of predefined protocols + */ +void RCSwitch::setProtocol(int nProtocol) +{ + if (nProtocol < 1 || nProtocol > numProto) { + nProtocol = 1; // TODO: trigger an error, e.g. "bad protocol" ??? + } +#if defined(ESP8266) || defined(ESP32) + this->protocol = proto[nProtocol - 1]; +#else + memcpy_P(&this->protocol, &proto[nProtocol - 1], sizeof(Protocol)); +#endif +} + +/** + * Sets the protocol to send with pulse length in microseconds. + */ +void RCSwitch::setProtocol(int nProtocol, int nPulseLength) +{ + setProtocol(nProtocol); + this->setPulseLength(nPulseLength); +} + +/** + * Sets pulse length in microseconds + */ +void RCSwitch::setPulseLength(int nPulseLength) +{ + this->protocol.pulseLength = nPulseLength; +} + +/** + * Sets Repeat Transmits + */ +void RCSwitch::setRepeatTransmit(int nRepeatTransmit) +{ + this->nRepeatTransmit = nRepeatTransmit; +} + +/** + * Set Receiving Tolerance + */ +#if not defined( RCSwitchDisableReceiving ) +void RCSwitch::setReceiveTolerance(int nPercent) +{ + RCSwitch::nReceiveTolerance = nPercent; +} +#endif + +/** + * Enable transmissions + * + * @param nTransmitterPin Arduino Pin to which the sender is connected to + */ +void RCSwitch::enableTransmit(int nTransmitterPin) +{ + this->nTransmitterPin = nTransmitterPin; + pinMode(this->nTransmitterPin, OUTPUT); +} + +/** + * Disable transmissions + */ +void RCSwitch::disableTransmit() +{ + this->nTransmitterPin = -1; +} + +/** + * Switch a remote switch on (Type D REV) + * + * @param sGroup Code of the switch group (A,B,C,D) + * @param nDevice Number of the switch itself (1..3) + */ +void RCSwitch::switchOn(char sGroup, int nDevice) +{ + this->sendTriState(this->getCodeWordD(sGroup, nDevice, true)); +} + +/** + * Switch a remote switch off (Type D REV) + * + * @param sGroup Code of the switch group (A,B,C,D) + * @param nDevice Number of the switch itself (1..3) + */ +void RCSwitch::switchOff(char sGroup, int nDevice) +{ + this->sendTriState(this->getCodeWordD(sGroup, nDevice, false)); +} + +/** + * Switch a remote switch on (Type C Intertechno) + * + * @param sFamily Familycode (a..f) + * @param nGroup Number of group (1..4) + * @param nDevice Number of device (1..4) + */ +void RCSwitch::switchOn(char sFamily, int nGroup, int nDevice) +{ + this->sendTriState(this->getCodeWordC(sFamily, nGroup, nDevice, true)); +} + +/** + * Switch a remote switch off (Type C Intertechno) + * + * @param sFamily Familycode (a..f) + * @param nGroup Number of group (1..4) + * @param nDevice Number of device (1..4) + */ +void RCSwitch::switchOff(char sFamily, int nGroup, int nDevice) +{ + this->sendTriState(this->getCodeWordC(sFamily, nGroup, nDevice, false)); +} + +/** + * Switch a remote switch on (Type B with two rotary/sliding switches) + * + * @param nAddressCode Number of the switch group (1..4) + * @param nChannelCode Number of the switch itself (1..4) + */ +void RCSwitch::switchOn(int nAddressCode, int nChannelCode) +{ + this->sendTriState(this->getCodeWordB(nAddressCode, nChannelCode, true)); +} + +/** + * Switch a remote switch off (Type B with two rotary/sliding switches) + * + * @param nAddressCode Number of the switch group (1..4) + * @param nChannelCode Number of the switch itself (1..4) + */ +void RCSwitch::switchOff(int nAddressCode, int nChannelCode) +{ + this->sendTriState(this->getCodeWordB(nAddressCode, nChannelCode, false)); +} + +/** + * Deprecated, use switchOn(const char* sGroup, const char* sDevice) instead! + * Switch a remote switch on (Type A with 10 pole DIP switches) + * + * @param sGroup Code of the switch group (refers to DIP switches 1..5 where "1" = on and "0" = off, if all DIP switches are on it's "11111") + * @param nChannelCode Number of the switch itself (1..5) + */ +void RCSwitch::switchOn(const char *sGroup, int nChannel) +{ + const char *code[6] = { "00000", "10000", "01000", "00100", "00010", "00001" }; + this->switchOn(sGroup, code[nChannel]); +} + +/** + * Deprecated, use switchOff(const char* sGroup, const char* sDevice) instead! + * Switch a remote switch off (Type A with 10 pole DIP switches) + * + * @param sGroup Code of the switch group (refers to DIP switches 1..5 where "1" = on and "0" = off, if all DIP switches are on it's "11111") + * @param nChannelCode Number of the switch itself (1..5) + */ +void RCSwitch::switchOff(const char *sGroup, int nChannel) +{ + const char *code[6] = { "00000", "10000", "01000", "00100", "00010", "00001" }; + this->switchOff(sGroup, code[nChannel]); +} + +/** + * Switch a remote switch on (Type A with 10 pole DIP switches) + * + * @param sGroup Code of the switch group (refers to DIP switches 1..5 where "1" = on and "0" = off, if all DIP switches are on it's "11111") + * @param sDevice Code of the switch device (refers to DIP switches 6..10 (A..E) where "1" = on and "0" = off, if all DIP switches are on it's "11111") + */ +void RCSwitch::switchOn(const char *sGroup, const char *sDevice) +{ + this->sendTriState(this->getCodeWordA(sGroup, sDevice, true)); +} + +/** + * Switch a remote switch off (Type A with 10 pole DIP switches) + * + * @param sGroup Code of the switch group (refers to DIP switches 1..5 where "1" = on and "0" = off, if all DIP switches are on it's "11111") + * @param sDevice Code of the switch device (refers to DIP switches 6..10 (A..E) where "1" = on and "0" = off, if all DIP switches are on it's "11111") + */ +void RCSwitch::switchOff(const char *sGroup, const char *sDevice) +{ + this->sendTriState(this->getCodeWordA(sGroup, sDevice, false)); +} + +/** + * Returns a char[13], representing the code word to be send. + * + */ +char *RCSwitch::getCodeWordA(const char *sGroup, const char *sDevice, bool bStatus) +{ + static char sReturn[13]; + int nReturnPos = 0; + + for (int i = 0; i < 5; i++) { + sReturn[nReturnPos++] = (sGroup[i] == '0') ? 'F' : '0'; + } + + for (int i = 0; i < 5; i++) { + sReturn[nReturnPos++] = (sDevice[i] == '0') ? 'F' : '0'; + } + + sReturn[nReturnPos++] = bStatus ? '0' : 'F'; + sReturn[nReturnPos++] = bStatus ? 'F' : '0'; + + sReturn[nReturnPos] = '\0'; + return sReturn; +} + +/** + * Encoding for type B switches with two rotary/sliding switches. + * + * The code word is a tristate word and with following bit pattern: + * + * +-----------------------------+-----------------------------+----------+------------+ + * | 4 bits address | 4 bits address | 3 bits | 1 bit | + * | switch group | switch number | not used | on / off | + * | 1=0FFF 2=F0FF 3=FF0F 4=FFF0 | 1=0FFF 2=F0FF 3=FF0F 4=FFF0 | FFF | on=F off=0 | + * +-----------------------------+-----------------------------+----------+------------+ + * + * @param nAddressCode Number of the switch group (1..4) + * @param nChannelCode Number of the switch itself (1..4) + * @param bStatus Whether to switch on (true) or off (false) + * + * @return char[13], representing a tristate code word of length 12 + */ +char *RCSwitch::getCodeWordB(int nAddressCode, int nChannelCode, bool bStatus) +{ + static char sReturn[13]; + int nReturnPos = 0; + + if (nAddressCode < 1 || nAddressCode > 4 || nChannelCode < 1 || nChannelCode > 4) { + return 0; + } + + for (int i = 1; i <= 4; i++) { + sReturn[nReturnPos++] = (nAddressCode == i) ? '0' : 'F'; + } + + for (int i = 1; i <= 4; i++) { + sReturn[nReturnPos++] = (nChannelCode == i) ? '0' : 'F'; + } + + sReturn[nReturnPos++] = 'F'; + sReturn[nReturnPos++] = 'F'; + sReturn[nReturnPos++] = 'F'; + + sReturn[nReturnPos++] = bStatus ? 'F' : '0'; + + sReturn[nReturnPos] = '\0'; + return sReturn; +} + +/** + * Like getCodeWord (Type C = Intertechno) + */ +char *RCSwitch::getCodeWordC(char sFamily, int nGroup, int nDevice, bool bStatus) +{ + static char sReturn[13]; + int nReturnPos = 0; + + int nFamily = (int)sFamily - 'a'; + if (nFamily < 0 || nFamily > 15 || nGroup < 1 || nGroup > 4 || nDevice < 1 || nDevice > 4) { + return 0; + } + // encode the family into four bits + sReturn[nReturnPos++] = (nFamily & 1) ? 'F' : '0'; + sReturn[nReturnPos++] = (nFamily & 2) ? 'F' : '0'; + sReturn[nReturnPos++] = (nFamily & 4) ? 'F' : '0'; + sReturn[nReturnPos++] = (nFamily & 8) ? 'F' : '0'; + + // encode the device and group + sReturn[nReturnPos++] = ((nDevice - 1) & 1) ? 'F' : '0'; + sReturn[nReturnPos++] = ((nDevice - 1) & 2) ? 'F' : '0'; + sReturn[nReturnPos++] = ((nGroup - 1) & 1) ? 'F' : '0'; + sReturn[nReturnPos++] = ((nGroup - 1) & 2) ? 'F' : '0'; + + // encode the status code + sReturn[nReturnPos++] = '0'; + sReturn[nReturnPos++] = 'F'; + sReturn[nReturnPos++] = 'F'; + sReturn[nReturnPos++] = bStatus ? 'F' : '0'; + + sReturn[nReturnPos] = '\0'; + return sReturn; +} + +/** + * Encoding for the REV Switch Type + * + * The code word is a tristate word and with following bit pattern: + * + * +-----------------------------+-------------------+----------+--------------+ + * | 4 bits address | 3 bits address | 3 bits | 2 bits | + * | switch group | device number | not used | on / off | + * | A=1FFF B=F1FF C=FF1F D=FFF1 | 1=0FF 2=F0F 3=FF0 | 000 | on=10 off=01 | + * +-----------------------------+-------------------+----------+--------------+ + * + * Source: http://www.the-intruder.net/funksteckdosen-von-rev-uber-arduino-ansteuern/ + * + * @param sGroup Name of the switch group (A..D, resp. a..d) + * @param nDevice Number of the switch itself (1..3) + * @param bStatus Whether to switch on (true) or off (false) + * + * @return char[13], representing a tristate code word of length 12 + */ +char *RCSwitch::getCodeWordD(char sGroup, int nDevice, bool bStatus) +{ + static char sReturn[13]; + int nReturnPos = 0; + + // sGroup must be one of the letters in "abcdABCD" + int nGroup = (sGroup >= 'a') ? (int)sGroup - 'a' : (int)sGroup - 'A'; + if (nGroup < 0 || nGroup > 3 || nDevice < 1 || nDevice > 3) { + return 0; + } + + for (int i = 0; i < 4; i++) { + sReturn[nReturnPos++] = (nGroup == i) ? '1' : 'F'; + } + + for (int i = 1; i <= 3; i++) { + sReturn[nReturnPos++] = (nDevice == i) ? '1' : 'F'; + } + + sReturn[nReturnPos++] = '0'; + sReturn[nReturnPos++] = '0'; + sReturn[nReturnPos++] = '0'; + + sReturn[nReturnPos++] = bStatus ? '1' : '0'; + sReturn[nReturnPos++] = bStatus ? '0' : '1'; + + sReturn[nReturnPos] = '\0'; + return sReturn; +} + +/** + * @param sCodeWord a tristate code word consisting of the letter 0, 1, F + */ +void RCSwitch::sendTriState(const char *sCodeWord) +{ + // turn the tristate code word into the corresponding bit pattern, then send it + unsigned long code = 0; + unsigned int length = 0; + for (const char *p = sCodeWord; *p; p++) { + code <<= 2L; + switch (*p) { + case '0': + // bit pattern 00 + break; + case 'F': + // bit pattern 01 + code |= 1L; + break; + case '1': + // bit pattern 11 + code |= 3L; + break; + } + length += 2; + } + this->send(code, length); +} + +/** + * @param sCodeWord a binary code word consisting of the letter 0, 1 + */ +void RCSwitch::send(const char *sCodeWord) +{ + // turn the tristate code word into the corresponding bit pattern, then send it + unsigned long code = 0; + unsigned int length = 0; + for (const char *p = sCodeWord; *p; p++) { + code <<= 1L; + if (*p != '0') + code |= 1L; + length++; + } + this->send(code, length); +} + +/** + * Transmit the first 'length' bits of the integer 'code'. The + * bits are sent from MSB to LSB, i.e., first the bit at position length-1, + * then the bit at position length-2, and so on, till finally the bit at position 0. + */ +void RCSwitch::send(unsigned long code, unsigned int length) +{ + if (this->nTransmitterPin == -1) + return; + +#if not defined( RCSwitchDisableReceiving ) + // make sure the receiver is disabled while we transmit + int nReceiverInterrupt_backup = nReceiverInterrupt; + if (nReceiverInterrupt_backup != -1) { + this->disableReceive(); + } +#endif + + for (int nRepeat = 0; nRepeat < nRepeatTransmit; nRepeat++) { + for (int i = length - 1; i >= 0; i--) { + if (code & (1L << i)) + this->transmit(protocol.one); + else + this->transmit(protocol.zero); + } + this->transmit(protocol.syncFactor); + } + + // Disable transmit after sending (i.e., for inverted protocols) + digitalWrite(this->nTransmitterPin, LOW); + +#if not defined( RCSwitchDisableReceiving ) + // enable receiver again if we just disabled it + if (nReceiverInterrupt_backup != -1) { + this->enableReceive(nReceiverInterrupt_backup); + } +#endif +} + +/** + * Transmit a single high-low pulse. + */ +void RCSwitch::transmit(HighLow pulses) +{ + uint8_t firstLogicLevel = (this->protocol.invertedSignal) ? LOW : HIGH; + uint8_t secondLogicLevel = (this->protocol.invertedSignal) ? HIGH : LOW; + + digitalWrite(this->nTransmitterPin, firstLogicLevel); + delayMicroseconds(this->protocol.pulseLength * pulses.high); + digitalWrite(this->nTransmitterPin, secondLogicLevel); + delayMicroseconds(this->protocol.pulseLength * pulses.low); +} + +#if not defined( RCSwitchDisableReceiving ) +/** + * Enable receiving data + */ +void RCSwitch::enableReceive(int interrupt) +{ + this->nReceiverInterrupt = interrupt; + this->enableReceive(); +} + +void RCSwitch::enableReceive() +{ + if (this->nReceiverInterrupt != -1) { + RCSwitch::nReceivedValue = 0; + RCSwitch::nReceivedBitlength = 0; +#if defined(RaspberryPi) // Raspberry Pi + wiringPiISR(this->nReceiverInterrupt, INT_EDGE_BOTH, &handleInterrupt); +#else // Arduino + attachInterrupt(this->nReceiverInterrupt, handleInterrupt, CHANGE); +#endif + } +} + +/** + * Disable receiving data + */ +void RCSwitch::disableReceive() +{ +#if not defined(RaspberryPi) // Arduino + detachInterrupt(this->nReceiverInterrupt); +#endif // For Raspberry Pi (wiringPi) you can't unregister the ISR + this->nReceiverInterrupt = -1; +} + +bool RCSwitch::available() +{ + return RCSwitch::nReceivedValue != 0; +} + +void RCSwitch::resetAvailable() +{ + RCSwitch::nReceivedValue = 0; +} + +unsigned long RCSwitch::getReceivedValue() +{ + return RCSwitch::nReceivedValue; +} + +unsigned int RCSwitch::getReceivedBitlength() +{ + return RCSwitch::nReceivedBitlength; +} + +unsigned int RCSwitch::getReceivedDelay() +{ + return RCSwitch::nReceivedDelay; +} + +unsigned int RCSwitch::getReceivedProtocol() +{ + return RCSwitch::nReceivedProtocol; +} + +unsigned int *RCSwitch::getReceivedRawdata() +{ + return RCSwitch::timings; +} + +/* helper function for the receiveProtocol method */ +static inline unsigned int diff(int A, int B) +{ + return abs(A - B); +} + +/** + * + */ +bool RECEIVE_ATTR RCSwitch::receiveProtocol(const int p, unsigned int changeCount) +{ +#if defined(ESP8266) || defined(ESP32) + const Protocol & pro = proto[p - 1]; +#else + Protocol pro; + memcpy_P(&pro, &proto[p - 1], sizeof(Protocol)); +#endif + + unsigned long code = 0; + //Assuming the longer pulse length is the pulse captured in timings[0] + const unsigned int syncLengthInPulses = ((pro.syncFactor.low) > (pro.syncFactor.high)) ? (pro.syncFactor.low) : (pro.syncFactor.high); + const unsigned int delay = RCSwitch::timings[0] / syncLengthInPulses; + const unsigned int delayTolerance = delay * RCSwitch::nReceiveTolerance / 100; + + /* For protocols that start low, the sync period looks like + * _________ + * _____________| |XXXXXXXXXXXX| + * + * |--1st dur--|-2nd dur-|-Start data-| + * + * The 3rd saved duration starts the data. + * + * For protocols that start high, the sync period looks like + * + * ______________ + * | |____________|XXXXXXXXXXXXX| + * + * |-filtered out-|--1st dur--|--Start data--| + * + * The 2nd saved duration starts the data + */ + const unsigned int firstDataTiming = (pro.invertedSignal) ? (2) : (1); + + for (unsigned int i = firstDataTiming; i < changeCount - 1; i += 2) { + code <<= 1; + if (diff(RCSwitch::timings[i], delay * pro.zero.high) < delayTolerance && diff(RCSwitch::timings[i + 1], delay * pro.zero.low) < delayTolerance) { + // zero + } else if (diff(RCSwitch::timings[i], delay * pro.one.high) < delayTolerance && diff(RCSwitch::timings[i + 1], delay * pro.one.low) < delayTolerance) { + // one + code |= 1; + } else { + // Failed + return false; + } + } + + if (changeCount > 7) { // ignore very short transmissions: no device sends them, so this must be noise + RCSwitch::nReceivedValue = code; + RCSwitch::nReceivedBitlength = (changeCount - 1) / 2; + RCSwitch::nReceivedDelay = delay; + RCSwitch::nReceivedProtocol = p; + return true; + } + + return false; +} + +void RECEIVE_ATTR RCSwitch::handleInterrupt() +{ + + static unsigned int changeCount = 0; + static unsigned long lastTime = 0; + static unsigned int repeatCount = 0; + + const long time = micros(); + const unsigned int duration = time - lastTime; + + if (duration > RCSwitch::nSeparationLimit) { + // A long stretch without signal level change occurred. This could + // be the gap between two transmission. + if ((repeatCount == 0) || (diff(duration, RCSwitch::timings[0]) < 200)) { + // This long signal is close in length to the long signal which + // started the previously recorded timings; this suggests that + // it may indeed by a a gap between two transmissions (we assume + // here that a sender will send the signal multiple times, + // with roughly the same gap between them). + repeatCount++; + if (repeatCount == 2) { + for (unsigned int i = 1; i <= numProto; i++) { + if (receiveProtocol(i, changeCount)) { + // receive succeeded for protocol i + break; + } + } + repeatCount = 0; + } + } + changeCount = 0; + } + + // detect overflow + if (changeCount >= RCSWITCH_MAX_CHANGES) { + changeCount = 0; + repeatCount = 0; + } + + RCSwitch::timings[changeCount++] = duration; + lastTime = time; +} +#endif diff --git a/433/433Utils/rc-switch/RCSwitch.h b/433/433Utils/rc-switch/RCSwitch.h new file mode 100644 index 0000000..4a69b1a --- /dev/null +++ b/433/433Utils/rc-switch/RCSwitch.h @@ -0,0 +1,182 @@ +/* + RCSwitch - Arduino libary for remote control outlet switches + Copyright (c) 2011 Suat Özgür. All right reserved. + + Contributors: + - Andre Koehler / info(at)tomate-online(dot)de + - Gordeev Andrey Vladimirovich / gordeev(at)openpyro(dot)com + - Skineffect / http://forum.ardumote.com/viewtopic.php?f=2&t=46 + - Dominik Fischer / dom_fischer(at)web(dot)de + - Frank Oltmanns / .(at)gmail(dot)com + - Max Horn / max(at)quendi(dot)de + - Robert ter Vehn / .(at)gmail(dot)com + + Project home: https://github.com/sui77/rc-switch/ + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ +#ifndef _RCSwitch_h +#define _RCSwitch_h + +#if defined(ARDUINO) && ARDUINO >= 100 +#include "Arduino.h" +#elif defined(ENERGIA) // LaunchPad, FraunchPad and StellarPad specific +#include "Energia.h" +#elif defined(RPI) // Raspberry Pi +#define RaspberryPi + + // Include libraries for RPi: +#include /* memcpy */ +#include /* abs */ +#include +#elif defined(SPARK) +#include "application.h" +#else +#include "WProgram.h" +#endif + +#include + +// At least for the ATTiny X4/X5, receiving has to be disabled due to +// missing libm depencies (udivmodhi4) +#if defined( __AVR_ATtinyX5__ ) or defined ( __AVR_ATtinyX4__ ) +#define RCSwitchDisableReceiving +#endif + +// Number of maximum high/Low changes per packet. +// We can handle up to (unsigned long) => 32 bit * 2 H/L changes per bit + 2 for sync +#define RCSWITCH_MAX_CHANGES 67 + +class RCSwitch { + +public: + RCSwitch(); + + void switchOn(int nGroupNumber, int nSwitchNumber); + void switchOff(int nGroupNumber, int nSwitchNumber); + void switchOn(const char *sGroup, int nSwitchNumber); + void switchOff(const char *sGroup, int nSwitchNumber); + void switchOn(char sFamily, int nGroup, int nDevice); + void switchOff(char sFamily, int nGroup, int nDevice); + void switchOn(const char *sGroup, const char *sDevice); + void switchOff(const char *sGroup, const char *sDevice); + void switchOn(char sGroup, int nDevice); + void switchOff(char sGroup, int nDevice); + + void sendTriState(const char *sCodeWord); + void send(unsigned long code, unsigned int length); + void send(const char *sCodeWord); + +#if not defined( RCSwitchDisableReceiving ) + void enableReceive(int interrupt); + void enableReceive(); + void disableReceive(); + bool available(); + void resetAvailable(); + + unsigned long getReceivedValue(); + unsigned int getReceivedBitlength(); + unsigned int getReceivedDelay(); + unsigned int getReceivedProtocol(); + unsigned int *getReceivedRawdata(); +#endif + + void enableTransmit(int nTransmitterPin); + void disableTransmit(); + void setPulseLength(int nPulseLength); + void setRepeatTransmit(int nRepeatTransmit); +#if not defined( RCSwitchDisableReceiving ) + void setReceiveTolerance(int nPercent); +#endif + + /** + * Description of a single pule, which consists of a high signal + * whose duration is "high" times the base pulse length, followed + * by a low signal lasting "low" times the base pulse length. + * Thus, the pulse overall lasts (high+low)*pulseLength + */ + struct HighLow { + uint8_t high; + uint8_t low; + }; + + /** + * A "protocol" describes how zero and one bits are encoded into high/low + * pulses. + */ + struct Protocol { + /** base pulse length in microseconds, e.g. 350 */ + uint16_t pulseLength; + + HighLow syncFactor; + HighLow zero; + HighLow one; + + /** + * If true, interchange high and low logic levels in all transmissions. + * + * By default, RCSwitch assumes that any signals it sends or receives + * can be broken down into pulses which start with a high signal level, + * followed by a a low signal level. This is e.g. the case for the + * popular PT 2260 encoder chip, and thus many switches out there. + * + * But some devices do it the other way around, and start with a low + * signal level, followed by a high signal level, e.g. the HT6P20B. To + * accommodate this, one can set invertedSignal to true, which causes + * RCSwitch to change how it interprets any HighLow struct FOO: It will + * then assume transmissions start with a low signal lasting + * FOO.high*pulseLength microseconds, followed by a high signal lasting + * FOO.low*pulseLength microseconds. + */ + bool invertedSignal; + }; + + void setProtocol(Protocol protocol); + void setProtocol(int nProtocol); + void setProtocol(int nProtocol, int nPulseLength); + +private: + char *getCodeWordA(const char *sGroup, const char *sDevice, bool bStatus); + char *getCodeWordB(int nGroupNumber, int nSwitchNumber, bool bStatus); + char *getCodeWordC(char sFamily, int nGroup, int nDevice, bool bStatus); + char *getCodeWordD(char group, int nDevice, bool bStatus); + void transmit(HighLow pulses); + +#if not defined( RCSwitchDisableReceiving ) + static void handleInterrupt(); + static bool receiveProtocol(const int p, unsigned int changeCount); + int nReceiverInterrupt; +#endif + int nTransmitterPin; + int nRepeatTransmit; + + Protocol protocol; + +#if not defined( RCSwitchDisableReceiving ) + static int nReceiveTolerance; + volatile static unsigned long nReceivedValue; + volatile static unsigned int nReceivedBitlength; + volatile static unsigned int nReceivedDelay; + volatile static unsigned int nReceivedProtocol; + const static unsigned int nSeparationLimit; + /* + * timings[0] contains sync timing, followed by a number of bits + */ + static unsigned int timings[RCSWITCH_MAX_CHANGES]; +#endif + +}; + +#endif diff --git a/433/433Utils/rc-switch/README.md b/433/433Utils/rc-switch/README.md new file mode 100644 index 0000000..f6a679c --- /dev/null +++ b/433/433Utils/rc-switch/README.md @@ -0,0 +1,42 @@ +# rc-switch +[![arduino-library-badge](https://www.ardu-badge.com/badge/rc-switch.svg?)](https://www.ardu-badge.com/rc-switch) +[![Build Status](https://travis-ci.org/sui77/rc-switch.svg?branch=master)](https://travis-ci.org/sui77/rc-switch) + +Use your Arduino or [Raspberry Pi](https://github.com/r10r/rcswitch-pi) to operate remote radio controlled devices + +## Download +https://github.com/sui77/rc-switch/releases/latest + +rc-switch is also listed in the arduino library manager. + +## Wiki +https://github.com/sui77/rc-switch/wiki + +## Info +### Send RC codes + +Use your Arduino or Raspberry Pi to operate remote radio controlled devices. +This will most likely work with all popular low cost power outlet sockets. If +yours doesn't work, you might need to adjust the pulse length. + +All you need is a Arduino or Raspberry Pi, a 315/433MHz AM transmitter and one +or more devices with one of the supported chipsets: + + - SC5262 / SC5272 + - HX2262 / HX2272 + - PT2262 / PT2272 + - EV1527 / RT1527 / FP1527 / HS1527 + - Intertechno outlets + - HT6P20X + +### Receive and decode RC codes + +Find out what codes your remote is sending. Use your remote to control your +Arduino. + +All you need is an Arduino, a 315/433MHz AM receiver (altough there is no +instruction yet, yes it is possible to hack an existing device) and a remote +hand set. + +For the Raspberry Pi, clone the https://github.com/ninjablocks/433Utils project to +compile a sniffer tool and transmission commands. diff --git a/433/433Utils/rc-switch/examples/ReceiveDemo_Advanced/ReceiveDemo_Advanced.ino b/433/433Utils/rc-switch/examples/ReceiveDemo_Advanced/ReceiveDemo_Advanced.ino new file mode 100644 index 0000000..18380d3 --- /dev/null +++ b/433/433Utils/rc-switch/examples/ReceiveDemo_Advanced/ReceiveDemo_Advanced.ino @@ -0,0 +1,24 @@ +/* + Example for receiving + + https://github.com/sui77/rc-switch/ + + If you want to visualize a telegram copy the raw data and + paste it into http://test.sui.li/oszi/ +*/ + +#include + +RCSwitch mySwitch = RCSwitch(); + +void setup() { + Serial.begin(9600); + mySwitch.enableReceive(0); // Receiver on interrupt 0 => that is pin #2 +} + +void loop() { + if (mySwitch.available()) { + output(mySwitch.getReceivedValue(), mySwitch.getReceivedBitlength(), mySwitch.getReceivedDelay(), mySwitch.getReceivedRawdata(),mySwitch.getReceivedProtocol()); + mySwitch.resetAvailable(); + } +} diff --git a/433/433Utils/rc-switch/examples/ReceiveDemo_Advanced/output.ino b/433/433Utils/rc-switch/examples/ReceiveDemo_Advanced/output.ino new file mode 100644 index 0000000..31e61ba --- /dev/null +++ b/433/433Utils/rc-switch/examples/ReceiveDemo_Advanced/output.ino @@ -0,0 +1,70 @@ +static const char* bin2tristate(const char* bin); +static char * dec2binWzerofill(unsigned long Dec, unsigned int bitLength); + +void output(unsigned long decimal, unsigned int length, unsigned int delay, unsigned int* raw, unsigned int protocol) { + + const char* b = dec2binWzerofill(decimal, length); + Serial.print("Decimal: "); + Serial.print(decimal); + Serial.print(" ("); + Serial.print( length ); + Serial.print("Bit) Binary: "); + Serial.print( b ); + Serial.print(" Tri-State: "); + Serial.print( bin2tristate( b) ); + Serial.print(" PulseLength: "); + Serial.print(delay); + Serial.print(" microseconds"); + Serial.print(" Protocol: "); + Serial.println(protocol); + + Serial.print("Raw data: "); + for (unsigned int i=0; i<= length*2; i++) { + Serial.print(raw[i]); + Serial.print(","); + } + Serial.println(); + Serial.println(); +} + +static const char* bin2tristate(const char* bin) { + static char returnValue[50]; + int pos = 0; + int pos2 = 0; + while (bin[pos]!='\0' && bin[pos+1]!='\0') { + if (bin[pos]=='0' && bin[pos+1]=='0') { + returnValue[pos2] = '0'; + } else if (bin[pos]=='1' && bin[pos+1]=='1') { + returnValue[pos2] = '1'; + } else if (bin[pos]=='0' && bin[pos+1]=='1') { + returnValue[pos2] = 'F'; + } else { + return "not applicable"; + } + pos = pos+2; + pos2++; + } + returnValue[pos2] = '\0'; + return returnValue; +} + +static char * dec2binWzerofill(unsigned long Dec, unsigned int bitLength) { + static char bin[64]; + unsigned int i=0; + + while (Dec > 0) { + bin[32+i++] = ((Dec & 1) > 0) ? '1' : '0'; + Dec = Dec >> 1; + } + + for (unsigned int j = 0; j< bitLength; j++) { + if (j >= bitLength - i) { + bin[j] = bin[ 31 + i - (j - (bitLength - i)) ]; + } else { + bin[j] = '0'; + } + } + bin[bitLength] = '\0'; + + return bin; +} diff --git a/433/433Utils/rc-switch/examples/ReceiveDemo_Simple/ReceiveDemo_Simple.ino b/433/433Utils/rc-switch/examples/ReceiveDemo_Simple/ReceiveDemo_Simple.ino new file mode 100644 index 0000000..bb10763 --- /dev/null +++ b/433/433Utils/rc-switch/examples/ReceiveDemo_Simple/ReceiveDemo_Simple.ino @@ -0,0 +1,29 @@ +/* + Simple example for receiving + + https://github.com/sui77/rc-switch/ +*/ + +#include + +RCSwitch mySwitch = RCSwitch(); + +void setup() { + Serial.begin(9600); + mySwitch.enableReceive(0); // Receiver on interrupt 0 => that is pin #2 +} + +void loop() { + if (mySwitch.available()) { + + Serial.print("Received "); + Serial.print( mySwitch.getReceivedValue() ); + Serial.print(" / "); + Serial.print( mySwitch.getReceivedBitlength() ); + Serial.print("bit "); + Serial.print("Protocol: "); + Serial.println( mySwitch.getReceivedProtocol() ); + + mySwitch.resetAvailable(); + } +} diff --git a/433/433Utils/rc-switch/examples/SendDemo/SendDemo.ino b/433/433Utils/rc-switch/examples/SendDemo/SendDemo.ino new file mode 100644 index 0000000..5acb495 --- /dev/null +++ b/433/433Utils/rc-switch/examples/SendDemo/SendDemo.ino @@ -0,0 +1,57 @@ +/* + Example for different sending methods + + https://github.com/sui77/rc-switch/ + +*/ + +#include + +RCSwitch mySwitch = RCSwitch(); + +void setup() { + + Serial.begin(9600); + + // Transmitter is connected to Arduino Pin #10 + mySwitch.enableTransmit(10); + + // Optional set protocol (default is 1, will work for most outlets) + // mySwitch.setProtocol(2); + + // Optional set pulse length. + // mySwitch.setPulseLength(320); + + // Optional set number of transmission repetitions. + // mySwitch.setRepeatTransmit(15); + +} + +void loop() { + + /* See Example: TypeA_WithDIPSwitches */ + mySwitch.switchOn("11111", "00010"); + delay(1000); + mySwitch.switchOff("11111", "00010"); + delay(1000); + + /* Same switch as above, but using decimal code */ + mySwitch.send(5393, 24); + delay(1000); + mySwitch.send(5396, 24); + delay(1000); + + /* Same switch as above, but using binary code */ + mySwitch.send("000000000001010100010001"); + delay(1000); + mySwitch.send("000000000001010100010100"); + delay(1000); + + /* Same switch as above, but tri-state code */ + mySwitch.sendTriState("00000FFF0F0F"); + delay(1000); + mySwitch.sendTriState("00000FFF0FF0"); + delay(1000); + + delay(20000); +} diff --git a/433/433Utils/rc-switch/examples/TypeA_WithDIPSwitches/TypeA_WithDIPSwitches.ino b/433/433Utils/rc-switch/examples/TypeA_WithDIPSwitches/TypeA_WithDIPSwitches.ino new file mode 100644 index 0000000..14f7d2a --- /dev/null +++ b/433/433Utils/rc-switch/examples/TypeA_WithDIPSwitches/TypeA_WithDIPSwitches.ino @@ -0,0 +1,40 @@ +/* + Example for outlets which are configured with a 10 pole DIP switch. + + https://github.com/sui77/rc-switch/ +*/ + +#include + +RCSwitch mySwitch = RCSwitch(); + +void setup() { + + // Transmitter is connected to Arduino Pin #10 + mySwitch.enableTransmit(10); + + // Optional set pulse length. + // mySwitch.setPulseLength(320); + +} + +void loop() { + + // Switch on: + // The first parameter represents the setting of the first 5 DIP switches. + // In this example it's ON-ON-OFF-OFF-ON. + // + // The second parameter represents the setting of the last 5 DIP switches. + // In this example the last 5 DIP switches are OFF-ON-OFF-ON-OFF. + mySwitch.switchOn("11001", "01010"); + + // Wait a second + delay(1000); + + // Switch off + mySwitch.switchOff("11001", "01010"); + + // Wait another second + delay(1000); + +} diff --git a/433/433Utils/rc-switch/examples/TypeA_WithDIPSwitches_Lightweight/TypeA_WithDIPSwitches_Lightweight.ino b/433/433Utils/rc-switch/examples/TypeA_WithDIPSwitches_Lightweight/TypeA_WithDIPSwitches_Lightweight.ino new file mode 100644 index 0000000..214daf4 --- /dev/null +++ b/433/433Utils/rc-switch/examples/TypeA_WithDIPSwitches_Lightweight/TypeA_WithDIPSwitches_Lightweight.ino @@ -0,0 +1,43 @@ +/* + This is a minimal sketch without using the library at all but only works for + the 10 pole dip switch sockets. It saves a lot of memory and thus might be + very useful to use with ATTinys :) + + https://github.com/sui77/rc-switch/ +*/ + +int RCLpin = 7; + +void setup() { + pinMode(RCLpin, OUTPUT); +} + +void loop() { + RCLswitch(0b010001000001); // DIPs an Steckdose: 0100010000 An:01 + delay(2000); + + RCLswitch(0b010001000010); // DIPs an Steckdose: 0100010000 Aus:10 + delay(2000); +} + +void RCLswitch(uint16_t code) { + for (int nRepeat=0; nRepeat<6; nRepeat++) { + for (int i=4; i<16; i++) { + RCLtransmit(1,3); + if (((code << (i-4)) & 2048) > 0) { + RCLtransmit(1,3); + } else { + RCLtransmit(3,1); + } + } + RCLtransmit(1,31); + } +} + +void RCLtransmit(int nHighPulses, int nLowPulses) { + digitalWrite(RCLpin, HIGH); + delayMicroseconds( 350 * nHighPulses); + digitalWrite(RCLpin, LOW); + delayMicroseconds( 350 * nLowPulses); +} + diff --git a/433/433Utils/rc-switch/examples/TypeB_WithRotaryOrSlidingSwitches/TypeB_WithRotaryOrSlidingSwitches.ino b/433/433Utils/rc-switch/examples/TypeB_WithRotaryOrSlidingSwitches/TypeB_WithRotaryOrSlidingSwitches.ino new file mode 100644 index 0000000..e8568e2 --- /dev/null +++ b/433/433Utils/rc-switch/examples/TypeB_WithRotaryOrSlidingSwitches/TypeB_WithRotaryOrSlidingSwitches.ino @@ -0,0 +1,40 @@ +/* + Example for outlets which are configured with two rotary/sliding switches. + + https://github.com/sui77/rc-switch/ +*/ + +#include + +RCSwitch mySwitch = RCSwitch(); + +void setup() { + + // Transmitter is connected to Arduino Pin #10 + mySwitch.enableTransmit(10); + + // Optional set pulse length. + // mySwitch.setPulseLength(320); + +} + +void loop() { + + // Switch on: + // The first parameter represents the setting of the first rotary switch. + // In this example it's switched to "1" or "A" or "I". + // + // The second parameter represents the setting of the second rotary switch. + // In this example it's switched to "4" or "D" or "IV". + mySwitch.switchOn(1, 4); + + // Wait a second + delay(1000); + + // Switch off + mySwitch.switchOff(1, 4); + + // Wait another second + delay(1000); + +} diff --git a/433/433Utils/rc-switch/examples/TypeC_Intertechno/TypeC_Intertechno.ino b/433/433Utils/rc-switch/examples/TypeC_Intertechno/TypeC_Intertechno.ino new file mode 100644 index 0000000..0fc69c7 --- /dev/null +++ b/433/433Utils/rc-switch/examples/TypeC_Intertechno/TypeC_Intertechno.ino @@ -0,0 +1,40 @@ +/* + Example for Intertechno outlets + + https://github.com/sui77/rc-switch/ +*/ + +#include + +RCSwitch mySwitch = RCSwitch(); + +void setup() { + + // Transmitter is connected to Arduino Pin #10 + mySwitch.enableTransmit(10); + + // Optional set pulse length. + // mySwitch.setPulseLength(320); + +} + +void loop() { + + // Switch on: + // The first parameter represents the familycode (a, b, c, ... f) + // The second parameter represents the group number + // The third parameter represents the device number + // + // In this example it's family 'b', group #3, device #2 + mySwitch.switchOn('b', 3, 2); + + // Wait a second + delay(1000); + + // Switch off + mySwitch.switchOff('b', 3, 2); + + // Wait another second + delay(1000); + +} \ No newline at end of file diff --git a/433/433Utils/rc-switch/examples/TypeD_REV/TypeD_REV.ino b/433/433Utils/rc-switch/examples/TypeD_REV/TypeD_REV.ino new file mode 100644 index 0000000..8782729 --- /dev/null +++ b/433/433Utils/rc-switch/examples/TypeD_REV/TypeD_REV.ino @@ -0,0 +1,41 @@ +/* + Example for REV outlets (e.g. 8342L) + + https://github.com/sui77/rc-switch/ + + Need help? http://forum.ardumote.com +*/ + +#include + +RCSwitch mySwitch = RCSwitch(); + +void setup() { + + // Transmitter is connected to Arduino Pin #10 + mySwitch.enableTransmit(10); + + // set pulse length. + mySwitch.setPulseLength(360); + +} + +void loop() { + + // Switch on: + // The first parameter represents the channel (a, b, c, d) + // The second parameter represents the device number + // + // In this example it's family 'd', device #2 + mySwitch.switchOn('d', 2); + + // Wait a second + delay(1000); + + // Switch off + mySwitch.switchOff('d', 2); + + // Wait another second + delay(1000); + +} diff --git a/433/433Utils/rc-switch/examples/Webserver/Webserver.ino b/433/433Utils/rc-switch/examples/Webserver/Webserver.ino new file mode 100644 index 0000000..66668e7 --- /dev/null +++ b/433/433Utils/rc-switch/examples/Webserver/Webserver.ino @@ -0,0 +1,154 @@ +/* + A simple RCSwitch/Ethernet/Webserver demo + + https://github.com/sui77/rc-switch/ +*/ + +#include +#include +#include + +// Ethernet configuration +uint8_t mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // MAC Address +uint8_t ip[] = { 192,168,0, 2 }; // IP Address +EthernetServer server(80); // Server Port 80 + +// RCSwitch configuration +RCSwitch mySwitch = RCSwitch(); +int RCTransmissionPin = 7; + +// More to do... +// You should also modify the processCommand() and +// httpResponseHome() functions to fit your needs. + + + +/** + * Setup + */ +void setup() { + Ethernet.begin(mac, ip); + server.begin(); + mySwitch.enableTransmit( RCTransmissionPin ); +} + +/** + * Loop + */ +void loop() { + char* command = httpServer(); +} + +/** + * Command dispatcher + */ +void processCommand(char* command) { + if (strcmp(command, "1-on") == 0) { + mySwitch.switchOn(1,1); + } else if (strcmp(command, "1-off") == 0) { + mySwitch.switchOff(1,1); + } else if (strcmp(command, "2-on") == 0) { + mySwitch.switchOn(1,2); + } else if (strcmp(command, "2-off") == 0) { + mySwitch.switchOff(1,2); + } +} + +/** + * HTTP Response with homepage + */ +void httpResponseHome(EthernetClient c) { + c.println("HTTP/1.1 200 OK"); + c.println("Content-Type: text/html"); + c.println(); + c.println(""); + c.println(""); + c.println( "RCSwitch Webserver Demo"); + c.println( ""); + c.println(""); + c.println(""); + c.println( "

RCSwitch Webserver Demo

"); + c.println( ""); + c.println( ""); + c.println( "
"); + c.println( "https://github.com/sui77/rc-switch/"); + c.println(""); + c.println(""); +} + +/** + * HTTP Redirect to homepage + */ +void httpResponseRedirect(EthernetClient c) { + c.println("HTTP/1.1 301 Found"); + c.println("Location: /"); + c.println(); +} + +/** + * HTTP Response 414 error + * Command must not be longer than 30 characters + **/ +void httpResponse414(EthernetClient c) { + c.println("HTTP/1.1 414 Request URI too long"); + c.println("Content-Type: text/plain"); + c.println(); + c.println("414 Request URI too long"); +} + +/** + * Process HTTP requests, parse first request header line and + * call processCommand with GET query string (everything after + * the ? question mark in the URL). + */ +char* httpServer() { + EthernetClient client = server.available(); + if (client) { + char sReturnCommand[32]; + int nCommandPos=-1; + sReturnCommand[0] = '\0'; + while (client.connected()) { + if (client.available()) { + char c = client.read(); + if ((c == '\n') || (c == ' ' && nCommandPos>-1)) { + sReturnCommand[nCommandPos] = '\0'; + if (strcmp(sReturnCommand, "\0") == 0) { + httpResponseHome(client); + } else { + processCommand(sReturnCommand); + httpResponseRedirect(client); + } + break; + } + if (nCommandPos>-1) { + sReturnCommand[nCommandPos++] = c; + } + if (c == '?' && nCommandPos == -1) { + nCommandPos = 0; + } + } + if (nCommandPos > 30) { + httpResponse414(client); + sReturnCommand[0] = '\0'; + break; + } + } + if (nCommandPos!=-1) { + sReturnCommand[nCommandPos] = '\0'; + } + // give the web browser time to receive the data + delay(1); + client.stop(); + + return sReturnCommand; + } + return '\0'; +} \ No newline at end of file diff --git a/433/433Utils/rc-switch/keywords.txt b/433/433Utils/rc-switch/keywords.txt new file mode 100644 index 0000000..2474367 --- /dev/null +++ b/433/433Utils/rc-switch/keywords.txt @@ -0,0 +1,57 @@ +####################################### +# Syntax Coloring Map For RCSwitch +####################################### + +####################################### +# Datatypes (KEYWORD1) +####################################### + +RCSwitch KEYWORD1 + +####################################### +# Methods and Functions (KEYWORD2) +####################################### + +########## +#SENDS Begin +########## +switchOn KEYWORD2 +switchOff KEYWORD2 +sendTriState KEYWORD2 +send KEYWORD2 +########## +#SENDS End +########## + +########## +#RECEIVE Begin +########## +enableReceive KEYWORD2 +disableReceive KEYWORD2 +available KEYWORD2 +resetAvailable KEYWORD2 +setReceiveTolerance KEYWORD2 +getReceivedValue KEYWORD2 +getReceivedBitlength KEYWORD2 +getReceivedDelay KEYWORD2 +getReceivedProtocol KEYWORD2 +getReceivedRawdata KEYWORD2 +########## +#RECEIVE End +########## + +########## +#OTHERS Begin +########## +enableTransmit KEYWORD2 +disableTransmit KEYWORD2 +setPulseLength KEYWORD2 +setProtocol KEYWORD2 +setRepeatTransmit KEYWORD2 +########## +#OTHERS End +########## + +####################################### +# Constants (LITERAL1) +####################################### diff --git a/433/433Utils/rc-switch/library.json b/433/433Utils/rc-switch/library.json new file mode 100644 index 0000000..b98e28f --- /dev/null +++ b/433/433Utils/rc-switch/library.json @@ -0,0 +1,21 @@ +{ + "name": "rc-switch", + "description": "Use your Arduino or Raspberry Pi to operate remote radio controlled devices", + "keywords": "rf, radio, wireless", + "authors": + { + "name": "Suat Ozgur" + }, + "repository": + { + "type": "git", + "url": "https://github.com/sui77/rc-switch.git" + }, + "version": "2.6.4", + "frameworks": [ + "arduino", + "energia", + "wiringpi" + ], + "platforms": "*" +} diff --git a/433/433Utils/rc-switch/library.properties b/433/433Utils/rc-switch/library.properties new file mode 100644 index 0000000..d60b460 --- /dev/null +++ b/433/433Utils/rc-switch/library.properties @@ -0,0 +1,10 @@ +name=rc-switch +version=2.6.4 +author=sui77 +maintainer=sui77,fingolfin +sentence=Operate 433/315Mhz devices. +paragraph=Use your Arduino, ESP8266/ESP32 or Raspberry Pi to operate remote radio controlled devices. This will most likely work with all popular low cost power outlet sockets. +category=Device Control +url=https://github.com/sui77/rc-switch +architectures=avr,esp8266,esp32,stm32,megaavr +includes=RCSwitch.h diff --git a/433/rc-switch-pico/.gitignore b/433/rc-switch-pico/.gitignore new file mode 100644 index 0000000..fa6d8c6 --- /dev/null +++ b/433/rc-switch-pico/.gitignore @@ -0,0 +1,16 @@ +.DS_Store +CMakeFiles/ +elf2uf2/ +generated/ +pico-sdk/ +CMakeCache.txt +CMakeDoxyfile.in +CMakeDoxygenDefaults.cmake +Makefile +cmake_install.cmake +*.bin +*.dis +*.elf +*.elf.map +*.hex +*.uf2 \ No newline at end of file diff --git a/433/rc-switch-pico/CMakeLists.txt b/433/rc-switch-pico/CMakeLists.txt new file mode 100644 index 0000000..e952009 --- /dev/null +++ b/433/rc-switch-pico/CMakeLists.txt @@ -0,0 +1,23 @@ +cmake_minimum_required(VERSION 3.12) + +# Pull in SDK (must be before project) +include(pico_sdk_import.cmake) + +project(pico_examples C CXX ASM) +set(CMAKE_C_STANDARD 11) +set(CMAKE_CXX_STANDARD 17) + +set(PICO_EXAMPLES_PATH ${PROJECT_SOURCE_DIR}) + +# Initialize the SDK +pico_sdk_init() + +# Add blink example +add_subdirectory(examples/Transmit) +add_subdirectory(examples/Receive) + + + + + + diff --git a/433/rc-switch-pico/LICENSE b/433/rc-switch-pico/LICENSE new file mode 100644 index 0000000..8adf5b6 --- /dev/null +++ b/433/rc-switch-pico/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 oshawa-connection + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/433/rc-switch-pico/examples/Receive/CMakeLists.txt b/433/rc-switch-pico/examples/Receive/CMakeLists.txt new file mode 100644 index 0000000..ce9017d --- /dev/null +++ b/433/rc-switch-pico/examples/Receive/CMakeLists.txt @@ -0,0 +1,31 @@ +add_executable(receive + Receive.cc + ../../radio-switch.cc + ) + + +add_compile_options(-Wall +-Wno-format # int != int32_t as far as the compiler is concerned because gcc has int32_t as long int +-Wno-unused-function # we have some for the docs that aren't called +-Wno-maybe-uninitialized +) + +# Pull in our pico_stdlib which pulls in commonly used features + +target_link_libraries(receive +pico_stdlib +hardware_adc +pico_multicore) + +# enable usb output, disable uart output +pico_enable_stdio_usb(receive 1) +pico_enable_stdio_uart(receive 0) + +# create map/bin/hex file etc. +pico_add_extra_outputs(receive) + + + + + + diff --git a/433/rc-switch-pico/examples/Receive/Receive.cc b/433/rc-switch-pico/examples/Receive/Receive.cc new file mode 100644 index 0000000..7f6cf29 --- /dev/null +++ b/433/rc-switch-pico/examples/Receive/Receive.cc @@ -0,0 +1,235 @@ +#include +#include "pico/stdlib.h" +#include "../../radio-switch.h" +#include "pico/stdio.h" + +#include +#include "pico/stdlib.h" +#include "pico/multicore.h" + +//#include "hardware/adc.h" +//#include + +#include + +#define BUFFER_SIZ 1024 + +// 闪烁LED +void light() +{ + const uint LED_PIN = PICO_DEFAULT_LED_PIN; + gpio_init(LED_PIN); + gpio_set_dir(LED_PIN, GPIO_OUT); + gpio_put(LED_PIN, 1); + sleep_ms(100); + gpio_put(LED_PIN, 0); + sleep_ms(100); + +} + +/* +int temperature() { + // 数模转换器为 0~3.3v 最大值为 12bit + const float conversion_factor = 3.3f / (1 << 12); + + float v; + float t; + stdio_init_all(); + printf("Use adc channel 4, measuring temptutre\n"); + // ADC初始化 + adc_init(); + adc_set_temp_sensor_enabled(true); + adc_select_input(4); + + // 数字转换为电压 + v = adc_read() * conversion_factor; + t = 27 - (v - 0.706) / 0.001721; + printf("t:%.2f v:%.2f\n", t, v); + + sleep_ms(100); + + return 0; +} +*/ + +static char pool[] = { + '1', '2', '3', '4', '5', '6', '7', '8', '9' +}; + +// 随即数 +static int RAND() +{ + int PASSWD_LEN = 3; + char password[BUFFER_SIZ]; + int i = 0; + FILE *fp; + + memset(password, 0, BUFFER_SIZ); + srand(time(NULL)); + + while (i != PASSWD_LEN) { + password[i++] = pool[rand() % sizeof(pool)]; + } + + //printf("%d\n", atoi(password)); + return atoi(password); +} + +static void SEND(const int ID) +{ + const uint RADIO_TRANSMIT_PIN = 16; // 433发射模块引脚 + const uint BUTTON = 21; // 按钮发射 + + const uint PULSE_LENGTH = 169; // set this to PULSELENGTH RECIEVED + const uint REPEAT_TRANSMIT = 4; // set this to whatever works best for you. // 重复发送 + const uint PROTOCOL = 1; // set this to PROTOCOL RECIEVED + const uint BIT_LENGTH = 24; // set this to BIT LENGTH RECIEVED + + gpio_init(RADIO_TRANSMIT_PIN); + RCSwitch mySwitch = RCSwitch(); + mySwitch.enableTransmit(RADIO_TRANSMIT_PIN); + mySwitch.setProtocol(PROTOCOL); + mySwitch.setPulseLength(PULSE_LENGTH); + mySwitch.setRepeatTransmit(REPEAT_TRANSMIT); + + int RANDOM = 500; + int LOOP_NUM = 1; // 循环发送次数 + + for (int i = 0; i <= LOOP_NUM; i++) { + RANDOM = RAND(); + light(); // 灯闪烁 + + sleep_ms(RANDOM * 2 / 3); // 等待随机时间 + + mySwitch.send(ID, BIT_LENGTH); // 第一次发射 + sleep_ms(130); + + mySwitch.send(ID + 1, BIT_LENGTH); // 第二次发射 + sleep_ms(130); + } + +} + + +int int_string(int val, char *string, int string_len, int *str_len, char *dest, int *dest_len) +{ + char s[] = "55"; + char d = '2'; + + snprintf(string, string_len, "%d", val); + *str_len = strlen(string); + + if (0 == strncasecmp(string, s, 2)) { + dest[0] = d; + dest[1] = d; + strncpy(dest + 2, string + 2, (*str_len) - 2); + + *dest_len = strlen(dest); + } + + return 0; +} + + + +// 核心0发送数据到核心1, 核心1判断是否有数据到来, 然后打印. +void core1_main() +{ + const uint RADIO_RECEIVER_PIN = 17; + gpio_init(RADIO_RECEIVER_PIN); + + RCSwitch rcSwitch = RCSwitch(); + rcSwitch.enableReceive(RADIO_RECEIVER_PIN); + + char str[270]; + char dest[270]; + int str_len; + int dest_len; + memset(str, 0, 270); + memset(dest, 0, 270); + + while (true) { + if (rcSwitch.available()) { + light(); + + uint32_t val = rcSwitch.getReceivedValue(); + //printf("核心1接收到的433MHZ数值%u\n", val); + + int_string(val, str, 270, &str_len, dest, &dest_len); + + if (val != 0) { + if (str[0] == '5' && str[1] == '5') + { + + multicore_fifo_push_blocking(atoi(dest)); + } + else + { + rcSwitch.resetAvailable(); + val = 0; + continue; + } + + } + + + + rcSwitch.resetAvailable(); + val = 0; + } + + + + +/* + if (multicore_fifo_rvalid()) { + uint32_t i = multicore_fifo_pop_blocking(); + printf("核心1接收到核心0的数值%u\n", i); + + } +*/ + sleep_ms(130); + + + } + + + return ; +} + +int main() +{ + stdio_init_all(); + + multicore_reset_core1(); + multicore_launch_core1(core1_main); + + + while (1) { + + if (multicore_fifo_rvalid()) { + uint32_t i = multicore_fifo_pop_blocking(); // 读取核心1发送来的数据 + //printf("核心0接收到核心1的数值%u\n", i); + + //multicore_reset_core1(); // 关闭核心1 + //SEND(i); // 433MHZ发送 + //multicore_launch_core1(core1_main); // 开启核心1 + //multicore_fifo_push_blocking(i); // 给核心1发送数据 + + + + + + SEND(i); + printf("核心0转发433MHZ %u\n", i); + + + } + + + sleep_ms(130); + } + + + return 0; +} diff --git a/433/rc-switch-pico/examples/Transmit/CMakeLists.txt b/433/rc-switch-pico/examples/Transmit/CMakeLists.txt new file mode 100644 index 0000000..67a46cc --- /dev/null +++ b/433/rc-switch-pico/examples/Transmit/CMakeLists.txt @@ -0,0 +1,21 @@ +add_executable(transmit + Transmit.cc + ../../radio-switch.cc + ) + + +add_compile_options(-Wall +-Wno-format # int != int32_t as far as the compiler is concerned because gcc has int32_t as long int +-Wno-unused-function # we have some for the docs that aren't called +-Wno-maybe-uninitialized +) + +# Pull in our pico_stdlib which pulls in commonly used features +target_link_libraries(transmit pico_stdlib) + +# enable usb output, disable uart output +pico_enable_stdio_usb(transmit 1) +pico_enable_stdio_uart(transmit 0) + +# create map/bin/hex file etc. +pico_add_extra_outputs(transmit) diff --git a/433/rc-switch-pico/examples/Transmit/Transmit.cc b/433/rc-switch-pico/examples/Transmit/Transmit.cc new file mode 100644 index 0000000..1f8fd0e --- /dev/null +++ b/433/rc-switch-pico/examples/Transmit/Transmit.cc @@ -0,0 +1,101 @@ +#include +#include "pico/stdlib.h" +#include "../../radio-switch.h" + +#include + +#define BUFFER_SIZ 1024 + + +// 闪烁LED +static void light() +{ + const uint LED_PIN = PICO_DEFAULT_LED_PIN; + gpio_init(LED_PIN); + gpio_set_dir(LED_PIN, GPIO_OUT); + gpio_put(LED_PIN, 1); + sleep_ms(100); + gpio_put(LED_PIN, 0); + sleep_ms(100); + +} + +static char pool[] = { + '1', '2', '3', '4', '5', '6', '7', '8', '9' +}; + +// 随即数 +static int RAND() +{ + int PASSWD_LEN = 3; + char password[BUFFER_SIZ]; + int i = 0; + FILE *fp; + + + memset(password, 0, BUFFER_SIZ); + srand(time(NULL)); + + while (i != PASSWD_LEN) { + password[i++] = pool[rand() % sizeof(pool)]; + } + + + + printf("%d\n", atoi(password)); + + return atoi(password); +} + +int main(void) { + + const uint RADIO_TRANSMIT_PIN = 16; // 433发射模块引脚 + const uint BUTTON = 17; // 按钮发射 + + + const uint PULSE_LENGTH = 169; // set this to PULSELENGTH RECIEVED + const uint REPEAT_TRANSMIT = 4; // set this to whatever works best for you. // 重复发送 + const uint PROTOCOL = 1; // set this to PROTOCOL RECIEVED + const uint BIT_LENGTH = 24; // set this to BIT LENGTH RECIEVED + + stdio_init_all(); + gpio_init(RADIO_TRANSMIT_PIN); + RCSwitch mySwitch = RCSwitch(); + mySwitch.enableTransmit(RADIO_TRANSMIT_PIN); + mySwitch.setProtocol(PROTOCOL); + mySwitch.setPulseLength(PULSE_LENGTH); + mySwitch.setRepeatTransmit(REPEAT_TRANSMIT); + + int RANDOM = 30; + int LOOP_NUM = 2; // 循环发送次数 + + + const int but = 55001; + + + while(1) + { + + //if (1 == gpio_get(BUTTON)) { // 按钮按下 + for (int i=0; i<=LOOP_NUM; i++) { + RANDOM = RAND(); + light(); // 灯闪烁 + + sleep_ms(RANDOM * 2 / 3); // 等待随机时间 + + mySwitch.send(but, BIT_LENGTH); // 第一次发射 + sleep_ms(130); + + + //mySwitch.send(but+1, BIT_LENGTH); // 第二次发射 + //sleep_ms(130); + } + //} + + sleep_ms(3000); + } + + + return 0; +} + diff --git a/433/rc-switch-pico/pico_sdk_import.cmake b/433/rc-switch-pico/pico_sdk_import.cmake new file mode 100644 index 0000000..28efe9e --- /dev/null +++ b/433/rc-switch-pico/pico_sdk_import.cmake @@ -0,0 +1,62 @@ +# This is a copy of /external/pico_sdk_import.cmake + +# This can be dropped into an external project to help locate this SDK +# It should be include()ed prior to project() + +if (DEFINED ENV{PICO_SDK_PATH} AND (NOT PICO_SDK_PATH)) + set(PICO_SDK_PATH $ENV{PICO_SDK_PATH}) + message("Using PICO_SDK_PATH from environment ('${PICO_SDK_PATH}')") +endif () + +if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT} AND (NOT PICO_SDK_FETCH_FROM_GIT)) + set(PICO_SDK_FETCH_FROM_GIT $ENV{PICO_SDK_FETCH_FROM_GIT}) + message("Using PICO_SDK_FETCH_FROM_GIT from environment ('${PICO_SDK_FETCH_FROM_GIT}')") +endif () + +if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT_PATH} AND (NOT PICO_SDK_FETCH_FROM_GIT_PATH)) + set(PICO_SDK_FETCH_FROM_GIT_PATH $ENV{PICO_SDK_FETCH_FROM_GIT_PATH}) + message("Using PICO_SDK_FETCH_FROM_GIT_PATH from environment ('${PICO_SDK_FETCH_FROM_GIT_PATH}')") +endif () + +set(PICO_SDK_PATH "${PICO_SDK_PATH}" CACHE PATH "Path to the Raspberry Pi Pico SDK") +set(PICO_SDK_FETCH_FROM_GIT "${PICO_SDK_FETCH_FROM_GIT}" CACHE BOOL "Set to ON to fetch copy of SDK from git if not otherwise locatable") +set(PICO_SDK_FETCH_FROM_GIT_PATH "${PICO_SDK_FETCH_FROM_GIT_PATH}" CACHE FILEPATH "location to download SDK") + +if (NOT PICO_SDK_PATH) + if (PICO_SDK_FETCH_FROM_GIT) + include(FetchContent) + set(FETCHCONTENT_BASE_DIR_SAVE ${FETCHCONTENT_BASE_DIR}) + if (PICO_SDK_FETCH_FROM_GIT_PATH) + get_filename_component(FETCHCONTENT_BASE_DIR "${PICO_SDK_FETCH_FROM_GIT_PATH}" REALPATH BASE_DIR "${CMAKE_SOURCE_DIR}") + endif () + FetchContent_Declare( + pico_sdk + GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk + GIT_TAG master + ) + if (NOT pico_sdk) + message("Downloading Raspberry Pi Pico SDK") + FetchContent_Populate(pico_sdk) + set(PICO_SDK_PATH ${pico_sdk_SOURCE_DIR}) + endif () + set(FETCHCONTENT_BASE_DIR ${FETCHCONTENT_BASE_DIR_SAVE}) + else () + message(FATAL_ERROR + "SDK location was not specified. Please set PICO_SDK_PATH or set PICO_SDK_FETCH_FROM_GIT to on to fetch from git." + ) + endif () +endif () + +get_filename_component(PICO_SDK_PATH "${PICO_SDK_PATH}" REALPATH BASE_DIR "${CMAKE_BINARY_DIR}") +if (NOT EXISTS ${PICO_SDK_PATH}) + message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' not found") +endif () + +set(PICO_SDK_INIT_CMAKE_FILE ${PICO_SDK_PATH}/pico_sdk_init.cmake) +if (NOT EXISTS ${PICO_SDK_INIT_CMAKE_FILE}) + message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' does not appear to contain the Raspberry Pi Pico SDK") +endif () + +set(PICO_SDK_PATH ${PICO_SDK_PATH} CACHE PATH "Path to the Raspberry Pi Pico SDK" FORCE) + +include(${PICO_SDK_INIT_CMAKE_FILE}) diff --git a/433/rc-switch-pico/pioasm/pioasm b/433/rc-switch-pico/pioasm/pioasm new file mode 100644 index 0000000000000000000000000000000000000000..a9d9967da62b6c024c6227890e628e43c01bcaa0 GIT binary patch literal 804016 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 z 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 F{{iN>XaN8K literal 0 HcmV?d00001 diff --git a/433/rc-switch-pico/radio-switch.cc b/433/rc-switch-pico/radio-switch.cc new file mode 100644 index 0000000..01f9875 --- /dev/null +++ b/433/rc-switch-pico/radio-switch.cc @@ -0,0 +1,728 @@ +/* + RCSwitch - Arduino libary for remote control outlet switches + Copyright (c) 2011 Suat Özgür. All right reserved. + + Contributors: + - Andre Koehler / info(at)tomate-online(dot)de + - Gordeev Andrey Vladimirovich / gordeev(at)openpyro(dot)com + - Skineffect / http://forum.ardumote.com/viewtopic.php?f=2&t=46 + - Dominik Fischer / dom_fischer(at)web(dot)de + - Frank Oltmanns / .(at)gmail(dot)com + - Andreas Steinel / A.(at)gmail(dot)com + - Max Horn / max(at)quendi(dot)de + - Robert ter Vehn / .(at)gmail(dot)com + - Johann Richard / .(at)gmail(dot)com + - Vlad Gheorghe / .(at)gmail(dot)com https://github.com/vgheo + - Matias Cuenca-Acuna + + Project home: https://github.com/sui77/rc-switch/ + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include "radio-switch.h" +#include "pico/stdlib.h" +#include "hardware/gpio.h" +#include "hardware/uart.h" + +#ifdef _PICO_STDLIB_H +#define HIGH 1 +#define LOW 0 +#endif + + +#define PROGMEM +#define memcpy_P(dest, src, num) memcpy((dest), (src), (num)) + + +#if defined(ESP8266) + // interrupt handler and related code must be in RAM on ESP8266, + // according to issue #46. + #define RECEIVE_ATTR ICACHE_RAM_ATTR + #define VAR_ISR_ATTR +#elif defined(ESP32) + #define RECEIVE_ATTR IRAM_ATTR + #define VAR_ISR_ATTR DRAM_ATTR +#else + #define RECEIVE_ATTR + #define VAR_ISR_ATTR +#endif + +/* Format for protocol definitions: + * {pulselength, Sync bit, "0" bit, "1" bit, invertedSignal} + * + * pulselength: pulse length in microseconds, e.g. 350 + * Sync bit: {1, 31} means 1 high pulse and 31 low pulses + * (perceived as a 31*pulselength long pulse, total length of sync bit is + * 32*pulselength microseconds), i.e: + * _ + * | |_______________________________ (don't count the vertical bars) + * "0" bit: waveform for a data bit of value "0", {1, 3} means 1 high pulse + * and 3 low pulses, total length (1+3)*pulselength, i.e: + * _ + * | |___ + * "1" bit: waveform for a data bit of value "1", e.g. {3,1}: + * ___ + * | |_ + * + * These are combined to form Tri-State bits when sending or receiving codes. + */ +#if defined(ESP8266) || defined(ESP32) +static const VAR_ISR_ATTR RCSwitch::Protocol proto[] = { +#else +static const RCSwitch::Protocol PROGMEM proto[] = { +#endif + { 350, { 1, 31 }, { 1, 3 }, { 3, 1 }, false }, // protocol 1 + { 650, { 1, 10 }, { 1, 2 }, { 2, 1 }, false }, // protocol 2 + { 100, { 30, 71 }, { 4, 11 }, { 9, 6 }, false }, // protocol 3 + { 380, { 1, 6 }, { 1, 3 }, { 3, 1 }, false }, // protocol 4 + { 500, { 6, 14 }, { 1, 2 }, { 2, 1 }, false }, // protocol 5 + { 450, { 23, 1 }, { 1, 2 }, { 2, 1 }, true }, // protocol 6 (HT6P20B) + { 150, { 2, 62 }, { 1, 6 }, { 6, 1 }, false }, // protocol 7 (HS2303-PT, i. e. used in AUKEY Remote) + { 200, { 3, 130}, { 7, 16 }, { 3, 16}, false}, // protocol 8 Conrad RS-200 RX + { 200, { 130, 7 }, { 16, 7 }, { 16, 3 }, true}, // protocol 9 Conrad RS-200 TX + { 365, { 18, 1 }, { 3, 1 }, { 1, 3 }, true }, // protocol 10 (1ByOne Doorbell) + { 270, { 36, 1 }, { 1, 2 }, { 2, 1 }, true }, // protocol 11 (HT12E) + { 320, { 36, 1 }, { 1, 2 }, { 2, 1 }, true } // protocol 12 (SM5212) +}; + +void RCSwitch::gpio_callback(unsigned int gpio, uint32_t events) { + RCSwitch::handleInterrupt(); +} + +enum { + numProto = sizeof(proto) / sizeof(proto[0]) +}; + +#if not defined( RCSwitchDisableReceiving ) +volatile unsigned long RCSwitch::nReceivedValue = 0; +volatile unsigned int RCSwitch::nReceivedBitlength = 0; +volatile unsigned int RCSwitch::nReceivedDelay = 0; +volatile unsigned int RCSwitch::nReceivedProtocol = 0; +int RCSwitch::nReceiveTolerance = 60; +const unsigned int VAR_ISR_ATTR RCSwitch::nSeparationLimit = 4300; +// separationLimit: minimum microseconds between received codes, closer codes are ignored. +// according to discussion on issue #14 it might be more suitable to set the separation +// limit to the same time as the 'low' part of the sync signal for the current protocol. +unsigned int RCSwitch::timings[RCSWITCH_MAX_CHANGES]; +#endif + +RCSwitch::RCSwitch() { + this->nTransmitterPin = -1; + this->setRepeatTransmit(10); + this->setProtocol(1); + #if not defined( RCSwitchDisableReceiving ) + this->nReceiverInterrupt = -1; + this->setReceiveTolerance(60); + RCSwitch::nReceivedValue = 0; + #endif +} + +/** + * Sets the protocol to send. + */ +void RCSwitch::setProtocol(Protocol protocol) { + this->protocol = protocol; +} + +/** + * Sets the protocol to send, from a list of predefined protocols + */ +void RCSwitch::setProtocol(int nProtocol) { + if (nProtocol < 1 || nProtocol > numProto) { + nProtocol = 1; // TODO: trigger an error, e.g. "bad protocol" ??? + } +#if defined(ESP8266) || defined(ESP32) + this->protocol = proto[nProtocol-1]; +#else + memcpy_P(&this->protocol, &proto[nProtocol-1], sizeof(Protocol)); +#endif +} + +/** + * Sets the protocol to send with pulse length in microseconds. + */ +void RCSwitch::setProtocol(int nProtocol, int nPulseLength) { + setProtocol(nProtocol); + this->setPulseLength(nPulseLength); +} + + +/** + * Sets pulse length in microseconds + */ +void RCSwitch::setPulseLength(int nPulseLength) { + this->protocol.pulseLength = nPulseLength; +} + +/** + * Sets Repeat Transmits + */ +void RCSwitch::setRepeatTransmit(int nRepeatTransmit) { + this->nRepeatTransmit = nRepeatTransmit; +} + +/** + * Set Receiving Tolerance + */ +#if not defined( RCSwitchDisableReceiving ) +void RCSwitch::setReceiveTolerance(int nPercent) { + RCSwitch::nReceiveTolerance = nPercent; +} +#endif + + +/** + * Enable transmissions + * + * @param nTransmitterPin Arduino Pin to which the sender is connected to + */ +void RCSwitch::enableTransmit(int nTransmitterPin) { + this->nTransmitterPin = nTransmitterPin; + // pinMode(this->nTransmitterPin, OUTPUT); + gpio_set_dir(this->nTransmitterPin,GPIO_OUT); +} + +/** + * Disable transmissions + */ +void RCSwitch::disableTransmit() { + this->nTransmitterPin = -1; +} + +/** + * Switch a remote switch on (Type D REV) + * + * @param sGroup Code of the switch group (A,B,C,D) + * @param nDevice Number of the switch itself (1..3) + */ +void RCSwitch::switchOn(char sGroup, int nDevice) { + this->sendTriState( this->getCodeWordD(sGroup, nDevice, true) ); +} + +/** + * Switch a remote switch off (Type D REV) + * + * @param sGroup Code of the switch group (A,B,C,D) + * @param nDevice Number of the switch itself (1..3) + */ +void RCSwitch::switchOff(char sGroup, int nDevice) { + this->sendTriState( this->getCodeWordD(sGroup, nDevice, false) ); +} + +/** + * Switch a remote switch on (Type C Intertechno) + * + * @param sFamily Familycode (a..f) + * @param nGroup Number of group (1..4) + * @param nDevice Number of device (1..4) + */ +void RCSwitch::switchOn(char sFamily, int nGroup, int nDevice) { + this->sendTriState( this->getCodeWordC(sFamily, nGroup, nDevice, true) ); +} + +/** + * Switch a remote switch off (Type C Intertechno) + * + * @param sFamily Familycode (a..f) + * @param nGroup Number of group (1..4) + * @param nDevice Number of device (1..4) + */ +void RCSwitch::switchOff(char sFamily, int nGroup, int nDevice) { + this->sendTriState( this->getCodeWordC(sFamily, nGroup, nDevice, false) ); +} + +/** + * Switch a remote switch on (Type B with two rotary/sliding switches) + * + * @param nAddressCode Number of the switch group (1..4) + * @param nChannelCode Number of the switch itself (1..4) + */ +void RCSwitch::switchOn(int nAddressCode, int nChannelCode) { + this->sendTriState( this->getCodeWordB(nAddressCode, nChannelCode, true) ); +} + +/** + * Switch a remote switch off (Type B with two rotary/sliding switches) + * + * @param nAddressCode Number of the switch group (1..4) + * @param nChannelCode Number of the switch itself (1..4) + */ +void RCSwitch::switchOff(int nAddressCode, int nChannelCode) { + this->sendTriState( this->getCodeWordB(nAddressCode, nChannelCode, false) ); +} + +/** + * Deprecated, use switchOn(const char* sGroup, const char* sDevice) instead! + * Switch a remote switch on (Type A with 10 pole DIP switches) + * + * @param sGroup Code of the switch group (refers to DIP switches 1..5 where "1" = on and "0" = off, if all DIP switches are on it's "11111") + * @param nChannelCode Number of the switch itself (1..5) + */ +void RCSwitch::switchOn(const char* sGroup, int nChannel) { + const char* code[6] = { "00000", "10000", "01000", "00100", "00010", "00001" }; + this->switchOn(sGroup, code[nChannel]); +} + +/** + * Deprecated, use switchOff(const char* sGroup, const char* sDevice) instead! + * Switch a remote switch off (Type A with 10 pole DIP switches) + * + * @param sGroup Code of the switch group (refers to DIP switches 1..5 where "1" = on and "0" = off, if all DIP switches are on it's "11111") + * @param nChannelCode Number of the switch itself (1..5) + */ +void RCSwitch::switchOff(const char* sGroup, int nChannel) { + const char* code[6] = { "00000", "10000", "01000", "00100", "00010", "00001" }; + this->switchOff(sGroup, code[nChannel]); +} + +/** + * Switch a remote switch on (Type A with 10 pole DIP switches) + * + * @param sGroup Code of the switch group (refers to DIP switches 1..5 where "1" = on and "0" = off, if all DIP switches are on it's "11111") + * @param sDevice Code of the switch device (refers to DIP switches 6..10 (A..E) where "1" = on and "0" = off, if all DIP switches are on it's "11111") + */ +void RCSwitch::switchOn(const char* sGroup, const char* sDevice) { + this->sendTriState( this->getCodeWordA(sGroup, sDevice, true) ); +} + +/** + * Switch a remote switch off (Type A with 10 pole DIP switches) + * + * @param sGroup Code of the switch group (refers to DIP switches 1..5 where "1" = on and "0" = off, if all DIP switches are on it's "11111") + * @param sDevice Code of the switch device (refers to DIP switches 6..10 (A..E) where "1" = on and "0" = off, if all DIP switches are on it's "11111") + */ +void RCSwitch::switchOff(const char* sGroup, const char* sDevice) { + this->sendTriState( this->getCodeWordA(sGroup, sDevice, false) ); +} + + +/** + * Returns a char[13], representing the code word to be send. + * + */ +char* RCSwitch::getCodeWordA(const char* sGroup, const char* sDevice, bool bStatus) { + static char sReturn[13]; + int nReturnPos = 0; + + for (int i = 0; i < 5; i++) { + sReturn[nReturnPos++] = (sGroup[i] == '0') ? 'F' : '0'; + } + + for (int i = 0; i < 5; i++) { + sReturn[nReturnPos++] = (sDevice[i] == '0') ? 'F' : '0'; + } + + sReturn[nReturnPos++] = bStatus ? '0' : 'F'; + sReturn[nReturnPos++] = bStatus ? 'F' : '0'; + + sReturn[nReturnPos] = '\0'; + return sReturn; +} + +/** + * Encoding for type B switches with two rotary/sliding switches. + * + * The code word is a tristate word and with following bit pattern: + * + * +-----------------------------+-----------------------------+----------+------------+ + * | 4 bits address | 4 bits address | 3 bits | 1 bit | + * | switch group | switch number | not used | on / off | + * | 1=0FFF 2=F0FF 3=FF0F 4=FFF0 | 1=0FFF 2=F0FF 3=FF0F 4=FFF0 | FFF | on=F off=0 | + * +-----------------------------+-----------------------------+----------+------------+ + * + * @param nAddressCode Number of the switch group (1..4) + * @param nChannelCode Number of the switch itself (1..4) + * @param bStatus Whether to switch on (true) or off (false) + * + * @return char[13], representing a tristate code word of length 12 + */ +char* RCSwitch::getCodeWordB(int nAddressCode, int nChannelCode, bool bStatus) { + static char sReturn[13]; + int nReturnPos = 0; + + if (nAddressCode < 1 || nAddressCode > 4 || nChannelCode < 1 || nChannelCode > 4) { + return 0; + } + + for (int i = 1; i <= 4; i++) { + sReturn[nReturnPos++] = (nAddressCode == i) ? '0' : 'F'; + } + + for (int i = 1; i <= 4; i++) { + sReturn[nReturnPos++] = (nChannelCode == i) ? '0' : 'F'; + } + + sReturn[nReturnPos++] = 'F'; + sReturn[nReturnPos++] = 'F'; + sReturn[nReturnPos++] = 'F'; + + sReturn[nReturnPos++] = bStatus ? 'F' : '0'; + + sReturn[nReturnPos] = '\0'; + return sReturn; +} + +/** + * Like getCodeWord (Type C = Intertechno) + */ +char* RCSwitch::getCodeWordC(char sFamily, int nGroup, int nDevice, bool bStatus) { + static char sReturn[13]; + int nReturnPos = 0; + + int nFamily = (int)sFamily - 'a'; + if ( nFamily < 0 || nFamily > 15 || nGroup < 1 || nGroup > 4 || nDevice < 1 || nDevice > 4) { + return 0; + } + + // encode the family into four bits + sReturn[nReturnPos++] = (nFamily & 1) ? 'F' : '0'; + sReturn[nReturnPos++] = (nFamily & 2) ? 'F' : '0'; + sReturn[nReturnPos++] = (nFamily & 4) ? 'F' : '0'; + sReturn[nReturnPos++] = (nFamily & 8) ? 'F' : '0'; + + // encode the device and group + sReturn[nReturnPos++] = ((nDevice-1) & 1) ? 'F' : '0'; + sReturn[nReturnPos++] = ((nDevice-1) & 2) ? 'F' : '0'; + sReturn[nReturnPos++] = ((nGroup-1) & 1) ? 'F' : '0'; + sReturn[nReturnPos++] = ((nGroup-1) & 2) ? 'F' : '0'; + + // encode the status code + sReturn[nReturnPos++] = '0'; + sReturn[nReturnPos++] = 'F'; + sReturn[nReturnPos++] = 'F'; + sReturn[nReturnPos++] = bStatus ? 'F' : '0'; + + sReturn[nReturnPos] = '\0'; + return sReturn; +} + +/** + * Encoding for the REV Switch Type + * + * The code word is a tristate word and with following bit pattern: + * + * +-----------------------------+-------------------+----------+--------------+ + * | 4 bits address | 3 bits address | 3 bits | 2 bits | + * | switch group | device number | not used | on / off | + * | A=1FFF B=F1FF C=FF1F D=FFF1 | 1=0FF 2=F0F 3=FF0 | 000 | on=10 off=01 | + * +-----------------------------+-------------------+----------+--------------+ + * + * Source: http://www.the-intruder.net/funksteckdosen-von-rev-uber-arduino-ansteuern/ + * + * @param sGroup Name of the switch group (A..D, resp. a..d) + * @param nDevice Number of the switch itself (1..3) + * @param bStatus Whether to switch on (true) or off (false) + * + * @return char[13], representing a tristate code word of length 12 + */ +char* RCSwitch::getCodeWordD(char sGroup, int nDevice, bool bStatus) { + static char sReturn[13]; + int nReturnPos = 0; + + // sGroup must be one of the letters in "abcdABCD" + int nGroup = (sGroup >= 'a') ? (int)sGroup - 'a' : (int)sGroup - 'A'; + if ( nGroup < 0 || nGroup > 3 || nDevice < 1 || nDevice > 3) { + return 0; + } + + for (int i = 0; i < 4; i++) { + sReturn[nReturnPos++] = (nGroup == i) ? '1' : 'F'; + } + + for (int i = 1; i <= 3; i++) { + sReturn[nReturnPos++] = (nDevice == i) ? '1' : 'F'; + } + + sReturn[nReturnPos++] = '0'; + sReturn[nReturnPos++] = '0'; + sReturn[nReturnPos++] = '0'; + + sReturn[nReturnPos++] = bStatus ? '1' : '0'; + sReturn[nReturnPos++] = bStatus ? '0' : '1'; + + sReturn[nReturnPos] = '\0'; + return sReturn; +} + +/** + * @param sCodeWord a tristate code word consisting of the letter 0, 1, F + */ +void RCSwitch::sendTriState(const char* sCodeWord) { + // turn the tristate code word into the corresponding bit pattern, then send it + unsigned long code = 0; + unsigned int length = 0; + for (const char* p = sCodeWord; *p; p++) { + code <<= 2L; + switch (*p) { + case '0': + // bit pattern 00 + break; + case 'F': + // bit pattern 01 + code |= 1L; + break; + case '1': + // bit pattern 11 + code |= 3L; + break; + } + length += 2; + } + this->send(code, length); +} + +/** + * @param sCodeWord a binary code word consisting of the letter 0, 1 + */ +void RCSwitch::send(const char* sCodeWord) { + // turn the tristate code word into the corresponding bit pattern, then send it + unsigned long code = 0; + unsigned int length = 0; + for (const char* p = sCodeWord; *p; p++) { + code <<= 1L; + if (*p != '0') + code |= 1L; + length++; + } + this->send(code, length); +} + +/** + * Transmit the first 'length' bits of the integer 'code'. The + * bits are sent from MSB to LSB, i.e., first the bit at position length-1, + * then the bit at position length-2, and so on, till finally the bit at position 0. + */ +void RCSwitch::send(unsigned long code, unsigned int length) { + if (this->nTransmitterPin == -1) + return; + +#if not defined( RCSwitchDisableReceiving ) + // make sure the receiver is disabled while we transmit + int nReceiverInterrupt_backup = nReceiverInterrupt; + if (nReceiverInterrupt_backup != -1) { + this->disableReceive(); + } +#endif + + for (int nRepeat = 0; nRepeat < nRepeatTransmit; nRepeat++) { + for (int i = length-1; i >= 0; i--) { + if (code & (1L << i)) + this->transmit(protocol.one); + else + this->transmit(protocol.zero); + } + this->transmit(protocol.syncFactor); + } + + // Disable transmit after sending (i.e., for inverted protocols) + // digitalWrite(this->nTransmitterPin, LOW); + gpio_put(this->nTransmitterPin, LOW); + +#if not defined( RCSwitchDisableReceiving ) + // enable receiver again if we just disabled it + if (nReceiverInterrupt_backup != -1) { + this->enableReceive(nReceiverInterrupt_backup); + } +#endif +} + +/** + * Transmit a single high-low pulse. + */ +void RCSwitch::transmit(HighLow pulses) { + uint8_t firstLogicLevel = (this->protocol.invertedSignal) ? LOW : HIGH; + uint8_t secondLogicLevel = (this->protocol.invertedSignal) ? HIGH : LOW; + + // digitalWrite(this->nTransmitterPin, firstLogicLevel); + // delayMicroseconds( this->protocol.pulseLength * pulses.high); + // digitalWrite(this->nTransmitterPin, secondLogicLevel); + // delayMicroseconds( this->protocol.pulseLength * pulses.low); + gpio_put(this->nTransmitterPin, firstLogicLevel); + sleep_us(this->protocol.pulseLength * pulses.high); + gpio_put(this->nTransmitterPin, secondLogicLevel); + sleep_us(this->protocol.pulseLength * pulses.low); +} + + +#if not defined( RCSwitchDisableReceiving ) +/** + * Enable receiving data + */ +void RCSwitch::enableReceive(int interrupt) { + this->nReceiverInterrupt = interrupt; + this->enableReceive(); +} + +void RCSwitch::enableReceive() { + if (this->nReceiverInterrupt != -1) { + RCSwitch::nReceivedValue = 0; + RCSwitch::nReceivedBitlength = 0; + gpio_set_irq_enabled_with_callback(this->nReceiverInterrupt, GPIO_IRQ_EDGE_RISE | GPIO_IRQ_EDGE_FALL, true, &gpio_callback); + // attachInterrupt(this->nReceiverInterrupt, handleInterrupt, CHANGE); + + + } +} + +/** + * Disable receiving data + */ +void RCSwitch::disableReceive() { +#if not defined(RaspberryPi) // Arduino + // detachInterrupt(this->nReceiverInterrupt); +#endif // For Raspberry Pi (wiringPi) you can't unregister the ISR + this->nReceiverInterrupt = -1; +} + +bool RCSwitch::available() { + return RCSwitch::nReceivedValue != 0; +} + +void RCSwitch::resetAvailable() { + RCSwitch::nReceivedValue = 0; +} + +unsigned long RCSwitch::getReceivedValue() { + return RCSwitch::nReceivedValue; +} + +unsigned int RCSwitch::getReceivedBitlength() { + return RCSwitch::nReceivedBitlength; +} + +unsigned int RCSwitch::getReceivedDelay() { + return RCSwitch::nReceivedDelay; +} + +unsigned int RCSwitch::getReceivedProtocol() { + return RCSwitch::nReceivedProtocol; +} + +unsigned int* RCSwitch::getReceivedRawdata() { + return RCSwitch::timings; +} + +/* helper function for the receiveProtocol method */ +static inline unsigned int diff(int A, int B) { + return abs(A - B); +} + +/** + * + */ +bool RECEIVE_ATTR RCSwitch::receiveProtocol(const int p, unsigned int changeCount) { +#if defined(ESP8266) || defined(ESP32) + const Protocol &pro = proto[p-1]; +#else + Protocol pro; + memcpy_P(&pro, &proto[p-1], sizeof(Protocol)); +#endif + + unsigned long code = 0; + //Assuming the longer pulse length is the pulse captured in timings[0] + const unsigned int syncLengthInPulses = ((pro.syncFactor.low) > (pro.syncFactor.high)) ? (pro.syncFactor.low) : (pro.syncFactor.high); + const unsigned int delay = RCSwitch::timings[0] / syncLengthInPulses; + const unsigned int delayTolerance = delay * RCSwitch::nReceiveTolerance / 100; + + /* For protocols that start low, the sync period looks like + * _________ + * _____________| |XXXXXXXXXXXX| + * + * |--1st dur--|-2nd dur-|-Start data-| + * + * The 3rd saved duration starts the data. + * + * For protocols that start high, the sync period looks like + * + * ______________ + * | |____________|XXXXXXXXXXXXX| + * + * |-filtered out-|--1st dur--|--Start data--| + * + * The 2nd saved duration starts the data + */ + const unsigned int firstDataTiming = (pro.invertedSignal) ? (2) : (1); + + for (unsigned int i = firstDataTiming; i < changeCount - 1; i += 2) { + code <<= 1; + if (diff(RCSwitch::timings[i], delay * pro.zero.high) < delayTolerance && + diff(RCSwitch::timings[i + 1], delay * pro.zero.low) < delayTolerance) { + // zero + } else if (diff(RCSwitch::timings[i], delay * pro.one.high) < delayTolerance && + diff(RCSwitch::timings[i + 1], delay * pro.one.low) < delayTolerance) { + // one + code |= 1; + } else { + // Failed + return false; + } + } + + if (changeCount > 7) { // ignore very short transmissions: no device sends them, so this must be noise + RCSwitch::nReceivedValue = code; + RCSwitch::nReceivedBitlength = (changeCount - 1) / 2; + RCSwitch::nReceivedDelay = delay; + RCSwitch::nReceivedProtocol = p; + return true; + } + + return false; +} + + + +void RECEIVE_ATTR RCSwitch::handleInterrupt() { + + static unsigned int changeCount = 0; + static unsigned long lastTime = 0; + static unsigned int repeatCount = 0; + + // const long time = micros(); + const long time = to_us_since_boot(get_absolute_time()); + const unsigned int duration = time - lastTime; + + if (duration > RCSwitch::nSeparationLimit) { + + // A long stretch without signal level change occurred. This could + // be the gap between two transmission. + if ((repeatCount==0) || (diff(duration, RCSwitch::timings[0]) < 200)) { + + // This long signal is close in length to the long signal which + // started the previously recorded timings; this suggests that + // it may indeed by a a gap between two transmissions (we assume + // here that a sender will send the signal multiple times, + // with roughly the same gap between them). + repeatCount++; + if (repeatCount == 2) { + for(unsigned int i = 1; i <= numProto; i++) { + if (receiveProtocol(i, changeCount)) { + // receive succeeded for protocol i + break; + } + } + repeatCount = 0; + } + } + changeCount = 0; + } + + // detect overflow + if (changeCount >= RCSWITCH_MAX_CHANGES) { + changeCount = 0; + repeatCount = 0; + } + + RCSwitch::timings[changeCount++] = duration; + lastTime = time; +} +#endif diff --git a/433/rc-switch-pico/radio-switch.h b/433/rc-switch-pico/radio-switch.h new file mode 100644 index 0000000..24d72a1 --- /dev/null +++ b/433/rc-switch-pico/radio-switch.h @@ -0,0 +1,170 @@ +/* + RCSwitch - Arduino libary for remote control outlet switches + Copyright (c) 2011 Suat Özgür. All right reserved. + + Contributors: + - Andre Koehler / info(at)tomate-online(dot)de + - Gordeev Andrey Vladimirovich / gordeev(at)openpyro(dot)com + - Skineffect / http://forum.ardumote.com/viewtopic.php?f=2&t=46 + - Dominik Fischer / dom_fischer(at)web(dot)de + - Frank Oltmanns / .(at)gmail(dot)com + - Max Horn / max(at)quendi(dot)de + - Robert ter Vehn / .(at)gmail(dot)com + + Project home: https://github.com/sui77/rc-switch/ + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ +#ifndef _RCSwitch_h +#define _RCSwitch_h + + +// #define RaspberryPi + +// Include libraries for RPi: +#include /* memcpy */ +#include /* abs */ + + + +#include + +// Number of maximum high/Low changes per packet. +// We can handle up to (unsigned long) => 32 bit * 2 H/L changes per bit + 2 for sync +#define RCSWITCH_MAX_CHANGES 67 + +class RCSwitch { + + public: + RCSwitch(); + + void switchOn(int nGroupNumber, int nSwitchNumber); + void switchOff(int nGroupNumber, int nSwitchNumber); + void switchOn(const char* sGroup, int nSwitchNumber); + void switchOff(const char* sGroup, int nSwitchNumber); + void switchOn(char sFamily, int nGroup, int nDevice); + void switchOff(char sFamily, int nGroup, int nDevice); + void switchOn(const char* sGroup, const char* sDevice); + void switchOff(const char* sGroup, const char* sDevice); + void switchOn(char sGroup, int nDevice); + void switchOff(char sGroup, int nDevice); + + void sendTriState(const char* sCodeWord); + void send(unsigned long code, unsigned int length); + void send(const char* sCodeWord); + + #if not defined( RCSwitchDisableReceiving ) + void enableReceive(int interrupt); + void enableReceive(); + void disableReceive(); + bool available(); + void resetAvailable(); + + unsigned long getReceivedValue(); + unsigned int getReceivedBitlength(); + unsigned int getReceivedDelay(); + unsigned int getReceivedProtocol(); + unsigned int* getReceivedRawdata(); + #endif + + void enableTransmit(int nTransmitterPin); + void disableTransmit(); + void setPulseLength(int nPulseLength); + void setRepeatTransmit(int nRepeatTransmit); + #if not defined( RCSwitchDisableReceiving ) + void setReceiveTolerance(int nPercent); + #endif + + /** + * Description of a single pule, which consists of a high signal + * whose duration is "high" times the base pulse length, followed + * by a low signal lasting "low" times the base pulse length. + * Thus, the pulse overall lasts (high+low)*pulseLength + */ + struct HighLow { + uint8_t high; + uint8_t low; + }; + + /** + * A "protocol" describes how zero and one bits are encoded into high/low + * pulses. + */ + struct Protocol { + /** base pulse length in microseconds, e.g. 350 */ + uint16_t pulseLength; + + HighLow syncFactor; + HighLow zero; + HighLow one; + + /** + * If true, interchange high and low logic levels in all transmissions. + * + * By default, RCSwitch assumes that any signals it sends or receives + * can be broken down into pulses which start with a high signal level, + * followed by a a low signal level. This is e.g. the case for the + * popular PT 2260 encoder chip, and thus many switches out there. + * + * But some devices do it the other way around, and start with a low + * signal level, followed by a high signal level, e.g. the HT6P20B. To + * accommodate this, one can set invertedSignal to true, which causes + * RCSwitch to change how it interprets any HighLow struct FOO: It will + * then assume transmissions start with a low signal lasting + * FOO.high*pulseLength microseconds, followed by a high signal lasting + * FOO.low*pulseLength microseconds. + */ + bool invertedSignal; + }; + + void setProtocol(Protocol protocol); + void setProtocol(int nProtocol); + void setProtocol(int nProtocol, int nPulseLength); + + private: + static void gpio_callback(unsigned int gpio, uint32_t events); + char* getCodeWordA(const char* sGroup, const char* sDevice, bool bStatus); + char* getCodeWordB(int nGroupNumber, int nSwitchNumber, bool bStatus); + char* getCodeWordC(char sFamily, int nGroup, int nDevice, bool bStatus); + char* getCodeWordD(char group, int nDevice, bool bStatus); + void transmit(HighLow pulses); + + #if not defined( RCSwitchDisableReceiving ) + static void handleInterrupt(); + static bool receiveProtocol(const int p, unsigned int changeCount); + int nReceiverInterrupt; + #endif + int nTransmitterPin; + int nRepeatTransmit; + + Protocol protocol; + + #if not defined( RCSwitchDisableReceiving ) + static int nReceiveTolerance; + volatile static unsigned long nReceivedValue; + volatile static unsigned int nReceivedBitlength; + volatile static unsigned int nReceivedDelay; + volatile static unsigned int nReceivedProtocol; + const static unsigned int nSeparationLimit; + /* + * timings[0] contains sync timing, followed by a number of bits + */ + static unsigned int timings[RCSWITCH_MAX_CHANGES]; + #endif + + +}; + +#endif diff --git a/433/rc-switch-pico/readme.md b/433/rc-switch-pico/readme.md new file mode 100644 index 0000000..d0170f3 --- /dev/null +++ b/433/rc-switch-pico/readme.md @@ -0,0 +1,23 @@ +# RcSwitch +A port of the brilliant [RC-Switch](https://github.com/sui77/rc-switch) library to the raspberry pi pico. + +It allows you to send and recieve radio signals from 433/315Mhz devices like radio controlled power sockets, using cheap radio modules. + +This works for both recieving and transmitting. Check out the examples for code for both of these. + +## Building +This library can be developed on any platform that the pico-sdk works on, through cmake. + +In the root directory, make sure that the pico-sdk is on your path and run +```bash +cmake . +``` + +then change directory into `examples/recieve`, then run +```bash +make +``` +which will spit out your uf2 file. + +## Issues +If you experience an error while using this library, please raise an issue here on Github and I'll try to help out. Pull requests are also very welcome! \ No newline at end of file diff --git a/circuits/Smart home.fzz b/circuits/Smart home.fzz index 92cae929075bee24ec216f8f3d4506af88636485..bd05998eee04fea28f904872df4a27bbe90cf163 100644 GIT binary patch literal 9354 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