2

目標:

  • ある pi から別の pi へワイヤレスで複数のサーボ/RC モーターを駆動します。
  • 本質的に、私は pi を使用して RC リモコンを構築したいと考えています。

これで、RF リンク モジュールを介したシリアル伝送が安定し、エントリの破損がほとんどなくなりました。RF リンクモジュールにより、シリアル伝送の最大ボーレートは 4800 です。

問題:

送信機の pi 印刷値と受信機の pi 印刷値の間に 2 ~ 4 秒の差があるようです。この遅延がどこから来て、なぜそんなに大きいのか、私にはわかりません。受信側の pi の信号は、送信側の pi から送信されたデータとまったく同じですが、2 ~ 4 秒遅れていることに注意してください。送信機/受信機モジュールをバイパスし、Tx ピンと Rx ピンをジャンパー線で接続した場合でも、同じ遅延が見られました。

受信 Pi のデータが非常に後でデコードされる原因は何ですか? 以下のコードを貼り付けました。

---------- Tx Pi -----------------

import serial
import struct

ser = serial.Serial("/dev/ttyAMA0")
ser.baudrate = 4800

iCount = 0
bProgramLoop = True
while (bProgramLoop == True):

    iOne = iCount
    if (iOne == 100):
        iOne = 0
        iTwo += 1
        iCount = 0
    if (iTwo == 100):
        iTwo = 0
        iThree += 1
    if (iThree == 100):
        iThree = 0
        iFour += 1
    if (iFour == 100):
        iFour = 0
        iFive += 1
    if (iFive == 100):
        iFive = 0

    lData = [iOne,iTwo,iThree,iFour,iFive] # i have done it like this so that I can track in real time where the transmitter is and receiver is with respect to real time changes on the transmitter side
    sData = struct.pack('5B',*lData)
    ser.write(sData)
    print sData

    iCount += 1

-------------- Rx Pi -----------------

import serial
import struct

ser = serial.Serial("/dev/ttyAMA0")
ser.baudrate = 4800

bProgramLoop = True
while (bProgramLoop == True):
    sSerialRead = ser.read(5)
    tData = struct.unpack('5B',sSerialRead)
    print tData

Tx Pi が文字列 sData を出力するときと Rx Pi がタプル tData を出力するときの時間差は、2 ~ 4 秒です。struct.unpack 関数は遅いですか?

この時間差を最小限に抑える必要があります。何か案は?

4

2 に答える 2

1

まず、これがser.write()非同期呼び出しかどうかわかりません。これがpySerialライブラリを使用している場合、ドキュメントはそれがブロッキングコールであると言います。

おそらく試してみてください:

...
ser.write(sData)
ser.flush()    # Force the 'send'
print sData
...

また、次のldataように入力する方が簡単かもしれません:

lData = [iCount % 100, iCount % 10000, ...etc]

また、書き込みタイムアウトを設定すると役立つ場合があります(ただし、そうは思いません)。

于 2016-05-22T14:12:08.810 に答える