Zasada działania transmisji szeregowej – szczypta teorii
Jak sama nazwa mówi, jest to transmisja szeregowa polegająca na wysyłaniu ciągu bitów, które są następnie składane w paczkę danych. Pojedyncza paczka danych składa się z bitu start, danych, bitu stopu i ewentualnie bitu parzystości, jeżeli transmisja jest tak skonfigurowana. Słówko Asynchronous w nazwie informuje, że jest to transmisja asynchroniczna, co oznacza, iż zegar taktujący rytm wysyłania danych nie jest przesyłany do odbiornika, tak jak ma to miejsce np. w SPI czy I2C. Dlatego każdorazowo należy ustawić odpowiednią prędkość w nadajniku i odbiorniku – oczywiście, musi ona być taka sama. Efektem ustawienia różnych prędkości będzie odczytanie błędnych danych z interfejsu.
ESP-12 i wirtualny UART
Moduł ESP-12 ma sprzętowy interfejs portu szeregowego, co oznacza, że na wyjściu będą same dane wysłane przez nadajnik. Nie trzeba martwić się o bity startu, stopu itd. Jedyne, co należy zrobić, to skonfigurować ten port.
Wszystkie dane, które zostaną odebrane w pakiecie UDP od razu są wysyłane przez port szeregowy. Analogicznie, wszystkie dane, które nie zawierają znaku „+” są pakowane do pakietu UDP i wysyłane do odbiorcy.
Komunikacja UDP została zastosowana z powodu prostoty oraz szybkości wysyłania danych. Testy wykazały, że przy większej ilości danych wysyłanych pakietami TCP, w pewnym momencie następowało przepełnienie, gdyż czas potrzebny na: nawiązanie połączenia TCP, wysłanie pakietu, oczekiwanie na potwierdzenie, ewentualną retransmisję pakietu oraz zamknięcie połączenia, powodował zgromadzenie zbyt dużej ilości danych oczekujących w buforze. Przy wykorzystaniu transmisji UDP, każdy znak odczytany z interfejsu jest natychmiastowo wysyłany pakietem. W wypadku UDP nie nawiązuje się połączenia oraz nie trzeba go zamykać. Wadą tego rozwiązania jest możliwość „zagubienia” pakietu danych. Kontrolę błędów transmisji należałoby wykonać programowo, np. wysyłając na koniec ciągu znaków sumę kontrolną CRC.
Firmware interpretuje i realizuje 9 komend AT. Każda komenda rozpoczyna się członem „+AT_” i musi być zakończona znakiem końca linii. Dopiero wtedy moduł zaakceptuje komendę i będzie próbować ją przetworzyć. Wysyłanie danych za pomocą UDP nie wymaga znaku końca linii, jeżeli przed danymi nie wystąpił znak „+”, to dane będą przesyłane paczkami UDP do odbiornika.