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
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. –
¿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
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. –