Pytanie:
EPS8266 ESP-01: Manipulacja diodami LED wydaje się zakłócać komunikację szeregową
user2224350
2017-08-15 04:11:41 UTC
view on stackexchange narkive permalink

Bawię się tym przykładem udp. Zarówno to, jak i przykład z miganiem działają doskonale. Teraz chciałbym użyć diody LED, aby wskazać, co aktualnie robi ESP, a także odczytać niektóre dane przez Serial. Mój kod wygląda następująco:

  void setup () {Serial.begin (115200); Serial.setTimeout (500); while (Serial.available () == 0) {} String password = Serial.readStringUntil ('.'); Serial.println (hasło); WiFi.begin (ssid.c_str (), hasło.c_str ()); // pinMode (LED_BUILTIN, OUTPUT); while (WiFi.status ()! = WL_CONNECTED) {// digitalWrite (LED_BUILTIN, LOW); opóźnienie (250); // digitalWrite (LED_BUILTIN, HIGH); opóźnienie (250); } Serial.println („połączony”); Udp.begin (localUdpPort);}  

Działa dobrze, ale jeśli odkomentuję linie led, komunikacja szeregowa już nie działa. Wszystko, co jest drukowane na monitorze szeregowym, jest teraz pomieszane (brakujące znaki, ...). Czy jest problem z moim kodem lub co jeszcze może być tutaj nie tak?

EDYCJA: Niedawno próbowałem ponownie tego samego kodu, ale użyłem dodatkowego źródła zasilania (3,3 V, 500 mA) dla chipa. Jednak to nie rozwiązało problemu.

Zmniejsz prędkość transmisji do 9600 i zobacz, czy to pomaga. Nie mam też pewności co do wywołania „setTimeout”.
Ustawienie szybkości transmisji na 9600 nie ma wpływu, gdy rzeczy ledowe są komentowane, ale jeśli nie są komentowane, nie mogę w ogóle nic zobaczyć na SerialMonitor (setTimeout jest również zakomentowany)
Czy masz sterowniki do diod LED czy są one bezpośrednio przymocowane do ESP-01? Czy masz dodatkowy kondensator jako stabilizator mocy nad Vcc i GND?
Jest to wbudowana dioda LED na esp, którego używam. Właśnie podłączyłem VCC do VCC mojego chipa usb / ftdi (który jest podłączony do mojego notebooka).
Używam tego układu od AzDelivery FTDI Adapter FT232RL
sugerowałbym dodanie czegoś do treści pętli while, aby umożliwić kontynuację działań w tle, nawet jeśli jest to tylko krótkie opóźnienie lub wydajność
Masz na myśli tego pierwszego? Dlaczego to powinno coś zmienić?
Czy otrzymujesz takie same wyniki w innym module? Czy wprowadziłeś coś przez monitor szeregowy? Czy możesz umieścić `while (1);` po `Serial.println (hasło)`, aby zobaczyć, czy przynajmniej to jest wydrukowane? Może również umieścić `yield ()` w pętli `while (Serial.available () == 0) {}`.
Jeden odpowiedź:
Mazaryk
2017-09-05 07:06:15 UTC
view on stackexchange narkive permalink

Założę się, że wbudowany pin LED jest jednocześnie pinem TX dla interfejsu szeregowego.

Sprawdź tutaj, sekcja Pin LED : http://www.esp8266.com/wiki/doku.php?id=esp8266_gpio_pin_allocations

Styk diody LED

GPIO1, który jest również TX, jest podłączony do niebieskiej diody LED w wielu urządzeniach. Zauważ, że dioda LED jest aktywna w stanie niskim (podłączona do Vcc i przechodzi przez chip do masy), więc ustawienie wartości logicznej 0 spowoduje jej zapalenie. Ponieważ GPIO1 jest również pinem TX, nie będziesz w stanie migać diody LED i wykonywać komunikacji szeregowej w tym samym czasie, chyba że zmienisz szpilki TX / RX.

Zostanie to potwierdzone dioda LED miga, gdy komunikacja szeregowa jest aktywna.

W takim przypadku musiałbyś dodać własną diodę LED na innym pinie lub zamienić piny RX / TX.

Zgadzam się, ref. https://github.com/esp8266/Arduino/issues/3165


To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...