Bezprzewodowy system sterowania oświetleniem z protokołem ZigBee na STM32W
Oprogramowanie modułu MB951 USB dongle
Na powyższy moduł należy załadować przykładową aplikację z pakietu ‘ST SimpleMAC-1.1.0’ (dostępny na stronie producenta i w załączniku do artykułu) o nazwie ‘talk.s37’. Instrukcja jak to zrobić znajduje się poniżej.
Do flashowania układów wykorzystywany jest program ‘stm32w_flasher’ z pakietu ‘ST SimpleMAC-1.1.0’.
Procedura:
- Podpięcie układu do portu USB komputera klasy PC.
- Sprawdzenie numeru przypisanego portu COM w menedżerze urządzeń.
- Uruchomienie konsoli CMD, poprzez Start -> Uruchom -> cmd
- Przejście za pomocą konsoli do folderu, w którym znajduje się aplikacja ‘stm32w_flasher’
- domyślnie: C:\Program Files\STMicroelectronics\ST SimpleMAC-1.1.0\STM32W108\utilities
- należy pamiętać o uprzednim skopiowaniu do powyższego folderu aplikacji z rozszerzeniem .s37, którą chcemy załadować do modułu.
- Wykonanie polecenia:stm32_flasher.exe –p COMx –f –r *.s37gdzie:
COMx – pod ‘x’ wstawiamy numer portu, do którego podłączone jest urządzenie
*.s37 – nazwa aplikacji, która ma być załadowana do modułu
Wgrany program umożliwia odbiór i wysyłanie ramek radiowych ZigBee. Tu wykorzystana została tylko funkcjonalność wysyłania ramek. Proces wysyłania przebiega następująco: mikrokontroler STM32W oczekuje na odbiór danych z komputera (przez interfejs USB działający jako wirtualny port COM), po odbiorze danych konwertuje je do postaci ramki radiowej i wysyła w eter.
Oprogramowanie modułu MB950 remote application board
Moduł ten wymaga załadowania odpowiednio zmodyfikowanej aplikacji ‘talk.s37’. Modyfikacja wprowadza obsługę dodatkowego pinu odpowiedzialnego za włączenie i wyłączanie oświetlenia. Po analizie schematu elektrycznego modułu MB950 wybrano pin PA3, który nie znalazł zastosowania w aplikacji talk, jednakże świetnie nadawał się do zastosowania w omawianym projekcie.
Zmiany w źródłowym kodzie zostały dokonane w funkcji processReceivedPackets(void), odpowiedzialnej za odbieranie pakietów przesyłanych z innego urządzenia. Funkcja to zastała poszerzona o warunki logiczne odpowiedzialne za ustawianie stanu wysokiego oraz niskiego na pinie PA3. Zmodyfikowane ciało tej funkcji zaprezentowano w listingu 1.
Listing 1.
void processReceivedPackets(void) { u8 i; halGpioConfig(PORTA_PIN(3), GPIOCFG_OUT); /* print out any packets that were received */ if(packetReceived == TRUE) { if (rxPacket[8] == TYPE_SERIAL) { for (i = 9; i <= rxPacket[0]; i++) { putchar(rxPacket[i]); if(rxPacket[i] == '4') { halGpioSet(PORTA_PIN(3), 0); putchar('i'); putchar('='); putchar(i); } if(rxPacket[i] == '3') { halGpioSet(PORTA_PIN(3), 1); putchar('k'); putchar('='); putchar(i); } } } if (rxPacket[8] == TYPE_BUTTON) { ledAction(rxPacket[9]); } /* The packet has been processed, so free the single entry queue up */ packetReceived = FALSE; } }
Powyższy kod zawiera obsługę tylko jednego zewnętrznego obwodu oświetlenia. W celu uzyskania obsługi większej liczby elementów, należy powielić instrukcję warunkową
i odpowiednio zmienić pola zaznaczone żółtym kolorem.
Oprogramowanie do komputera PC
Celem maksymalnego ułatwienia korzystania z zestawu zastosowano program z interfejsem graficznym użytkownika. Podstawę dla niego stanowiła aplikacja ‘SerialPort Terminal’ rozpowszechniana w postaci otwartego kodu.
Rys. 4. Oryginalna aplikacja ‘SerialPort Terminal’.