質問:M5stackへのPythonモジュールのインストール方法
-
多分大変初歩的なとこだとは思うのですが、分かる方教えてください。
やりたいこと
wav|mp3を流しながら(バックグラウンド再生しながら)、別の動作(画面遷移|servo動作)させたい
このために、m5stackにpythonの外部モジュールpyaudioをインストールして使いたい環境
windows10/m5stack core2
普段はUIFlowからblocky/micropythonを書いているが、
Teratermとarduino-ideも使用可能やってみたこと①
/flash/res/pyaudio.py を追加して import pyaudio でやってみたが、
pyaudioの依存元portaudioがないため動作しないやってみたこと②
https://stackoverflow.com/questions/48135955/installation-of-pyaudio-on-raspberry-pi-3-fails-with-gcc-error
https://qiita.com/Nyanpy/items/cb4ea8dc4dc01fe56918
https://qiita.com/yukky-k/items/0d18ec22420e8b35d0ac
を参考に、sudo pip install pyaudioでインストールできそうなことは分かったが、
TeratermからUSB接続したm5stackを見ても、micropython(uiflow)として動いており
sudo pip install pyaudioのコマンドが通せない -
ESP32はラズパイのようにLinuxOSはないので、パッケージを入れることはできません。サウンド制御の部分も独自のドライバでUIFlowからは使えるようになっています。
恐らくなのですが、portaudio部分を自分で実装しないとpyaudioは使用できないと考えます。(そのままでは動かすのは不可。)
Pythonで完結するように_threadを使用してサーボ制御と音声の再生を行う方法を模索するしかないでしょう。(UIFlowのMicroPythonでは細かいタスクやスレッドの優先度の制御はできないのでかなり難しいと思います。)
-
TwitterでA_P_Delchiさんという方がMicroPythonでサーボの動作と別の処理をスレッドで実現しています。(WAV/MP3再生はしていません。)
こちらが参考になると思います。 -
情報ありがとうございます!
_threadを使用する方向でも検討してみます。 -
おっしゃる通り、_threadsで渡すようにしたら
バックグラウンド再生しつつサーボ制御できました!from m5stack import * from m5stack_ui import * from uiflow import * import module import time import math import _thread def chika_led(): speaker.playWAV('/sd/head2.wav') def chika_scr(): i = 0 while i < 15 : servo2.position(7,150) wait_ms(100) servo2.position(7,158) wait_ms(100) i = i + 1 screen = M5Screen() screen.clean_screen() screen.set_screen_bg_color(0) servo2 = module.get(module.SERVO2) _thread.start_new_thread(chika_led,()) _thread.start_new_thread(chika_scr,())```