ESP-WROOM-02にArduinoでプログラムを書き込む(1)

どうも、このところtwitter連携の投稿ばかりのReveです(オイ
今日は、久々に技術系ブログ的なところを見せたいのでw、500円Wi-FiモジュールのESP-WROOM-02Arduinoで楽しむIoT電子工作のような一連の記事を書きたいと思います。

【何ができるの?】
ESP-WROOM-02自体は電子回路をWi-Fiにつなげられる無線モジュールで、Arduinoなどのマイコンとシリアル通信を介してWi-Fiネットワークと接続します。
ですが、専用のArduino core(Arduino化するためのプログラム)とArduino IDE(開発環境)を使えば、自作のファームウェアを書き込むこともできます。つまり、ESP-WROOM-02Arduinoとなるのです!

試しに、ESP-WROOM-02でLEDを点滅させてみました。


さらに、ESP-WROOM-02をサーバーのようにして、WebブラウザからLEDを点灯/消灯させることもできます。

今回は、このシステムを作るまでを記事にまとめました。

【準備】
とにかく、まずは部品をそろえる必要があります。
まずESP-WROOM-02ですが、当方は以下のモジュールを使いました。俗にシンプル版と呼ばれています。

こちらはもともと、シリアル通信で使用する前提なのですが、単体でもArduinoのファームウェアが書き込めます。ただし、外に出ているピンが少ないため、できることが限られるのがネックです。
(実質、デジタル・アナログ(pwm)出力が2ピンのみ)

もともと小さいIoT機器を何か作りたくて2年位前に買った代物なので、せっかくならばと使いこなせるように情報を集めて今回の記事に至りました。

また、プログラムの書き込みにはUSBシリアル通信モジュールが必要です。
FTDI Chip社のICを搭載したモジュールが数多く出回っており、大抵その中から選定されるのですが、今回は自動的にプログラム書き込みと実行モードを切り替えられるようにしたいのでRTSとDTRピンにも接続できるものを選んでいます(購入はどちらか一つでOK)。

ちなみに、当方は上記のどちらも持っていないため、秋月電子のXBeeインタフェースボードを無理やり使いました。

また、プログラムを書き込むため、一部のピンをプルアップ/プルダウンする必要があり、10kΩ抵抗を使います。もちろん、動作確認のためLEDと100Ω抵抗も必須です。


そして、書き込みに必須ではないのですが、あると便利な電子回路を作るには以下の部品を使います。


以上で必要な部品がそろいました。
もっと安く作りたい方は、ESP-WROOM-02本体とピッチ変換基板を別々に買って、自分ではんだ付けする手もあります。

【準備(楽ちん版)】
上記の部品を買って回路を作るのが面倒な方は、こちらがおすすめ。
(すぐにファームウェアを書き込んでIoT電子工作を楽しめます)。


【次回は】
電子回路(とプログラム?)の実装について書く予定です。
→ 次のエントリを更新しました。長くなりそうだったので、開発環境(回路とプログラミング)の準備が中心になっています。

続きを読む

テーマ : 電子工作
ジャンル : 趣味・実用

Raspberry PiでレトロゲームをLet's Play (1)

どうもー、Reveです。
最近、スマホゲームじゃないレトロなゲームがやりたいと思っていたのですが、どうやら

【準備する機材】
今回は必要な機材を主に紹介していきます。
まずは箇条書きで紹介していきます。

[必須]
・Raspberry Pi (2か3がおすすめ)
・micro SDカード (32GB, Class10, UHS-1程度の性能で十分)
・ゲームコントローラー
・USBマウス、キーボード
・HDMI端子付きモニター (テレビでも可)
・USB電源プラグ (スマートフォンの充電用アダプタでも代用可)
・ネットワーク環境
・PC
[推奨]
・Raspberry Pi用ケース (できればファン付き)
・Raspberry Pi用ヒートシンク
・スイッチングハブ

では、いくつかの項目について解説を加えていこうと思います。

【解説】
Raspberry Pi
Raspberry Pi2 はPi3と違い、BluetoothもWifiもUSBドングルをつけないと使えませんが、消費電力は少なくて済みます。
ですが、実はRaspberry Pi3のほうが安く買えたり...。
逆に、Raspberry Pi3のほうが単体でネットに接続できたり、性能も若干Pi2より高いのですが、逆に消費電力が高いためUSB電源プラグも注意する必要があります(5V, 2.1A以上)
なお、Raspberry Piは初代のModel AやModel B+、zeroなどもありますが、ゲームをエミュレートするのは負荷が高いため、なるべく性能の高いモデルを選んでおいたほうがよいでしょう。
 

micro SDカード
Raspberry Piを動かすOSやソフトウェアのデータは、すべてマイクロSDカードにインストールすることになります。
そのため、容量はある程度大きいほうがいいのですが、あまり大容量のゲームや数多くのゲームを保存する限りでなければ32GBで十分かと思います。
あと、SDカードは秋葉原で安く買えるので、余裕のある方は秋葉原で探すのをお勧めします。


Raspberry PI用ケース / ヒートシンク
ケースは好きなものでよいのですが、ゲームを動かすのはそれなりに負荷がかかるので、ファンやヒートシンクも用意しておくとよいでしょう。この商品であればまとめて購入できます。


スイッチングハブ
また、Wifiモバイルルーターしか持っていない方も、スイッチングハブがあればRaspberry PiでWifiの設定をしなくてもLANケーブルをつなげるだけでネットと接続できたり、PCからゲームのファイルを転送するのも簡単になります。
接続は Wifiルーター <--> スイッチングハブ <--> PC / Raspberry Pi という形になります。


コントローラー
ゲームをプレイするには、もちろんコントローラーが必要となるわけですが、実はPCのゲームをプレイするのにもXBOXのコントローラーが使いやすいともっぱら評判なので、ここではUSBのXBOX360コントローラーを載せています。
ちなみに、当方では右のエレコムのコントローラーが安く買えたのでそっちを使っています。


PC / ネットワーク環境
この2つに関してはもうこのブログを見ている方はお持ちかと思いますが(笑)、Raspberry PiのOSは基本的に配布先のウェブサイトからダウンロードしてSDカードに書き込むのが前提となっているため、ネットワーク環境とSDにOSのファイルを書き込むためのPCが必要となってきます。

ここまででおおよそ必要な機材はそろったので、次回はOSのインストールから起動まで入っていきます。

MMD4MecanimとUnity最新版について

MMDのモデルをUnityで動かす際に使われるのが
MMD4Mecanim
http://stereoarts.jp/

なのですが、現行バージョンのUnityではエラーが出てしまいます。
というのも、SkeletonBoneクラスのtransformModifiedというプロパティが廃止されてしまったので、その部分でエラーが発生します。

(最新バージョンのMMD4Mecanimは確認していないのですが)
すでに前のバージョンを入れた状態でUnityを最新版に引き上げた場合は、skeletonBone.transformModifiedの記述がある部分だけコメントアウトすれば動かせます。
幸い、ツールの中ではMMD4MecanimImporterRig.csの2か所しか無かったため、その2つだけコメントアウトすればOKでした。

以上、雑記でした。

AndroidでFragmentの遷移時にパラメータを渡すときは

newInstanceメソッドでFragmentのインスタンスを作って引数を与えて、Fragment画面に移動するようにしましょう。
(忘れていたので備忘録も兼ねてます...)

Androidアプリで別の画面に切り替える処理を実装する際、Fragmentを使った画面遷移がよくつかわれると思うのですが、前の画面での設定などを取り込む必要がある時は、newInstanceメソッドでFragmentのインスタンスを作る必要があります。

newInstanceメソッドは、Android StudioでFragmentを自動生成した際のサンプルコードにあらかじめ作られるメソッドで、基本的な処理も一緒に実装されます。ただ、引数の型などを自分の受け渡したいものに合わせて変えていく必要があります。
なお、デフォルトでは引数はstring型が2つとなっています。

public static YourFragment newInstance(...){
// pre-coded...
}


newInstanceの使い方は、呼び出し側のActivityでFragmentの切り替えを行う際に使います。
定義したFragmentのインスタンスを作る際、"new (フラグメント名)"のようにnewを使うのではなく、(クラス名).newInstanceという形でFragmentのインスタンスを生成します。
あとは、生成したインスタンスをFragmentManagerに入れて(addまたはreplace)、commitを呼び出せばOK。

//create setting fragment
//YourFragment fragment = new YourFragment(); // doesn't work
//fragment.newInstance(...); // doesn't work
YourFragment fragment = YourFragment.newInstance(...); // assign your preferable parameters

//call the fragment
//(...write your own cord)


【参考】
Tech Sheets: Fragmentで、パラメータ付きの画面遷移を実装する
https://tech.mokelab.com/android/Fragment/argument.html

テーマ : Android
ジャンル : 携帯電話・PHS

AndroidのAlertDialogで躓いた話

どうも、Reveです。
最近Androidアプリの開発をする機会がぐんと増えたのですが、なんか初歩的なところで躓いていたので備忘録でも残します。

【ボタンを押すとエラーで落ちる】
エラーが発生したのは、ボタン(FAB)を押すとAlertDialogが呼ばれる機能を実装していた時のことで、
ビルドは通るものの実行してボタンを押すと、以下のエラーが発生して強制終了してしまいました。

java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity

どうやらTheme.AppCompatというテーマを適用する必要があると...
かれこれ色々悩んでいたのですが、原因はAlertDialog.Builderを作る際のContextにありました。

【原因】
AlertDialog.Builderのインスタンスを作る際、引数にContextを指定する必要があるのですが、
これが曲者で、間違えてApplicationContextを指定していたのが原因でした。

//AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext()); //エラー発生
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); //正解

正確には、builder.show()を実行してダイアログを表示するときにエラーが発生するのですが、getApplicationContextで得られるContextでは、どうやらテーマのリソースにアクセスできないようでした。

そのため、ActivityのContextを取得することでエラーが解消された、とみています。
いや、Androidアプリの開発はめんどくさい...(ただの勉強不足)

【参考】
ちなみに、対処法はここで見つけました。
(stack overflow: Android AlertDialog error during showing)
https://stackoverflow.com/questions/41894944/android-alertdialog-error-during-showing

どうやら、以前にも、同じような現象に陥っていた方がいらっしゃいました。
(SLUMBERS: Android で アラートダイアログを表示しようとすると落ちる)
http://slumbers99.blogspot.jp/2012/01/android.html

また、こちらの記事では各Contextの違いについてまとめられており、記事の内容からテーマのリソースなどを参照するにはActivityのContextが必要で、getApplicationContextでは取得できないと推察しているのですが、果たして正解なのか...
(Yukiの枝折: Android:引数はthisか?getApplicationContextか?ActivityとApplicationの違い)
http://yuki312.blogspot.jp/2012/02/thisgetapplicationcontextactivityapplic.html

テーマ : Android
ジャンル : 携帯電話・PHS

プロフィール

Reveちゃん

Author:Reveちゃん
コンビでやってます。
夢担当と技術担当がいます。

大学院卒業 → ロボットベンチャー(漆黒)就職 → 1年で退職 → ベトナムで仕事中(今ここ) → メディアアーティスト(未来☆)

リンクフリーです。

最新記事
最新コメント
月別アーカイブ
カテゴリ
アクセス数
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR