2012-05-15 8 views
8

Lieber Stack-Überlauf-Gemeinschaft,.NET Zugriff auf 802.15.4 Wireless Transceiver

ich in der Hoffnung, ich schreibe, dass Sie vielleicht in der Lage sein, mich mit C# oder C++ zu einem 802.15.4 Wireless-Transceiver-Verbindung zu helfen. Lassen Sie mich ein wenig über mein Projekt erklären. In diesem Semester habe ich einige Zeit damit verbracht, eine drahtlose Sensorplatine zu entwickeln, die Licht-, Temperatur-, Feuchtigkeits- und Bewegungserkennungsebenen alle 8 Sekunden an einen drahtlosen USB-Transceiver weiterleitet. Jetzt habe ich den USB-Transceiver nicht entwickelt. Einer der TA's für den Kurs hat es getan, und er hat mir während des gesamten Entwicklungsprozesses für meine Sensorplatine geholfen (es war meine erste echte PCB).

Jetzt habe ich die Sensorplatine programmiert und ich weiß, dass es die Daten an den Transceiver sendet. Der Grund, warum ich das weiß, ist, dass dieser TA ein einfaches Python-Modul geschrieben hat, das das neueste Informationspaket aus dem Transceiver holt (wann immer es empfangen wurde), die Hex-Nachricht entpackt und einige der Sensordaten in Arbeitseinheiten umwandelt Celsius,% relative Luftfeuchtigkeit, etc.)

Das Problem ist, dass das Python-Modul auf seinem Computer (Mac) funktioniert, aber nicht auf meinem (Windows 7). Im Grunde verwendet er eine Bibliothek namens Zigboard, um die Sensornachricht sowie pyusb- und pyserial-Bibliotheken in der Skizze auszupacken. Der drahtlose 802.15.4-Transceiver zählt sich selbst auf einem Mac automatisch auf, führt jedoch bei der Ausführung auf einem PC zu größeren Problemen. Grundsätzlich glaube ich, dass das Problem darin liegt, dass es keinen signierten Fahrer gibt. Ich benutze libusb, um die INF-Datei für dieses spezielle Gerät zu erzeugen ... und ich weiß, dass es auf meinem Computer funktioniert, weil eine LED auf meiner Sensorplatine und auf dem Transceiver blinkt, wenn eine Nachricht gesendet/empfangen wird. Wenn ich jedoch das gleiche Python-Modul ausführe, das dieser TA auf seinem Rechner ausführt, bekomme ich eine Fehlermeldung darüber, dass einige Windows-Backend-Binärdateien fehlen, und daher kommt es nie wirklich zu dem Stadium, in dem es die Daten zurückgibt.

Aber das größere Problem ist nicht mit diesem Python-Modul. Das größere Problem ist, dass ich Python nicht verwenden möchte. Diese Sensorplatine wird Teil eines größeren Projekts sein, in dem ich eine Software-Schnittstelle in C# oder C++ entwerfe, um viele verschiedene Dinge zu tun (von denen einige mit diesen Sensordaten zu tun haben). Letztendlich möchte ich in der Lage sein, in .NET zu arbeiten, um auf die Daten von diesem Transceiver zuzugreifen. Alles was ich noch machen muss, ist diese Python-Skizze (die nicht einmal auf meinem Rechner läuft). Ich weiß, dass es am einfachsten wäre, wenn ich dem TA weitere Fragen stellen würde, wie man das an meiner Maschine erledigen kann ... aber ich habe dieses Semester schon eine Menge Zeit mit diesem Projekt verbracht und zusätzlich ist er momentan außer Betrieb Stadt, Dorf. Auch seine Präferenz ist Python, wobei ich mich in C# oder C++ am wohlsten fühle und diese Umgebung für dieses Projekt verwenden möchte. Jetzt würde ich sagen, ich bin kompetent in Elektronik und Programmierung (aber sicherlich kein Experte ... mein Hintergrund ist eigentlich in der Architektur). Aber, wenn jemand mir helfen könnte, etwas Code zu entwickeln, damit ich die Sensormeldung entpacken konnte, die vom Brett gesandt wurde, würde es sehr geschätzt werden. Ich habe unten die Python-Skizze angehängt, mit der der TA seine Sensornachrichten auf seinem Rechner auspackt (aber wie ich schon sagte ... ich hatte Probleme auf meinem Windows-Rechner). Hat jemand irgendwelche Vorschläge?

Nochmals vielen Dank.

from zigboard import ZigBoard 
from struct import unpack 
from time import sleep, time 

zb = ZigBoard() 
lasttime = time() 

while True: 
    pkt = zb.receive() 
    if pkt is None: 
     sleep(0.01) 
     continue 
    if len(pkt.data) < 10: 
     print "short packet" 
     sleep(0.01) 
     continue 

    data = pkt.data[:10] 
    cmd, bat, light, SOt, SOrh, pir = unpack("<BBHHHH", data) 
    lasttime = time() 

    d1 = -39.6 
    d2 = 0.01 

    c1 = -2.0468 
    c2 = 0.0367 
    c3 = -1.5955E-6 

    t1 = 0.01 
    t2 = 0.00008 

    sht15_tmp = d1 + d2 * float(SOt); 
    RHL = c1 + c2 * SOrh + c3 * float(SOrh)**2 
    sht15_rh = (sht15_tmp - 25.0) * (t1 + t2 * float(SOrh)) + RHL 

    print "address: 0x%04x" % pkt.src_addr 
    print "temperature:", sht15_tmp 
    print "humidity:", sht15_rh 
    print "light:", light 
    print "motion:", pir 
    print 
+0

kann ich nicht direkt helfen, aber ich würde vorschlagen möglicherweise zuerst eine C/C++ Schnittstelle erhalten, die zu den rohen Daten arbeitet. Setzen Sie das dann mit P/Invoke der .net-Welt aus. –

+0

Irgendwelche Gedanken darüber, wie man eine C/C++ - Schnittstelle schafft, um zu den Rohdaten zu gelangen? Das ist genau das, womit ich anfangen möchte ... aber ich weiß nicht genau, wo ich anfangen soll. – andyopayne

+0

Von dem, was ich gelesen habe, glaube ich, Ihr Problem liegt darin, die USB-Kommunikation zwischen Ihrem Embedded-Board und Ihrem Windows-PC funktionieren, nicht tatsächlich mit dem IEEE 802.15.4-Transceiver verbunden, richtig? Als erstes müssen Sie herausfinden, wie der TA den USB-Treiber implementiert und versucht, ihn auf Windows zu portieren. –

Antwort

0

Ich bin nicht 100% sicher auf, wie genau dies zu tun, aber nach einem kurzen Blick mit um ich, dass der Kern des Problems zu sehen ist, dass Sie so etwas wie die ZigBoard lib in C# implementieren müssen.

Die ZigBoard-Lib verwendet eine Python-USB-Lib zur Kommunikation mit einer API mit dem USB-Gerät, Sie sollten LibUsbDotNet in C# replizieren können und wenn Sie den ZigBoard-libs-Code lesen, sollten Sie in der Lage sein, das auszuarbeiten API.

1

Danke allen für die Hilfe. Der Schlüssel zu allem war LibUSBDotNet. Sobald ich das in meinem Projekt installiert und referenziert hatte ...Ich konnte ein Konsolenfenster erstellen, das die eingehenden Sensordaten verarbeiten konnte. Ich musste einige der Funktionen von der ursprünglichen Zigboard-Bibliothek portieren ... aber auf