Z uwagi na brak dostępnych pinów w Arduino ,nie jestem w stanie przetestować czy Arduino Mega jest w stanie obsłużyc jeszcze większość urządzeń
Ważne:przy ostatniej konfiguracji napotkałem na problem że niektóre biblioteki supladevice z githuba Klew ograniczały możliwość rejestracji arduino do supla-wynikało to z ograniczeń danych przekaźników lub przycisków na jednej z bibliotek supla łączyła sie przy ograniczeniu np 16 przekaźników , natomiast inna z bibliotek rejestrowała sie bez problemu (obecnie tak jak wynika to z kodu działają 23 przekaźniki , 3 sesnory oraz 19 przycisków)
Poniżej Kod
Kod: Zaznacz cały
#include <SuplaDevice.h>
#include <supla/control/relay.h>
#include <supla/control/button.h>
#include <supla/sensor/binary.h>
// Choose where Supla should store counter data in persistant memory
// We recommend to use external FRAM memory
#define STORAGE_OFFSET 100
#include <supla/storage/eeprom.h>
Supla::Eeprom eeprom(STORAGE_OFFSET);
// #include <supla/storage/fram_spi.h>
// Supla::FramSpi fram(STORAGE_OFFSET);
// Choose proper network interface for your card:
#ifdef ARDUINO_ARCH_AVR
// Arduino Mega with EthernetShield W5100:
#include <supla/network/ethernet_shield.h>
// Ethernet MAC address
uint8_t mac[6] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05};
Supla::EthernetShield ethernet(mac);
#endif
void setup() {
Serial.begin(9600);
// Replace the falowing GUID with value that you can retrieve from https://www.supla.org/arduino/get-guid
char GUID[SUPLA_GUID_SIZE] = {xxxxxxxxxxxxxxxxxxxxxxxx};
// Replace the following AUTHKEY with value that you can retrieve from: https://www.supla.org/arduino/get-authkey
char AUTHKEY[SUPLA_AUTHKEY_SIZE] = {xxxxxxxxxxxxxxxxxxxxx};
/*
* Having your device already registered at cloud.supla.org,
* you want to change CHANNEL sequence or remove any of them,
* then you must also remove the device itself from cloud.supla.org.
* Otherwise you will get "Channel conflict!" error.
*/
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// INSTRUKCJA PRZEKAŹNIKÓW (https://forum.supla.org/viewtopic.php?f=61&t=7263)
//auto r1 = new Supla::Control::Relay(x); // sterowany stanem wysokim -bez true, false -stan niskim
//r1->setDefaultStateOn(); // po uruchomieniu urządzenia, przekaźnik będzie włączony
//r1->setDefaultStateOff(); // po uruchomieniu urządzenia, przekażnik będzie wyłączony (domyślne ustawienie)
//r1->setDefaultStateRestore(); // po uruchomieniu urządzenia, przekaźnik wróci do stanu sprzed
// wyłączenia zasilania urządzenia (wymaga Storage)
//r1->keepTurnOnDuration(); // przekaźnik zapamięta czas wysłany ostatnio przez serwer i będzie używał go przy
// włączeniu przekaźnika z lokalnego przycisku, lub z kodu. Aby urządzenie
// zapamiętał czas włączenia, wymagany jest Storage. Bez Storage, czas
// będzie zapamiętany tylko do resetu.
//r1->turnOn(); // włącza przekaźnik. Jeśli mamy ustawione "keepTurnOnDuration", to zostanie użyty zapisany wcześniej czas włączenia
//r1->turnOn(czas_w_milisekundach); // włącza przekaźnik na określony czas
//r1->turnOff(); // wyłącza przekaźnik
//r1->toggle(); // przeałącza przekaźnik
//r1->isOn(); // zwraca true/false w zależności od tego czy przekaźnik jest włączony czy nie
// INSTRUKCJA BUTTON (https://forum.supla.org/viewtopic.php?f=61&t=7512)
//auto bx = new Supla::Control::Button (x, true ); //true dla pulldown
//bx->setHoldTime(1000); // po 1 s od przytrzymania przycisku zostanie wywołane zdarzenie ON_HOLD
//bx->setMulticlickTime(400 ); // program zlicza kliknięcia i po upływie 400 ms od puszczenia przycisku, wywoła odpowiednią akcję ON_CLICK_1 do ON_CLICK_9
//dla przekaźnika bistabilnego (włącz-wyłącz)
//bx->addAction(Supla::TOGGLE, r1, Supla::ON_PRESS);
//dla wielokliku (klik-włącza relay1,klik-przytrzymanie włącza relay1+realy2 ,kolejne przytrzymanie wyłacza relay1+realy2 )
//bx->addAction(Supla::TOGGLE, r1, Supla::ON_PRESS);
//bx->addAction(Supla::TOGGLE, r2, Supla::ON_HOLD);
//dla wielokliku (klik 1-włącza relay1, klik 2-włącza realy2)
//bx->addAction(Supla::TOGGLE, r1, Supla::ON_CLICK_1);
//bx->addAction(Supla::TOGGLE, r2, Supla::ON_HOLD);
//nie przezuca relay1 oraz ralay2 , po przytrzymaniu przezuca realy2 i relay1
//bx->addAction(Supla::TOGGLE, r1, Supla::ON_HOLD);
//bx->addAction(Supla::TOGGLE, r2, Supla::ON_HOLD);
//INSTRUKCJA OPISU PINÓW MEGA
// D0 i D1 - to uart dla połączenia USB - pojawiają się tam różne stany przy starcie więc lepiej ich nie używać.
// D13 - to niebieska dioda na płytce i sygnalizuje różne stany więc też odpada (chyba taki odpowiednik led config w ESP)
// D10 - pin wykorzystywany przez ethernet scheld (SS)
// D50,D51,D52- interfejs SPI wykorzystywany przec ethernet scheld i pamięć FRAM ( MISO,MOSI,SCK.)
// D53 - pin wykorzystywany standatdowo dla pamięci FRAM z interfejsem SPI (SS) - pozostałe piny magistrali wspólne z etchernet scheld.
//INSTRUKCJA OPISU SENSORÓW
// Zalaczenie sensora nastepuje podczas zwarcia (3v3 poprzez 4,7k + D1 ) z GND
// lub (5V poprzez 10k + D1 ) z GND
// bez true- Zalaczenie sensora nastepuje podczas zwarcia (3v3 poprzez 4,7k + D1 ) z GND lub (5V poprzez 10k + D1 ) z GND
// z true - zwarcie pinu D7 + GND (D8,D0 nie działa d3 działa ale musi miec 0 na starcie))
//SERIAL PIN
//Serial ports: Serial1 on pins 19 (RX) and 18 (TX), Serial2 on pins 17 (RX) and 16 (TX), Serial3 on pins 15 (RX) and 14 (TX
///////////////////////////////////////////////////////////////
//SEKCJA PRZEKAŹNIKÓW 230V
///////////////////////////////////////////////////////////////
auto r0 = new Supla::Control::Relay(26); //oswietlenie garaz
auto r1 = new Supla::Control::Relay(27); //oswietlenie korytarz salon
auto r2 = new Supla::Control::Relay(28); //oswietlenie schody parter boki
auto r3 = new Supla::Control::Relay(29); //oswietlenie schody pietro boki
auto r4 = new Supla::Control::Relay(30); //oswietlenie sufit salon LED
auto r5 = new Supla::Control::Relay(31); //włączenie choinki
auto r6 = new Supla::Control::Relay(32); // oswietlenie światła bramy garażowej
auto r7 = new Supla::Control::Relay(33); // nieprzypisany 1
///////////////////////////////////////////////////////////////
//SEKCJA PRZEKAZNIKÓW 12V
///////////////////////////////////////////////////////////////
auto r8 = new Supla::Control::Relay(34); //oswietlenie korytarz sypialnia
auto r9 = new Supla::Control::Relay(35); //oswietlenie klatka parter sciana
auto r10 = new Supla::Control::Relay(36); //oswietlenie klatka pietro sciana
auto r11 = new Supla::Control::Relay(37); //Oświetlenie telewizora
///////////////////////////////////////////////////////////////
//SEKCJA STEROWANIA PRZEKAZNIKAMI BRAM (puszka przy schodach)
///////////////////////////////////////////////////////////////
auto r12 = new Supla::Control::Relay(38); //przekaźnik otwarcia jednym przyciskiem
r12->setDefaultStateOff();
r12->keepTurnOnDuration();
r12->turnOn(1500);
auto r13 = new Supla::Control::Relay(39); //przekaznik otwierania bramy wjazdowej 1000ms=1s
r13->setDefaultStateOff();
r13->keepTurnOnDuration();
r13->turnOn(1500);
auto r14 = new Supla::Control::Relay(40); //przekaznik otwierania bramy garazowej
r14->setDefaultStateOff();
r14->keepTurnOnDuration();
r14->turnOn(1500);
auto r15 = new Supla::Control::Relay(41); //przekaznik otwierania furtki
r15->setDefaultStateOff();
r15->keepTurnOnDuration();
r15->turnOn(5000);
///////////////////////////////////////////////////////////////
//SEKCJA PRZEKAZNIKÓW W PUSZKACH SALON
///////////////////////////////////////////////////////////////
auto r16 = new Supla::Control::Relay(42, false); //oswietlenie nad naroznikiem
auto r17 = new Supla::Control::Relay(43, false); //oswietlenie salon sufit
///////////////////////////////////////////////////////////////
//SEKCJA PRZEKAZNIKÓW W PUSZCE SYPIALNIA
///////////////////////////////////////////////////////////////
auto r18 = new Supla::Control::Relay(44, false); //oświetlenie sypialnia lampa sufit
auto r19 = new Supla::Control::Relay(45, false); //oświetlenie sypialnia Led
auto r20 = new Supla::Control::Relay(46); //oświetlenie sypialnia garderoba
r20->setDefaultStateOff();
r20->keepTurnOnDuration();
r20->turnOn(50000);
auto r21 = new Supla::Control::Relay(47, false); //nieprzypisany
auto r22 = new Supla::Control::Relay(48, false); //nieprzypisany
///////////////////////////////////////////////////////////////
//SEKCJA SENSORÓW
///////////////////////////////////////////////////////////////
new Supla::Sensor::Binary(11, true); //kontaktron bramy wjazdowej -brama zamknięta
//false-zalaczenie sensora nastepuje podczas zwarcia (3v3 poprzez 4,7k + D1 ) z GND lub (5V poprzez 10k + D1 ) z GND
//true -zwarcie D1 z GND
new Supla::Sensor::Binary(12, true); //kontaktron bramy wjazdowej -brama otwarta
new Supla::Sensor::Binary(2, false); //kontaktron bramy garażowej pull down
///////////////////////////////////////////////////////////////
//SEKCJA BUTTONÓW
///////////////////////////////////////////////////////////////
auto b0 = new Supla::Control::Button(24, false ); //oswietlenie garaz
b0->setHoldTime(1000);// po 2 s od przytrzymania przycisku zostanie wywołane zdarzenie ON_HOLD
b0->addAction(Supla::TOGGLE, r0, Supla::ON_PRESS); //przerzuca oś.garaz właczy-wyłacz
b0->addAction(Supla::TOGGLE, r6, Supla::ON_HOLD); //po przytrzymaniu przerzuca oś.światła garaz brama
auto b1 = new Supla::Control::Button(23, false ); //oswietlenie korytarz salon
b1->addAction(Supla::TOGGLE, r1, Supla::ON_PRESS);
auto b2 = new Supla::Control::Button(20, false ); //oswietlenie schody parter boki
b2->addAction(Supla::TOGGLE, r2, Supla::ON_PRESS);
auto b3 = new Supla::Control::Button(17, true ); //oswietlenie schody pietro boki
b3->setHoldTime(1000);// po 2 s od przytrzymania przycisku zostanie wywołane zdarzenie ON_HOLD
b3->addAction(Supla::TOGGLE, r3, Supla::ON_PRESS);//przerzuca oś. schody pietro właczy-wyłacz
b3->addAction(Supla::TOGGLE, r10, Supla::ON_HOLD);//po przytrzymaniu przerzuca oś.lampa piętro
auto b4 = new Supla::Control::Button(21, false ); //oswietlenie sufit salon LED
b4->addAction(Supla::TOGGLE, r4, Supla::ON_PRESS);
auto b5 = new Supla::Control::Button(25, false ); //włączenie choinki
b5->addAction(Supla::TOGGLE, r5, Supla::ON_PRESS);
auto b6 = new Supla::Control::Button(22, false ); //oswietlenie sypialnia
b6->setHoldTime(1000);// po 2 s od przytrzymania przycisku zostanie wywołane zdarzenie ON_HOLD
b6->addAction(Supla::TOGGLE, r19, Supla::ON_PRESS);//;przerzuca oś.sypialni LED właczy-wyłacz
b6->addAction(Supla::TOGGLE, r18, Supla::ON_HOLD);//po przytrzymaniu przerzuca oś.sypialni Lampy
auto b7 = new Supla::Control::Button(19, false ); //nieprzypisany
b7->addAction(Supla::TOGGLE, r7, Supla::ON_PRESS);
auto b8 = new Supla::Control::Button(16, false ); //oswietlenie korytarz sypialnia
b8->addAction(Supla::TOGGLE, r8, Supla::ON_PRESS);
auto b9 = new Supla::Control::Button(15, false ); //oswietlenie klatka parter sciana
b9->addAction(Supla::TOGGLE, r9, Supla::ON_PRESS);
auto b10 = new Supla::Control::Button(14, false ); //oswietlenie garderoba sypialni
b10->addAction(Supla::TOGGLE, r20, Supla::ON_PRESS);
auto b11 = new Supla::Control::Button(9, false ); //oświetlenie telewizora
b11->addAction(Supla::TOGGLE, r11, Supla::ON_PRESS);
auto b12 = new Supla::Control::Button(8, false ); //otwarcia jednym przyciskiem
b12->addAction(Supla::TOGGLE, r12, Supla::ON_PRESS);
auto b13 = new Supla::Control::Button(7, false ); //otwierania bramy wjazdowej
b13->addAction(Supla::TOGGLE, r13, Supla::ON_PRESS);
auto b14 = new Supla::Control::Button(6, false ); //otwierania bramy garazowej
b14->addAction(Supla::TOGGLE, r14, Supla::ON_PRESS);
auto b15 = new Supla::Control::Button(5, false ); //przekaznik otwierania furtki
b15->addAction(Supla::TOGGLE, r15, Supla::ON_PRESS);
auto b16 = new Supla::Control::Button(4, false ); //oswietlenie nad naroznikiem
b16->addAction(Supla::TOGGLE, r16, Supla::ON_PRESS);
auto b17 = new Supla::Control::Button(3, false ); //oswietlenie salon sufit
b17->addAction(Supla::TOGGLE, r17, Supla::ON_PRESS);
auto b18 = new Supla::Control::Button(49, true ); //nieprzypisany
b18->addAction(Supla::TOGGLE, r18, Supla::ON_PRESS); //nieprzypisany
/*
* Server address is available at https://cloud.supla.org
* If you do not have an account, you can create it at https://cloud.supla.org/account/create
* SUPLA and SUPLA CLOUD are free of charge
*/
SuplaDevice.setName("xxxxxxxxxxxxxxxxx");
SuplaDevice.begin(GUID, // Global Unique Identifier
"xxxxxxxx", // SUPLA server address
"xxxxxxxxxxxx@gmail.com", // Email address used to login to Supla Cloud
AUTHKEY); // Authorization key
}
void loop() {
SuplaDevice.iterate();
}