Я пытаюсь настроить простой сервер Raspberry Pi, который отправляет сообщение OSC при нажатии кнопки. Мой план состоял в том, чтобы прочитать GPIO с помощью сценария Python и отправить сообщение OSC в PureData, работающую на том же устройстве.
Проблема, которая меня не дает, заключается в том, что я использую gpiozero (установленный глобально) для доступа к своему GPIO, который, похоже, не работает в виртуальной среде (это приводит меня к ошибке RuntimeError: не удалось добавить обнаружение границ). Но пока я запускаю это без виртуальной среды, все в порядке. Проблема в том, что я не могу импортировать python-osc в свой скрипт Python, не находясь в виртуальной среде.
Есть идеи, как мне выйти из этой лазейки? Может быть, есть другая библиотека, которая лучше подойдет для этой комбинации? Объединение показаний GPIO и обмена сообщениями OSC не кажется таким уж странным.
Я работаю с Raspberry Pi 3B+, использую ОС Trixie и Python 3.
Заранее большое спасибо за любые возможные подсказки!!
Я вставляю сюда свой код:
print("Hello from Raspberry Pi")
from gpiozero import Button, LED
from datetime import datetime
from pathlib import Path
from signal import pause
from pythonosc import udp_client
from pythonosc import dispatcher
from pythonosc import osc_server
import argparse
import threading
# --- GPIO Setup ---
BUTTON_1 = Button(4, pull_up=True, bounce_time=0.05)
BUTTON_2 = Button(5, pull_up=True, bounce_time=0.05)
LED_1 = LED(22)
LED_2 = LED(27)
SAMPLE_RATE = 44100 # standard sample rate
DURATION = 2.0 # example duration in seconds
# Microphone state memory
mic1_state = 0
mic2_state = 0
# --- File Management ---
BASE_DIR = Path(__file__).resolve().parent
DATA_DIR = BASE_DIR / "data"
DATA_DIR.mkdir(exist_ok=True)
def record_audio(prefix):
timestamp = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
filename = f"{prefix}_{timestamp}.wav"
print (f"Recording audio: {filename} ...")
# TODO: add actual audio recording
def toggle_mic_1():
global mic1_state
mic1_state = 1 - mic1_state
print(f"[OSC send] /mic1 {mic1_state}")
client.send_message("/mic1", mic1_state)
record_audio("A")
def toggle_mic_2():
global mic2_state
mic2_state = 1 - mic2_state
print(f"[OSC send] /mic2 {mic2_state}")
client.send_message("/mic2", mic2_state)
record_audio("B")
# --- Button Handlers ---
BUTTON_1.when_pressed = lambda: toggle_mic_1
BUTTON_2.when_pressed = lambda: toggle_mic_2
# --- Incoming OSC Handlers ---
def led1_handler(address, value):
print(f"[OSC recv] {address} {value}")
if value == 1:
LED_1.on()
else:
LED_1.off()
def led2_handler(address, value):
print(f"[OSC recv] {address} {value}")
if value == 1:
LED_2.on()
else:
LED_2.off()
# --- OSC Server Thread ---
def start_osc_listener():
disp = dispatcher.Dispatcher()
disp.map("/led1", led1_handler)
disp.map("/led2", led2_handler)
server = osc_server.ThreadingOSCUDPServer(("0.0.0.0", 8001), disp)
print("Listening for OSC on port 8001...")
server.serve_forever()
if __name__ == "__main__":
# Start OSC listener in a separate thread
parser = argparse.ArgumentParser()
parser.add_argument("--ip", default="127.0.0.1",
help="The ip of the OSC server")
parser.add_argument("--port", type=int, default=8000,
help="The port the OSC server is listening on")
args= parser.parse_args()
client=udp_client.SimpleUDPClient(args.ip, args.port)
# Start callback listener thread
listener_thread = threading.Thread(target=start_osc_listener, daemon=True)
listener_thread.start()
print("Ready. Waiting...")
# --- Keep script alive ---
pause()
Подробнее здесь: https://stackoverflow.com/questions/798 ... spberry-pi
Показания GPIO и пересылка OSC с использованием Python в Raspberry Pi ⇐ Python
Программы на Python
1766949448
Anonymous
Я пытаюсь настроить простой сервер Raspberry Pi, который отправляет сообщение OSC при нажатии кнопки. Мой план состоял в том, чтобы прочитать GPIO с помощью сценария Python и отправить сообщение OSC в PureData, работающую на том же устройстве.
Проблема, которая меня не дает, заключается в том, что я использую gpiozero (установленный глобально) для доступа к своему GPIO, который, похоже, не работает в виртуальной среде (это приводит меня к ошибке RuntimeError: не удалось добавить обнаружение границ). Но пока я запускаю это без виртуальной среды, все в порядке. Проблема в том, что я не могу импортировать python-osc в свой скрипт Python, не находясь в виртуальной среде.
Есть идеи, как мне выйти из этой лазейки? Может быть, есть другая библиотека, которая лучше подойдет для этой комбинации? Объединение показаний GPIO и обмена сообщениями OSC не кажется таким уж странным.
Я работаю с Raspberry Pi 3B+, использую ОС Trixie и Python 3.
Заранее большое спасибо за любые возможные подсказки!!
Я вставляю сюда свой код:
print("Hello from Raspberry Pi")
from gpiozero import Button, LED
from datetime import datetime
from pathlib import Path
from signal import pause
from pythonosc import udp_client
from pythonosc import dispatcher
from pythonosc import osc_server
import argparse
import threading
# --- GPIO Setup ---
BUTTON_1 = Button(4, pull_up=True, bounce_time=0.05)
BUTTON_2 = Button(5, pull_up=True, bounce_time=0.05)
LED_1 = LED(22)
LED_2 = LED(27)
SAMPLE_RATE = 44100 # standard sample rate
DURATION = 2.0 # example duration in seconds
# Microphone state memory
mic1_state = 0
mic2_state = 0
# --- File Management ---
BASE_DIR = Path(__file__).resolve().parent
DATA_DIR = BASE_DIR / "data"
DATA_DIR.mkdir(exist_ok=True)
def record_audio(prefix):
timestamp = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
filename = f"{prefix}_{timestamp}.wav"
print (f"Recording audio: {filename} ...")
# TODO: add actual audio recording
def toggle_mic_1():
global mic1_state
mic1_state = 1 - mic1_state
print(f"[OSC send] /mic1 {mic1_state}")
client.send_message("/mic1", mic1_state)
record_audio("A")
def toggle_mic_2():
global mic2_state
mic2_state = 1 - mic2_state
print(f"[OSC send] /mic2 {mic2_state}")
client.send_message("/mic2", mic2_state)
record_audio("B")
# --- Button Handlers ---
BUTTON_1.when_pressed = lambda: toggle_mic_1
BUTTON_2.when_pressed = lambda: toggle_mic_2
# --- Incoming OSC Handlers ---
def led1_handler(address, value):
print(f"[OSC recv] {address} {value}")
if value == 1:
LED_1.on()
else:
LED_1.off()
def led2_handler(address, value):
print(f"[OSC recv] {address} {value}")
if value == 1:
LED_2.on()
else:
LED_2.off()
# --- OSC Server Thread ---
def start_osc_listener():
disp = dispatcher.Dispatcher()
disp.map("/led1", led1_handler)
disp.map("/led2", led2_handler)
server = osc_server.ThreadingOSCUDPServer(("0.0.0.0", 8001), disp)
print("Listening for OSC on port 8001...")
server.serve_forever()
if __name__ == "__main__":
# Start OSC listener in a separate thread
parser = argparse.ArgumentParser()
parser.add_argument("--ip", default="127.0.0.1",
help="The ip of the OSC server")
parser.add_argument("--port", type=int, default=8000,
help="The port the OSC server is listening on")
args= parser.parse_args()
client=udp_client.SimpleUDPClient(args.ip, args.port)
# Start callback listener thread
listener_thread = threading.Thread(target=start_osc_listener, daemon=True)
listener_thread.start()
print("Ready. Waiting...")
# --- Keep script alive ---
pause()
Подробнее здесь: [url]https://stackoverflow.com/questions/79815870/gpio-readings-and-osc-forwarding-using-python-in-raspberry-pi[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия