Jetson nanoにDualshock3を無線接続する

はじめに

Jetson nanoを秋月で買いました.

f:id:FMR_CHN:20190629085115j:plain:w300

akizukidenshi.com

Jetson nanoにDualshock3を無線接続してROSで使えるようにします.

Jetson nanoにはBluetoothが搭載されていないため,以下のようなドングルを用意する必要があります.

PLANEX Bluetooth USBアダプター Ver.4.0+EDR/LE(省エネ設計)対応 BT-Micro4

PLANEX Bluetooth USBアダプター Ver.4.0+EDR/LE(省エネ設計)対応 BT-Micro4

上記のドングルをJetson nanoに挿しましたが,特に設定をする必要もなく使えてます.

Jetson nanoへのROSのインストールは以下の記事を参考にしました.特に問題なく正常にインストールできました.

www.stereolabs.com

必要なパッケージのインストール

USBとBluetoothの開発をするためのパッケージを以下のコマンドでインストールします.

sudo apt install libusb-dev libbluetooth-dev

sixpair

次に,BluetoothドングルとDualshock3をペアリングするためのツールをダウンロードし,ビルドします.

ソースコードをダウンロード

wget "http://www.pabr.org/sixlinux/sixpair.c" -O sixpair.c

ビルド

gcc -o sixpair sixpair.c -lusb

sixad

次に,Dualshock3を使えるようにするためのツールをインストールします.
sixadは以下のUbuntuPC用のdebパッケージが用意されていますが,Jetson nano(TK1やRaspberryPiなども含む)のようなARM系ではインストールできません.

Sixaxis - Community Help Wiki

sixpair同様,ソースコードをダウンロードしてビルドします.
他の方のブログにも方法が記載されていますが,Jetson nano上でビルドした時に一発で成功したものを紹介します.

GitHubにあるレポジトリをクローンしてビルドします.これでsixadコマンドが使えるようになります.

git clone https://github.com/falkTX/qtsixa
cd qtsixa/sixad
make
sudo make install

動作確認

まず以下のコマンドでペアリングをします.この時,Dualshock3をUSBケーブルでJetson nanoに接続してください.

sudo ./sixpair

これでドングルとDualshock3のアドレスが表示されれば,ペアリング完了です.USBケーブルを抜いても問題ありません.
1回目の実行ではドングルとDualshock3が違うアドレスが表示されると思いますが,ペアリングできています.
心配な方はもう一度コマンドを実行し,両者のアドレスが一致していることを確認してください.

次にsixadコマンドでDualshock3を無線接続します.

sixad --start

「sixad started, press the PS button now」と表示されれば,Dualshock3の真ん中のPSボタンを押してください.
Dualshock3が振動すれば接続成功です!

ボタン情報を正しく読み取れているかを確認するためのツール(jstest-gtk)をインストールします.

sudo apt install jstest-gtk

インストールが完了したら,デスクトップ左上のActivitiesをクリックし,jstest-gtkを検索してください. ツールを起動すると,接続したDualshock3のボタン情報を確認することができます. Dualshock3内蔵の加速度センサやボタンの圧力の値が正常に読み取れていると思います.

接続を終了する際は,sixadコマンドを実行したターミナルでCtrl+Cで強制終了します. Dualshock3が少し振動し,ターミナルに「Force disconnect of (アドレス)」と表示されれば,接続終了となります.

おわりに

以上の方法でJetson nanoにDualshock3を無線接続できるようになりました. あとはROSのjoyパッケージをインストールすれば,ROSでDualshock3を使えるようになります.

qiita.com

CoolTermにボーレートを追加する

はじめに

私はMacでシリアル通信ターミナルソフトのCoolTermを使用しています.

f:id:FMR_CHN:20190623111231p:plain:w100

freeware.the-meiers.org

過去にマイコンとPC間でUART通信させていた際,ボーレートを921600 bpsまであげたくなりました.
ですが,デフォルトのCoolTermではボーレートが230400 bpsまでしか選べないようになってます.
そこで,CoolTermにボーレートを追加してみました.

追加方法

最初はこちらの方の記事を参考に設定してみました.

d.hatena.ne.jp

ですが,私の環境ではApplicationsフォルダのCoolTermフォルダにファイルを保存しても,ボーレートは追加されませんでした.

私の行った追加方法は以下の通りです.保存場所が変わっていることに注意してください.

  1. 「baudrates.ini」というファイルを作成する.
  2. 作成したファイルに追加したいボーレートを記述する.このとき各ボーレート値で改行する.
  3. 作成したファイルをアプリケーションフォルダに保存する.

baudrates.iniの作成例です.今回は460800 bpsと921600 bpsを追加しました. f:id:FMR_CHN:20190623105505p:plain:w400

作成したファイルをApplicationsフォルダに保存し,CoolTermを起動すると,以下のようにボーレートが追加されました. f:id:FMR_CHN:20190623105205p:plain:w500

M5Stackを使った筋トレサポート機(仮)の開発 (2)

はじめに

前回の続き.

今回は応援機能に必要な,「mp3ファイルの再生」をM5Stackでやってみました.

開発環境設定

まずmp3ファイルを再生するために必要なライブラリをインストールします.

以下の記事の「M5stack(esp32)でスピーカから音を鳴らしたい」を参考にしました.

ogimotokin.hatenablog.com

今回追加するライブラリは

  • ESP8266Audio
  • ESP8266_Spiram

の二つです.

VSCode->PlatformIO Home (PIO) ->Libraries->Search libraries
に移動し,「ESP8266Audio」と「ESP8266Spiram」と検索をかけ,それぞれインストールします.
f:id:FMR_CHN:20180910180721p:plain f:id:FMR_CHN:20180910180406p:plain これらのライブラリは,~/.platform/libの中に置かれます.

インストール後,早速参考にした記事のコードをコピペしてビルドしてみたのですが・・・

fatal error: HTTPClient.h: No such file or directory

f:id:FMR_CHN:20180910163841p:plain HTTPClient.hが見つからない????

HTTPClient.hは「/.platformio/packages/frameworkarduinoespressif32/libraries/HTTPClient」の中にあります.
エラーを吐いたファイルからF12キーを押してHTTPClient.hに飛ぶことも可能でした.
インクルードパスの設定ができていないのかと思い,プロジェクト内のc_cpp_properties.jsonの中身を見ましたが,上記のパスもきちんとこのファイルに書かれていました.

次にライブラリのインストール方法を疑い,調べてみると以下の記述が. f:id:FMR_CHN:20180910192605p:plain

グローバルライブラリににするのがダメなのかなと思い,platformio.iniにlib_depsを記述したり,ターミナルで「platformio lib install ~」を打ち込んでみたりしてプロジェクト内にライブラリをインストールしてみましたが,同様のエラーが出てしまいました.

解決策

プロジェクト内のplatfomio.iniに

lib_ldf_mode = deep+

を追加したらコンパイルできました.(deepでも可)

platformioの公式のリファレンスを見ると
Library Dependency Finder (LDF) — PlatformIO 3.6.1a4 documentation f:id:FMR_CHN:20180910164132p:plain とあり,「lib_ldf_mode」はデフォルトだと「chain」に設定されています.

ESP8266Audio内のファイルでHTTPClient.hをインクルードしてるけど,chainのままだと「/.platformio/packages/」内のHTTPClient.hを参照してくれないっぽい?

PlatformIOよくわからない・・・
原因不明のままですが,上記の解決策でコンパイルはできてるので暫く放置にします・・・

音量調整

参考にした記事に従ってコードを記述し,mp3ファイルを再生したのですが・・・

うるせぇ!!!!!!!!

としか思いませんでした.
このままでは折角の可愛い女の子の声を隣人にもお届けしてしまいます.
音量を下げなければなりません.

ソフト的に音量調整する方法を色々調べてみたところ,GitHubにある「M5Stack_ESP32_radio」が参考になりました.

github.com

AudioOutputI2Sクラスが継承しているAudioOutputクラス内のSetGain関数で調整できるみたいです.
0.2〜0.4くらいがちょうど良かったです.

動作確認

音声だけだと味気ないので,ディスプレイに「からかい上手の高木さん」を表示させみました.音声はフリーのものを使いました.

素晴らしい・・・

ついでなので,「小さな恋のうた(高木さんver. )」を流してみました.

尊い・・・

おわりに

無事M5Stackでmp3ファイルの再生ができました.
Voiceroid欲しいなぁ〜・・・
AquesTalkも使えるみたいなので,そっちも試してみたいですね.

M5Stackを使った筋トレサポート機(仮)の開発 (1)

はじめに

ある日,家で黙々と筋トレをしている最中.

(静かに集中して筋トレするのもいいけど,可愛い女の子からの黄色い声援があるともっとやる気が出るのでは?)
(声援だけでなく,インターバルタイマーやログ,SNS投稿などの機能もあったら面白いのでは?)

と思いついたので,そんな筋トレサポート機(仮)を作っていきたいと思います.

M5Stackとの出会い

応援やタイマー,ログなど機能を実現するためには,以下の要素が必要だと考えました.

  • マイコン
  • スイッチ
  • ディスプレイ
  • MP3プレーヤー
  • ネットワーク接続

これだけ揃っているモジュールがこの世に存在するのか調べた結果・・・

www.switch-science.com

ありました.M5Stackです.欲しかった要素が全てありました.
迷わずポチりました.
f:id:FMR_CHN:20180906191426j:plain:w300

開発環境

エディタ

M5Stackの中にはESP32が入ってるのでArduino IDEで開発ができます.
ですが,Arduino IDEは利便性がちょっと・・・

別のエディタを検討している中,前にTwitterでフォローしているオタクの方達が,
VSCode使いやすい!」
拡張機能を使えばArduinoも開発できる!」
と呟いていたのを思い出しました.
なので,その利便性を肌で感じたくなり,今回はVSCodeで開発することにしました.

開発環境構築

PC:MacBookPro
OS:macOS High Sierra

まず以下のページから,M5Stackのドライバーをインストールしました.
USB to UART Bridge VCP Drivers | Silicon Labs

Macの方は以下のページの「使い方」必読です.
M5Stackであそぼう | スイッチサイエンス マガジン

次にVSCodeとPlatformIOのインストールです.以下の記事を参考にしました.

PlatformIO IDE for VSCode — PlatformIO 3.6.1a4 documentation

インストール後,次のようにプロジェクトを作成しました.

f:id:FMR_CHN:20180906185243p:plain

「ボード選択欄にM5Stackあるじゃ〜〜ん.楽勝〜〜〜〜」
とウキウキな気分でプロジェクトを作成したのですが,プロジェクト内にはM5Stackライブラリがありませんでした.
仕方なくGitHubに上がってるものをダウンロードして,srcフォルダのみをプロジェクト内にコピペして使えるようにしました.

github.com

ですが,PlatformIO側でM5Stackライブラリのインストールができることを後から知りました・・・(´・ω・`)
この方の記事を参考にVSCodeを使ったM5Stackの開発環境を整えましょう.
qiita.com

動作確認

何はともあれ,無事M5Stackの開発環境を構築できました.
早速動作確認です.M5Stackのディスプレイに「OPPAI」と表示させてみました.

f:id:FMR_CHN:20180906192011j:plain

OPPAI !!!

おわりに

動作確認も無事完了しました.
早く可愛い女の子の声援を聞きたいものです.

STM32F103C8T6 USB CDC編

はじめに

昨日貰ったSTM32F103C8T6ボードにUSB通信用のmicroUSBがあるのと,前々からSTM32のUSB通信を試してみたかったので,簡単な動作確認をしてみました.

fmr-chn.hatenablog.com

USB CDC

CDCはCommunication Device Classの略です.
仮想COMポートを開き,マイコンとのシリアル通信がUSB経由で可能です.

開発環境

PC:MacBookPro
OS:macOS High Sierra
開発ソフト:SW4STM32,STM32CubeMX

Windowsの方はVCPドライバーが必要になるので,ST社などのドライバーをインストールしてください.

www.st.com

STM32CubeMX

CubeMX側でUSB CDCの設定をします.手順は以下の通りです.

Pinout

  1. USBのDevice(FS)にチェックを入れる.
  2. RCCのHigh Speed Clock(HSE)をCrystal/Ceramic Resonatorにする.
  3. USB DeviceのClass For FS IPをCommunication Device Classにする.

f:id:FMR_CHN:20180904121730p:plain:w700

Clock Configuration

To USB(MHz)が48MHzになるようにHCLKの値を決めます.
今回は最高速の72MHzにしました.

f:id:FMR_CHN:20180904122552p:plain

CubeMX側の設定は以上です.コード生成をしてSW4STM32に移ります.

SW4STM32

文字列送信のコードをmain.cに追加します.

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USB_DEVICE_Init();

  /* USER CODE BEGIN 2 */
  uint8_t *buffer = "Hello\n";
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {

  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */
     CDC_Transmit_FS(buffer,strlen(buffer));
     HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_12);
     HAL_Delay(500);
  }
  /* USER CODE END 3 */

動作確認

microUSBをPCにつなぎ,CoolTermで動作確認をしました.
ボーレートはデフォルトの115200 bpsです.
通信中にリセットしまうとCOMポートが閉じられ,再接続が必要となるので注意してください.
f:id:FMR_CHN:20180904123010p:plain:w500

おわりに

STM32F103C8T6でUSB CDCの動作確認ができました.
次はUSB HIDなどを試してみたいです.

STM32F103C8T6 書き込み編

はじめに

友人からAliexpressで5枚入り$10.20で販売している怪しげなSTM32ボードを貰いました.

ja.aliexpress.com

その友人がレビューした記事がこちら. masa-flyu.hatenablog.com

MCUはSTM32F103C8T6.
micro-USBが付いてるけどST-Linkは未搭載.

下の記事の方はこれをArduino化するために,ブートローダー「STM32duino」を導入しています. ht-deko.com

ですがArduinoはちょっと体に合わないので,STM32として開発します.

開発環境

PC:MacBookPro
OS:macOS High Sierra
開発ソフト:SW4STM32,STM32CubeMX
ST-Link:Nucleo-64付属のもの

配線

このボードにはST-Linkが未搭載なので,ST-Linkを繋げます.
配線は以下のようにします.

STM32F103 ST-LInk
G GND
V3 3.3V
CLK SWCLK
IO SWDIO
RST NRST

書き込みと動作確認

とりあえずボード上の青LEDでLチカを試してみます.
ピンはPB12です.

CubeMXでプロジェクトを作成し,PB12を出力ピンとして設定します.

f:id:FMR_CHN:20180903195138p:plain:w500

コード生成の前に,F1のパッケージをインストールします.
Help → Manage embedded software package を開き,最新パッケージをインストールします.
ネット環境が必要なので注意してください.

f:id:FMR_CHN:20180903195539p:plain

コード生成の設定画面に行き,Toolchain / IDEをSW4STM32に設定して,generate codeを実行します.

SW4STM32の方でプロジェクトを開き,Lチカのコードをmain文に記述します.

/* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  /* USER CODE END WHILE */
  /* USER CODE BEGIN 3 */
      HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_12);
      HAL_Delay(500);
  }
  /* USER CODE END 3 */

あとは書き込み!
青LEDがチカチカしたら成功です.

おわりに

怪しげなSTM32ボードに無事書き込みができました.
一枚あたり250円で手に入り,フツーに使えそうなので色々試していきたいです.