Bardzo dziękuję za pomoc przy znalezienie błędów użytkownikom forum Supli: Zybi, Espablo oraz Sławek
Artykuł jest poradnikiem, w jaki sposób zrobić namiastkę inteligentnego domu na bazie Nodemcu v3 oraz projektu Supla.
Co to jest Supla.org?
(IoT) Internet rzeczy nadchodzi!
Dostępne na rynku systemy automatyki budynkowej są zazwyczaj bardzo złożone, zamknięte i kosztowne. W wielu przypadkach wymagają instalacji już na etapie budowy obiektu. SUPLA jest prosta, otwarta i bezpłatna. Umożliwia budowanie elementów wykonawczych w oparciu o platformy RaspberryPI, Arduino czy też ESP8266 i łączenie ich ze sobą z wykorzystaniem sieci LAN oraz WiFi. Dzięki SUPLI możesz między innymi sterować oświetleniem, włączać i wyłączać urządzenia AGD i RTV, otwierać i zamykać bramy oraz drzwi, czy też kontrolować temperaturę w pomieszczeniach. Wszystko to możesz zrobić jednym przesunięciem palca. SUPLA dostępna jest wszędzie tam, gdzie posiadasz dostęp do sieci Internet i masz pod ręką smartfon lub tablet. SUPLA rozwijana jest na zasadach Otwartego Oprogramowania oraz Otwartego Sprzętu, dzięki czemu Ty również możesz rozwijać ten projekt!
UWAGA!!! PROJEKT OBEJMUJE NIEBEZPIECZNE NAPIĘCIE 230V AC!!!!
Do wykonania będą potrzebne:
- przycisk monostabilny N0 x 4 sztuki,
- Nodemcu v3 lub inne,
- rezystory 10k Ohm x 8 sztuk,
- płytka perfboard, moja ma 35×30 pól,
- zasilacz 5V,
- tranzystory NPN x 4 sztuki (BC457),
- złącze CRIMP 6 pin,
- złącze CRIMP 4 pin,
- złącze 3-pinowe dla czujnika temperatury,
- moduł 4 przekaźników sterowanych masą,
- DHT 22,
- 4 gniazdka natynkowe,
- dwa przewody zasilające,
- przewody,
- gniazdo Goldpin 1×15 x 2 sztuki.
- 4 kondensatory ceramiczne 1uF lub o podobnej pojemności
Do sterowania głosem (Google Assistant lub Google Home)
- Google Home Speaker lub Smartphone z Androidem
- Aplikacja IFTTT
1. Elektryka i zrobienie płytki
SCHEMAT POŁĄCZEŃ: (Zamierzam także wykonać projekt całości w programie SolidEdge, gdy zrobię obudowę)
Zaktualizowany schemat(26.03.2018):
GOTOWA PŁYTKA: (jeszcze brak kondensatorów)
2. Wgrywanie FIRMWARE
Zamiast można zastosować środowisko ArduinoIDE, na samym końcu kod który używam:
Co daje używanie programowania w Arduino? Dowolna konfiguracja pinów, wartości, czasów odświeżania, dodatkowe funkcje. Możemy stworzyć cokolwiek chcemy. Zamierzam niedługo rozebrać nieużywany ekspres na kapsułki i dorobić na Wemos D1 sterowanie za pomocą SUPLI. Niestety niedługo matura.
LINKI DO POBRANIA:
- NODEMCU FLASHER
- Sterowniki do Nodemcu v3 – układ programatora CH340G https://wiki.wemos.cc/downloads
- Program megasocket x4 z DHT22 by Zybi https://github.com/SUPLA/ESP8266/blob/master/Zybi/Socket/v2.5.3/wifisocket_x4_DHT22_1M_v2.5.3.rar
Ściągamy wszystkie pliki, wypakowujemy program oraz instalujemy sterownik.
W programie w zakładce “Config” wybieramy pliki rozpakowane z megasocket. Należy pamiętać o ustawieniu adresów oraz zaznaczeniu tylko tych plików, które musimy wgrać na nasze Nodemcu.
Następnie w zakładce “Advanced” ustawiamy kolejno:
Pozostaje już tylko w pierwszej zakładce wybrać odpowiedni COM oraz kliknąć FLASH, wgrywanie programu nie powinno zająć dużo czasu.
WAŻNE!!! Przeczytaj plik README w MEGASOCKET.
3. Konfiguracja Nodemcu v3
Jeśli jeszcze nie masz konta na Supla.org, zrób to tutaj:
https://svr9.supla.org/account/create_here
By rozpocząć konfigurację, podłącz zasilanie oraz przytrzymaj przycisk 1 na około 9 s. Pojawi się sieć o nazwie SUPLA-ESP8226-xxxxxxxxxx.
Należy połączyć się z tą siecią za pomocą laptopa, telefonu, tabletu oraz w przeglądarce wpisać adres: http://192.168.4.1
Alternatywny sposób poprzez aplikację na Androida:
4. Teraz już chyba ostatni etap, Google Home oraz Google asystent.
W obecnej wersji Supla nie wspiera oficjalnie rodziny Google, lecz dzięki skryptom udostępnionym dzięki Fracz da się obejść ten problem.
Pierwszym krokiem będzie rejestracja konta na https://supla.fracz.com/register. Jest ona bardzo przejrzyście opisana.
Drugim krokiem jest zalogowanie za pomocą konta Google na https://ifttt.com/join
AKTUALIZACJA
Zrobiłem projekt w przezroczystym dosyć dużym pudełku by było wszystko widać na dni otwarte:
Ekstra, kod w Arduino IDE:
Potrzebujemy na początku zainstalować bibliotekę SUPLADEVICE:
Strona supli, download pobieramy bibliotekę ARDUINO
Instalacja: Szkic>Dołącz Bibliotekę>Dodaj bibliotekę .ZIP
Jeśli nie macie jeszcze biblioteki DHT:
w programie ArduinoIDE
Szkic>Dołącz Bibliotekę>Zarządzaj Bibliotekami>wyszukujemy DHT
Jeśli nigdy nie programowaliście ESP8226, należy wejść w
Narzędzia>Płytka>Menadżer Płytek
Ufff, no to chyba czas na kod:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 |
/** * Supla.org NodeMCU WiFi minimal example * Author: Programistyk - Kamil Kaminski <kamil@programistyk.pl> * * This example shows how to configure SuplaDevice for building for NodeMCU within Arduino IDE */ int button1; //wartość dla przycisku1 int button2; //wartość dla przycisku2 int button3; //wartość dla przycisku3 int button4; //wartość dla przycisku4 #include <srpc.h> #include <log.h> #include <eh.h> #include <proto.h> #include <IEEE754tools.h> // We define our own ethernet layer #define SUPLADEVICE_CPP #include <DHT.h> #define DHTPIN D9 //pin pod którym jest nasz czujnik temperatury #define DHTTYPE DHT22 //Zmieniamy na DHT11 jeśli mamy taki czujnik. DHT11 jest tańszy, ale także mniej dokładny #include <SuplaDevice.h> #include <lck.h> DHT dht(DHTPIN, DHTTYPE); #include <WiFiClient.h> #include <ESP8266WiFiType.h> #include <ESP8266WiFi.h> #include <ESP8266WiFiScan.h> #include <ESP8266WiFiMulti.h> #include <WiFiServer.h> #include <ESP8266WiFiGeneric.h> #include <WiFiClientSecure.h> #include <ESP8266WiFiAP.h> #include <ESP8266WiFiSTA.h> #include <WiFiUdp.h> WiFiClient client; // Setup Supla connection const char* ssid = "NAZWA_NASZEGO_WIFI"; //np. const char* ssid = "to wcale nie jest CBA"; const char* password = "HASŁO_NASZEJ_SIECI"; //np. const char* password = "1jednaktak1"; void get_temperature_and_humidity(int channelNumber, double *temp, double *humidity) { *temp = dht.readTemperature(); *humidity = dht.readHumidity(); if ( isnan(*temp) || isnan(*humidity) ) { *temp = -275; *humidity = -1; } } void setup() { Serial.begin(115200); dht.begin(); delay(10); SuplaDevice.setTemperatureHumidityCallback(&get_temperature_and_humidity); // Replace the falowing GUID char GUID[SUPLA_GUID_SIZE] = {tutaj_wklej_swoj_guid_z_linku}; // with GUID that you can retrieve from https://www.supla.org/arduino/get-guid // Ethernet MAC address uint8_t mac[6] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; //Nasze przekaźniki SuplaDevice.addRelay(D6); SuplaDevice.addRelay(D7); SuplaDevice.addRelay(D5); SuplaDevice.addRelay(D0); //Nasz czujnik, można zmienić na DHT11 SuplaDevice.addDHT22(); SuplaDevice.begin(GUID, mac, "adres", // adres serweru SUPLI lokalizacja, // ID lokacji "hasło"); // Hasło lokacji } void loop() { SuplaDevice.iterate(); TSD_SuplaChannelNewValue value1; value1.SenderID = 0; value1.ChannelNumber = 0; // Kanał naszego przekaźnika value1.DurationMS = 0; button1 = digitalRead(D3); //zczytanie stanu przycisku podłączonego pod D3 do funkcji button1 if(digitalRead(D3)==LOW){ //jeśli stan jest niski value1.value[0] = !value1.value[0]; //sprawdzenie stanu przekaźnika SuplaDevice.channelSetValue(&value1); //zmiana stanu while(digitalRead(D3)==LOW); //przycisk długo wciśnięty delay(20); } //Teraz pozostałe przyciski TSD_SuplaChannelNewValue value2; //Set value name OKKKK value2.SenderID = 0; // Notify other users that your smartphone opens a blind. In case of actuators is to be 0 value2.ChannelNumber = 1; // Need enter the relay channel number value2.DurationMS = 0; //turn on time button2 = digitalRead(D4); if(digitalRead(D4)==LOW){ value2.value[0] = !value2.value[0]; SuplaDevice.channelSetValue(&value2); while(digitalRead(D4)==LOW); delay(20); } TSD_SuplaChannelNewValue value3; //Set value name OKKKKKKK value3.SenderID = 0; // Notify other users that your smartphone opens a blind. In case of actuators is to be 0 value3.ChannelNumber = 2; // Need enter the relay channel number value3.DurationMS = 0; //turn on time button3 = digitalRead(D2); if(digitalRead(D2)==LOW){ value3.value[0] = !value3.value[0]; SuplaDevice.channelSetValue(&value3); while(digitalRead(D2)==LOW); delay(20); } TSD_SuplaChannelNewValue value4; //Set value name OKKKKKKKK value4.SenderID = 0; // Notify other users that your smartphone opens a blind. In case of actuators is to be 0 value4.ChannelNumber = 3; // Need enter the relay channel number value4.DurationMS = 0; //turn on time button4 = digitalRead(D1); if(digitalRead(D1)==LOW){ value4.value[0] = !value4.value[0]; SuplaDevice.channelSetValue(&value4); while(digitalRead(D1)==LOW); delay(20); } } // Supla.org ethernet layer int supla_arduino_tcp_read(void *buf, int count) { _supla_int_t size = client.available(); if ( size > 0 ) { if ( size > count ) size = count; return client.read((uint8_t *)buf, size); }; return -1; }; int supla_arduino_tcp_write(void *buf, int count) { return client.write((const uint8_t *)buf, count); }; bool supla_arduino_svr_connect(const char *server, int port) { return client.connect(server, 2015); } bool supla_arduino_svr_connected(void) { return client.connected(); } void supla_arduino_svr_disconnect(void) { client.stop(); } void supla_arduino_eth_setup(uint8_t mac[6], IPAddress *ip) { // Serial.println("WiFi init"); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); // Serial.print("."); } //Serial.print("\nlocalIP: "); //Serial.println(WiFi.localIP()); //Serial.print("subnetMask: "); //Serial.println(WiFi.subnetMask()); //Serial.print("gatewayIP: "); //Serial.println(WiFi.gatewayIP()); } SuplaDeviceCallbacks supla_arduino_get_callbacks(void) { SuplaDeviceCallbacks cb; cb.tcp_read = &supla_arduino_tcp_read; cb.tcp_write = &supla_arduino_tcp_write; cb.eth_setup = &supla_arduino_eth_setup; cb.svr_connected = &supla_arduino_svr_connected; cb.svr_connect = &supla_arduino_svr_connect; cb.svr_disconnect = &supla_arduino_svr_disconnect; cb.get_temperature = NULL; cb.get_temperature_and_humidity = NULL; cb.get_rgbw_value = NULL; cb.set_rgbw_value = NULL; return cb; } |
U mnie jak mówię do google to co zapisałem to mi to wyszukuje w przeglądarce ;/
1. Rozumiem, że w ifttt dałeś uprawnienia do konta google?
Może będzie lepiej jak przejdziemy na priv.
By sterować wszystkim niestety trzeba zrobić 8 scen i 8 apletów w ten sposób.
Podobno Supla planuje wprowadzenie obsługi Google home.
Zamierzam też wstawić bardziej profesjonalny film, mam nadzieję że muzyka i jakość wykonania, drżenie muzyki na jej początku wskazują, że ten jest tylko na zastępstwo.
Ciągle utyskujemy, że grają u nas najemnicy. Może warto pokazać troche ludzkiego oblicza i pomóc facetowi. A on może dzięki temu będzie chciał się związać z takim klubem jak Lech? W końcu to nie stało się w czasie wpadu weekendowego w góry, tylko w trakcie meczu kiedy reprezentowal Kolejorza. Może zarząd zechce pomyśleć dlugofalowo i nie tylko przez pryzmat krotkoterminowego zysku i da jeszcze Koljiciovi szanse? Oby.
Kurcze ciągle szukam takiego długiego przedłużacza, żeby upchać w nim to wszystko, te kilka przekaźników i aby każde gniazdo miało osobne styki – jak wiadomo te najtańsze przedłużacze zawierają metalowe listwy. Myślałem, żeby szukać jakiegoś starego UPSa z listwą, było coś takiego “krowiastego” i po wywaleniu baterii, może dałoby radę wszystko zmieścić, ale z tymi osobnymi gniazdami to chyba zawsze będzie problem.
Mimo to projekt kolegi bardzo mi się podoba, chociaż ja dalej uważam, że da się to jeszcze bardziej zminiaturyzować :)
Nie miało być na mój użytek tylko dla szkoły, sam wolałem mniejsze i nie przezroczyste pudełko, a także płytkę scaloną.
Ale tutaj podobno lepiej widać :)
Pingback: ESP8266, Arduino IDE i SUPLA. Zestaw (prawie) doskonały – Arduino dla strasznych lamerów
Zaczynam przygodę z supla .
Zamówiłem od kolegów z ChRL nodemcu razem z bazą.
Co muszę wykreślić z Twojej listy zakupow ?
Link do supli od zybi nieaktualny przez co temat pomimo 2 miejsca do kosza …
Dokadnie, link jest nieaktualny. Czy oznacza to, że nasze ESP nie będzie widziane w aplikacji supla?
NPN to B547 A nie jak w tekście B457
Witam
udało mi się skompilować i wgrać do ESP8266 ten program, niestety co kilka sekund resetuje go watchdog nie wiem co może być przyczyną. Urządzenie loguje się do supli co jakiś czas na chwilę i nic więcej nie mogę zrobić
Nie ma możliwości pobrania już firmwaera z githuba, proszę o aktualizację linku
Szukam odpowiedzi na pytanie czy można nodemcu zasilać z ładowarki do telefonu z quick charge?
Mam kilka modułów nodemcu i brakuje mi gniazdek, żeby każdego zasilać osobnym zasilaczem. Wpadłem na pomysł, żeby kupić zasilacz z trzema gniazdami usb i zasilić trzy nodemcu z jednego zasilacza. Problem jest taki, że wszystkie zasilacze jakie oglądałem mają dwa usb zwykłe, a jedno quick charge. Średnio się na tym znam i nie wiem czy mi się nodemcu nie uszkodzi podłączając go do tego gniazda. Z tego co poczytałem, to ładowarka z quick charge misi się ‘dogadać’ z podłączonym urządzeniem czy ono obsługuje QC. Jeśli tak, to ok, a jeśli nie, to podobno gniazdo QC ma działać jak zwykłe usb.
Będzie działało bez problemu. Tak jak pisałeś jeżeli podłączone urządzenie nie obsługuje QC to gniazdo działa jak zwykłe USB.
Dzień dobry. Nie działają pliki wsadowe/ link do githuba. Czy ma ktoś może jeszcze te pliki?
Pozdrawiam