Rozwój oprogramowania

MeshCore architektura oprogramowania sprzętowego

Techniczne wyjaśnienie oprogramowania sprzętowego MeshCore: moduły, komponenty i architektura wewnętrzna dla programistów

MeshCore oprogramowanie sprzętowe: jak to działa?

Oprogramowanie sprzętowe MeshCore to oprogramowanie działające na chipsetach ESP32, nRF52 i STM32. Jest napisany w języku C/C++ i składa się z wielu modułowych komponentów, które współpracują ze sobą, aby zapewnić funkcjonowanie sieci kratowej.

Architektura oprogramowania sprzętowego została zaprojektowana z myślą o modularności i abstrakcji sprzętu. Dzięki temu możliwe jest użycie tej samej bazy kodu dla różnych platform sprzętowych bez większych dostosowań.

Na tej stronie wyjaśniono wewnętrzną strukturę oprogramowania sprzętowego, dostępne moduły i sposób ich współpracy.

Podstawowe moduły oprogramowania sprzętowego

Oprogramowanie MeshCore składa się z 5 głównych modułów:

1. Moduł radiowy (sterownik LoRa)

Zarządza układem radiowym LoRa (SX1262, SX1276 itp.). Zapewnia transmisję, odbiór, przeskakiwanie częstotliwości i zarządzanie energią.

radio.init(868MHz, SF9, BW125, CR4_5); radio.send(pakiet, rozmiar); radio.odbierz(oddzwonienie);

2. Moduł routingu siatki

Implementuje algorytm routingu siatki. Określa, które komunikaty mają być przekazywane dalej, utrzymuje listę sąsiadów i zarządza tablicą routingu.

routing.handlePacket(pakiet); routing.addNeighbor(nodeId, rssi, snr); routing.findRoute(miejsce docelowe);

3. Moduł protokołu

Implementuje protokół MeshCore: kodowanie/dekodowanie pakietów, typy wiadomości, szyfrowanie/deszyfrowanie za pomocą AES-256.

protokół.encodePacket(wiadomość, miejsce docelowe); protokół.decodePacket(rawData); protokół.encrypt(ładunek, klucz);

4.Moduł aplikacji

Zawiera logikę aplikacji: wiadomości tekstowe, GPS, telemetrię, informacje o węźle. To właśnie widzi i wykorzystuje użytkownik.

app.sendMessage("Witam", identyfikator użytkownika); app.updatePosition(lat, lon, alt); aplikacja.getTelemetry();

5. Moduł interfejsu

Zarządza komunikacją z interfejsami zewnętrznymi: Bluetooth (smartfon), Szeregowy (CLI), Ekran (OLED/TFT), Przyciski.

Bluetooth.init(); Bluetooth.sendToApp(wiadomość); ekran.wyświetlacz(tekst);

Architektura systemu

Moduły współpracują ze sobą w architekturze sterowanej zdarzeniami:

Bieg wydarzenia

Oprogramowanie sprzętowe uruchamia główną pętlę zdarzeń, która stale sprawdza zdarzenia: przychodzący pakiet radiowy, komunikat Bluetooth, naciśnięcie przycisku, upłynął czas timera. Każde zdarzenie wyzwala odpowiedni moduł.

Radio sterowane przerwaniami

Układ LoRa wyzwala przerwanie sprzętowe po odebraniu pakietu. Moduł radiowy umieszcza pakiet w kolejce, która jest przetwarzana w pętli zdarzeń.

Konstrukcja nieblokująca

Wszystkie operacje nie blokują się. Długie zadania (takie jak szyfrowanie lub poprawka GPS) wykorzystują zadania w tle lub są podzielone na mniejsze kroki, aby zapewnić responsywność pętli zdarzeń.

Warstwa abstrakcji sprzętu (HAL)

HAL umożliwia uruchamianie tego samego oprogramowania sprzętowego na różnych urządzeniach:

Abstrakcja GPIO

Sterowanie przyciskami, diodami LED i innymi pinami GPIO odbywa się za pośrednictwem interfejsu HAL. Każdy wariant sprzętu posiada plik konfiguracyjny z mapowaniem pinów.

hal_gpio_write(LED_PIN, WYSOKI);

Abstrakcja SPI/I2C

Komunikacja z układem LoRa (SPI) i wyświetlaczami (I2C/SPI) odbywa się za pośrednictwem funkcji HAL, które są implementowane w różny sposób w zależności od platformy.

hal_spi_transfer(dane, rozmiar);

Zarządzanie energią

Głębokie uśpienie, skalowanie częstotliwości procesora i kontrola mocy peryferyjnej są specyficzne dla platformy i są pobierane przez HAL.

hal_enter_deep_sleep(sekundy);

System plików

Konfiguracja i komunikaty są przechowywane w pamięci flash. ESP32 używa LittleFS, nRF52 używa innej implementacji, ale tej samej HAL API.

hal_fs_write("config.json", dane);

Zalety tej architektury

🔧

Modułowość

Moduły są luźno połączone. Możesz zaktualizować moduł routingu bez dotykania modułu radiowego.

📱

Wiele platform

Dzięki HAL ten sam kod działa na ESP32, nRF52 i STM32.

🔄

Rozszerzalność

Nowe funkcje można łatwo dodać jako dodatkowe moduły.

🐛

Testowalność

Moduły można testować indywidualnie. Testy jednostkowe na moduł.

Wydajność

Konstrukcja sterowana zdarzeniami i nieblokująca zapewnia małe opóźnienia i dobrą responsywność.

🔓

Otwarte źródło

Całe oprogramowanie jest open source. Możesz czytać, edytować i udostępniać kod.

Często zadawane pytania

W jakim języku programowania jest napisane oprogramowanie sprzętowe?

Oprogramowanie sprzętowe MeshCore jest napisane w C++ (dla większości modułów) i C (dla niskopoziomowego HAL). Wykorzystuje framework Arduino dla ESP32 i Nordic SDK dla nRF52.

Ile pamięci zużywa oprogramowanie sprzętowe?

W dniu ESP32 oprogramowanie sprzętowe wykorzystuje ~200-300 KB pamięci flash i ~40-60 KB pamięci RAM. Pozostawia to dużo miejsca na przechowywanie wiadomości i przyszłe funkcje.

Czy mogę dodać własne moduły?

Tak, architektura modułowa ułatwia dodawanie własnych modułów. Na przykład: dodatkowy moduł czujnika, niestandardowa logika routingu lub nowy interfejs.

Jak często następuje aktualizacja oprogramowania sprzętowego?

MeshCore aktywnie się rozwija, wydając co 2-3 miesiące. Poprawki błędów pojawiają się szybciej, nowe funkcje w głównych wersjach.

Czy oprogramowanie jest kompatybilne wstecz?

Tak, protokół jest wstecznie kompatybilny w głównych wersjach. Węzeł w wersji 2.3 może komunikować się z węzłami w wersji 2.1. Może się to zmienić wraz z większą aktualizacją (v3.0).

Zanurz się w oprogramowaniu sprzętowym MeshCore

Teraz, gdy znasz już architekturę oprogramowania sprzętowego, możesz zapoznać się z kodem źródłowym, przyczynić się do rozwoju lub wprowadzić własne modyfikacje.

Powiązane artykuły