2012-05-15 28 views
8

Cộng đồng tràn ngăn xếp thân mến,Truy cập .NET tới 802.15.4 Bộ thu phát không dây

Tôi đang viết với hy vọng rằng bạn có thể giúp tôi kết nối với bộ thu phát không dây 802.15.4 bằng C# hoặc C++. Hãy để tôi giải thích một chút về dự án của tôi. Học kỳ này, tôi đã dành một chút thời gian để phát triển một bảng cảm biến không dây có thể truyền các mức phát sáng, nhiệt độ, độ ẩm và chuyển động mỗi 8 giây đến một bộ thu phát không dây USB. Bây giờ, tôi không phát triển bộ thu phát USB. Một trong những TA của khóa học đã làm, và ông đã giúp tôi trong suốt quá trình phát triển cho ban cảm biến của tôi (nó là PCB thực sự đầu tiên của tôi).

Bây giờ, tôi đã có bảng cảm biến được lập trình và tôi biết nó đang gửi dữ liệu đến bộ thu phát. Lý do tôi biết điều này là TA này đã viết một mô-đun python đơn giản sẽ lấy gói thông tin mới nhất từ ​​bộ thu phát (bất cứ khi nào nó nhận được), giải nén thông điệp hex và chuyển đổi một số dữ liệu cảm biến thành các đơn vị làm việc (như độ Celsius,% độ ẩm tương đối, vv)

Vấn đề là mô-đun python hoạt động trên máy tính (Mac) của bạn chứ không phải trên máy của tôi (Windows 7). Về cơ bản, anh ta đang sử dụng một thư viện gọi là zigboard để giải nén thông điệp cảm biến, cũng như các thư viện pyusb và pyserial trong bản phác thảo. Bộ thu phát không dây 802.15.4 tự động liệt kê chính nó trên máy Mac, nhưng chạy vào các vấn đề lớn hơn khi chạy trên PC. Về cơ bản, tôi tin rằng vấn đề nằm ở việc thiếu một người lái xe có chữ ký. Tôi đang sử dụng libusb để tạo tệp .inf cho thiết bị cụ thể này ... và tôi biết nó đang hoạt động trên máy của tôi vì có đèn LED trên bảng cảm biến của tôi và trên bộ thu phát nhấp nháy khi tin nhắn được gửi/nhận. Tuy nhiên, khi tôi chạy cùng một mô-đun python mà TA này chạy trên máy tính của mình, tôi nhận được một thông báo lỗi về việc thiếu một số Windows Backend Binaries và do đó, nó không bao giờ thực sự đến giai đoạn mà nó trả về dữ liệu.

Nhưng, vấn đề lớn hơn không phải là với mô-đun python này. Vấn đề lớn hơn là tôi không muốn phải sử dụng Python. Bảng cảm biến này sẽ là một phần của một dự án lớn hơn, trong đó tôi sẽ thiết kế một giao diện phần mềm trong C# hoặc C++ để thực hiện nhiều việc khác nhau (một số trong đó xử lý dữ liệu cảm biến này). Vì vậy, cuối cùng tôi muốn có thể làm việc trong .NET để truy cập dữ liệu từ bộ thu phát này. Tuy nhiên, tất cả những gì tôi phải tiếp tục là bản phác thảo python (mà thậm chí không chạy trên máy của tôi). Tôi biết điều dễ nhất để làm là hỏi nhân viên hỗ trợ này nhiều câu hỏi về cách làm việc này trên máy của tôi ... nhưng tôi đã độc quyền một tấn thời gian trong học kỳ này liên quan đến dự án này và ngoài ra anh ta hiện đã hết thị trấn. Ngoài ra, sở thích của anh ta là python, nơi tôi cảm thấy thoải mái nhất trong C# hoặc C++ và muốn sử dụng môi trường đó cho dự án này. Bây giờ, tôi sẽ nói tôi có thẩm quyền về thiết bị điện tử và lập trình (nhưng chắc chắn không phải là một chuyên gia ... nền của tôi thực sự là về kiến ​​trúc). Nhưng, nếu bất cứ ai có thể giúp tôi phát triển một số mã để tôi có thể giải nén các thông điệp cảm biến được gửi từ hội đồng quản trị, nó sẽ được đánh giá rất nhiều. Tôi đã đính kèm bản phác thảo Python dưới đây là những gì TA sử dụng để giải nén các thông điệp cảm biến trên máy tính của mình (nhưng như tôi đã nói ... Tôi đã gặp vấn đề trên máy tính cửa sổ của mình). Có ai có bất cứ đề nghị?

Xin cảm ơn một lần nữa.

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

Tôi không thể trợ giúp trực tiếp, nhưng tôi đề nghị trước tiên có thể có giao diện C/C++ làm việc với dữ liệu thô. Sau đó, tiếp xúc với thế giới .net bằng P/Invoke. –

+0

Bất kỳ suy nghĩ nào về cách để có giao diện C/C++ hoạt động để truy cập dữ liệu thô? Đây chính là điều tôi muốn bắt đầu ... nhưng tôi không biết bắt đầu từ đâu. – andyopayne

+0

Từ những gì tôi đã đọc Tôi tin rằng vấn đề của bạn nằm trong việc tạo ra giao tiếp USB giữa bo mạch nhúng và PC Windows của bạn, không thực sự liên quan đến bộ thu phát IEEE 802.15.4, phải không? Vì vậy, điều đầu tiên cần làm là tìm hiểu cách TA thực hiện trình điều khiển USB và cố gắng chuyển nó sang Windows. –

Trả lời

0

Tôi không chắc chắn 100% vào chính xác làm thế nào để làm điều này nhưng sau khi có một cái nhìn nhanh xung quanh tôi có thể thấy rằng cốt lõi của vấn đề là bạn cần phải thực hiện một cái gì đó giống như lib ZigBoard trong C#.

lib ZigBoard sử dụng một USB python python để giao tiếp bằng API với thiết bị USB, bạn có thể LibUsbDotNet để tái tạo điều này trong C# và nếu bạn đọc mặc dù mã libs ZigBoard bạn có thể làm việc API.

1

Cảm ơn mọi người đã trợ giúp. Chìa khóa cho mọi thứ đang sử dụng LibUSBDotNet. Khi tôi đã cài đặt và tham chiếu vào dự án của tôi ...Tôi đã có thể tạo một cửa sổ giao diện điều khiển có thể xử lý dữ liệu cảm biến đến. Tôi đã cần phải chuyển một số chức năng từ thư viện Zigboard ban đầu ... nhưng trên

Các vấn đề liên quan