Tutaj pokażę, jak można stworzyć niestandardowy sterownik OpenBeken . Niestandardowy sterownik OpenBeken może implementować niemal dowolną logikę i działa bezpośrednio na urządzeniu OBK. Nie trzeba do tego konfigurować toolchaina, kompilacje można wykonać online. Napisanie sterownika OBK nie wymaga dużej wiedzy programistycznej, można to zrobić z naprawdę podstawowym zestawem umiejętności. Bezpośrednie napisanie sterownika OBK jest również znacznie bardziej elastyczne niż skryptowanie i daje lepszą kontrolę nad urządzeniem. Co więcej, zawsze mogę w tym pomóc, więc zobaczmy razem, jak to zrobić.
Ten krótki przewodnik został stworzony dla użytkowników pytających, jak dodać niestandardowe funkcje do OpenBeken. Mam nadzieję, że da on podstawowy wgląd na tę procedurę.
1. Przygotowanie przepływu pracy
Ok, więc najpierw przejdź do naszego repozytorium na Github:
https://github.com/openshwprojects/OpenBK7231T_App
Najpierw na Githubie utwórz fork i pull request, tak jak zwykle. Najłatwiej jest to zrobić za pomocą GithubGUI. Jeśli nie jesteś pewien, jak to zrobić, sprawdź dokumentację Git i samouczki.
To pozwoli ci uzyskać kompilacje online w PR:
https://github.com/openshwprojects/OpenBK7231T_App/pulls
Po zaakceptowaniu PR będziesz mógł uzyskać binaria dla wszystkich platform, jak opisano w:
OpenBeken online building system - kompilacja firmware dla wszystkich platform (BK7231, BL602, W800, etc)
2. Definicja preprocesora dla sterownika
Wszystkie sterowniki powinny mieć #define w obk_config.h:
https://github.com/openshwprojects/OpenBK7231T_App/blob/main/src/obk_config.h
To pozwala nam włączać i wyłączać je dla każdej platformy.
Stwórzmy definicję dla naszego sterownika. Powiedzmy, że na razie będę go rozwijał na Windows Simulator. W sekcji #ifdef WINDOWS dodajmy więc naszą nową definicję:
3. Wpis do głównej tablicy sterowników
Teraz zmodyfikujmy drv_main.c:
https://github.com/openshwprojects/OpenBK7231T_App/blob/main/src/driver/drv_main.c
Musimy dodać wpis do tablicy sterowników. Cały wpis powinien znajdować się w bloku preprocesora. Musimy również uzupełnić wpisy w dokumentacji.
Sterownik posiada:
- nazwę
- funkcję inicjującą
- funkcję aktualizacji co sekundę
- funkcję szybkiej aktualizacji tików
- funkcję wyświetlania indeksu http
- oraz kilka innych rzadziej używanych funkcji, takich jak funkcja wyłączania lub wywołanie zwrotne zmiany kanału.
Następnie możemy utworzyć te funkcje w osobnym nowym pliku i dodać ich deklaracje do drv_local.h
4. Nowy plik sterownika
Stwórzmy więc plik drv_sample_ntpSwitch.c stub:
Kod: C / C++
Możemy również dodać jakiś wyświetlacz, aby dowiedzieć się, czy nasz sterownik naprawdę działa:
Kod: C / C++
Zbudujmy i sflashujmy firmware dla wybranej przez nas platformy i spróbujmy uruchomić sterownik:
startDriver SampleNTPSwitch
Powinieneś otrzymać odpowiedź "OK":
Powinieneś również otrzymać tekst na panelu głównym:
5. Co można zrobić w sterownikach?
W zasadzie wszystko można zrobić w sterownikach, ale niektóre bardziej specyficzne operacje mogą wymagać wstrzyknięcia kodu poza plik sterownika. Jednak na początek zróbmy coś prostego. Na przykład żądanie użytkownika, które ostatnio otrzymaliśmy:
Cytat:
Przełącz IP serwera NTP na podstawie bieżącego IP sieci
Sprawdzimy więc co sekundę. Proste porównanie ciągów znaków nie jest czasochłonne, więc jest akceptowalne:
Kod: C / C++
Ustawi to adres IP serwera NTP w zależności od bieżącego adresu IP. Nie przejmuj się wielokrotnymi wywołaniami CFG_SetNTPServer. Konfiguracja flash zostanie zapisana tylko w przypadku zmiany ustawień.
O podobne zachowanie prosił użytkownik tutaj:
https://www.elektroda.com/rtvforum/topic4054813.html
6. Jak debugować sterowniki (w systemie Windows)?
OpenBeken może działać w systemie Windows, wraz z symulatorem urządzenia.
Jeśli więc uruchomisz nasze projekty MSVC, możesz umieścić breakpoint w kodzie:
W ten sposób możesz:
- zobaczyć wartości zmiennych
- zobaczyć bieżący callstack
- wstrzymać lub wznowić wykonywanie, a także ręcznie wejść / wyjść z funkcji
Może to znacznie skrócić czas testowania i programowania.
7. Jak uczynić sterowniki skryptowalnymi?
Najlepszym sposobem jest użycie poleceń konsoli. Polecenia konsolowe mogą być wywoływane przez autoexec.bat, interfejs HTTP lub nawet przez MQTT. Utworzenie nowego polecenia jest bardzo proste:
Kod: C / C++
W ten sposób można uzyskać polecenie konsoli/skryptu z pełnym testowaniem argumentów.
Oczywiście wartość kanału może być również użyta jako argument.
8. Jak uzyskać dostęp do kanałów i pomiarów?
Każdy sterownik może mieć pełny dostęp do OBK API, dzięki czemu można łatwo odczytywać i zapisywać kanały, odczytywać pomiary itp:
Kod: C / C++
Poniższy kod zarejestruje wartość i napięcie kanału 1 (z czujnika BL0942/BL0937/etc).
W ten sposób można również na przykład zmierzyć, jak długo napięcie jest powyżej danej wartości:
Kod: C / C++
Jeśli chcesz, możesz zmienić zakodowaną na stałe wartość 230 na wartość ustawioną za pomocą polecenia konsoli, wystarczy spojrzeć na przykładowe polecenie konsoli i zapisać wartość w statycznej zmiennej globalnej.
Następnie można ustawić kanały, a nawet publikować dane za pośrednictwem MQTT:
Kod: C / C++
9. Jak utworzyć niestandardowy interfejs strony internetowej?
Wywołanie zwrotne głównej strony HTTP per-driver może być również używane do wprowadzania danych przez użytkownika. W ten sposób można łatwo tworzyć formularze HTML. W tym przykładzie stworzę prosty przycisk, który będzie przełączał kanał 5:
Kod: C / C++
Kliknięcie przycisku przełącza wartość kanału 5:
I to wszystko! W ten sposób można utworzyć niestandardowy sterownik w OBK. Pamiętaj, aby pobrać nasz kod, aby sprawdzić pełne API, które jest dostępne dla Twojego rozwoju. Wszystkie szczegóły związane z argumentami wywołań MQTT/channel/etc znajdują się w naszym repozytorium.
Fajne? Ranking DIY Pomogłem? Kup mi kawę.