Zkušenosti s 1-wire

Dobrý den,

prosím o názor, příp. popsání vlastních zkušeností (určitě je někdo má). Plánuji napojení teplotních a možná i jiných čidel na Turris 1.x, dosud jsem předpokládal 1-wire. Doporučujete:

  • napojení přes USB adaptér (pokud bych pracoval s v1.1), nebo přímo na GPIO?
  • zůstat u 1-wire, nebo raději přejít na i2c?

Setkali jste se v případě USB adaptérů s problémy (tedy - co koupit nebo čemu se vyhnout)?

Kritéria:

  • spolehlivé čtení dat i z několika čidel na cca 35m dvojlince (mohu obětovat i celý UTP)
  • snadná konfigurace (GUI být nemusí)
  • integrace do SW typu openHAB

Díky!

Toto je velmi komplikovaný dotaz, takže postupně:

  • Rozhodně nenapojovat přímo na GPIO. Vstupy GPIO nejsou nijak chráněné a velice snadno může dojít k trvalému poškození SoCu, tedy celého Turrisu
  • 1-wire a I2C mají úplně jiný účel. I2C není určeno pro vedení delší než cca. metr, zatímco 1-wire zvládne i desítky metrů (za určitých podmínek)
  • největší problém s 1-wire je nedostatek čidel a především padělaná čínská čidla 18B20, která nefungují správně a rozbíjí komunikaci ostatních.

Na další kritéria neznám odpovědi.

1 Like

Lze použít jedno levné 1-wire čidlo na jednom levném ESP8266 nebo ESP32. Akorát to napájení každého zvlášť je vopruz. A zkalibrovat každé čidlo v software je taky potřeba.

Díky za prvotní nasměrování. Inspiraci jsem čerpal (mimo jiné) např. tady a na zdejším fóru tady, ovšem HW část tam moc popsaná nebyla.

I2C tedy vypadává, 1-wire bych měl zřejmě připojit přes USB adaptér.

Vzhledem k upozornění na padělaná čidla (díky @Ondrej_Caletka!) budu vděčný za jakékoli další rady či varování ohledně převodníků. Jakékoli pozitivní zkušenosti s nákupem nebo provozováním podobného systému jsou samozřejmě vítány!

Pozn.: kdyby měl někdo obavy, že by postoval reklamu, napište prosím soukromou zprávu. Díky.

1 Like

Moje zkušenosti s 1-wire čidly v baráku, cca 2 roky, integrace s Loxone.

  • Souhlasím, že rozhodně nezapojovat přímo GPIO na Turrise.
  • Nejlepší řešení je Arduino (Nano či Uno) + Ethernet Shield (postavený na čipu W5500, nikdy nebrat ENC28J60) a data posílat přes UDP do nadřazeného systému.
  • Všechno HW včetně 1-wire čidel mám z Číny, nebál bych se toho. Čidla mi bez problémů fungují. Maximum mám 5 čidel na sběrnici, ale věřím, že by fungovalo i víc.
  • Co se týče zapojení, nezapomeň na odpor mezi Vcc a Data. Doporučuje se 4k7, já jsme to nakonec řešil odpor 1k + potenciometr 5k (a nastavil optimální odpor na potenciometru).

Skeč pro Arduino je tady:

Za běžných okolností se na 1-wire sběrnici vyskytují chyby, hlavně při souběhu se silovými rozvody - míval jsem cca 10% chybovost při čtení. Nedávno jsem skeč vyladil, jsem na 0% chybovost. Snadná konfigurace.

2 Likes

Díky moc za odezvu. Určitě by to byla přijatelná varianta. Abych tomu správně rozuměl:

  • z Číny i to Arduino? DX?
  • u Arduina už 1-wire přímo na DIO pin, nebo potřebuju ještě USB převodník?
  • kolik čidel máš a na jak dlouhé sběrnici?
  • ladění toho skeče se týkalo timeoutů, nebo něčeho jiného (timeouty se asi změní při změně délky sběrnice…)?
  • Z Číny hlavně to Arduino (a eth. shield). A můžeš i senzory. BTW teď jsem ty svoje ověřoval, všechny senzory co z Číny mám jsou fake. Ale fungují (už pár let) OK (podotýkám, že je nemám paraziticky). Aliexpress.
  • Jasně, u Arduina přímo na DIO (a myslím, že by fungoval i AIO). U Arduina nepotřebuješ převodník, Arduino je tím převodníkem. USB použiješ jenom na napájení.
  • Moje sběrnice je dlouhá. Ke každému senzoru mám 2 datové kabely (jeden tam a jeden zpátky), v rozvaděči jsou spojené do série (nikoliv do hvězdy). Maximum mám 5 senzorů (ale šlo by i 10, možná i 15…), takže odhad je nějakých 50 metrů.
  • Ladění skeče se netýkalo timeoutů. Týkalo se toho, že jsem skeč upravil tak, že se Arduino v případě chyby čtení hned (řádově ms) pokusí o nové čtení a teprve po <ONEWIRE_MAX_RETRY> neúspěšných pokusech to vzdá a hodí chybu. Funguje to super, stačí mi ONEWIRE_MAX_RETRY = 5.

EDIT: Jo a pro úplnost: Timeouty si sama nastavuje knihovna, kterou používám. Jejich délka nezávisí na délce sběrnice, ale na nastaveném resolution.

1 Like

Jen pro jistotu: předpokládám, že to zapojení do série v rozvaděči v praxi znamená paralelní zapojení čidel na sběrnici, tj. od Arduina jeden dlouhý drát pro Vcc, na kterém jsou “navěšené” Vcc vývody čidel, a vedle drát pro Data, na kterém jsou druhé vývody (+ ten pullup). Je to tak?

A díky za postřehy!

Vcc: Přivedeš do rozvaděče a “navěsíš” na společný drát Vcc, ideálně pomocí https://www.ceit.cz/p/svorkovnice-krone-zemnici-lsa

Gnd: to samé

Data: Ne, v praxi mám opravdu na mysli napojení do série (nikoliv do hvězdy). Hvězda mi taky fungovala, ale nakonec jsem ale dal na doporučení Maximu ( https://www.maximintegrated.com/en/design/technical-documents/tutorials/1/148.html ), že optimální je lineární topologie (tj. do série), přestože jsem si tím prodloužil délku sběrnice:

čidlo 1 -> rozvaděč -> čidlo 2> rozvaděč -> čidlo 3 -> rozvaděč -> pullup -> Arduino pin2

EDIT: Připomínám, že na Arduinu můžeš mít napojených více 1-wire sběrnic. Takže pokud máš jedno čidlo extrémně daleko od rozvaděče, nic ti nebrání dát ho na samostatnou sběrnici (tj. samostatný pin):

čidlo 4 ----------> rozvaděč -> pullup -> Arduino pin3

2 Likes

Moje zkušenosti jsou, že čidla musí být vesměs bezdrátová :slight_smile:
Na ESP zatím nebyl čas, tak mám:

  • RaspberryPi (modely 1B a 1A+) a čínské OrangePi Zero Plus
  • vedení je telefonní plochý čtyřdrát s RJ11 konektory, takže rozbočování a propojování dělám telefonními spojkami a rozdvojkami
  • čidla DS1820 byla vesměs na parazitickém napájení, nejdelší větev měla 8 metrů a bez problémů. Ale stejně jsem to raději předělal.

Mám jeden dotaz trošku mimo: Proč ne Ethernet Shield na ENC28J60? Já jsem při sporadickém používání nezaznamenal žádné problémy.

  1. Protože se mi jej nepodařilo rozchodit. Čínský ENC28J60 shield pro Nano, spousta pokusů ale bez úspěchu. Zkoušel jsem všechny možné knihovny pro tento čip a nic… Ale možná je to rukama…
  2. Pokud se nepletu, ENC28J60 na rozdíl od W5500 nemá TCP/IP stack přímo na čipu a musí TCP/IP stack řešit softwarově. V praxi to znamená opruz z dodatečnými knihovnami (např. UIPEthernet), které navíc zabírají místo v paměti Arduina… Já se snažím využívat Arduina naplno v tom smyslu, že když už ho v rozvaděči mám, tak na jedno Arduino píchnu víc druhů senzorů (viz ten můj skeč na githubu). To znamená, že se mi hodí každý byte paměti. Nechci ji plýtvat na něco, co by měl zvládat ethernet shield hardwarově.

EDIT: W5500 shieldy jsou dražší než ENC28J60. Obzvláště pro Nano, kdy i v Číně za W5500 shield pro Nano dáte cca 10USD (oproti nějakým 3 USD za ENC28J60). Přesto už kupuju jenom W5500 .

1 Like