[Erledigt]Python + ctyps + WiimoteLib

Python in C/C++ embedden, C-Module, ctypes, Cython, SWIG, SIP etc sind hier richtig.
Antworten
PythonFish
User
Beiträge: 26
Registriert: Mittwoch 17. August 2011, 07:37

Hallo,

ich bin gerade dabei mich in Python und ctypes einzuarbeiten. Leider tu ich mir gerade noch recht schwer und wäre sehr dankbar wenn mir jemand beim Einstieg ein wenig helfen könnte.

Ich würde gerne die WiimoteLib.dll in Python einbinden und verwenden. (http://wiimotelib.codeplex.com/)

Die Lib lade ich mit folgendem Code:

Code: Alles auswählen

from ctypes import CDLL 
print("wiimote example")
wiimoteLib= CDLL("WiimoteLib") 
Nächster Schritt wäre eine Wiimote Objekt zu erzeugen und sich mit Hilfe von diesem mit dem Wii Balance board zu verbinden (Methode connect()).

Im C# Beispiel sieht das so aus:

Code: Alles auswählen

Wiimote wm = new Wiimote();
wm.WiimoteChanged += wm_WiimoteChanged;
wm.WiimoteExtensionChanged += wm_WiimoteExtensionChanged;
wm.Connect();
wm.SetReportType(InputReport.IRAccel, true);
wm.SetLEDs(false, true, true, false);
Mir ist noch nicht ganz klar wie ich nun das Objekt Wiimote in Python erzeugen kann.
Versucht habe ich es so:

Code: Alles auswählen

wiimote = wiimoteLib.Wiimote()
Leider rzeugt dies folgenden Fehler:

Code: Alles auswählen

C:\script>python test1.py
wiimote example
Traceback (most recent call last):
  File "test1.py", line 4, in <module>
    wiimote = wiimoteLib.Wiimote()
  File "C:\Python32\lib\ctypes\__init__.py", line 353, in __getattr__
    func = self.__getitem__(name)
  File "C:\Python32\lib\ctypes\__init__.py", line 358, in __getitem__
    func = self._FuncPtr((name_or_ordinal, self))
AttributeError: function 'Wiimote' not found
Bin über allerlei Hilfsvorschläge dankbar

Edit: erledigt : ich verwende den Python Wrapper von WiiYourself
Zuletzt geändert von PythonFish am Dienstag 6. September 2011, 07:24, insgesamt 1-mal geändert.
deets

ctypes ist fuer C, nicht fuer .NET. Benutz entweder IronPython, oder ein C-Binding fuer die WiiMote.
PythonFish
User
Beiträge: 26
Registriert: Mittwoch 17. August 2011, 07:37

ok ich glaub ich sollte noch mein ziel definieren worum es sich überhaupt handelt:

Ich würde gerne Daten von der WiiMote auslesen und in Blender verwenden. Da Blender 2.58 Python 3.2 verwendet, dachte ich mir ich schau jetzt erstmal das ich es hinbekomme mit Python 3.2 Daten von der Wiimote zu lesen und dies dann danach in Blender verwende.

Wenn ich dich richtig verstanden habe muss ich nach einer anderen Library suchen die nicht auf das .Net Framework aufbaut.
deets

Genau. Sollte es auch geben.
PythonFish
User
Beiträge: 26
Registriert: Mittwoch 17. August 2011, 07:37

Ok habe nun die WiiC-Lib(http://wiic.sourceforge.net/) gefunden und werde mir die mal anschaune und test. Die sollte ja dann geeignet sein für die Verwendung mit ctypes.

edit1: grad gesehen die ist nur für mac/linux ... weitersuchen :)

edit2: Eine c++ Library sollte ja für die Verwendung von ctypes auch kein Problem sein wenn ich das richtig verstanden hab. Dann würde ich heute Abend mal diese hier testen (http://wiiyourself.gl.tter.org/)
deets

Doch, eine C++-Bibliothek ist ein Problem fuer ctypes. Die konkrete Bibliothek scheint aber ein Python-wrapping zu haben, wirst du aber compilieren muessen.
PythonFish
User
Beiträge: 26
Registriert: Mittwoch 17. August 2011, 07:37

Was denkst du ist die sinnvollste Vorgehensweise für einen Python-Anfänger:

a) Wiimote Lib für Python suchen und versuchen die so anzupassen das sie unter Python 3.2 läuft
(alles was ich bisher gefunden hab ist bis max Python 2.6 und verwendet meistens andere Python Libs z.b. für Bluetooth die ebenso veraltet sind)

b) Wiimote Lib für C suchen und versuchen per ctypes zu verwenden

c) Bibliothek suchen mit Python-wrapping

Ich kann mir irgendwie kein Bild machen was da am sinnvollsten/sauber ist.
deets

Alles drei geht, und was davon einfach oder schwer ist haengt in entscheidenden Teilen von deinen Kenntnissen in C/C++ ab, als auch der Verfuegbarkeit von einem Compiler sowie der Qualitaet der Bibliothek.

Unter Umstaenden waere es auch am einfachsten, den WiiMote Teil mit IronPython zum laufen zu bringen, und dann einfach einen kleinen WiiMoteServer zu schreiben, gegen den sich dein Python3.2 in Blender einfach sich damit verbindet + die Daten abgreift.
BlackJack

Ich möchte nur mal gegen den Begriff „veraltet” protestieren. Auch Python 2.7 ist eine aktuelle Version, die noch gleichwertig neben der 3.x existiert und 2.6 ist auf vieler Leute Rechnern zu finden die gerne eine stabile Linux-Distribution haben wollen. Selbst mit 2.5 muss man da draussen noch rechnen, zum Beispiel bei Webhostern.
PythonFish
User
Beiträge: 26
Registriert: Mittwoch 17. August 2011, 07:37

BlackJack hat geschrieben:Ich möchte nur mal gegen den Begriff „veraltet” protestieren. Auch Python 2.7 ist eine aktuelle Version, die noch gleichwertig neben der 3.x existiert und 2.6 ist auf vieler Leute Rechnern zu finden die gerne eine stabile Linux-Distribution haben wollen. Selbst mit 2.5 muss man da draussen noch rechnen, zum Beispiel bei Webhostern.
Wie gesagt bin Python-Neuling und dachte mir halt wenn es mittlerweile Python 3.x gibt, dann ist Python 2.x veraltet :) Mir ist nur aufgefallen, dass es viele Libs einfach nur für Python 2.6/2.7 gibt und nicht für 3.x ... wie auch immer :)

edit: aber ist natürlich gut zu wissen, dass wenn was in 2.5/2.6/2.7 geschrieben ist nicht unebdingt alt sien muss :)
Antworten