Arduino 1-Wire UDP Gateway – alternativa k Loxone 1-Wire Extension
How Can We Help?
Arduino 1-Wire UDP Gateway – alternativa k Loxone 1-Wire Extension
Rád bych se vámi podělil o další projekt, na kterém jsem v poslední době pracoval. Jedná se o Arduino sketch, který je schopen pracovat s DS18(B)2X, DS2401 a DS2438 senzory, číst z nich data a posílat je po UDP jako multicast či unicast. Mezi výhody toho řešení patří to, že je možné používat více 1-Wire sběrnic a předejít tak případným problémům s kabeláží apod. Dále je možné určité sběrnice priorizovat (ideální pro využití s iButtony či NFC).
Zdrojové kódy
http://jirin.deso.cz/1-Wire_UDP_Gateway/
Video tutoriál
Potřebný hardware
Pro jeho použití budete potřebovat Arduino UNO či MEGA a k tomu Ethernet shield – mám ozkoušený W5100, který funguje výborně a lze jej sehnat i v 802.3af verzi.
Arduino UNO s W5100
Odkazy na zakoupení:
https://www.aliexpress.com/wholesale?SearchText=arduino+uno+mega328p
https://www.aliexpress.com/wholesale?SearchText=arduino+mega+2560
https://www.aliexpress.com/wholesale?SearchText=arduino+uno+w5100
Zapojení
Pro každou 1-Wire sběrnici je bezpodmínečně nutné použít pull-up rezistory 4,7 kΩ a zapojení je následující:
Ještě přidávám pinout pro DS18B20 samotný:
Hlavně si nepoplést zem a napájení – nedopádá to úplně nejlépe.
Konfigurace 1-Wire sběrnic
Při nastavování lze vydefinovat libovolný počet sběrnic. U každé z nich lze také říct, jestli je prioritní nebo ne – prioritní jsou určené pro čtení iButtonů, kdy je potřeba okamžitá reakce.
Základní nastavení (použita pouze sběrnice na pinu D5 a není prioritní):
ONE_WIRE_BUS ONE_WIRE_BUSES[] = {{5, false}, //{6, false}, //{7, false}, //{8, false}, //{9, false}, };
Pokud chcete ale použít sběrnic více, stačí řádky odkomentovat případně si přidat další. Kupříkladu:
ONE_WIRE_BUS ONE_WIRE_BUSES[] = {{5, false}, {6, false}, {7, false}, {8, false}, {9, true}, };
Kdy je port na pinu D9 prioritní, takže na něm mám třeba čtečku, D5–D8 jsou pak další obyčejné sběrnice.
A jako poslední poznámka, není možné používat piny D4, D10, D11, D12 a D13 jelikož je využívá W5100 (Ethernet shield).
Získávání dat v Loxone
Loxone dostává pakety ve tvaru:
DS2401 – „1W 01000065A43BBE67“
DS18(B)2X – „1W 2861641273EA057D TEMP 24187“
DS2438 – „1W 26CABA16020000BD TEMP 23656 VAD 2220 VDD 4700 VSENS 250“
Všechny teploty a voltáže jsou posílány jako celá čísla, která vznikla násobením původní hodnoty číslem 1000.
Dále je možné se potkat s pakety:
„1W 28616412704EF007 ERROR“
„1W 2861641273E55AFF DETECTED“
Tyto jsou posílány v případě chyby či detekce nového 1-Wire zařízení.
V Loxone je potřeba vytvořit digitální UDP vstup pro daný port:
Dále je nutné vytvořit příkaz pro každé 1-Wire zařízení.
Pro DS2401 je to digitální vstup:
Pro DS18(B)2X je to analogový vstup a je nutné použít korekci (vstupní hodnota 2: „1000“, zobrazená hodnota 2: „1“):
A v případě DS2438 je nutné vytvořit 4 analogové virtuální vstupy, stejně jako v předchozím případě je nutné použít korekci („1000“ => „1“):
Pro instalaci do rozvaděče doporučuji sehnat uchycení na DIN lištu, něco ve stylu:
Autor článku a projektu: Jiří Jaša, http://www.deso.cz
54 thoughts on “Arduino 1-Wire UDP Gateway – alternativa k Loxone 1-Wire Extension”
Super návod, díky za něj!
V popisu píšeš, že je dobré dát na 1-wire sběrnici 4k7 odpor.
Ten se dává mezi vodiče 1W a GND?
Je jedno kam ho umístím (k gateway, na konec sběrnice,..)?
Ahoj, pull-up resistor se dává vždy mezi VCC a DATA. Dávám ho někde poblíž Arduina, třeba do svorkovnice, kde propojuji jednotlivé teploměry s přívodem od Arduina.
Ilustrační schéma: https://www.tweaking4all.com/wp-content/uploads/2014/03/ds18b20-arduino-connected.jpg
Večer to dodám do návodu ať je to jasné ;-).
Skvělý návod, díky. Mám dotaz ohledně toho uchycení na DIN lištu. Na Ali jsem našel samotné uchycení: https://www.aliexpress.com/wholesale?SearchText=DIN+Rail+Mounting+Adapter+Circuit+Board
Nedaří se mi najít tu PCB desku s těmi bílými packami k univerzálnímu použití.. máte někdo tip ? Díky.
Na ten, co jsem zde dával, jsem narazil na Ebayi: https://www.ebay.de/itm/DIN-Rail-Mount-Adapter-Prototype-PCB-Kit-For-Arduino-UNO-Mega-2560-etc/201227678125?hash=item2eda1ab1ad:g:5JUAAOxyHIlTXQOa
Co se mi na něm hlavně líbí je to, že síťový kabel netrčí do boku (jako třeba u Railduina), ale je přiveden zespodu. Jinak těch možností uchycení je určitě daleko více ;-).
OK, díky za info.
Ahoj,
daju sa vyuzit aj piny A0-A5 ?
Alebo treba dat Megu.
Dik
Teď jsem si to ozkoušel a funguje to i na A0–A5 ;-). Primárně na to ale piny nejsou určené.
Ahoj, díky za parádní nápad a návod. Pokoušel jsem se to rozjet na Arduino Nano s ethernet shieldem s čipem ENC28J60. Chtěl jsem použít knihovnu UIPEthernet: https://github.com/ntruchsess/arduino_uip , která má plně nahrazovat klasickou Ethernet.h pro W5100. Bohužel ale nefunguje… 🙂 Zkoušel jsem projít proměnné, které používá a rozdíly jsem nenašel. Pokud vyzkouším nějaký jiný kód, který využívá UIPEthernet.h tak to funguje (nějaké klasické Hello World), Nevíš kde by mohl být problém? Díky
Supr návod, rozběhal jsem to i na WiFi modulu Wemos D1 a teď již mám bezdrátový přenos 🙂
Ahoj, prosím tě můžeš někam nasdílet tvůj program jestli je to možné? Díky
Taky bych to docela bral, přeci jen na Arduino jsem trochu slabší 😀
Šlo by prosím poskytnout program 1wire pro wemos D1.
Zdravím, chci se zeptat jestli je možné připojit i více než jedno Arduino k Loxone. Dekuji.
Ano, lze připojit více než jedno Arduino. V jakém kontextu to myslíte ? Připojení jako 1-WIRE UDP GATEWAY popisovaný v článku nebo obecně ?
Ahoj chci se zeptat jestli jde použít třeba 5 arduino na jedno Loxone
Ano, lze připojit více než jedno Arduino. V jakém kontextu to myslíte ? Připojení jako 1-WIRE UDP GATEWAY popisovaný v článku nebo obecně ?
Myslel jsem to tak ze bych mel více arduino po domě na každém třeba 3 čidla a posílal to do loxone
Teoreticky by neměl být problém. Ale jak píšu níže, prakticky to mám odzkoušeno pouze na stole 🙂 Hrát budou roli vzdálenosti, počet zařízení na síti, architektura sítě apod…
Já si s tímto zrovna doma taky hraju a zatím úplně úspěšnej nejsem. Na stole s 1 připojeným čidlem DS18B20 mi to jede ok.
Když to ale zapojím do sítě, kterou už mám udělanou po baráku (mam natahyný kabely mezi zásuvkama, v kterých mám DS18B20 + DS2438 od Sedtronicu) tak mi to nejede. Zkoušel jsem větev, kde mám 2x DS18B20 + 2x DS2438 a ani ťuk (sleduju přes WireShark). Bohužel je to asi na dlouhý bádání…
A ty mas svedene čidla z celého baráku do jednoho arduina? Nebo máš vic arduino po domě a čidla připojené lokálně a přes LAN to posíláš do Loxone?
Mám v baráku nadělaná 4 1-W větve, na kterých mám navěšený jednotlivý čidla (průměrně na větvi tak 4-8 čidel). Všechny 4 větve mám svedený do rozvaděče (vždy dvě větve spojený do jedný) kde mám dva 1-W extensiony od Loxone (takže se pořád snažím držet bus topologii). Bohužel ani s nima mi to spolehlivě nefunguje (dochází k výpadkům a 1 čidlo je trvale offline).
Zkouším teď 1 větev přepojit na Arduino variantu.
To já chci právě rozmístit Arduina po baráku abych nemusel od každého čidla tahat kabel až do rozvaděče, ale z Arduin to posílat do Loxone po LAN, všude mám LAN zásuvky tak bych to chtěl tak řešit.
Já jsem zkoušel skoro vše od @Jirin.sv, plus zkouším svoje další věci a vše jsem zatím nakonec rozjel… je pravda, že jen na stole 🙂
Bere to nějaký čas, na druhou stranu je potřeba ty zkušenosti nasbírat a projít si tím.. příště už budeš vědět, kde se mrknout..
Zřejmě bude problém ve sběrnici, při delší sběrnici bych snížil hodnotu rezistoru na 2K2, když budu požívat Arduino. Docela pěkně je to popsáno v tomto článku: https://www.root.cz/clanky/internetovy-termostat-stavba-site-teplotnich-cidel-na-1-wire-sbernici/
V Loxone pro jejich teploměr je použito parazitní zapojení a je zde malá poznámka “Dávejte prosím pozor na skutečnost, že ne všechny 1-Wire čipy jsou vhodné pro parazitní připojení. Informace o vhodnosti se dozvíte u výrobce”.
zkoušeli jste to někdo v kombinaci s orig. iButtonem od Loxone? Nedaří se mi ho rozchodit.
Zapojen do arduina mám jen 1W a GND (napájení je přes 24V bokem).
Nebo bude potřeba nějak modifikovat zdrojáky v arduinu aby vůbec vidělo iButtony?
Díky!
Tak už jsem zjistil, v čem byl u mě problém. Arduino jsem napájel zdrojem 9V/1A a s ním mi fungovalo jenom 1 čidlo, připojené přímo na svorky arduina s kabelem cca 5m. Když jsem na to připojil čidlo v baráku 20m daleko, připojený přes dvoje svorky, tak mi to házelo errory. Ať sem použil odpor jaký jsme chtěl.
Zkusil jsem tedy nahradit za zdroj 12V/2A a najednou se mi to rozjelo. Momentálně mám na tom 4 čidla a vypadá to, že fungují ok.
Jenom se mi teda začalo nehezky zahřívat Arduino (ten malý šváb vedle napájecího konektoru, který pravděpodobně snižuje napětí). Asi tedy bude řešením sehnat si zdroj s nižším napětím ale větším proudem.
Jaké používáte zdroje vy?
Ahoj, ja používám taky zdroj 9V/1A a zatím mi to chodí v pohodě, záleží taky na průřezu kabelu a zapojení čidel máš parazitni nebo normálně?
Hm, tak to je divný. Já jsem měl problémy s tímhle zdrojem
https://www.aliexpress.com/item/Free-Shipping-AC-100V-240V-Converter-Adapter-DC-9V-1A-Power-Supply-EU-Plug-DC-5/32239088569.html?spm=a2g0s.9042311.0.0.dOW6zt
Všechno mám zapojeno klasicky (3-vodičově) a kabely mám FTP cat.6A, takže by to mělo být ok. Ale fakt jediný co sem udělal, že sem vyměnil ten zdroj a najednou se to rozjelo.
A tobě se arduino nezahřívá? Já mám ten napěťový regulátor tak horký, že na něm neudržím prst.
Ja to mam natažené kabelem 2x2x0.8. 12v na Arduino jsem zkoušel, ale taky se mi to hrálo a nakonec to celé zamrzlo. Když mam na arduinu napojeny ethernet Shield tak používám zdroj 9v a když mam jen arduino tak i třeba zdroj 5v. Možná u tebe to bude tím zdrojem chtělo by to změřit kolik V máš u toho čidla. Ja jsem včera taky badal co je z čidlem porad ukazovalo 3stupne.
V technické specifikaci se píše k Unu:
Input Voltage (recommended) 7-12V
Input Voltage (limit) 6-20V
Odkud Arduina máte ? Z číny ? Napadá mě, zda tam číňan použil korektní součástky. Jestli ne, můžeme se ještě dočkat nepříjemných překvapení.. Pak je otázka, zda by nebylo lepší to koupit z nějakého oficiálnějšího zdroje, když je to do baráku, kde by to mělo býti robustní …
Jj, přesně o tom teď přemýšlím, že raději koupím 1 orig. Arduino za 700,- než číňana za 2$ ale s rizikem toho, že se to může podělat.
Já mám teď tu 2. variantu. Zkusím ještě dneska proměřit, jaké napětí a proud mi teče z toho 9V a 12V zdroje a napíšu.
Taky mám všechny Arduina z číny… ono je to lákavé to koupit na 1/10 ceny…
Nano z číny na ty menší věci bych ještě snesl (stejně jich budeš mít hromadu a jde to udělat jako Plug&Play), ale přecejenom to Uno v popisované aplikaci plní celkem důležitou úlohu a tady není moc prostoru pro chybu…
Tak chyba byla u mě ve zdroji (blbej číňan).
Připojil sem to na Meanwell zdroj 5VDC a všechno šlape jak má a nic se nezahřívá.
A můžeš určit, co přesně z toho tomu vadilo ? Nestabilita napětí, příliš měkký zdroj nebo tak něco ? Protože je to napěťový zdroj, tak si to zařízení vezme proudu kolik potřebuje nebo se mýlím ?
Hele netuším. Když jsem tam měl zapojen čínský zdroj 9V/1A tak regulátor napětí hodně topil (aby snížil napětí na těch 5V). Na pinu 5V jsem měřil +4,96V takže to bylo ok. Ale 1-wire síť hodně nespolehlivá, a s více čidly nefungovala.
Když jsem měl zapojen Meanwell zdroj 5V/2,4A tak regulátor netopil vůbec. Na pinu 5V je napětí 3,07V. A naměřil jsem tam proud cca. 124mA. Důležité ale je, že 1-wire síť šlape i s více čidly spolehlivě.
OK, takže ideálně napájet 5V zdrojem.. pak ale nechápu, proč je ve specifikaci jiné napájení:
Uno:
Input Voltage (recommended) 7-12V
Input Voltage (limit) 6-20V
Ja mam vyzkoušeno 5V a když je připojený ethernet Shield nebo relé deska tak 9v a hlavně pozor na rušení to může arduino úplně zmrazit dokáže to i třeba žehlička
Dobré zapojení, jen nechápu proč, ale v pravidelných časech odesílá stav 1-wire ERROR ikdyž je čidlo online!?
Ahoj, věděl by prosím někdo poradit s node red. Mám tam teď připojeno Railduino přes Modbus TCP a po nalezení tohoto návodu i toto arduino UDP. Ale s tím nemám moc zkušeností. Mám nastaven UDP vstup kde mi tedy chodí vstupy typu “1W 283463AF06000092 TEMP 21750” a chtěl bych poradit s nějakou asi funkcí nebo něčím co by mi to dokázalo roztřídit podle adresy čidla tak že bych měl ten UDP vstup z něj podle počtu čidel třídící funkce kde by každá měla uloženou adresu daného čidla a z té funkce by vystupovala už jen ta číselná hodnota třeba těch 21750 , z tím už bych si zase poradil a převedl ale nevím pod čím hledat rady jak by se mohlo jmenovat to ,,třídítko,, děkuji za rady a trpělivost 🙂
Ahojte, používám Railduino, ale ten nepodporuje iButton. Chtěl bych tedy využít 1Wire Gateway. Nikde ale není uvedeno zda lze použít originální iButton od Loxone, který je napájen 24V. Tedy je nutné mezi GND a 24V dát 4k7 rezistor nebo ne?
Díky
Ahoj,
nenasiel som kolko je max 1-wire senzorov na zbernicu? ide mi max 10ks , tak si chcem potvrdit ci je to limit alebo sa da aj viac na jednej zbernici/PINe.
Dik
tak 10x je max na 1x pin
Hm .. furt mi to nejde zkompilovat. Chybějící knihovny jsem přidal ale na tomhle jsem skončil. Prosím o radu.
Win1064bit – to samé se děje i na Ubuntu:
Arduino: 1.8.9 (Windows Store 1.8.21.0) (Windows 10), Vývojová deska: “Arduino/Genuino Uno”
sketch\tests.cpp:5:20: fatal error: iostream: No such file or directory
compilation terminated.
exit status 1
Nastala chyba při kompilaci u desky Arduino/Genuino Uno.
Tipnul bych že ti tam něco chybí nebo to je jinde než má bejt.
Nejsem znalý arduina ale můj postup.
Stáhnout a rozbalit složku OneWireExtension z prvního odkazu. Nakopírovat do Dokumenty/Arduino , otevřít OneWireExtensions.ino zeptá se to zda má uložit do samostatné složky. Potvrdím, otevřu. Přidám všech 6 souboru ze zdrojové složky. Pro jistotu zkompiluji každý zvlášť (nevím zda je potřeba?). Potom podle chybějících knihoven doplňuji. Kromě TrueRandom se nechají přidat všechny přímo v IDE. Odkaz na TrueRandom je v OneWireExtension.ino. Stahnu a dám přidat jako .zip
Když jsem to udělal jakkoliv jinak něco se nepovedlo. Dlouho jsem se trápil s:
In file included from sketch\OneWireReading.h:9:0,
from C:\Users\user\Disk Google\_Baraaaaak_disk\Arduino\OneWireExtension-1.0.0\OneWireExtension\OneWireExtension_moje\OneWireExtension_moje.ino:74:
C:\Users\user\Documents\Arduino\libraries\LinkedList/LinkedList.h: In instantiation of ‘ListNode* LinkedList::getNode(int) [with T = OneWireBus*]’:
C:\Users\user\Documents\Arduino\libraries\LinkedList/LinkedList.h:178:22: required from ‘bool LinkedList::add(int, T) [with T = OneWireBus*]’
C:\Users\user\Disk Google\_Baraaaaak_disk\Arduino\OneWireExtension-1.0.0\OneWireExtension\OneWireExtension_moje\OneWireExtension_moje.ino:229:1: required from here
C:\Users\user\Documents\Arduino\libraries\LinkedList/LinkedList.h:160:9: warning: converting ‘false’ to pointer type ‘ListNode*’ [-Wconversion-null]
return false;
^
Netuším co se mu nelíbí ale tak nějak sem vydedukoval že to je právě přejmenováváním a přesouváním souborů na různá místa.
Zajímavý je že i přes tuto chybu Arduino šlapalo a krásně vyčítalo DS18B20. U DS2438 mi to vyčetlo pouze teplotu a zbyle tři hodnoty byly nesmysl. Teprve dnes se mi povedla první kompilace bez chyb tak ji hned doma otestuji a pevně věřím že to vyřeší problém s DS2438.
Tak jsem se k tomu po čase zase dostal a výsledek stále stejný. Zkusil jsem postup, jak píšeš, ale prostě se nedaří. Přitom mi tu jeden ten pazmek už běží – tenkrát to taky nešlo, ale nakonec se mi to povedlo ve starých WinXP (které už nemám). Na těch desítkách tady mi to prostě nejde. Zkoušel jsem i on-line editor na Arduinu a také jsem neuspěl 🙁
Má někdo info jak to jde vyřešit, mám stejný problém, vyzkoušel jsem jak různý verze IDE tak compů s win 7, 8.1 i 10 a všude mám stejný problém a nejde mi to zkompilovat.
Diky
Problem budu kniznice.
Teraz som to skusal na cisto nainstalovanom IDE 1.8.4 a tie to neskompiluje.
Ak mas tu istu hlasku ci je vyzsie tak otvor v IDE
Projekt/Zahrnut kniznice/Spravovat kniznice
daj vyhladat LinkedList a daj doinstalovat.
Mozno to bude pytat este nejaku. Daj vediet ci pomohlo.
Díky za tip, vždy jsem postupně nainstaloval všechny knihovny. Ten požadavek byl několikrát. Některé jsem snad ani nenašel v repozitáři a musel jsem je někde vygooglit. Nakonec jsem opět skončil na nějaké chybě v řádku určité knihovny.
Možná by stálo za to celý postup updatovat na aktuální verze IDE a knihoven. Já se k tomu chystám dostat, jak bude chvilka, že bych se tomu pověnoval, byť nejsem žádný programátor.
A skompiloval si to nakonec?
Ono kazdy nepouziva najnovsie IDE a kazdy uz ma nejake kniznice naistalovane.
Najlepsie by bolo napalovat HEX, len neviem ako sa to da priamo.
Skuste toto…
https://www.vodnici.net/community/arduino-hw/1-wire-loxone-arduino-udp/paged/4/#post-21486
Dík – musím trochu nastudovat a zkusit.
Všechny chyby s – converting false – jsem přepsal na NULL a vše šlape. Jestli to někde něco napáchá bokem nevím, ale zatím bez problémů.
Je možné posílat tímto způsobem data z PH 4502c přes analogové vstupy? Popřípadě jaké úpravy je nutné udělat. Omlouvám se možná za blbý dotaz ale programovaní jde zatím úplně mimo mě. Díky
Ne.
Pokud chceš číst analog a posílat to přes UDP, koukni na fw railduina:
https://github.com/PavSedl/RAILDUINO-2.0/blob/master/FW/Railduino_2_1
Je to psané pro Arduino Mega, musíš si změnit
int analogPins[numOfAnaInputs] = {64, 63};
na svoje piny.
A případně osekat kód, pokud by byl kód moc velký a nevešel se na Uno.