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)
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.
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.
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.
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?
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:
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):
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…
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 .