Skocz do zawartości

ESP8266 zmiana baudrate w "locie"


_LM_

Pomocna odpowiedź

Ponieważ nie znam się zbytnio na c++ oraz bibliotekach arduino mam takie zapytanie: Mam konfigurację 

 Serial.begin(9600);

Oraz czasem, zależnie od innych czynników w programie potrzebuję przejść na baud 115200.

Jak to prawidłowo wykonać? Powinienem "odwołać" klasę serial

~Serial

i zainicjalizować z nowym bd? Czy po prostu raz wołać begin(9600) raz (115200)? 

Edytowano przez Gieneq
Link do komentarza
Share on other sites

38 minut temu, _LM_ napisał:

Ok, jeszcze sprawa bufora doczytałem że ma max 256 bajtów https://arduino-esp8266.readthedocs.io/en/latest/reference.html Na dzień dobry potrzebuję co najmniej 1KB rozumiem że trzeba monitorować jakoś fifo i gdy dochodzi do przepełnienia, kopiować dane do bufora zewnętrznego?

Podobne rozwiązanie stosowałem dla USB w moim Encryption Module. Kiedy otrzymywałem dane CDC (64B) to kopiowałem je do (zapętlonego) bufora 16kB + 128B wewnątrz RAM'u (indeks po wykroczeniu poza zakres wracał na początek, jednocześnie sprawdzając odległość do ostatniej przetworzonej danej). Nie wiem czy w Twoim przypadku się sprawdzi, bo jednak UART nie ma systemu ACK i retransmisji, więc musisz przetwarzać dane szybciej niż je otrzymujesz. Oczywiście USB działa na przerwaniach co 64B (1.1 Full Speed, maksymalny rozmiar pakietu danych).

Edit: nvm jestem ślepy 😉 w ostatniej funkcji jest ustawianie bufora, w tej wersji już nie ma weryfikacji miejsca, bo i tak nie nadążało przepełniać bufora.

Edytowano przez H1M4W4R1
  • Pomogłeś! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Aha, czyli w prostych słowach należy zbudować bufor kołowy, na szczęście dla mnie, te "grubsze" pakiety będą pochodziły z tego wolniejszego połączenia, liczę że jak to dobrze wykombinuję to esp powinien nadążać. Dobra takie jeszcze pytanko na gorąco, bo pewnie można doczytać ale skoro już tu jesteś... 😉 jak odczytać stan zajętości fifo?

Link do komentarza
Share on other sites

5 minut temu, H1M4W4R1 napisał:

bo jednak UART nie ma systemu ACK i retransmisji,

Tu dane polecą na żywioł, esp ma przechwycić to co leci do drukarki i nie mogę ingerować w przepływ danych

Link do komentarza
Share on other sites

30 minut temu, _LM_ napisał:

Dobra takie jeszcze pytanko na gorąco, bo pewnie można doczytać ale skoro już tu jesteś... 😉 jak odczytać stan zajętości fifo?

Coś takiego powinno zdać egzamin (pisane na kolanie)

#define FIFO_SIZE_328P 64
uint8_t free = FIFO_SIZE_328P - Serial.available(); 

Alternatywnie możesz spróbować 256 - Serial.available(), ale nie gwarantuję że Serial nie ogranicza pojemności bufora ani czy Serial automatycznie ustawia swój bufor jako FIFO, nie używam ESP. Na 328P powyższa metoda działa 😉 

Serial.available() zwraca ilość dostępnych bajtów, a znając rozmiar bufora znasz jego zajętość 😉 

Edytowano przez H1M4W4R1
  • Lubię! 1
Link do komentarza
Share on other sites

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...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.