2012-05-15 6 views
8
comunidad

Estimado desbordamiento de pila,acceso a .NET 802.15.4 transmisor-receptor inalámbrico

estoy escribiendo con la esperanza de que usted puede ser capaz de ayudar a conectar a un transceptor inalámbrico 802.15.4 usando C# o C++. Déjame explicarte un poco sobre mi proyecto. Este semestre, pasé algún tiempo desarrollando una placa de sensores inalámbricos que transmitiría niveles de luz, temperatura, humedad y detección de movimiento cada 8 segundos a un transceptor inalámbrico USB. Ahora, no desarrollé el transceptor USB. Uno de los TA's del curso lo hizo, y me ayudó a lo largo del proceso de desarrollo de mi placa de sensores (fue mi primer PCB real).

Ahora, tengo la placa del sensor programada y sé que está enviando los datos al transceptor. La razón por la que sé esto es que este TA escribió un módulo de Python simple que extraería el último paquete de información del transceptor (cada vez que se recibiera), descomprimiera el mensaje hexadecimal y convirtiera algunos de los datos del sensor en unidades de trabajo (como grados Celsius,% de humedad relativa, etc.)

El problema es que el módulo python funciona en su computadora (Mac) pero no en la mía (Windows 7). Básicamente, está usando una biblioteca llamada zigboard para desempaquetar el mensaje del sensor, así como las bibliotecas pyusb y pyserial en el boceto. El transceptor inalámbrico 802.15.4 se enumera automáticamente en una Mac, pero se encuentra con problemas mayores cuando se ejecuta en una PC. Básicamente, creo que el problema radica en la falta de tener un controlador firmado. Estoy usando libusb para generar el archivo .inf para este dispositivo en particular ... y sé que está funcionando en mi máquina porque hay un LED en mi placa de sensores y en el transceptor que parpadean cuando se envía/recibe un mensaje. Sin embargo, cuando ejecuto el mismo módulo python que este TA se ejecuta en su máquina, aparece un mensaje de error acerca de que faltan algunos binarios de Windows Backend y, por lo tanto, nunca llega a la etapa donde devuelve los datos.

Pero, el problema más grande no es con este módulo de python. El problema más grande es que no quiero tener que usar Python. Esta placa de sensores va a ser parte de un proyecto más grande en el que diseñaré una interfaz de software en C# o C++ para hacer muchas cosas diferentes (algunas de las cuales tratan con los datos de este sensor). Entonces, en última instancia, quiero poder trabajar en .NET para acceder a los datos de este transceptor. Sin embargo, todo lo que tengo que seguir es este boceto de python (que ni siquiera se ejecutará en mi máquina). Sé que lo más fácil sería hacerle más preguntas a esta AT sobre cómo hacer que funcione en mi máquina ... pero ya monopolé gran parte de su tiempo este semestre en relación con este proyecto y, además, actualmente está fuera de pueblo. Además, su preferencia es python, donde estoy más cómodo en C# o C++ y me gustaría usar ese entorno para este proyecto. Ahora, diría que soy competente en electrónica y programación (pero ciertamente no soy un experto ... mi experiencia es en arquitectura). Pero, si alguien pudiera ayudarme a desarrollar algún código para poder descomprimir el mensaje del sensor que se envía desde la placa, sería muy apreciado. He adjuntado el boceto de Python a continuación, que es lo que el TA usa para descomprimir los mensajes de su sensor en su máquina (pero como dije ... tuve problemas en mi máquina de Windows). ¿Alguien tiene alguna sugerencia?

Gracias de nuevo.

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

No puedo ayudarlo directamente, pero sugiero que posiblemente primero obtenga una interfaz C/C++ que funcione con los datos brutos. Luego exponga esto al mundo .net usando P/Invoke. –

+0

¿Alguna idea sobre cómo hacer funcionar una interfaz C/C++ para llegar a los datos brutos? Esto es exactamente con lo que me gustaría empezar ... pero no sé por dónde empezar. – andyopayne

+0

Según lo que he leído, creo que su problema reside en hacer que la comunicación USB entre su placa integrada y su PC con Windows funcione, no relacionada realmente con el transceptor IEEE 802.15.4, ¿verdad? Entonces, lo primero que debe hacer es averiguar cómo el TA implementó el controlador USB e intentar conectarlo a Windows. –

Respuesta

0

no estoy 100% seguro de exactamente cómo hacer esto, pero después de tener un rápido vistazo alrededor puedo ver que el núcleo del problema es que necesita para implementar algo así como la lib ZigBoard en C#.

La lib de ZigBoard utiliza una lib de USB de python para comunicarse utilizando una API con el dispositivo USB, debe poder LibUsbDotNet para replicar esto en C# y si lee el código de libs ZigBoard debería poder resolver el problema API.

1

Gracias a todos por la ayuda. La clave para todo estaba usando LibUSBDotNet. Una vez que lo instalé y lo hice referencia en mi proyecto ...Pude crear una ventana de consola que podría manejar los datos del sensor entrante. Necesitaba portar algunas de las funciones de la biblioteca original de Zigboard ... pero en

Cuestiones relacionadas