2012-05-15 11 views
8
comunità

Caro Stack Overflow,accesso .NET per 802.15.4 ricetrasmettitore wireless

sto scrivendo, nella speranza che si può essere in grado di aiutarmi connettersi a un ricetrasmettitore wireless 802.15.4 utilizzando C# o C++. Lascia che ti spieghi un po 'del mio progetto. In questo semestre ho passato un po 'di tempo a sviluppare una scheda sensore wireless che trasmettesse luce, temperatura, umidità e livelli di rilevamento del movimento ogni 8 secondi a un ricetrasmettitore wireless USB. Ora, non ho sviluppato il ricetrasmettitore USB. Uno degli AT del corso lo ha fatto e mi ha aiutato durante tutto il processo di sviluppo della mia scheda sensore (era il mio primo vero PCB).

Ora, ho programmato la scheda sensore e so che sta inviando i dati al ricetrasmettitore. La ragione per cui so che questo TA ha scritto un semplice modulo python che estrarrà l'ultimo pacchetto di informazioni dal ricetrasmettitore (ogni volta che è stato ricevuto), decomprime il messaggio esadecimale e converte alcuni dati del sensore in unità di lavoro (come i gradi Celsius,% umidità relativa, ecc.)

Il problema è che il modulo python funziona sul suo computer (Mac) ma non sul mio (Windows 7). Fondamentalmente, sta usando una libreria chiamata zigboard per decomprimere il messaggio del sensore, così come le librerie pyusb e pyserial nello schizzo. Il ricetrasmettitore wireless 802.15.4 si enumera automaticamente su un Mac, ma presenta problemi di dimensioni maggiori durante l'esecuzione su PC. Fondamentalmente, credo che il problema risieda nella mancanza di avere un autista firmato. Sto usando libusb per generare il file .inf per questo particolare dispositivo ... e so che sta funzionando sulla mia macchina perché c'è un LED sulla mia scheda sensore e sul ricetrasmettitore che lampeggia quando viene inviato/ricevuto un messaggio. Tuttavia, quando eseguo lo stesso modulo Python che questo TA viene eseguito sulla sua macchina, viene visualizzato un messaggio di errore relativo alla mancanza di alcuni binari di back-end di Windows e quindi non arriva mai realmente allo stadio in cui restituisce i dati.

Ma, il problema più grande non è con questo modulo Python. Il problema più grande è che non voglio dover usare Python. Questa scheda del sensore farà parte di un progetto più ampio in cui progetterò un'interfaccia software in C# o C++ per fare molte cose diverse (alcune delle quali riguardano i dati di questo sensore). Quindi, alla fine, voglio essere in grado di lavorare in .NET per poter accedere ai dati da questo ricetrasmettitore. Comunque, tutto quello che devo fare è questo schizzo di pitone (che non funziona nemmeno sulla mia macchina). So che la cosa più facile da fare sarebbe chiedere a questo TA più domande su come farlo funzionare sulla mia macchina ... ma ho già monopolizzato una tonnellata del suo tempo in questo semestre per quanto riguarda questo progetto e inoltre è attualmente fuori cittadina. Inoltre, la sua preferenza è Python, dove mi trovo più a mio agio in C# o C++ e vorrei usare quell'ambiente per questo progetto. Ora, direi che sono competente in elettronica e programmazione (ma certamente non un esperto ... il mio background è in realtà in architettura). Ma se qualcuno potesse aiutarmi a sviluppare del codice in modo da poter decomprimere il messaggio del sensore inviato dalla scheda, sarebbe molto apprezzato. Di seguito ho allegato lo schizzo di Python che è quello che l'AT usa per decomprimere i suoi messaggi sensore sulla sua macchina (ma come ho detto ... ho avuto problemi sulla mia macchina Windows). Qualcuno ha qualche suggerimento?

Grazie ancora.

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

Non posso aiutare direttamente, ma suggerirei possibilmente prima di ottenere un'interfaccia C/C++ funzionante con i dati grezzi. Quindi esponilo al mondo .net usando P/Invoke. –

+0

Qualche idea su come ottenere un'interfaccia C/C++ funzionante per ottenere i dati grezzi? Questo è esattamente ciò che mi piacerebbe iniziare con ... ma non so esattamente da dove cominciare. – andyopayne

+0

Da quello che ho letto credo che il tuo problema risieda nel rendere la comunicazione USB tra la tua scheda incorporata e il tuo PC Windows funzionante, non in realtà correlata al ricetrasmettitore IEEE 802.15.4, giusto? Quindi la prima cosa da fare è scoprire come il TA ha implementato il driver USB e provare a portarlo su Windows. –

risposta

0

non sono sicuro al 100% su esattamente come fare questo, ma dopo aver avuto un rapido sguardo intorno posso vedere che il nucleo del problema è che è necessario implementare qualcosa di simile al lib ZigBoard in C#.

Il lib ZigBoard utilizza un lib python USB di comunicare utilizzando un'API con il dispositivo USB, si dovrebbe essere in grado di LibUsbDotNet di replicare questo in C# e se leggete se il codice librerie ZigBoard si dovrebbe essere in grado di elaborare la API.

1

Grazie a tutti per l'aiuto. La chiave di tutto stava usando LibUSBDotNet. Una volta che l'ho installato e fatto riferimento nel mio progetto ...Sono stato in grado di creare una finestra della console in grado di gestire i dati del sensore in entrata. Avevo bisogno di portare alcune delle funzioni dalla libreria originale di Zigboard ... ma su

Problemi correlati