Home

  ESP32 を SPI通信 の スレーブ で使用する                                     Ver.1.0 '20/05/07                           All rights reserved JA3OOK 中村 利和    Arduino IDE環境での ESP32(ESP32-WROOM-32)を SPI通信の「スレーブ」として動作させる  場合のプログラムの要点を述べます。   Rabbit NoteさんがWeb(参考資料1)で1個のESP32をマスターとスレーブを兼ねて動作させる  プログラムを分かりやすい解説付きで公開されておられます。   ところが残念なことに、スレーブ動作だけさせる場合に「通信完了待ち」をどのよう行うかが  不明で、私は困ってしまいました。    いろいろ調べてようやく解決しましたので、それを書いておきます。      なお、Rabbit Noteさんは「受信データの最後の4バイトが受信できない場合がある」ことを  述べるのがWebの目的のようなので「スレーブ側の通信完了待ち」に触れられていないのは当然の  ことと推測します。 1.ESP32-WROOM-32 スレーブ側のプログラムの要点    (赤文字が要点)   通信完了待ちの方法は、   ・spi_slave_get_trans_result関数を使って「通信完了待ち」を行う。   ・その関数の第二パラメーター(下記のコード例では & を付けた spi_sl_trans) を    メインループのスコープ内に記述した spi_slave_transaction_t で定義しておく。  です。   次の図でメインループ内のプログラム構成を示します。

void loop()
{
    Serial.println("[LOOP]");

    // spiトランザクションの構造定義
    spi_slave_transaction_t* spi_sl_trans;

    // マスターへ送信するデータを準備
    spi_slave_tx_buf = マスターへ送信するデータ;

    // スレーブの送信準備
    ESP_ERROR_CHECK(
        spi_slave_queue_trans(HSPI_HOST, &spi_slave_trans, portMAX_DELAY));

    // スレーブ通信完了待ち
    spi_slave_get_trans_result(HSPI_HOST, &spi_sl_trans, portMAX_DELAY);

    Serial.println("[送受完了]");

    // チェック
  受信データの処置を行う(受信したデータは spi_slave_rx_buf に入っている)

}
2.ソースプログラム   Rabbit Noteさんのプログラムを、上記の構成に改造した ESP32-WROOM-32 SPIスレーブ の  ソースプログラムです。     ・zipファイル(スレーブ用ソースプログラムとマスター用ソースプログラム)  参考に、Arduino UNO SPIマスター のソースプログラムも同梱してあります。   動作確認環境    Arduino IDE 1.8.12 + esp32 by Espressif System バージョン 1.0.4       ESP32-DevKitC ESP32-WROOM-32 −−−SPI スレーブ    Arduino UNO          −−−SPI マスタ 3.ハードウェア   このプログラムが動作するハードウェア回路図です。      Arduino UNOの出力ピン電圧が5V、ESP32の入力ピン最大定格が3.9V(3.6+0.3)なので、レベル  変換IC 74HC4050 を間に入れています。(参考資料6)  私は実験していませんが、ICの代わりに抵抗で代用することが可能なようです。しかし通信速度  を落とす必要があるかもしれません。(参考資料6の2ページ前)  ESP32出力ピンとUNO入力ピンの間は直結で大丈夫です。   今回のISP通信の実験ではUNOやESP32-WROOM-32へ外部から電源を供給する必要はありません。  USBからの電源でOKです。 [謝辞]   本ソフトの作成に特に役立った資料を最後に列挙しました。この他にも役立った記事が色々   ありました。各著者に感謝します。 [参考資料] 1 Rabbit Note ESP32 で SPI スレーブ通信するときの注意点 2 Espressif SPI Master Driver 3 Espressif SPI Slave Driver 4 Arduino Team 訳Takumi Funada Arduino 日本語リファレンス 5 Stupiddog ArduinoでSPI通信を行う方法 6 しなぷすのハード製作記 74HC4050を使う方法

 直前の画面へは ブラウザの戻る をクリックしてください。Topに戻るにはHome