LinkedIn YouTube Facebook
Szukaj

Wstecz
IoT

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:

  1. Podpięcie układu do portu USB komputera klasy PC.
  2. Sprawdzenie numeru przypisanego portu COM w menedżerze urządzeń.
  3. Uruchomienie konsoli CMD, poprzez Start -> Uruchom -> cmd
  4. 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.
  5. 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’.

Rys. 4. Oryginalna aplikacja ‘SerialPort Terminal’.