1. Testing ESPNOW

    ESP32の etherボード とESP32の センサボード でESPNOWでの通信を試して挙動を調べました. 全体の構成は

    esp32 ether-espnow brigde

    でPCの上ではarducopterとテスト用のUDPサーバの両方を動かして試してみました.

    結果

    現在のESP32のespnowは次のような挙動をするようです.

    • 近接で通信した場合latencyは2ms位で安定している
    • 送信と送信の間で間隔を空けることが必要で送信のみ繰り返す場合で~2msが必要に見える
    • 受信を行うとこの間隔が影響される

    実際のテストではセンサボードからespnowでパケットを投げ送信終了のコールバックが終わるまで待つようにしました. 送信のみの場合~500Hzぐらいのレートで~70byteぐらいのデータが送信できていました.

    100Hzのレートで~30byteほどを受信するようにすると送信側のレートは10%以上低下しました. 送受の切り替え時にデッドタイムがあることを想像させるような挙動ですが、espnowのライブラリはソースがないので確かなことはわかりません.

    このセンサボードからはIMUなどのパケットが1msに40byte程度でてくるのですが受信も行いながらだとパケットが最初に期待していたようなlatencyでは送り切れない状態が発生しています. 生のlatencyや処理コスト的にespnowは魅力的なのですが、リモートセンサ/アクチュエータ方式でコプターを飛ばすのは今の所少し厳しい感じです.

    read more
  2. ESP32 GPIO output in deep sleep mode

    ESP32のGPIOをOUTPUT modeにしてバッファSN74LVC3G07を使ってRGBのLEDを点灯させていたのですがdeep sleep modeにしたときに全点灯してしまうことに気がつきました. まあこのシステムだとESP32が止まっても他に電力を食うものがあるので光ること自体はあまり問題ではないんですがちょっと格好悪いです.

    最初はdeep sleep modeに入る前に消しておいたらと思ったのですがdeep sleepするとGPIOがlowレベルになって全点灯してしまいました. いろいろやるうちに逃げ道を見つけることができました. いつまでこれでうまくいくかはわからないのですが.

    話は簡単で

    • GPIOのコンフィグでのpull-up/downはdeep sleep時でも有効

    なことを利用します. 問題のシステムでpull-upを立てておくとdeep sleep時にそれが効いてレベルがhighになって全消灯できました. こんな感じです (このシステムではRGBLED_OFF=1)

    gpio_config_t io_conf;
    io_conf.intr_type = GPIO_PIN_INTR_DISABLE;
    io_conf.mode = GPIO_MODE_OUTPUT;
    io_conf.pin_bit_mask = ((1<<GPIO_LED_RED)|(1<<GPIO_LED_GREEN)
                            |(1<<GPIO_LED_BLUE));
    io_conf.pull_down_en = 0;
    // This ensures that all leds are off in deep sleep …
    read more
  3. ESP32 SPI master issue

    esp-wroom-32 board

    My ESP-WROOM-32 board has 2 spi slave devices MPU-9250 and MS5611. I've troubled with DMA on spi. It looks issue 598 which happens when DMA is used with the half-duplex mode and the command/address phases are disabled. With enabling command phase, the problem went away.

    @@ -105,12 +105,12 …
    read more
  4. GnuRadio companion で新しい機能ブロック

    (元の文章は2015/05/13のものです)

    GnuRadio companion でGUIベースで用意された信号処理ブロックを結線してラジオをはじめいろいろなものが作れます. 新しいブロックの作成は意外に簡単です.

    Extending GNU Radio with own functionality and blocks

    に従ってg新部さんの NeuG を信号ソースにしてみました.

    neugはg新部さんの FST-01 を使った乱数発生器です. FSFでも紹介されています [1]

    作業はDebien jessieでやったのですがパッケージとして gnuradio-dev, cmake, boost, libcppunit-dev, liblog4cpp5-devなどをインストールしておくことが必要でした.

    • ツリーを作製:

      gr_modtool newmod neug         # これで gr-neugができるので
      cd gr-neug
      gr_modtool add -t sync neug    # syncのところはgeneric,decimator,interpolator...
      
    • python/qa_neug.pyを編集: unit …

    read more

« Page 2 / 2

links

social