ESP8266でプレゼンテーション用リモコンを作ってみた
ESP8266を使ってプレゼンテーション用のワイヤレスリモコンを作りました。
リモコンを作った理由は大学で後輩に対して「技術の勉強をちゃんとすればこんな物も作れるよ!」ということを示すためです。
写真の下の方にある2つのスイッチを押すとそれぞれスライドが1枚戻ったり進んだりします。
システムの構成・データの流れ
作った物はハードウェアとしてはESP8266ベースのリモコンで、ソフトウェアとしてはESP8266用のArduinoプログラムとPowerPointのスライドを操作するためのプログラムです。構成は以下の図の様になっています。
リモコンのスイッチを押すと、押したボタンをESP8266からwifiでPCに飛ばします。PCではC#で書いたプログラムがサーバーをたてて待ち構えていて、ESP8266からの通信を受信するとPowerPointにキーボードのメッセージ(矢印キーの左もしくは右が押されたという情報)を送ります。この一連のデータの流れによってリモコン操作を実現しています。
ハード
プレゼンリモコンの作成には以下の表の物を使いました。
部品名 | 数 |
ESP8266 | 1 |
タクトスイッチ | 2 |
抵抗 | 2 |
ジャンパケーブル、ワイヤ | 適量 |
ブレッドボード | 1 |
プログラム
Arduinoのプログラムでは2つのスイッチからの入力を監視し、入力があったら指定したIPにソケット通信で信号を送信します。*1
C#のプログラムではサーバーを作成し通信を待機、信号を受信したら解析してPowerPointにWindowsのメッセージを投げます。*2
エイリアスでgitのadd,commit,pushをいっぺんに
はじめに
突然ですが、みなさんはソースコードの管理以外でもgitを使ったりするでしょうか?
自分は研究室のミーティングで使う進捗報告スライドもgitで管理しています。
そうすることで、家のPCからでも研究室のPCからでも進捗報告のスライドが作成できるからです。
さて、gitでバージョン管理するときは
$ git add --a $ git commit
でローカルリポジトリにコミット*1して、その日の作業が終わったら
$ git push
でリモートリポジトリにプッシュしています。
しかしこれだとコマンドを沢山打つ必要があり、たまに作業終わりのプッシュを忘れたりします。
プッシュし忘れると作業していた以外のPCから最新のバージョンを見ることができません。
コマンドの入力量を減らすのとプッシュ忘れを減らすためにエイリアスを使ってgit add,commit,pushを一度にできるようにしてみましょう。
aliasコマンド
エイリアスを使うとコマンドの別名を登録することができます。
aliasコマンドは
$ alias コマンドの別名='コマンドX'
とすることで「コマンドの別名」を入力すると「コマンドX」が実行されるようにできます。
また、コマンドXには複数のコマンドを書くことも可能でその場合には;や&&などで区切ることができます。*2
そこで今回は
$ alias gitacp='git add --a&&git commit&&git push'
としました。
これでgitacpと入力するだけで始めにgit add --aが実行され、addに成功したらcommit、commitに成功したらpushが実行されます。
エイリアスを使いこなす
とりあえず今回の目的は達せられましたが、エイリアスを使いこなすために登録されているエイリアスの確認と削除もしてみましょう。
ローカルのリポジトリをbitbucket/githubにpushするまで
はじめに
この記事ではgitを使ってローカルで管理していたプロジェクトをbitbucketにも上げておこうという人を対象に、コマンドでローカルにあるリポジトリをbitbucketに初めてpushするまでの手順を簡単に書いています。動作はWindows7のCygwin上で確認しています。
githubの場合は基本的にはbitbucketの部分を適宜githubに変えれば同じようにできるはずです。
ローカルでの作業
リモート
・リポジトリの作成*1
・公開鍵を登録(bitbucket_rsa.pub)
テキストエディタやlessコマンドなどで~/.ssh/bitbucket_rsa.pubを開いて中身をコピーし、bitbucket/githubの該当欄に貼り付ける*2
ローカル
後はgitで管理している既存のプロジェクトのディレクトリ内で、リモートがどこかを設定するために以下のコマンドを入力すればpush/pullができるようになります。
$ git remote add origin bitbucket:ユーザー名/リポジトリ名.git
これでリモートにpushすればbitbucket/github上で確認できるようになっています。
$ git push -u origin master
※-u:追跡ブランチの設定、こちらの記事が分かりやすかったです
snowlong.hatenablog.com
おまけ
git remote add~で設定するURLを間違えた場合等には以下のコマンドで修正できます。
$ git remote set-url origin bitbucket:ユーザー名/リポジトリ名.git
追記 2016/12/16
pushした時に
Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
と出てしまう場合には、ssh-agentに鍵を登録すると解決する可能性がある。(というか、何度かこれで引っかかっていた)
$ eval `ssh-agent` //ssh-agentを起動 $ ssh-add ~/.ssh/xxxxxxxx //bitbucketまたはgithubの秘密鍵をssh-agentに登録
参考:githubからcloneするときにPermission denied (publickey)エラーが発生する | hacknote
※追記終わり
サバフェス!2016でnecomimiを改造した話
数カ月ぶりの投稿です。
「Health Engineering with IoT」がテーマのイベント、「サバフェス!2016」に参加してきました。
2016.serverfesta.info
ハッカソンはテーマが「健康」だったのですが、自分たちのチームでは「体の健康だけではなく心の健康も大事だよね→ストレスを可視化する→脳波を見よう」(というのは建前で、実際にはnecomimi面白そう)という理由でnecomimiを改造して脳波を取得するということを行いました。自分は同じ大学の後輩達と一緒のチームでハードウェアを担当したので、ハードウェア周りについて書いておこうと思います。*1
追記(2016年3月28日)
後輩がRaspberry Piからサーバーへの部分の記事を書いてくれました。
atofaer.hatenablog.jp
追記終わり
追記(2016年3月30日)
開発の詳しい経緯などはこちらで後輩が書いてくれています。
hotuta.hatenablog.com
追記終わり
まずnecomimiについてですが数年前に一部で人気になった、脳波によって猫耳が動くというおもちゃです。
necomimiでは2枚の基板が使われています。1つは「TGAM1」という脳波検出基板で、もう1つは猫耳を動かすサーボの制御基板です。制御基板はUARTで受け取った脳波のデータを基にサーボモータを動かしています。次の図は改造前の簡単な構成図です。
脳波を検出するにあたって、このUARTの信号を横取りすれば自分でも脳波を見ることができるんじゃないか?ということで基板の送信部(TX)とGNDにケーブルをつなげました。
そしてUARTのデータをRaspberry Piに渡すために、イヤホンジャックをケーブルの先に付けるという改造を施しました。また今回はサーボモータを動かす必要が無かったのと、基板が入っていた場所がギリギリの大きさだったという理由からサーボモータに繋がるケーブルを切断してスペースを確保しました。
次の図は改造後の構成図です。
実際の改造後の基板はこのような感じです。
この改造によって無事に脳波のデータをUARTを使ってRaspberry Pi上で読むことができました。ハッカソンではここから脳波のデータをPythonプログラムで読んで、サーバーに送ってということを(後輩達が)しています。
これによりnecomimiの外装はイヤホンジャックために開けた穴以外変わらず、ケーブルをそのまま出すよりも強度を上げることができたのでは無いかと個人的には満足しています。
今回のハッカソンではほぼハードウェア部分のみを担当して、データの解析やサーバーへのデータ送信に関しては後輩たちがやっているのを見ている感じでした。
それでも得られた知識や経験は多く、大学OBの方々を始め沢山の方と交流ができたのでサバフェス!2016に参加してとても良かったです。
*1:サーバー周りに関しては後輩達が書いてくれると思うので、そちらに任せます
2列ピンをブレッドボードに挿せるようにする
写真のような2列のピンをブレッドボードに挿すためのアダプターを作りました。
作り方は基本的に下のページ(以下、アイデア元)と同じですが、多少自己流に工夫したのでその部分を書いていきたいと思います。
2列ピンのものをブレッドボードに挿すやつ | なんでも独り言
使用した物
アダプターの作成には以下の物を使いました。
(使用した部品はすべて秋月電子通商で購入)
品名 | 個数 |
片面ユニバーサル基板(ブレッドボード配線パターンタイプ) | 1枚 |
シングルピンソケット (低メス)1*5 | 2個 |
ピンヘッダ 1*5 | 2個 |
(ピンソケットとピンヘッダは使用した数を書いているので、1*5単位では売っていません)
今回はメス-オスのアダプターのみ作成しました。オス-オスも作る場合にはアイデア元を参考にしてください。
また、ブレッドボードに挿したかったモノのピンが短い関係でピンソケットは低いタイプを使っています。
低いタイプのピンソケットには元から2列になっているものがありませんでした。*1
なので1列のものを並べたのですが2列並べると基板にまっすぐ挿せなかったのでプラスチックの部分をヤスリで削って調節しました。
ブレッドボード配線のユニバーサル基板について
アイデア元では普通のユニバーサル基板の隣り合ったパターンを意図的にブリッジさせて接続しています。
しかし、自分はまだハンダ付けにあまり慣れておらず隣同士のパターンを意図的にブリッジさせて作成する方法に一度失敗したのでブレッドボード配線のユニバーサル基板を使うことにしました。
ブレッドボード配線のユニバーサル基板はブレッドボードと同じようにユニバーサル基板のパターンが接続されています。
用途としてはブレッドボード上で作成した回路を部品配置そのままに移植するための基板なのだそうです。
この基板の使う部分だけをニッパーで切り取り、写真のようにパターンが繋がってほしくない部分をカッター等で断線させることでブリッジさせずに隣り合ったパターンをつなげることができました。
あとはアイデア元と同じようにピンヘッダを加工してハンダ付けをすることで2列のピンをブレッドボードに挿すためのアダプターを作ることができました。
*1:秋月の通販ページで調べると2列のソケットがありますが、1列のものはソケットの高さが3.5mmなのに対して2列のものは5.7mmでだいぶサイズが違うようです
Eclipseの設定メモ
Eclipseを入れなおしたりするときのために変更した設定をメモ。
気が向いたら追加・修正するかもしれない。
- 折り返しの文字数設定
普段はCtrl+Shift+FでEclipseのオートインデントを使っていますが、1行のコードがある程度以上の長さになっていると勝手に折り返されて鬱陶しく感じたので設定を変えたいと思いました。調べてみるとフォーマッターというものがあり、これを使うことによってCtrl+Shift+Fを押した時の動作が挙動が変わるそうです。普段はVimを使っていてVimrcをいじるのも好きなので、時間があるときにでもいじってみたいと思います。フォーマッターを編集するにはウィンドウ > 設定 > 一般 > Java > コード・スタイル > フォーマッター
と選んでいきます。開いたページで「新規」ボタンを押してプロファイル名を入力したら「行折り返し」タブを開いて「行の最大幅」を変更します。デフォルトでは80になっていたのでとりあえず120にしました。
多段ssh環境でgdbserverを使ってリモートデバックをする
目的
ホストAからgdbserverを使ってホストCでリモートデバックを行う。
ただしホストAもホストCもLANの外からはアクセスできないので、ホストCと同一LAN内にあるLANの外からアクセス可能なホストBを経由してアクセスを行う。
[ 図-1 ]