pswiton Napisano Maj 15, 2023 Udostępnij Napisano Maj 15, 2023 Cześć, Jestem nawy na forum i zupełnie zielony jeśli chodzi o programowanie. Jak w temacie potrzebuję wykonac przycisk na USB, który po naciśnięciu "zgłosi się" w ubuntu 22.04 oraz odtworzy mp3 z folderu Music. Znalazłem podobny projekt w linku poniżej: https://www.pjrc.com/teensy/td_digital.html Podłaczyłem jak poniżej: ale nie wiem jak go przeprogramować by po naciśnieciu przycisku urządzenie zgłosiło na ttyUSB i wyrzuciło komunikat "pishbutton" w Ubuntu i zagrało mp3 z folderu Music. Wyczytałem jeszcze że można to zrobić na adapterze USB/UATR, nie ma dla mnie większego znaczenia, który to będzie adapter ważne by zadziałało, jeśli zrobienie tego na UART bezie łatwiejsze to mogę go dokupić. Proszę o pomoc w przeprogramowaniu i napisaniu kodu pod Ubuntu. Cytuj Link do komentarza Share on other sites More sharing options...
ethanak Maj 16, 2023 Udostępnij Maj 16, 2023 Dwie najprostsze możliwości. Jeśli możesz tak ustawić Ubuntu, że naciśnięcie klawisza "play" na klawiaturze multimedialnej spowoduje pożądaną reakcję reakcję, potrzebujesz płytki która może "udawać" HID (w tym przypadku klawiaturę). Takie najpopularniejsze to Arduino Pro Micro i Raspberry Pico. W przykładach dla obu płytek można znaleźć odpowiedni, wystarczy że płytka zareaguje na wciśnięcie klawisza i i wyśle do komputera sygnał "wciśnmięto PLAY". Zalety: brak konieczności jakichkolwiek dodatkowych aplikacji na Ubuntu. Wady: ograniczenie do tego, co można uzyskać wciskając klawisz na zwykłej klawiaturze z przyciskami multimedialnymi. Druga możliwość to przesłanie informacji przez UART. Potrzebujesz najtańszej płytki wyposażonej w układ UART/USB - może to być wspomniany RPi Pico, Arduino Nano, Wemos D1 Mini - co tańsze. Tutaj wciśnięcie klawisza wysyła jakąś informację na port SERIAL, konieczna jest jednak jakaś prosta aplikacja, która tę informację odbierze i wykona jakieś polecenie. Podobny kod publikowałem niedawno (dwa klawisze, rozróżnienie krótkiego i długiego wciśnięcia): Zalety: możliwość wykonania dowolnego polecenia lub fragmentu kodu Wady: konieczność napisania kawałka kodu i uruchomienie go np. przez systemd na Ubuntu. Jest jeszcze kombinacja (płytka symulująca klawiaturę plus odczyt z evdev na Ubuntu), ale do takich prostych zadań raczej niespecjalnie się nadaje (aplikacja na Ubuntu jest dużo bardziej skomplikowana niż w przypadklu odczytu z seriala). 21 godzin temu, pswiton napisał: Wyczytałem jeszcze że można to zrobić na adapterze USB/UATR To raczej źle wyczytałeś - potrzebne by było coś, co wrzuci jakąś informację na UART (mikrokontroler). 1 Cytuj Link do komentarza Share on other sites More sharing options...
pswiton Maj 16, 2023 Autor tematu Udostępnij Maj 16, 2023 Dzięki za odpowiedź. Wczoraj kupiłem RPi Pico, jak przyjedzie, polutuje i będe siedział dalej nad kodem. Jest to tylko i wyłącznie DEMO, i już później profesjonalni programiści zdecydują co zrobią z informacją z RPi Pico pod Ubuntu. Jak narazie udało mi sie napisać kawałek kodu pod RPi Pico: import machine import utime button = machine.Pin(15, machine.Pin.IN, machine.Pin.PULL_DOWN) while True: if button.value() == True: print('button_pressed') utime.sleep(60) A dla Ubuntu: # play sound with pygame import pygame #file setup path = "/home/patw/music/" sound_files = ["1.mp3", "2.mp3"] # pygame setup pygame.mixeer.init() speaker_volume = 1 # 100% volume pygame.mixer.music.set_volume(speaker_volume) for sound_file in sound_files: pygame.mixer.music.load(path + sound file) pygame.mixer.music.play() while pygame.mixer.music.get_busy() == True: continue Brakuje mi jeszcze kodu by po nacisnięciu przycisku ubuntu "wyłapał" wiadomość 'button_pressed' i wykonał sound_demo.py. No chyba że kody powyżej są źle napisane. Nie wiem z jakiego powodu nie wyświetla mi się kod z Twojego postu. Cytuj Link do komentarza Share on other sites More sharing options...
ethanak Maj 16, 2023 Udostępnij Maj 16, 2023 36 minut temu, pswiton napisał: Nie wiem z jakiego powodu nie wyświetla mi się kod z Twojego postu. Bo jest w załączniku w zipie? 36 minut temu, pswiton napisał: Brakuje mi jeszcze kodu by po nacisnięciu przycisku ubuntu "wyłapał" wiadomość 'button_pressed' i wykonał sound_demo.py 37 minut temu, pswiton napisał: później profesjonalni programiści zdecydują co zrobią z informacją z RPi Pico pod Ubuntu. I przy tym bym został - bo to wcale nie jest takie oczywiste i proste jak się wydaje. PulseAudio ma jednak pewne wymagania jeśli chodzi o źródło dźwięku, a uruchamianie apki z pygame przez demona to coś, co raczej niekoniecznie będzie działać. Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
ethanak Maj 16, 2023 Udostępnij Maj 16, 2023 43 minuty temu, pswiton napisał: No chyba że kody powyżej są źle napisane. Owszem, niespecjalnie dobrze. Program na Pico ma reagować na wciśnięcie klawisza (zmianę stanu) a nie bombardować Ubunciaka bez przerwy komunikatami dopóki klawisz jest wciśnięty. Łap sznurek: https://docs.micropython.org/en/latest/pyboard/tutorial/debounce.html Cytuj Link do komentarza Share on other sites More sharing options...
ethanak Maj 16, 2023 Udostępnij Maj 16, 2023 Tak w chwili wolnego czasu: Kod dla RPI Pico: #include <stdio.h> #include "pico/stdlib.h" #define KEY_PIN 15 int main() { uint8_t last_status; stdio_init_all(); gpio_set_function(KEY_PIN, GPIO_FUNC_SIO); gpio_set_dir(KEY_PIN, 0); gpio_set_pulls(KEY_PIN, 1, 0); last_status=gpio_get(KEY_PIN); for (;;) { uint8_t current_status = gpio_get(KEY_PIN); if (current_status != last_status) { last_status = current_status; printf("#%s\r\n", last_status ? "up": "down"); busy_wait_us_32(100 * 1000); } } return 0; } I skompilowany do wgrania na Pico: onekey.zip Przycisk do pinu 15 i do GND. Wgraj, podepnij jakiś monitor seriala (np. gtkterm), ustaw port na /dev/ttyACM0 115200 i zobacz co się będzie działo jak naciśniesz przycisk. Czasem może być ACM1 zamiast ACM0, 2 Cytuj Link do komentarza Share on other sites More sharing options...
pswiton Maj 17, 2023 Autor tematu Udostępnij Maj 17, 2023 Dzięki wielkie, jutro ma przyjść RPI Pico, podlutuję wgram i sprawdzę jak działa. Cytuj Link do komentarza Share on other sites More sharing options...
pswiton Maj 19, 2023 Autor tematu Udostępnij Maj 19, 2023 RPI Pico przyjechał dopiero dziś rano, wszystko podlutowane i podłaczone - działa jak lależy, wielkie dzięki. Jak teraz "odebrać" "up" i uruchomić tym poleceniem odtworzenie mp3? Cytuj Link do komentarza Share on other sites More sharing options...
ethanak Maj 19, 2023 Udostępnij Maj 19, 2023 A tej części nie mieli zrobić programiści od Ubuntu? Bo samo odebranie jest stosunkowo proste, ale odegranie czegokolwiek zależy od sposobu uruchomienia tego "odbieracza", w niektórych przypadkach konieczne może być przekonfigurowanie pulseaudio. Ja tu nie bardzo mogę pomóc, bo mam bardzo mocno nagmerane w moim Ubuntu, co najwyżej mogę napisać kawałek kodu do odbierania sygnału z klawisza (na jutro, bo dzisiaj już jestem poza domem). Daj znać czy tak może być. Cytuj Link do komentarza Share on other sites More sharing options...
pswiton Maj 19, 2023 Autor tematu Udostępnij Maj 19, 2023 Tak mieli i będa robić. Chcę to zrobić również dla siebie by się trochę podszkolić i miec demo na przyszłość. Aplikacja powinna startować razem z systemem działać w tle cały czas; po naciśnięciu przycisku na RPI Pico powinna uruchomić plik 1.mp3 a następnie plik 2.mp3 z folderu /home/patw/Music. W necie znalazłem coś podobnego może pomoże: https://stackoverflow.com/questions/74238538/using-gpiozero-play-an-mp3-sound-file-whilst-a-button-is-held-and-an-alternative Cytuj Link do komentarza Share on other sites More sharing options...
matsobdev Maj 19, 2023 Udostępnij Maj 19, 2023 Też pytanie czy to odtwarzanie w tle ma być, czy jak. Jest też opcja klawiatury - urządzenia HID, i wtedy skrót klawiszowy można mikrokontrolerem wygenerować, a wtedy Ubuntu może wykonać program (domyślnie może być taka opcja w ustawieniach), skrypt, cokolwiek. Oprócz skryptów sh, Pythona, można też skompilować prosty program w C, a w jego kodzie odpalać wiersze w terminalu poleceniem: system("nazwa_polecenia_czy_programu"); 1 Cytuj Link do komentarza Share on other sites More sharing options...
ethanak Maj 19, 2023 Udostępnij Maj 19, 2023 @matsobdev rozumiem że przejmujesz to ode mnie? Powodzenia. Cytuj Link do komentarza Share on other sites More sharing options...
matsobdev Maj 19, 2023 Udostępnij Maj 19, 2023 (edytowany) @pswiton W ustawieniach Ubuntu możesz przejść do sekcji skróty klawiszowe i przypisać jakiemuś skrótowi akcję: aplay probka_na_przyklad.wav To odtworzy wprost (plik dźwiękowy w katalogu home), oczywiście skrypt da większą możliwość co się zadzieje przed czy po. Jedna z opcji, nie jedyna. No i aplay przynajmniej dla Ubuntu 20.04 jest domyślnie składnikiem systemu, nie trzeba instalować. Jak chcesz się podszkolić, to zawsze masz kolejne rozwiązanie w rękawie, też warto próbować. No i z głowy aplikacja czuwająca w tle, bo sam składnik systemu będzie to robił. Nie wiem jak Python szybko na zimno startuje, ale jeśli byś chciał potrenować, to w C też prostą apkę zrobisz - kompilacja prostym: gcc -o program program.c Zawsze też da się zmienić głośność, np: #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main() { system("amixer set Master 100%"); usleep(100000); system("aplay ton.wav"); return 0; } I to co wyjdzie z kompilacji pod skrót podpinasz jako: ./program Edytowano Maj 19, 2023 przez matsobdev Cytuj Link do komentarza Share on other sites More sharing options...
ethanak Maj 20, 2023 Udostępnij Maj 20, 2023 10 godzin temu, matsobdev napisał: ustawieniach Ubuntu możesz przejść do sekcji skróty klawiszowe i przypisać jakiemuś skrótowi akcję: A to zadziała bez zalogowanego użytkownika? Cytuj Link do komentarza Share on other sites More sharing options...
matsobdev Maj 21, 2023 Udostępnij Maj 21, 2023 (edytowany) @pswiton Można też rozbudować o powiadomienie, jeśli miało być (standardowy popup na belce - dymek): #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main() { system("notify-send 'Powiadomienie'"); system("amixer set Master 100%"); usleep(100000); system("aplay ton.wav"); return 0; } Domyślam się, że można to odtwarzanie/powiadomienia konfigurować. Oczywiście można też podać bezwzględne ścieżki np. do pliku dźwiękowego, czy do tego samego programu, nie musi być w katalogu home. Plus wsad do Pico: pico.zip Zapodaje Ctrl + Shift + F13 jak GP0 dostanie 3V3. Może jeszcze wersja z GND zamiast 3V3, może bezpieczniejsza, bo luzem 3,3 V nie ma i po jednej stronie wystarczy się wlutować/podłączyć: pico_gnd.zip Edytowano Maj 22, 2023 przez matsobdev Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Dołącz do dyskusji, napisz odpowiedź!
Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!