Skocz do zawartości

Przeszukaj forum

Pokazywanie wyników dla tagów 'M5Stack'.

  • Szukaj wg tagów

    Wpisz tagi, oddzielając przecinkami.
  • Szukaj wg autora

Typ zawartości


Kategorie forum

  • Elektronika i programowanie
    • Elektronika
    • Arduino i ESP
    • Mikrokontrolery
    • Raspberry Pi
    • Inne komputery jednopłytkowe
    • Układy programowalne
    • Programowanie
    • Zasilanie
  • Artykuły, projekty, DIY
    • Artykuły redakcji (blog)
    • Artykuły użytkowników
    • Projekty - DIY
    • Projekty - DIY roboty
    • Projekty - DIY (mini)
    • Projekty - DIY (początkujący)
    • Projekty - DIY w budowie (worklogi)
    • Wiadomości
  • Pozostałe
    • Oprogramowanie CAD
    • Druk 3D
    • Napędy
    • Mechanika
    • Wydarzenia
    • Sprzedam/Kupię/Zamienię/Praca
    • Inne
  • Ogólne
    • Ogłoszenia organizacyjne
    • Dyskusje o FORBOT.pl
    • Na luzie

Kategorie

  • Quizy o elektronice
  • Quizy do kursu elektroniki I
  • Quizy do kursu elektroniki II
  • Quizy do kursów Arduino
  • Quizy do kursu STM32L4
  • Quizy do pozostałych kursów

Szukaj wyników w...

Znajdź wyniki, które zawierają...


Data utworzenia

  • Rozpocznij

    Koniec


Ostatnia aktualizacja

  • Rozpocznij

    Koniec


Filtruj po ilości...

Data dołączenia

  • Rozpocznij

    Koniec


Grupa


Imię


Strona

Znaleziono 7 wyników

  1. Gotowe kontrolery USB potrafią kosztować kilkaset złotych, a mimo to często nie oferują dokładnie takiego układu przycisków, jakiego potrzebujemy. Na szczęście urządzenie takie można zbudować w ciągu jednego popołudnia. W tym przypadku wykorzystamy moduły M5Stack, aby stworzyć własny ButtonBox komunikujący się przez Bluetooth Low Energy, który sprawdzi się zarówno jako kontroler do gier i symulatorów, jak i panel sterujący własnymi aplikacjami. Projekt powstał we współpracy z firmą Botland. Projekt opisany w tym artykule powstał z myślą o prostocie wykonania. Nie wymaga projektowania własnej elektroniki ani lutowania – wykorzystujemy gotowe moduły M5Stack, drukowaną obudowę oraz kilka śrub. Całość można później łatwo rozbudować o kolejne elementy, zachowując tę samą architekturę oprogramowania. Jak zbudowany jest ButtonBox? Sercem całego urządzenia jest niewielki moduł M5Stack Atom Lite, który odpowiada za komunikację Bluetooth Low Energy oraz obsługę pozostałych elementów zestawu. Do niego, za pomocą przewodów Grove dołączonych przez producenta, podłączone zostały dwa moduły rozszerzeń. Pierwszym z nich jest M5Stack ByteButton Unit, wyposażony w osiem podświetlanych przycisków chwilowych. Drugi moduł, M5Stack ByteSwitch Unit, oferuje osiem przełączników dwupozycyjnych. Takie połączenie pozwala jednocześnie korzystać z przycisków do wykonywania krótkich akcji oraz przełączników do funkcji, które powinny zachowywać swój stan, na przykład włączania trybów pracy lub sterowania dodatkowymi funkcjami w symulatorach. Wszystkie elementy zamknięto w obudowie wydrukowanej z filamentu PETG. Moduły są mocowane mechanicznie za pomocą ośmiu śrub M4×12, dzięki czemu cała konstrukcja jest sztywna i odporna na wielokrotne użytkowanie. Wewnątrz obudowy znajdują się jedynie krótkie przewody Grove, dlatego montaż nie wymaga lutowania ani wykonywania własnej płytki drukowanej. Takie podejście doskonale wpisuje się w ideę modułowego projektowania. W razie potrzeby uszkodzony element można wymienić w ciągu kilku minut, a sam projekt łatwo rozbudować o kolejne moduły M5Stack. Drukowana obudowa Całość została zaprojektowana tak, aby wszystkie elementy można było zamontować w prostej obudowie wydrukowanej z PETG. PETG dobrze sprawdza się w tego typu konstrukcjach: jest bardziej odporny termicznie od PLA nie odkształca się podczas normalnego użytkowania dobrze znosi wielokrotne skręcanie śrubami Montaż sprowadza się do umieszczenia modułów w przygotowanych otworach i skręcenia obudowy ośmioma śrubami M4×12. Atom Lite jest montowany na wcisk z tyłu obudowy i jest połączony z pozostałymi modułami przewodami Grove. Nie są potrzebne żadne dodatkowe dystanse ani elementy montażowe. Pliki obudowy dostępne są poniżej: Model.zip Montaż elektroniki Jedną z największych zalet projektu jest brak lutowania. Połączenie wygląda bardzo prosto: ByteButton → Grove → Atom Lite ByteSwitch → Grove → ByteButton USB-C → Atom Lite Po podłączeniu przewodu USB urządzenie jest gotowe do wgrania programu. Całość wykorzystuje magistralę I²C, dlatego liczba przewodów została ograniczona do minimum, a montaż zajmuje zaledwie kilka minut. Co potrafi ButtonBox? Po uruchomieniu urządzenie zgłasza się przez Bluetooth jako: OST-BBX Firmware udostępnia dwie podstawowe funkcje: Pierwszą z nich jest odczyt wszystkich przycisków i przełączników - każdy stan przesyłany jest jako prosty ciąg znaków: np. 00000000 lub 10100110, gdzie każda pozycja odpowiada jednemu wejściu. Nie jest wymagane interpretowanie ramek binarnych ani skomplikowanych struktur danych, dzięki czemu praktycznie dowolny program potrafiący komunikować się przez BLE może odczytać aktualny stan urządzenia. Oprogramowanie umożliwia również sterowanie podświetleniem RGB obu modułów. Kolory ustawia się prostymi komendami tekstowymi wysyłanymi przez usługę UART BLE, np. Button:SetRGB:0:255:0:0; lub Switch:SetRGB:2:0:0:255; Takie rozwiązanie bardzo ułatwia testowanie oraz integrację z własnymi aplikacjami. Pierwsze uruchomienie Po wgraniu firmware dostępnego na GitHubie wystarczy uruchomić dowolny tester Bluetooth Low Energy. Po odnalezieniu urządzenia OST-BBX można: odczytywać stany przycisków, obserwować powiadomienia BLE, wysyłać komendy zmieniające kolory podświetlenia. Dzięki temu poprawność działania można sprawdzić jeszcze przed napisaniem własnego programu korzystającego z ButtonBoxa. Do czego można wykorzystać taki panel? Choć projekt wygląda niepozornie, możliwości zastosowań jest naprawdę sporo. ButtonBox świetnie sprawdzi się jako: panel do symulatorów lotu, kontroler do gier wyścigowych, panel skrótów do programów graficznych, sterownik aplikacji CAD, panel makr dla streamerów, sterownik własnych projektów Arduino lub ESP32, interfejs do automatyki domowej. Ponieważ komunikacja odbywa się przez Bluetooth Low Energy, urządzenie można wykorzystać zarówno z komputerami, jak i urządzeniami mobilnymi, które mogą pełnić funkcję pośrednika pomiędzy różnymi urządzeniami korzystającymi z tego samego albo różnych protokołów. Możliwości rozbudowy Jedną z największych zalet wykorzystania modułów M5Stack jest możliwość dalszego rozwijania projektu bez konieczności przebudowy całego urządzenia. Najprostszą rozbudową jest zastosowanie M5Stack Unit 8Encoder. Moduł dodaje osiem enkoderów obrotowych z funkcją przycisku oraz własnym podświetleniem RGB. Dzięki temu ButtonBox może stać się rozbudowanym kontrolerem do symulatorów, czy oprogramowania muzycznego. Firmware został przygotowany w sposób modułowy, dlatego dodanie obsługi enkoderów sprowadza się głównie do rozszerzenia komunikacji BLE o kolejne charakterystyki opisujące ich pozycję i stan. Drugą ciekawą możliwością jest zastąpienie modułu M5Stack Atom Lite poprzez M5Stack Atom S3. Oprócz większej wydajności mikrokontroler ten umożliwia pracę jako urządzenie USB HID. Oznacza to, że ButtonBox może być wykrywany przez komputer jako standardowa klawiatura, panel multimedialny lub kontroler HID, bez konieczności korzystania z Bluetooth. Takie rozwiązanie szczególnie dobrze sprawdzi się w komputerach stacjonarnych oraz symulatorach, gdzie przewodowe połączenie USB gwarantuje najniższe opóźnienia i eliminuje konieczność parowania urządzenia. Co więcej, dzięki zachowaniu tej samej konstrukcji mechanicznej użytkownik może wybrać wariant najlepiej dopasowany do własnych zastosowań - bezprzewodowy oparty na Atom Lite lub przewodowy USB z wykorzystaniem Atom S3. Dlaczego Bluetooth zamiast USB? Większość amatorskich ButtonBoxów działa jako urządzenia HID podłączane przewodem USB. Tutaj zdecydowano się na Bluetooth Low Energy z kilku powodów. urządzenie można połączyć z telefonem, tabletem lub komputerem bez dodatkowych przewodów BLE pozwala bardzo łatwo integrować urządzenie z własnymi aplikacjami bez konieczności implementowania sterowników HID, a zarazem nie koliduje z klawiaturą prosty tekstowy protokół znacznie ułatwia debugowanie. Do sprawdzenia działania wystarczy dowolna aplikacja obsługująca Bluetooth Low Energy Podsumowanie Ten projekt pokazuje, że stworzenie własnego kontrolera nie musi oznaczać projektowania elektroniki od podstaw. Dzięki wykorzystaniu gotowych modułów, drukowanej obudowy i kilku przewodów można w krótkim czasie zbudować estetyczne i funkcjonalne urządzenie, które sprawdzi się zarówno podczas codziennej pracy, jak i w hobbystycznych projektach. Projekt może być gotowym narzędziem do sterowania aplikacjami, ale równie dobrze stanowi punkt wyjścia do budowy bardziej rozbudowanych kontrolerów z dodatkowymi przyciskami, enkoderami czy wyświetlaczami. To dobra propozycja dla osób, które chcą rozpocząć przygodę z modułami M5Stack i jednocześnie stworzyć coś praktycznego.
  2. Wstęp Ten artykuł jest dedykowany dla osób, które nie są zaznajomione z ekosystemem M5Stack i chcą się dowiedzieć nieco więcej o modułach głównych należących do tego ekosystemu. Artykuł powstał we współpracy z firmą Botland. Moduł M5StickC Plus2 Czym jest M5Stack? Ekosystem M5Stack to zestaw modułowych płytek i akcesoriów elektronicznych, które pozwalają bardzo szybko budować urządzenia z mikrokontrolerem. W praktyce jest to coś pomiędzy zestawem edukacyjnym a gotową platformą do prototypowania. Najczęściej bazuje na układzie ESP32, czyli popularnym mikrokontrolerze z WiFi i Bluetooth. Arduino Nesso - moduł typu Stick z wbudowaną komunikacją LoRa (produkowany przez M5Stack dla Arduino) Idea jest prosta. Zamiast budować układ od zera na płytce stykowej, bierzesz gotowy moduł i łączysz go z innymi elementami jak klocki. W samym ekosystemie występują moduły główne oraz unity (jednostki), które dodają nowe funkcje do modułu głównego. Dzięki temu prototypowanie staje się szybkie i przyjemne, a elektronik nie gubi się w gąszczu przewodów. Z tego ekosystemu dość często korzystają również firmy, które tworzą tzw. MVP (minimalny produkt), w celu wykonania testów rynkowych. Serie modułów M5Stack Moduły M5Stack (na moment pisania artykułu) dzielą się na 4 główne serii: M5Stack Atom, M5Stack Core, M5Stack Stamp oraz M5Stack Stick. Każda z nich ma swoje zalety i ograniczenia, a tym samym konkretne zastosowania. Seria Atom jest przystosowana głównie do zastosowań IoT i często przychodzi z wgranym odpowiednim Firmware (np. Atom Echo jest dostarczany z wgranym asystentem głosowym kompatybilnym z HomeAssistant. Są to względnie małe moduły (24x24mm), które pasują idealnie do wszelkich miniaturowych rozwiązań IoT. Na szczególną uwagę zasługują moduły Echo posiadające wbudowany głośnik, a więc będące idealnymi do wielu rozwiązań z powiadomieniami dźwiękowymi. Przykładowe moduły Atom Seria Core to produkt flagowy firmy M5Stack, który służy głównie do projektowania urządzeń. Zazwyczaj są to moduły pełne najróżniejszych peryferiów od akcelerometru przez mikrofon aż po ekran dotykowy. Najczęściej jest wykorzystywana przez osoby, które chcą się nauczyć elektroniki. Moduł CoreS3 SE Seria Stick to kolejny dość interesujący produkt, który charakteryzuje się dość sporą ilością peryferiów, ale za to dużo mniejszym rozmiarem. Są to produkty, które posiadają wbudowany akumulator, a więc sprawdzają się idealnie w rozwiązaniach przenośnych. Przykładowe moduły z serii Stick Seria Stamp jest zaś interesująca dla miłośników pająków. Posiada ona łatwo dostępne pady i minimum peryferiów, a więc pozwala w bardzo prosty sposób protoypować urządzenia na tzw. "pająka". Jest to najlepsza seria dla osób chcących zbudować funkcjonalne urządzenie w produkcji jednostkowej (czyli większości hobbystów DiY). Moduł Stamp ESP32S3 Dostępne sposoby programowania Oprócz tego, że moduły M5Stack są dość praktyczne w obsłudze to jeszcze możemy korzystać z oprogramowania UIFlow2, systemu bloczkowego programowania, który często upraszcza tworzenie projektu. Wprawdzie w dobie AI jest on dość uciążliwy (względem kodu), aczkolwiek jest to dobry sposób, by zachęcić dzieci do nauki elektroniki i programowania. Interfejs M5Stack UIFlow2 Na co zwrócić uwagę podczas doboru modułu? Podczas doboru modułu głównego zwróć przede wszystkim uwagę na: dostępne peryferia - często nieznacznie droższy moduł główny może oszczędzić zakupu np. dodatkowego akcelerometru wbudowany procesor - szczególnie jeżeli chcesz używać USB, gdyż np. Atom Echo USB nie wspiera, a Atom EchoS3R już tak rodzaje wyjść na peryferia - część peryferiów jest łatwiej dostępna w wersji Hat, a część w wersji Unit; są to różne metody podłączeń, które nie są dostępne we wszystkich modułach ilość wyjść na peryferia (lub padów) - o ile można używać ekspanderów, tak znacznie lepiej jeżeli mamy te złącza wyprowadzone bezpośrednio z procesora Przykładowe projekty Jeszcze nie jesteś pewien czy warto korzystać z ekosystemu M5Stack? Obejrzyj kilka przykładowych projektów: Wewnętrzna stacja klimatyczna Podlewaczka roślin w stylu minimalistycznym Zabawy z autoryzacją - RFID vs odcisk palca
  3. W tym artykule, mała dygresja o podlewaniu roślinek. Jako, że kiedyś udało mi się zasuszyć kaktusa oraz to, że dzięki współpracy z Botlandem miałem moduł podlewania roślin to postanowiłem zbudować minimalistyczny moduł do podlewania mojej papryczki habanero (ma działać i nie kłuć w oczy). Moduł podlewania - cover dla ładnego wyglądu na głównej Elektronika i mechanika Wybór padł na wyżej wymieniony moduł podlewania roślin oraz na M5 Atom S3R, który nadaje się idealnie ze względu na wbudowany LCD, dzięki czemu łatwo zauważymy czy moduł jest zasilany oraz jaki jest obecnie status rośliny. Myślałem o dołożeniu akumulatorka, aczkolwiek pobór prądu pompy szybko by go zużywał (albo byłby zbyt duży), więc postanowiłem go pominąć i zasilać urządzenie ze złącza USB-C. Niestety M5 Atom nie posiada otworów montażowych i trzeba było zaprojektować i wdrożyć obudowę, do której zostanie zamocowany, a która te otwory doda (by móc go przykręcić bezpośrednio do modułu podlewającego). Model został zaprojektowan w Fusion360 i był stworzony na podstawie rysunków producenta. Krawędzie zostały zaokrąglone (lub ścięte), by przypadkiem nie rozciąć sobie palca (można się zdziwić jak ostry potrafi być plastik z drukarki 3D). STL.zip Obudowa dla M5 ATOM Oprogramowanie - wstępne przygotowania Na starcie trzeba było wykorzystać M5Burner, by wgrać firmware UIFlow2 na płytkę. Standardowo zapomniałem tego zrobić na początku, więc dla zapominalskich przypominam: bez tego UIFlow nie wgra oprogramowania O wgrywaniu rozpisywałem się już w tym wątku, a nie lubię się powtarzać. Mając LCD stwierdziłem, że dobrym pomysłem będzie wyświetlanie emotek na ekranie. Niestety wszystkie, które znajdowałem w sieci były na płatnych serwisach z plikami graficznymi, a płacić nie zamierzałem. Poszedłem więc do starego zaufanego przyjaciela zwanego ChatGPT i poprosiłem go o wygenerowanie buziek. Rezultat poniżej. Emoji wygenerowane przez ChatGPT Wygląd był w sam raz, a więc teraz wystarczyło to pociąć. W ruch poszła ciężka artyleria: Paint3D (ze względu na bardzo dobre zaznaczanie magiczne) oraz Affinity Designer 2. Obróbka obrazu przy użyciu Paint3D oraz Affinity Designer 2 Obróbka była prosta: zaznaczyć magicznie każdą buźkę z osobna i przerobić ją na osobny element (dzieje się to automatycznie po wykonaniu zaznaczenia magicznego). Potem skopiować element to Affinity Designer 2, którego kanwa jest odrobinę większa niż rozmiar elementu (do sprawdzenia użyłem zwykłego Painta, w którym zmniejszyłem kanwę do minimalnych rozmiarów i wkleiłem obrazek; zwykły Paint zawsze skaluje kanwę do rozmiaru obrazka, a wartość wyświetlana jest na dole). W Affinity Designer 2 wystarczyło ustawić anchor point nad środku obrazka, przenieść go na środek (połowa szerokości i wysokości kanwy) i wyeksportować do PNG/JPG. Dla leniwych gotowiec: Emoji.zip (wersja przezroczysta i z czarnym tłem). Oryginalnie chciałem użyć wersji przezroczystej, ale okazało się, że M5 nie czyści ekranu i pojawiały się paski. Dlatego do emoji zostało dodane czarne tło, które gwarantuje prawidłowe wyświetlanie obrazków. Oprogramowanie - ustawienie UIFlow2 oraz ekran Następnym etapem było przygotowanie oprogramowania w UIFlow2. Do tego celu założyłem nowy projekt na bazie ATOM S3R oraz dodałem moduł Watering Unit z menu po lewej stronie. Wybór modułu Watering Unit w UIFlow2 Kolejnym etapem było dodanie obrazków oraz kanwy obrazu na ekranie. W tym celu z paska po lewej stronie wybrałem "Image" oraz ustawiłem jego rozmiar tak, by pokrywał cały ekran. Obrazki (pliki graficzne) wgrywamy mając zaznaczoną kanwę obrazu i klikając przycisk zaznaczony na czerwono. Wgrany obrazek umieszczony na kanwie Należy też pamiętać, by podczas wgrywania zsynchronizować pliki z modułem, gdyż w innym przypadku program może nie działać poprawnie. Zapytanie o synchronizację plików (naciśnij SYNC, o ile pliki nie są już wgrane) Oprogramowanie - kod programu Kod programu w bloczkach Ostatnim elementem było stworzenie programu. Uprościłem go dzieląc go na dwie funkcje - jedna analizuje dane odczytane z czujnika, a druga zarządza pompą i obrazkiem na wyświetlaczu, ale od początku... Na starcie program inicjuje wszystko co potrzebne - mikrokontroler i moduł Unit. W następnym kroku obracamy ekran o 180 stopni, gdyż w normalnym ułożeniu spód ekranu jest od strony portu USB, a w zaprojektowanej obudowie port jest umieszczony od góry. Po tym inicjowane są dwie zmienne (właściwie to stałe, ale UIFlow ich nie rozróżnia, gdyż używa microPythona), które definiują histerezę pracy systemu. Należy dobrać je eksperymentalnie korzystając z tego, iż pętla programu po odczytaniu danych z czujnika wyświetla je na porcie szeregowym. Gdy czujnik jest suchy (dla pewności można go przetrzeć szmatką) uzyskujemy wartość dla suchego podłoża, a umieszczając czujnik w szklance z wodą otrzymujemy wartość dla 100% wilgotności. Od tych wartości bierzemy poprawkę na niedokładności pomiarowe i wpisujemy wartości do zmiennych. Opór czujnika maleje wraz ze wzrostem wilgotności, gdy pętla dotrze do funkcji analizującej wartość z czujnika weryfikujemy czy czujnik jest suchy (wartość ADC przekracza wartość graniczną dla suchego podłoża). Jeżeli tak to przypisujemy wartość 0 (czujnik suchy) do zmiennej. W innym przypadku porównujemy wartość ADC z wartością dla stanu mokrego. Jeżeli jest większa to zmieniamy wartość na 1 (czujnik mokry), a jak mniejsza to 2 (podłoże nasycone). Warto zauważyć, że wygląda to nielogicznie, ale jest jak najbardziej poprawne (nasycone podłoże ma większą wilgotność, a więc mniejszą wartość ADC niż podłoże mokre). Po zwróceniu wartości przypisujemy ją do zmiennej i uruchamiamy pętlę kontrolującą układ. Jeżeli wartość nie zmieniła się od ostatniego czasu to pomijamy cały kod (w innym przypadku obrazek może migotać lub wyświetlać się w formie skanowania). Gdy wartość uległa zmianie to aktualizujemy ją do nowej wartości i wchodzimy w analizę tej wartości względem stanu, na który się zmieniła. Gdy nowa wartość wynosi 0 (stan suchy) to aktywujemy pompę i wyświetlamy smutną buźkę. Gdy przejdziemy na 1 (stan mokry) to zmieniamy buźkę na uśmiechniętą i dezaktywujemy pompę (można usunąć dla roślin, które lubią bardzo wilgotne podłoże). W przypadku wartości 2 (stan nasycony) wyłączamy pompę i wyświetlamy szeroko uśmiechiętą buźkę. I wracamy do pętli (funkcja się kończy). Rezultat - działający układ podlewania rośliny i moja bardzo niezadowolona papryka, która pije więcej wody niż student kawy; Oryginał był prześwietlony, więc ChatGPT poprawił kolory, co by w oczy nie raziło. Wpis powstał we współpracy ze sklepem Botland, który jest dystrybutorem rozwiązań M5Stack.
  4. Wstęp Jako, że ostatnio dość często rozliczam się korzystając z arkuszy kalkulacyjnych (i to dość dokładnie) postanowiłem spróbować zaprojektować urządzenie, które pozwoli w szybki sposób wpisać datę i godzinę do odpowiednich pól. Wygląd urządzenia Artykuł powstał we współpracy z firmą Botland. Założenia i próba z UIFlow Urządzenie miało być akceptowalnie małe rozmiarowo i działać jako klawiatura USB. W celu minimalizacji czasu montażu postanowiłem użyć systemu M5Stack. Pierwszy wybór padł na Atom Echo oraz moduł przycisku. Rozpocząłem projekt aplikacji w UI Flow 2 i okazało się, że moduł Echo nie wspiera USB Device (nie można go użyć jako klawiatury). Trochę mnie to zdenerwowało, ale od czego jest partner, który dostarczył moduł Echo S3R, który taką funkcję już (teoretycznie) posiada. Program UIFlow2 Teoretycznie, bo gdy skończyłem projekt (i w przysłowiowym międzyczasie wydrukowałem obudowę) wyskoczyła kolejna niespodzianka: UIFlow2 nie wspiera klawiatury dla modułów Echo (mimo, że pojawia się ona na liście bloczków). MicroPython wyrzuca brak modułu USB. Teoretycznie można bawić się w kopilowanie własnego zestawu ustawień, ale to droga dla zapaleńców, a ja wolę prostotę. Padło więc na zmianę środowiska na stare zaufane PlatformIO z frameworkiem Arduino. Wersja, która nareszcie działa Po szybkim kodowaniu z pomocą Google Gemini (Claude akurat miał przerwę w działaniu) stworzyłem w pełni funkcjonalną aplikację. #ifndef CONFIG_H #define CONFIG_H // Ustawienia WiFi #define WIFI_SSID "SSID" #define WIFI_PASSWORD "PASSWD" // Ustawienia NTP #define NTP_SERVER "pool.ntp.org" #define GMT_OFFSET_SEC 0 // Obsolete #define DAYLIGHT_OFFSET_SEC 0 // Obsolete #define TZ_INFO "CET-1CEST,M3.5.0,M10.5.0/3" // Strefa czasowa // Format daty i czasu (zgodny ze strftime) // Użyj tych definicji, aby dostosować wysyłany tekst klawiatury #define DATE_FORMAT "%d/%m/%Y" // DD/MM/YYYY #define TIME_FORMAT "%H:%M" // HH:MM #define FULL_FORMAT "%Y-%m-%d %H:%M:%S" // Opcjonalny alternatywny format // Przypisanie pinów dla zewnętrznego modułu przycisku (Port A) // W Atom Echo S3R Port A: G1 (SDA) oraz G2 (SCL) // Zazwyczaj moduły przycisków od M5 używają żółtego przewodu (G1) #define EXTERNAL_BUTTON_PIN 1 #endif Powyżej plik konfiguracyjny #include <M5Unified.h> #include <WiFi.h> #include "config.h" #include "time.h" #include "USB.h" #include "USBHIDKeyboard.h" USBHIDKeyboard Keyboard; // Stałe czasowe constexpr unsigned long DEBOUNCE_MS = 250; unsigned long lastPressTime = 0; // Funkcja zwracająca sformatowany ciąg czasu String getFormattedTime(const char* format) { tm timeInfo; if (!getLocalTime(&timeInfo)) { return "NTP_ERR"; } char buffer[32]; strftime(buffer, sizeof(buffer), format, &timeInfo); return String(buffer); } void setup() { const auto cfg = M5.config(); M5.begin(cfg); // Połączenie z WiFi WiFi.begin(WIFI_SSID, WIFI_PASSWORD); while (WiFi.status() != WL_CONNECTED) { // To opóźnienie pozwala poczekać aż ESP znajdzie sieć WiFi (czasem to chwilę zajmuje) delay(500); } // Inicjalizacja NTP configTime(GMT_OFFSET_SEC, DAYLIGHT_OFFSET_SEC, NTP_SERVER); setenv("TZ", TZ_INFO, 1); tzset(); // Inicjalizacja pinu zewnętrznego przycisku pinMode(EXTERNAL_BUTTON_PIN, INPUT_PULLUP); // Inicjalizacja klawiatury USB HID USB.begin(); Keyboard.begin(); } void loop() { M5.update(); const unsigned long currentMillis = millis(); // 1. Wbudowany przycisk (Data) // M5.BtnA.wasPressed() obsługuje już wewnętrzne usuwanie drgań styków if (M5.BtnA.wasPressed()) { if (currentMillis - lastPressTime >= DEBOUNCE_MS) { const String dateStr = getFormattedTime(DATE_FORMAT); Keyboard.print(dateStr); lastPressTime = currentMillis; } } // 2. Zewnętrzny moduł przycisku (Czas) static bool lastExtState = HIGH; const bool currentExtState = digitalRead(EXTERNAL_BUTTON_PIN); // Wykrycie zbocza opadającego (stan aktywny niski) if (currentExtState == LOW && lastExtState == HIGH) { if (currentMillis - lastPressTime >= DEBOUNCE_MS) { const String timeStr = getFormattedTime(TIME_FORMAT); Keyboard.print(timeStr); lastPressTime = currentMillis; } } lastExtState = currentExtState; } Oraz sam kod programu, który inicjuje peryferia i WiFi, konfiguruje NTP (serwer do pobierania czasu), a w pętli oczekuje na wciśnięcie przycisku i tworzy "debouncing", który w rzeczywistości pozwala na łatwą reakcję na kliknięcie. Teoretycznie mogłem użyć wbudowanego systemu do obsługi kliknięc, ale zdarzało mu się podwójnie wykryć niektóre kliknięcia. Urządzenie dzięki wbudowanemu głośnikowi można również rozbudować o sygnał dźwiękowy odtwarzany po naciśnięciu dowolnego z przycisków. Dla ułatwienia również konfiguracja PlatformIO: [env:m5stack-atoms3r] platform = [email protected] board = esp32-s3-devkitc-1 framework = arduino board_build.arduino.memory_type = qio_opi build_flags = -DESP32S3 -DBOARD_HAS_PSRAM -mfix-esp32-psram-cache-issue -DCORE_DEBUG_LEVEL=5 -DARDUINO_USB_CDC_ON_BOOT=1 -DARDUINO_USB_MODE=1 lib_deps = m5stack/M5Unified @ ^0.1.12 Obudowa Obudowa została wykonana w pełni na drukarce 3D. Przyciski zostały rozdzielone na dwie części składane za pomocą imadła / prasy (taka technika pozwala na uniknięcie drukowania podpór). Dodatkowo za pomocą pracy, w odpowiednich wycięciach, są mocowane symbole D oraz H wydrukowane w innym kolorze. Użyty materiał to Fiberlogy Easy PETG (black oraz blue). Wszystkie elementy (włącznie z przewodem USB A do USB-C) zostały zamocowane wewnątrz obudowy. Moduł przycisku został przymocowany śrubami M4x12, a moduł Echo jest dociskany przez spodnią klapkę. Jedyna wada tej konstrukcji to możliwość rozłączenia przewodu USB (krótkotrwała) ze względu na dość słabą jakość gniazd USB-C w modułach Atom. Obudowa została zamknięta klapką mocowaną na 4 śruby M3x12. Pliki 3D - DateTime Keyboard.zip Prawidłowo złożony przycisk Wnętrze obudowy Filmik z działania
  5. Wstęp Pozyskałem ostatnio mały zestaw do zapoznania się z ekosystemem M5 Stack (dwa moduły główne i kilka rozszerzeń) - znalazły się w nim między innymi M5Atom Echo oraz Ultrasonic-IO Unit, które wykorzystałem do testowania koncepcji alarmu, który pilnuje odległości mojej głowy od monitora. Wpis powstał we współpracy ze sklepem Botland, który jest dystrybutorem rozwiązań M5Stack. Łączenie modułów M5 Stack to czysta przyjemność Założenia Do celów testowych założyłem koncepcję: alarm działa na zasadzie pikacza w samochodzie, różni się tylko zakresem reakcji i mnożnikiem czasu między piknięciami. W projekcie wykorzystany został moduł główny M5 z wbudowanym głośnikiem oraz moduł czujnika ultradźwiękowego (przewód był w zestawie). Niestety moduły M5 Stack nie zawierają w komplecie przewodu USB-C, więc trzeba się w niego zaopatrzyć samemu. Wgrywanie oprogramowania Autorzy dostarczają oprogramowanie M5Burner, którego używamy do wgrywania wsadów na naszą kostkę. Oryginalnie Echo przychodzi z wgranym ESP32 Home Assistant, ale do naszych potrzeb wykorzystamy UIFlow2. Tutaj napotkałem dwa problemy - pierwszy (trochę wymyślony) to konieczność założenia konta, zalogowania się i przypisania urządzenia do konta... Ale to da się strawić. Drugi to straszny bałagan w liście oprogramowaniem, gdy wyszukamy UIFlow2 nie ma jednej opcji tylko są osobne wpisy dla każdego rodzaju płytki... Strasznie to nieintuicyjne, ale jak ktoś nie jest tak szybki jak ja i wybierze płytkę przed próbą wgrania niewłaściwego oprogramowania (przed tym nie ma żadnego zabezpieczenia) to raczej nie będzie miał problemów Interfejs M5 Burner Samo wgrywanie oprogramowania jest jednak dość proste - wystarczy skonfigurować kilka opcji (w tym WiFi, by móc wgrywać oprogramowanie przez OTA) czy serwery NTP (opcjonalnie) po czym użyć "Burn", przytrzymać przycisk resetu urządzenia aż mignie dioda i wybrać port pod, który podłączone jest urządzenie. Zatwierdzamy, czekamy i gotowe Wgrywanie oprogramowania na M5 Stack UI Flow2 Jak to przystało na bałaganiarzy część płytek jest kompatybilna z UIFlow, a część z UIFlow2... Na szczęście Echo jest kompatybilne z tym drugim, więc nie ma aż tak dużego problemu, aczkolwiek warto mieć to na uwadze podczas zakupów. Sama aplikacja jest przeglądarkowa, co mnie mocno zirytowało... Bo musiałem używać Chrome, gdyż Firefox nie wspiera portów szeregowych (a przynajmniej nie na moich ustawieniach bezpieczeństwa). W sumie miałem go zainstalowanego głównie z tego powodu, że lis z BLE też ma na pieńku. Dlaczego potrzebny był port szeregowy? Głównie do podglądu błędów (UIFlow2 korzysta z MicroPythona) oraz do wgrywania oprogramowania. Niestety nie wiem czy to wina mojego WiFi, które czasem ma problemy z transmisją czy jakiś problem po stronie M5, ale wgrywanie poprzez chmurę (Cloud) nie zawsze się sprawdzało. Na szczęście to alternatywne rozwiązanie istnieje. UIFlow2 jest narzędziem dla osób, które mają na bakier i z elektroniką (bo takie osoby zazwyczaj kupują produkty tytułowej firmy) i z programowaniem - jest to budowanie oprogramowania za pomocą bloczków, a prawie każdy szanujący się programista (w tym ja) woli kod, bo nie dość, że można zrobić to szybciej to jeszcze można go zoptymalizować. Coś czuję, że UIFlow2 w życiu nie da rady "uciągnąć" firmware od mojego programatora pilotów. Programowanie bloczkowe Kilka krótkich przeciągnięć myszką i kliknięć w klawiaturę i program był gotowy. Gotowy program detekcji odległości Nie będę ukrywał, miałem styczność z wieloma rodzajami programowania bloczkowego (czy to node-y czy puzzle), ale aplikacja od M5... działa całkiem dobrze. Jeżeli ktoś nie jest programistą (w sumie nawet jeżeli jest) to rozwiązanie całkiem dobrze sprawdzi się w szybkim testowaniu koncepcji. Sam program był prosty w napisaniu - zainicjować używane podzespoły, odczytać odległość, sprawdzić czy jest w zakresie (moduł Ultrasonic-IO wykrywa odległości od 20 do 4500mm) oraz odtworzyć piknięcie za pomocą wbudowanego głośnika (2kHz przez 50ms), po czym odczekać chwilę w zależności od wykrytej odległości (im bliżej tym krócej czekamy). Liczba 450mm została wybrana "na oko" i działa całkiem dobrze. Teraz chcąc dokończyć projekt wystarczy zaprojektować jakiś system montażu na górze monitora, ale to już temat na jakiś wolny weekend. Podsumowanie W mojej skromnej opinii moduły M5 są bardzo dobre do prototypowania (w szczególności, że można ich też używać w Arduino IDE i PlatformIO i nie trzeba szukać pinoutu, gdyż wszystko jest oznaczone na tyle kostki). Takie moduły (jak producent wspomina) najlepiej sprawdzą się w rękach początkujących, którzy nie chcą mieć problemów z uciążliwymi płytkami stykowymi. Również małe firmy szybciej poskładają produkt z gotowych modułów i zamkną go w obudowie niż będą męczyć się z projektowaniem autorskiej płytki drukowanej, testowaniem i całym arsenałem testów. Przy 5-10 produktach sprzedanych w ciągu miesiąca nie ma sensu się przemęczać. Kończąc ten przydługi wywód - jeżeli chcesz nauczyć się elektroniki lub zbudować MVP produktowe możesz śmiało korzystać z modułów M5 Stack.
  6. - poniżej interfejs do odczytu parametrów stacji Xiaomi z odczytem wilgotności i temperatury oraz stanu baterii zasilającej. - stacja Xiaomi pracuje na BLE 4.0, z M5Stack Core 0 zapewnia zasięg około 8 - 10 metrów. - w M5Stack wbudowano screen capture oraz shutdown. - aby korzystać z czujników, należy adres MAC jednego z czujników wpisać do linii [516] programu i skompilować cały projekt. - załączono także pliki binarne oraz adres programu do wgrywania do flasha esp32. Xiaomi_M5Stack_core_4.zip
  7. - za ciepło na budowę skomplikowanych projektów. - Rozbudowa interfejsu OBDII do eNiro MY2020 bazującego na M5Stack-core o możliwość nagrywania ekranu LCD na kartę SD podczas jazdy to w sam raz. - Program Screen-Capture używałem już wcześniej dla zrzutów ekranu w samochodzie Gullietta na tym samym interfejsie BT. - Program autora screen-capture można znależć pod tym linkiem https://github.com/electricidea/M5Stack-Screen-Capture. - interfejs OBDII bazuje na Vgate iCAR Pro BT 4.0. - poniżej kilka zrzutów z uruchomienia na stole.
×
×
  • Utwórz nowe...