esp32でVS-C3を使用する

 

ROBO-ONEに出場するためにはマシンを遠隔で操作する必要があります。

esp32はBluetoothモジュールを搭載しているのでスマホ等をコントローラーにすることが出来ますが、格闘用途としては使いにくいため物理ボタンのコントローラーを使用することとしました。

最新のPSのコントローラーはBluetooth接続が可能らしいので、接続がスムーズなら使ってみてもいいと思います。

 

Vstoneのコントローラーの製品名は「VS-C3」、受信機の名前は「VS-RCV3」です。

このコントローラーは双方向通信が可能で、以下のように↓マシンのバッテリー低下をバイブレーションで知らせることが出来るようです。(そういう基板を作ってとプログラムをすれば)

f:id:sasapero:20200815124411p:plain

https://www.vstone.co.jp/products/vs_c3/index.html

 

f:id:sasapero:20200815124902j:plain f:id:sasapero:20200430173733p:plain

 

-------------------------------------------------------------------------

回路


VS-C3の基本的な使い方はこちら↓を参考にしました。VS-C3はPSのコントローラーと殆ど中身は同じらしく、ライブラリの名前がPS2となっています。

https://nakkye.at.webry.info/201411/article_1.html

http://robototakutdu.blog33.fc2.com/blog-entry-343.html

このブログ↓はノイズ除去的なことをしているみたいです。すごい。

https://www.atelier-yu.co.jp/wireless-software/

 

VS-RCV3を使用するにはSPI通信をする必要があります。esp32で使用する場合、公開されているarduino用のライブラリのままでは動かなかったので気を付けてください。

esp32のSPIにはHSPIとVSPIの2種類あるらしいですが、どう違うのかはわかりません。私はVSPIを使いました。配線は以下の通りです。

SEL(CS,CEと同等) → IO5

CLK (SCLK,SCKと同等)→ IO18

DAT(SDO,MISOと同等?) → IO19

CMD(SDI,MOSIと同等?) → IO23

  f:id:sasapero:20200814125056p:plain f:id:sasapero:20200814125059p:plain

過去の記事↓にも書きましたが、基板に直接VS-RCV3用のピンヘッダを半田付けする場合、VS-RCV3を上下反転するため配線に気を付けてください。間違えると基板からはみ出ます。

https://sasapon.hatenablog.com/entry/2020/04/30/174348

 

各通信ピンにプルアップ抵抗を付けました。抵抗4つだと狭い基板を占領してしまうので集合抵抗を使用しました。秋月で売っているチップ抵抗アレイ10kΩ*4↓です。手ハンダは難しいので頑張ってください。

http://akizukidenshi.com/catalog/g/gP-04664/

f:id:sasapero:20200815233004j:plain f:id:sasapero:20200815232735j:plain

 

※VS-RCV3を基板にピンヘッダで直接取り付ける場合、しっかり固定されません。グラグラするためペアリングボタンが押しにくいうえ、衝撃に弱いためマシンが倒れたときに通信が途切れることがあるかもしれません。正解はフレームにネジ固定だと思います。

※esp32のアンテナ部分の上下にVS-RCV3が被さらないように注意が必要です↓。esp32のミアンダ型アンテナの放射パターンがどのような感じなのかはわかりませんが、なるべく離したほうがいいですよね、きっと。

https://www.espressif.com/sites/default/files/documentation/esp32_hardware_design_guidelines_en.pdf

 

-------------------------------------------------------------------------

プログラム

Vstoneの公式?ライブラリを使用しているのでどこまで公開していいのかわかりません。SPI通信の初期設定は共通だと思うので載せます。 上記の配線の場合です。

 
 uint8_t pad_buf[30];      //PAD入力データ用バッファ
 spi_t* spi_pad;
  
 spi_pad = spiStartBus(VSPI2500000SPI_MODE2SPI_LSBFIRST);
  pinMode(19INPUT);
  pinMode(5OUTPUT);//SPI通信のss(スレーブをセレクト)
  digitalWrite(5HIGH); //→ SEL
   
  spiAttachSCK(spi_pad18); //VSPICLK → CLK
  spiAttachMISO(spi_pad19); //VSPIQ DAT →→ 
  spiAttachMOSI(spi_pad23); //VSPID CMD ←←

  int i = 0;
  for(i = 0i < sizeof(pad_buf); i++){
    pad_buf[i= 0x00;
  }
  delay(50);
 

 

  ご指摘&アドバイスあればお願いします!