8

親愛なるスタックオーバーフローコミュニティ、

C#またはC++を使用して802.15.4ワイヤレストランシーバーに接続するのを手伝ってくれることを願って書いています。私のプロジェクトについて少し説明させてください。今学期は、光、温度、湿度、動きの検出レベルを8秒ごとにUSBワイヤレストランシーバーに送信するワイヤレスセンサーボードの開発に時間を費やしました。今、私はUSBトランシーバーを開発しませんでした。コースのTAの1人がそうしました、そして彼は私のセンサーボードの開発プロセスを通して私を助けてくれました(それは私の最初の本当のPCBでした)。

これで、センサーボードがプログラムされ、トランシーバーにデータが送信されていることがわかりました。私がこれを知っている理由は、このTAがトランシーバーから最新の情報パケットを(受信したときはいつでも)プルし、16進メッセージを解凍し、センサーデータの一部を作業単位(摂氏など)に変換する単純なPythonモジュールを作成したためです。摂氏、相対湿度%など)

問題は、Pythonモジュールが彼のコンピューター(Mac)で動作するが、私のコンピューター(Windows 7)では動作しないことです。基本的に、彼はzigboardと呼ばれるライブラリを使用してセンサーメッセージを解凍し、スケッチ内のpyusbおよびpyserialライブラリも使用しています。802.15.4ワイヤレストランシーバーは、Macでは自動的に列挙されますが、PCで実行すると、より大きな問題が発生します。基本的に、問題は署名されたドライバーがないことにあると思います。libusbを使用してこの特定のデバイスの.infファイルを生成しています...メッセージの送受信時に点滅するLEDがセンサーボードとトランシーバーにあるため、マシンで機能していることがわかります。ただし、このTAが彼のマシンで実行しているのと同じPythonモジュールを実行すると、一部のWindowsバックエンドバイナリが欠落しているというエラーメッセージが表示されます。

しかし、より大きな問題はこのpythonモジュールではありません。より大きな問題は、Pythonを使用する必要がないことです。このセンサーボードは、より大きなプロジェクトの一部になります。このプロジェクトでは、C#またはC ++でソフトウェアインターフェイスを設計して、さまざまなことを実行します(そのうちのいくつかはこのセンサーデータを処理します)。したがって、最終的には、このトランシーバーからのデータにアクセスするために.NETで作業できるようにしたいと思います。ただし、私が続けなければならないのは、このpythonスケッチ(私のマシンでも実行されない)だけです。これを自分のマシンで動作させる方法について、このTAにさらに質問するのが最も簡単な方法だと思います...しかし、私はこのプロジェクトに関して今学期に彼の時間を独占しており、さらに彼は現在町。また、彼の好みはpythonですが、私は m C#またはC ++で最も快適であり、このプロジェクトにその環境を使用したいと考えています。さて、私は電子工学とプログラミングに精通していると言えます(しかし、確かに専門家ではありません...私の経歴は実際には建築にあります)。しかし、誰かが私がボードから送信されているセンサーメッセージを解凍できるようにコードを開発するのを手伝ってくれるなら、それは大いにありがたいです。以下にPythonスケッチを添付しました。これは、TAが自分のマシンでセンサーメッセージを解凍するために使用するものです(ただし、私が言ったように... Windowsマシンで問題が発生しました)。誰か提案はありますか?ボードから送信されているセンサーメッセージを解凍できるように、誰かがコードの開発を手伝ってくれるなら、それは大いにありがたいです。以下にPythonスケッチを添付しました。これは、TAが自分のマシンでセンサーメッセージを解凍するために使用するものです(ただし、私が言ったように... Windowsマシンで問題が発生しました)。誰か提案はありますか?ボードから送信されているセンサーメッセージを解凍できるように、誰かがコードの開発を手伝ってくれるなら、それは大いにありがたいです。以下にPythonスケッチを添付しました。これは、TAが自分のマシンでセンサーメッセージを解凍するために使用するものです(ただし、私が言ったように... Windowsマシンで問題が発生しました)。誰か提案はありますか?

再度、感謝します。

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
4

2 に答える 2

1

助けてくれてありがとう。すべての鍵はLibUSBDotNetを使用することでした。それをインストールして自分のプロジェクトに参照すると、受信センサー データを処理できるコンソール ウィンドウを作成できました。元の Zigboard ライブラリからいくつかの関数を移植する必要がありました...

于 2012-07-02T11:54:25.137 に答える
0

これを行う方法について 100% 確信があるわけではありませんが、ざっと見てみると、問題の核心は C# で ZigBoard lib のようなものを実装する必要があることがわかります。

ZigBoard lib は Python USB lib を使用して、API を使用して USB デバイスと通信します。LibUsbDotNet を使用して C# でこれを複製できるはずです。ZigBoard libs コードを読めば、API を解決できるはずです。

于 2012-07-02T08:24:08.837 に答える