- komunikacja w paśmie ISM 433 MHz (radiomodem typu RC1240) lub 868MHz (radiomodem typu RC1280),
- zasięg połączenia dochodzi do kilkuset metrów przy transferze z przepustowością 4,8 kbit/s,
- od strony aplikacji zestawione połączenie radiowe jest obsługiwane jak port szeregowy,
- transmisja może być realizowana w trybie punkt-punkt lub punkt-wiele punktów.
W zależności od zastosowanego modelu radiomodemu, mamy do dyspozycji dwa pasma komunikacji:
- radiomodem typu RC1240: pasmo ISM 433 MHz, dostępnych 69 kanałów,
- radiomodem typu RC1280: pasmo ISM 868 MHz, dostępnych 80 kanałów.
W zależności od warunków zasięg połączenia dochodzi do kilkuset metrów przy transferze z przepustowością 4,8 kbit/s, w trybie half-duplex. Transmisja może być realizowana w trybie punkt-punkt lub punkt-wiele punktów. Od strony aplikacji zestawione połączenie radiowe jest obsługiwane jak port szeregowy, kontroler modemu zajmuje się adresacją, dekodowaniem i korekcją CRC transmitowanych pakietów.
Budowa i działanie
Schemat nakładki został pokazany na rysunku 1. Modem korzysta z portu szeregowego Raspberry Pi. Po konwersji poziomów 2,7/3,3 V w układach U3, U4, sygnały TX/RX doprowadzone są do modemu RM. Modem zasilany jest z V50 (+5 V), zapewnia to pełną moc nadajnika, napięcie jest dodatkowo odfiltrowane przez elementy C1, C2, CE1. Napięcie V27 z wewnętrznego stabilizatora LDO umieszczonego w RM zasila konwertery poziomów U3, U4 po stronie modemu. Sygnał RF doprowadzony jest go gniazda ANT typu uFL.
Modem wymaga dwóch sygnałów sterujących, pierwszy to RST umożliwiający restart modemu, drugi to CFG wprowadzający modem w tryb konfiguracji. Sygnały podłączone są poprzez bramki U1, U2 do wyprowadzeń GPIO6, GPIO5 Raspberry Pi, umożliwiając programowy restart i konfigurację modemu oraz translację poziomów napięć. Płytkę uzupełnia złącze magistrali I²C, umożliwiające podłączenie np. zewnętrznych czujników.
Montaż i uruchomienie
Układ zmontowany jest na dwustronnej płytce drukowanej zgodnej rozmiarami z RPi Zero, której schemat został pokazany na rysunku 2.
Montaż płytki nie wymaga opisu, zmontowany moduł pokazuje fotografia tytułowa. Dla sprawdzenia modułu konieczne jest przygotowanie dwóch komputerków Raspberry Pi z aktywowanym portem szeregowym, czy to poprzez konfigurator raspi-config, czy bezpośrednio w pliku config.txt, poprzez dodanie linii enable_uart=1. Należy pamiętać o wyłączeniu w pliku cmdline.sys funkcji SSH, jeżeli korzysta z portu szeregowego. Po restarcie systemu instalujemy w zależności od preferencji, terminal portu szeregowego minicom lub picocom.
Konfigurujemy piny GPIO5, GPIO6 sterujące sygnałami CFG, RST oraz ustawiamy je w domyślny stan 1 wpisując:
echo out > /sys/class/gpio/gpio5/direction
cd /sys/class/gpio/gpio5
echo 1 > value
echo 6 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio6/direction
cd /sys/class/gpio/gpio6
echo 1 > value
Dzięki temu modemy pracują w konfiguracji fabrycznej. Stanem aktywnym sygnału RST jest stan niski, po podaniu którego modem restartuje się. Stanem aktywnym sygnału CFG, jest także stan niski, po podaniu którego modem przechodzi do trybu konfiguracji, podanie stanu wysokiego powoduje przejście do trybu pracy. Po włączeniu zasilania warto zresetować modem impulsem na linii RST i ustawić stan 1 na linii CFG.
Domyślne, fabryczne ustawienie portu szeregowego modemu to: 19200, 8N1 i taką należy ustawić w uruchamianych terminalach. Wybieramy port odpowiadający sprzętowemu UART na wyprowadzeniach GPIO14, GPIO15, czyli ttyAMA0 dla Pi4 lub ttyS0 dla Pi3 oraz brak emulacji terminala, czyli transmisje znakową ANSI. Fabryczna konfiguracja przewiduje pracę modemów jako jednokanałowy link radiowy dla portu szeregowego, gdzie transmisja danych pomiędzy modemami przeprowadzana jest po zapełnieniu bufora (128 bajtów) lub po przekroczeniu czasu timeout.
Uruchamiając terminale na obu komputerkach z ww. ustawieniami, wpisujemy kilka znaków w jednym terminalu, po chwili powinny pojawić się w drugim. Operację przeprowadzamy też w odwrotnym kierunku, sprawdzając działanie obu torów. Dalsze eksperymenty wymagają już napisania własnej aplikacji, w terminalu możemy sprawdzić jeszcze poprawność wejścia w tryb konfiguracji, zmieniając stan sygnału CFG na 0.
Algorytm konfiguracji pokazano na rysunku 3. Po prawidłowym ustawieniu stanu CFG, modem w terminalu zwróci znak zachęty „>” potwierdzając aktywny tryb konfiguracji i rozłączając zestawione wcześniej połączenie. Obsługiwane komendy zestawiono w tabeli 1.
Nie każda komenda jest potwierdzana odesłaniem znaku „>”. Szczegółowy opis komend zamieszczony jest w dokumentacji RC232 User Manual.pdf, która jest dostępna w materiałach dodatkowych do artykułu lub do pobrania ze strony producenta.
Konfiguracja modemu może być przechowywana w pamięci ulotnej RAM, może być też zapisana w pamięci nieulotnej NVM. Należy pamiętać o ograniczonej liczbie cykli zapisu pamięci NVM (ok. 10000) i ograniczyć zapisy do niezbędnego minimum. Dane zapisane w NVM są przywracane po resecie modemu. Wyjście z trybu konfiguracji wymaga zmiany stanu CFG na 1 oraz wydania komendy X (Exit), która nie zostanie już potwierdzona. Przykład odczytu zawartości pamięci w trybie konfiguracji poleceniem „0” pokazano na rysunku 4.
W tabeli 2 zamieszczono skróconą listę konfigurowalnych parametrów przechowywanych w pamięci nieulotnej. Wartości te mogą być zmieniane za pomocą komendy „M”. Wszystkie adresy i argumenty muszą być wysyłane do modułu jako wartości binarne.
Więcej możliwości
W bardziej zaawansowanych aplikacjach oprócz trybu transparentnego, gdzie dane nie są buforowane i para modułów działa po prostu jako radiowy link UART, przydatny może być tryb adresacji punkt-punkt. W trybie adresacji (ADDRESS_MODE=0x02) każda strona ma swój własny adres, jak również adres podsieci, w której się znajduje, SystemID (SID), UniqueID (UID). SID musi być taki sam dla całej grupy modułów, ale UID jest unikalny dla każdego z modułów. Do transmisji ustawiamy adres przeznaczenia DestinationID (DID) modułu odbierającego i wysyłamy dane. Wszystkie moduły podsieci odbierają pakiety, sprawdzają adresy, weryfikują poprawność odbioru i jeśli identyfikatory są zgodne, to w modemie odbiorczym, odebrane dane po usunięciu adresacji wysyłane są na UART.
Każdy moduł ma również taki parametr jak adres rozgłoszeniowy Broadcast (BID). Jest on potrzebny, jeśli transmisja ma odbywać się jednocześnie do wszystkich modemów odbiorczych. Domyślnie BID = 0xFF, ale można ustawić na dowolną wartość i w ten sposób grupować moduły odbierające komunikat, pamiętając że UID nie może być identyczny z BID. Pozostaje tylko życzyć poprawnych konfiguracji i dobrej propagacji.
Adam Tatuś, EP
- R1, R2: 10 kΩ
- R4, R5: 4,7 kΩ
- C1, C3, C4, C5, C6, C7: 0,1 μF/10 V (SMD0603)
- CE1: 47 μFT/10 V tantalowy (SMD3528)
- C2: 10 μF/10 V (SMD0603)
- U1, U2: 74L VC1G07DCK (SC70-5)
- U3, U4: 74L VC1T45GW (SC70-6)
- ANT: UFL (UFL) MX-73412-0114
- GPIO: złącze IDC 2×20 pinów żeńskie
- RM: moduł Radiocrafts RC1240 lub RC1280