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



