Arduino 1-Wire UDP Gateway – alternativa k Loxone 1-Wire Extension

Arduino 1-Wire UDP Gateway – alternativa k Loxone 1-Wire Extension

You are here:
< Zpět

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

Poslední úprava článku November 11, 2017

36 thoughts on “Arduino 1-Wire UDP Gateway – alternativa k Loxone 1-Wire Extension

  1. 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,..)?

  2. 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

    1. 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ě ?

  3. 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ě ?

      1. 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…

  4. 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í…

    1. 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?

      1. 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.

        1. 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.

    2. 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..

  5. 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”.

  6. 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!

  7. 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?

    1. 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ě?

  8. 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.

    1. 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.

      1. 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í …

  9. 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.

    1. 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…

  10. 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á.

    1. 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 ?

  11. 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ě.

    1. 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

      1. 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

  12. Dobré zapojení, jen nechápu proč, ale v pravidelných časech odesílá stav 1-wire ERROR ikdyž je čidlo online!?

  13. 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 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *