Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Fibaro Fibaro
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Wiele czujników DS18B20 (Parasite Mode) na ESP8266

waldemar.podgorski 17 Lip 2015 22:00 1977 12
  • #1 17 Lip 2015 22:00
    waldemar.podgorski
    Poziom 8  

    Mam 7 czujników DS18B20 (podłączonych w opcji: Parasite Mode) rozmieszczonych w różnej części domu.
    Z Arduino stosowałem pull up rezystor = 2.2 k. i wszystko pięknie działało.
    Parasite Mode pozwala na komunikację z czujnikami z użyciem tylko dwu przewodów.
    Chciałbym zmienić Arduino na ESP8266. Jest jednak problem. Stosując 1k rezystor pomiary mogę realizować z użycuiem tylko 2 czujników.

    Ma ktoś doświadczenia w tym zakresie?

  • Fibaro
  • #2 18 Lip 2015 13:58
    waldemar.podgorski
    Poziom 8  

    Rozwiązane
    Testowałem układ pomiaru temperatury z czujnikami DS18B20 zmieniając pull up rezystor.
    Mogłem odczytać temperatuę maksymalnie z 3 czujników (przy R=0,76k).
    Rozwiązanie pomógł mi znaleźc martinayotte z ESP8266 Community Forum Link
    Trzeba zastosować Mofset w układzie zasilania czujników. Jak na wykresie w tym linku:
    Wiele czujników DS18B20 (Parasite Mode) na ESP8266

  • #3 20 Lip 2015 00:31
    Marico
    Poziom 19  

    Ale po co tak kombinować z zew. MOSFETem? Ten MOSFET na schemacie Ds'a służy tylko jako poglądowe źródło silnego poziomu H (strong H), który wg dokumentacji musi się pojawić najpóźniej 10us po poleceniu konwersji i trwać na czas tej konwersji. Aby to zapewnić wystarczy na IO wystawić poziom H, większość mcu (o ile nie jest to IO z otwartym drenem) ma wystarczający prąd aby dostarczyć "strong H" aktywnemu (w trakcie konwersji) czujnikowi. Standardowy pullup do komunikacji z tym DS to 4.7k i nie ma potrzeby go zmniejszać. Pullupy w układzie poniżej 4.7k to świadome (lub nie) próby obejścia problemu nieprawidłowego działania układu, spowodowane właśnie brakiem silnego poziomu H w czasie konwersji.

  • Fibaro
  • #4 20 Lip 2015 10:01
    waldemar.podgorski
    Poziom 8  

    Brzmi to fachowo, konkretnie i przekonywująco.
    Idea czytości rozwiązania zgodnego ze specyfikacją układu DS18B20 bardzo mi się podoba.

    Sądzę, że można by wykorzystać drugiego GPIO w ESP8266-01 aby podać ten stan H?
    No i potrzebna jest głębsza ingerencja w kod obsługi ESP8266-01 z DS18B20.

    A co z sugestią: wififofum: Link. Ma szansę powodzenia?

  • #5 20 Lip 2015 10:30
    Marico
    Poziom 19  

    Chodzi o propozycję pullup'a do 5V zamiast 3.3V? To nie jest potrzebne. DS18B20 będzie prawidłowo pracował na 3.3V jeśli zapewni mu się silną 1 (min. 3.0V ale DS daje też radę ciut poniżej zalecanego 3V) na czas konwersji. Te propozycje z forum to próba rozwiązywania problemów wynikłych z braku stosowania się do zaleceń dokumentacji układu. Nie tędy droga. Jeśli API ESP umożliwia przełączenie portu IO na 1 tylko na czas konwersji (w wymaganym czasie) i prądowo "wyda" 2mA@3V (tyle potrzebuje DS do konwersji) to nie ma potrzeby angażować w to drugiego IO, niepotrzebnie skomplikuje to układ.
    Oczywiście to wszystko zadziała jeśli spadek napięcia na Twojej linii ( (z powodu jej długości i cienkich przewodów) nie będzie poniżej wymaganych 3V.

  • #6 20 Lip 2015 11:09
    waldemar.podgorski
    Poziom 8  

    Marico napisał:
    Jeśli API ESP umożliwia przełączenie portu IO na 1 tylko na czas konwersji (w wymaganym czasie) i prądowo "wyda" 2mA@3V (tyle potrzebuje DS do konwersji) to nie ma potrzeby angażować w to drugiego IO, niepotrzebnie skomplikuje to układ.
    Oczywiście to wszystko zadziała jeśli spadek napięcia na Twojej linii ( (z powodu jej długości i cienkich przewodów) nie będzie poniżej wymaganych 3V.


    Czy z tego wynika, że trzeba przetestować linię programowo ingerując w kod programu obsługi DS przez ESP?
    Mam 4 czujniki na lini długości około 18m (skrętka 12m + kabel telefoniczny 6m)

  • Fibaro
  • #7 20 Lip 2015 12:42
    Marico
    Poziom 19  

    Opisałem tylko niektóre wymagania dot. prawidłowej komunikacji z DS, nie wiem w jaki sposób jest to zaimplementowane w api 1W w ESP, które używasz. Generalnie odpowiedż na Twoje pytanie to tak, jeśli obsługa DS w ESP tego nie robi.

  • #8 20 Lip 2015 17:03
    tmf
    Moderator Mikrokontrolery Projektowanie

    Kol. Marico już wszystko wyjaśnił, a ja z ciekawości zapytam po co i ten parasite power? Tak naprawdę tylko kłopot z tym. Naprawdę ten dodatkowy przewód z 3,3V robi taką różnicę? przypuszczam, że sporo się nagimnastykujesz z tym. Ze względu na RTOS w ESP i inne zależności czasowe w praktyce robiene OW na ESP ma sens wyłącznie przy pomocy dodatkowego USARTu, który się znajduje na module. A to znaczy, że linię TxD musisz zrobić jako otwarty dren, czyli musisz zastosować dodatkowy tranzysor (ze wzglęu na niskie napięcie najpewniej P-MOSFET) i dodatkowo drugi tranzystor (lub pin IO jeśli wydoli) do zasilania magistrali w trybie parasite. I do tego naprawdę nieprzyjmeny kod sterujący. IMHO gra nie warta świeczki. Na 3 przewodach robisz to od ręki.

  • #9 20 Lip 2015 20:23
    waldemar.podgorski
    Poziom 8  

    tmf napisał:
    Kol. Marico już wszystko wyjaśnił, a ja z ciekawości zapytam po co i ten parasite power? Tak naprawdę tylko kłopot z tym. Naprawdę ten dodatkowy przewód z 3,3V robi taką różnicę? przypuszczam, że sporo się nagimnastykujesz z tym. ..... I do tego naprawdę nieprzyjmeny kod sterujący. IMHO gra nie warta świeczki. Na 3 przewodach robisz to od ręki.


    To kwestia świadomości i wyboru. Do tej pory z Arduino 5V działało wszystko b. dobrze. Myślałem, że zamiana na ESP pozwoli na taki sam efekt bez kłopotu. Ale jeśli Koledzy uważacie, ze nie warto i prościej dołożyć jeden przewód 3.3V to tak zrobię.
    Dziękuję za konsultacje.

  • #10 20 Lip 2015 21:22
    tmf
    Moderator Mikrokontrolery Projektowanie

    Arduino to nie ESP. W Arduino masz system w którym program jest praktycznie wykonywany liniowo , bez OSa. W ESP masz RTOS, nie możesz go wstrzymywać na dowolny czas w jednym tasku, raz, że zadziała WD bo pomyśli, że układ się zwiesił, dwa, że to wpłynie na inne taski. Dlatego rozwiązania działające na Arduino nie da się wprost przenieść na ESP - stąd też zapomnij o OW z użyciem jakiś delay i znanych ci wynalazków. To oczywiście da się zrobić, tyle, że tak się nie robi. Obsługa OW na 3 przewodach będzie po prostu banalna do zaprogramowania w RTOS przy użyciu UART, z kolei obsługa OW na dwóch przewodach z koniecznością wymuszenia silnej jedynki będzie bardziej skomplikowana i od strony elektrycznej i programowej.

  • #11 21 Lip 2015 16:46
    waldemar.podgorski
    Poziom 8  

    waldemar.podgorski napisał:
    tmf napisał:
    Kol. Marico już wszystko wyjaśnił, a ja z ciekawości zapytam po co i ten parasite power? Tak naprawdę tylko kłopot z tym. Naprawdę ten dodatkowy przewód z 3,3V robi taką różnicę? przypuszczam, że sporo się nagimnastykujesz z tym. ..... I do tego naprawdę nieprzyjmeny kod sterujący. IMHO gra nie warta świeczki. Na 3 przewodach robisz to od ręki.


    To kwestia świadomości i wyboru. Do tej pory z Arduino 5V działało wszystko b. dobrze. Myślałem, że zamiana na ESP pozwoli na taki sam efekt bez kłopotu. Ale jeśli Koledzy uważacie, ze nie warto i prościej dołożyć jeden przewód 3.3V to tak zrobię.
    Dziękuję za konsultacje.


    Ale póki co to może warto zobaczyć efekty eksperymentów w setupie z 5 czujnikami DS18B20 (Parasite Power Mode) pojawiające się na esp8266.com (WStan to tutaj waldemar.podgorski :-)): Link

  • #12 22 Lip 2015 12:07
    waldemar.podgorski
    Poziom 8  

    Rozwiazane:
    Test: 7 czujników DS18B20 (Parasite Power Mode) na jednej linii długości około 40m i można mierzyć temperaturę. Trzeba zastosować requestTemperaturesByAddress. Pull up rezystor zostaje taki sam = 1k jak rekomendowane w doniesieniach dla 3.3V ESP i DS18B20.
    Szczegóły: esp8266.com Link

  • #13 01 Sie 2015 19:36
    waldemar.podgorski
    Poziom 8  

    System pracuje już blisko 6 dni (139.49h) bez problemu. Link
    Koszt ESP8266-01 to 20zł. Jeden GPIO, 7 czujników DS18B20 na dwużyłowym, około 40m kablu (Parasite Mode). Co jeszcze trzeba?: No cudna sprawa.
    A swoją drogą: Ciekawe ile tych czujników można by jeszcze dołożyć?

TME logo Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME
TME Logo