簡體   English   中英

在跨平台的 Windows/Android Kivy 應用程序中使用 BLE?

[英]Use BLE in a cross-platform Windows/Android Kivy app?

我正在使用 Kivy(針對 Windows 和 Android 目標)開發跨平台應用程序,我需要使用低功耗藍牙(與 ESP32 BLE 服務器通信)。 我嘗試使用 Bleak 來處理 BLE 連接,但導入 Bleak 模塊使我的應用程序崩潰。 我使用threading.Thread來拆分 BLE 和 Kivy 應用程序,但我仍然遇到問題,因為我必須在我的主 python 文件中同時導入 Kivy 和 Bleak 模塊。

我的主要應用程序:

# coding: UTF-8
#!/usr/bin/python3
import threading
import asyncio
import time
from queue import Queue
from interface_kivy import MainApp # Python file with the Kivy import
from ble_kivy import ble_kivy_interface # Python file with the Bleak import

async def main():
    kivy_thread = threading.Thread(group=None, target=MainApp().run(), name='Service kivy IHM')
    kivy_thread.daemon = True
    kivy_thread.start()
    
    my_queue = MainApp().getIHMqueue()
    print(f"{my_queue}")
    kivy_thread.join()
        

loop = asyncio.get_event_loop()
loop.run_until_complete(main())

當輸出from ble_kivy import ble_kivy_interface評論:

[INFO   ] [Logger      ] Record log in C:\Users\Fabien\.kivy\logs\kivy_21-06-24_42.txt
[INFO   ] [deps        ] Successfully imported "kivy_deps.angle" 0.3.0
[INFO   ] [deps        ] Successfully imported "kivy_deps.glew" 0.3.0
[INFO   ] [deps        ] Successfully imported "kivy_deps.sdl2" 0.3.1
[INFO   ] [Kivy        ] v2.0.0
[INFO   ] [Kivy        ] Installed at "c:\_dev\venv38\lib\site-packages\kivy\__init__.py"
[INFO   ] [Python      ] v3.8.10 (tags/v3.8.10:3d8993a, May  3 2021, 11:48:03) [MSC v.1928 64 bit (AMD64)]
[INFO   ] [Python      ] Interpreter at "c:\_dev\venv38\Scripts\python.exe"
[INFO   ] [Factory     ] 186 symbols loaded
[INFO   ] [Image       ] Providers: img_tex, img_dds, img_sdl2, img_pil (img_ffpyplayer ignored)
[INFO   ] [Window      ] Provider: sdl2
[INFO   ] [GL          ] Using the "OpenGL" graphics system
[INFO   ] [GL          ] GLEW initialization succeeded
[INFO   ] [GL          ] Backend used <glew>
[INFO   ] [GL          ] OpenGL version <b'4.6.0 - Build 27.20.100.9565'>
[INFO   ] [GL          ] OpenGL vendor <b'Intel'>
[INFO   ] [GL          ] OpenGL renderer <b'Intel(R) Iris(R) Xe Graphics'>
[INFO   ] [GL          ] OpenGL parsed version: 4, 6
[INFO   ] [GL          ] Shading version <b'4.60 - Build 27.20.100.9565'>
[INFO   ] [GL          ] Texture max size <16384>
[INFO   ] [GL          ] Texture max units <32>
[INFO   ] [Window      ] auto add sdl2 input provider
[INFO   ] [Window      ] virtual keyboard not allowed, single mode, not docked
[INFO   ] [Text        ] Provider: sdl2
[INFO   ] [Base        ] Start application main loop
[INFO   ] [GL          ] NPOT texture support is available
[INFO   ] [Base        ] Leaving application in progress...
<queue.Queue object at 0x000001F800D45430>

注釋from ble_kivy import ble_kivy_interface時的輸出:

[INFO   ] [Logger      ] Record log in C:\Users\Fabien\.kivy\logs\kivy_21-06-24_41.txt
[INFO   ] [deps        ] Successfully imported "kivy_deps.angle" 0.3.0
[INFO   ] [deps        ] Successfully imported "kivy_deps.glew" 0.3.0
[INFO   ] [deps        ] Successfully imported "kivy_deps.sdl2" 0.3.1
[INFO   ] [Kivy        ] v2.0.0
[INFO   ] [Kivy        ] Installed at "c:\_dev\venv38\lib\site-packages\kivy\__init__.py"
[INFO   ] [Python      ] v3.8.10 (tags/v3.8.10:3d8993a, May  3 2021, 11:48:03) [MSC v.1928 64 bit (AMD64)]
[INFO   ] [Python      ] Interpreter at "c:\_dev\venv38\Scripts\python.exe"
[INFO   ] [Factory     ] 186 symbols loaded
[INFO   ] [Image       ] Providers: img_tex, img_dds, img_sdl2, img_pil (img_ffpyplayer ignored)
[CRITICAL] [Window      ] Unable to find any valuable Window provider. Please enable debug logging (e.g. add -d if running from the command line, or change the log level in the config) and re-run your app to identify potential causes
sdl2 - TypeError: __import__() takes at least 1 argument (0 given)
  File "c:\_dev\venv38\lib\site-packages\kivy\core\__init__.py", line 58, in core_select_lib
    mod = __import__(name='{2}.{0}.{1}'.format(

[CRITICAL] [App         ] Unable to get a Window, abort.

我在這里和那里(問題4761766816 )看到人們面臨類似的問題,但這些 github 問題是一年前提出的,我相信事情可能已經改變了。

有辦法解決嗎? 如果沒有,是否有適用於 Win 和 Android 的替代方案,或者我是否必須使用不同的框架?

Bleak ≥ 0.13.0現在正式支持:

  • python-for-android ,Kivy 的 Android 后端。
  • (macOS|iOS|OS X) ≥ 10.11 通過 Apple 的核心藍牙 API。

因此,Bleak 現在正式支持所有值得發推的移動平台上的 Kivy。 示例可以examples/kivy/下的官方 Bleak 存儲庫中找到。

Bleak 目前正式支持 BeeWare(例如 Toga)。 如果您需要在移動設備上的 Python 上使用低功耗藍牙 (BLE),那么您現在只能使用 Kivy。 (當 Bleak 放棄對 BeeWare 的官方支持時,請編輯此答案!)

贊美 Bleak 因為它使不可能的端口成為可能。

我正在嘗試從 Kivy 應用程序連接到 BLE 設備,您設法讓它運行了嗎? 或者……我應該放棄嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM