Skocz do zawartości

Potyczki z komunikacją UART pomiędzy Arduino i ESP


Pomocna odpowiedź

Napisano

Chciałem zrobić komunikacje Arduino i ESP poprzez „SoftwareSerial”. Problemem było że napięcie z Arduino to 5V (i to musi tak zostać) a ESP przyjmuje tylko 3,3V. Rozwiązaniem pierwszego wyboru był konwerter stanów logicznych. Trochę z tym zamieszania, bo z jednej strony trzeba podać 5V a z 3,3V czyli trochę zamieszania z napięciami. No ale się udało, ale raz działało a raz nie. Jak trochę podziałało to potem przestawało. Arduino podpięte do komputera komunikowało się bez problemu. Podobnie ESP podpięte do komputera poprzez PL2303 działało bez najmniejszego problemu. Jednak, gdy tylko oba te podzespoły spinałem poprzez konwerter to znowu robiło się dziadostwo. W mojej główce pojawił się pomysł, że ESP z Arduino połączę poprzez PL2303 zamiast zwykłego konwertera. W zasadzie użyłem dwóch PL2303 spiętych ze sobą beczką USB (docelowa będzie około metra kabla). Załatwia to problem zasilania, bo PL2303 od strony ESP ma zworkę n 3V i spokój. Dodatkowo diody pozwalają stwierdzić, czy są nadawane sygnały RX i TX. No ale układ nie działa, bo pewnie jest coś czego nie wiem i nie rozumiem. Kiedy Arduino nadaje to na PL2303 po jego stronie zapala mi się dioda RX, ale po drugiej stronie „beczki” na PL2303 od strony ESP ciszą i nie zapala się TX (i dane nie dochodzą do ESP). Podobnie w drugą stronę choć to nie jest problem, bo mimo że ESP czasami coś nadaje to i tak Arduino nie słucha.

Coś pominąłem w swej ignorancji i nie ma prawa to zadziałać?

 

Pytanie kontrolne: czy jak zepniesz ze sobą dwie myszki taką "beczką", to jak jedną ruszysz to druga zacznie jeździć po stole?

A co do połączenia - najprościej tak.

45 minut temu, ethanak napisał:

Pytanie kontrolne: czy jak zepniesz ze sobą dwie myszki taką "beczką", to jak jedną ruszysz to druga zacznie jeździć po stole?

Na pewno w twoim pytaniu jest głęboki sens i gdybym był inteligentnym gościem to bym od razu załapał ogrom wiedzy z w nim zawarty, ale ... nie jestem 😞

Ja sobie to wyobraziłem tak: Z Arduino idzie sygnał z TX i wchodzi na pin RX do PL2303 potem beczka zamienia M na F i podpinam kolejne PL2303 gdzie zmieniam napięcie z 5V na 3V by zasilać ESP a sygnał wychodzi z TX do RX ESP.

Generalnie układ zaczął reagować poprawnie tylko zamiast danych wysyła jakieś głupoty.

Może pokombinuje z dzielnikami napięcia. 

  • Lubię! 1

No dobrze, a co Twoim zdaniem robi PL2303?

I nie zgrywaj uciśnionej dziewicy, bo masz prawie sto postów na Forum, co najmniej drugie tyle przeczytałeś i powinieneś przynajmniej zacząć rozumieć podstawy (np. co to jest USB Host a co nie jest)

Powinienem wiedzieć wiele rzeczy. Zapewne powinienem wiedzieć dlaczego dwa programatory połączone beczką nie zadziałają tak jak tego się spodziewałem. Ale nie rzucaj we mnie kredą ani nie bij linijką. Po prostu mnie zignoruj. 

 

Kable w USB specjalnie są różne z obu końców, by nie łączyć ze sobą dwóch hostów lub dwóch klientów. Jesteś odważny omijając mechaniczne zabezpieczania by dopiąć swego, nie zadając sobie trudu przeczytania w Internecie, czy to ma jakiś sens. Jak jakieś urządzenie może być jednocześnie klientem i hostem to ma dwa rodzaje gniazd, kiedyś były takie dyski sieciowe, można było podłączyć go do sieci komputerowej, do niego ( jako hosta)  inny dysk USB, ale i  ten dysk sieciowy można było podłączyć jako dysk USB (klient)  do PC.

Zamiast pisać wypracowanie należy opisać problem, pokazać kod i schemat układu. Prawidłowy schemat dostałeś od @ethanak. Czy wszystko będzie działać prawidłowo zależy również od tego jak wygląda program, bo jak jest zajęty przez 100% czasu to nie ma kiedy zająć się komunikacją przez softserial. Wybór pinów też nie jest bez znaczenia, niektóre są lepsze niż inne, a czasami są najlepsze do różnych bloków programu i jest konflikt, bo wiele bibliotek chciałoby właśnie ten jeden.

  • Pomogłeś! 1

@kaczakat  Dzięki. Nie ma żadnego schematu. Ot Cztery kable idą od nadającego Arduino czyli RX, TX i zasilanie i cztery wchodzą do odbierającego ESP. Gdy po drodze stawiałem konwerter stanów logicznych to działało to w sposób nie przewidywalny (po jakiś czasie siadało) dlatego zacząłem kombinować czym by go zastąpić. Jednocześnie gdy na drodze tej komunikacji stawiałem komputer poprzez Pl2303 to wszystko działało bez zakłóceń. Dlatego zrezygnowałem z konwertera stanów logicznych i zacząłem kombinować z programatorem jako pośrednikiem. Kod programu tu jest bez znaczenia bo zarówno wysyłanie jak i odbieranie to określony moment rozdzielony wieloma sekundami. Odbiornik czeka sobie spokojnie na dane i niczym innym się nie zajmuje a dopiero gdy się doczeka to sobie z nimi robi co tam ma robić a potem znowu sobie czeka i nic więcej nie robi. Generalnie komunikacja to tylko kilka znaków wysyłanych co kilka minut. Pierwszy prototyp na płytce stykowej działał wiele dni bez problemu dopiero gdy chciałem ESP oddalić na jakimś kablu i zasilać za pośrednictwem Arduino to się zapędziłem w ten kozi róg. Raz jeszcze dzięki. Jakoś w końcu pogodzę te dwa napięcia w sposób odpowiedni dla mnie i urządzenia. 

Jak byś jednak załączył schemat i kod, to można by rozwiać wątpliwości jak wielki babol zrobiłeś. Np. widziałem, że ktoś używał jednocześnie UART sprzętowy w  UNO i softowy na pinach 0 i 1.

@kaczakat Skoro działa i z kompem się komunikuje a nawet cały układ w pewnych okolicznościach działa to tak jak mówiłem nie ma sensu otwierać pacjenta i omawiać jego bebechów i tworzyć poboczne wątki skoro problemem jest język i uszy :) Tak czy siak dzięki Ci bo sprawa się wyjaśniła. Gdy taki gamoń jak ja pyta o taką błahostkę jak ja zapytałem to wystarczy jednym zdaniem odpowiedzieć że

"Bo w komunikacji po USB mamy Device oraz Host (kontroler magistrali np. komputer), a twoje Arduino ani ESP nie są Hostami o bez doinwestowania w dodatkowe nakładki nie będą nimi, a poczytać o tym można np. tu https://forbot.pl/blog/kurs-stm32-f4-11-komunikacja-przez-usb-id13477"

Wtedy taki gamoń jak ja, umyje ręce po dojeniu krów i się cieszy że coś już więcej wie, a resztę doczyta.

Całe to moje kombinowanie wynikało z podstawowej mej cechy czyli "nie znoszę lutowania elektroniki". W całej tej zabawie lutowanie jest jak kożuch na mleku. No więc jak mam coś polutować to zaczynam kombinować czy nie dałoby się wykorzystać jakiegoś modułu. Teraz już wiem że tego nie ominę w tym przypadku, bo nawet gdybym się szarpnął na HostShield to by była za duża ingerencja w program, bo mam już wszystkie piny zajęte. 

Sprawa się dzięki Tobie wyjaśniła. 

 

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...