情報系大学生の雑記帳

プログラミングや電子工作などを中心に書いていくつもりです

ESP8266でプレゼンテーション用リモコンを作ってみた

ESP8266を使ってプレゼンテーション用のワイヤレスリモコンを作りました。
リモコンを作った理由は大学で後輩に対して「技術の勉強をちゃんとすればこんな物も作れるよ!」ということを示すためです。
写真の下の方にある2つのスイッチを押すとそれぞれスライドが1枚戻ったり進んだりします。
f:id:dwight_1011:20160709012114j:plain

システムの構成・データの流れ

作った物はハードウェアとしてはESP8266ベースのリモコンで、ソフトウェアとしてはESP8266用のArduinoプログラムとPowerPointのスライドを操作するためのプログラムです。構成は以下の図の様になっています。
f:id:dwight_1011:20160709012709p:plain
リモコンのスイッチを押すと、押したボタンをESP8266からwifiでPCに飛ばします。PCではC#で書いたプログラムがサーバーをたてて待ち構えていて、ESP8266からの通信を受信するとPowerPointにキーボードのメッセージ(矢印キーの左もしくは右が押されたという情報)を送ります。この一連のデータの流れによってリモコン操作を実現しています。

ハード

プレゼンリモコンの作成には以下の表の物を使いました。

部品名
ESP8266 1
タクトスイッチ 2
抵抗 2
ジャンパケーブル、ワイヤ 適量
ブレッドボード 1

プログラム

Arduinoのプログラムでは2つのスイッチからの入力を監視し、入力があったら指定したIPにソケット通信で信号を送信します。*1

C#のプログラムではサーバーを作成し通信を待機、信号を受信したら解析してPowerPointWindowsのメッセージを投げます。*2

おわりに

今回作ったリモコンを(無理やり)他と差別化するなら、wifiで信号を飛ばしているところですかね。ただ、これにはデメリットがあってリモコンを使っている時にはPCをネットにつなぐことが出来ません(^_^;)*3また現時点ではブレッドボードに挿してあるだけなので、いずれユニバーサル基板にでも半田付けしてケースも作成したいですね。

*1:プログラムが汚いので、余裕があれば手直ししてから載せます

*2:プログラムが汚いので(以下略)

*3:まあ、プレゼンしながらネットを見ることはそんなに無いと思いますが

エイリアスで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が実行されます。

エイリアスを使いこなす

とりあえず今回の目的は達せられましたが、エイリアスを使いこなすために登録されているエイリアスの確認と削除もしてみましょう。

エイリアスの確認

aliasコマンドを単体で入力すると現在登録されているaliasを一覧で表示することができます。
自分の環境で入力すると以下のような表示が出ます。

$ alias
alias gitacp='git add --a&&git commit&&git push'
alias gitlog='git log --oneline'

先ほど登録したgitacp以外にもgitlogと入力することでログを簡潔に表示させるためのエイリアスも登録されていることがわかります。

エイリアスの削除

登録したエイリアスを削除するにはunaliasコマンドを使います。
unaliasコマンドは

$ unalias コマンドの別名

とすることで登録したエイリアスを削除できます。

*1:個人で使ってるリポジトリなので迷わずgit add --a

*2:区切りには複数種類がありますが、ここでは省略

ローカルのリポジトリをbitbucket/githubにpushするまで

はじめに

 この記事ではgitを使ってローカルで管理していたプロジェクトをbitbucketにも上げておこうという人を対象に、コマンドでローカルにあるリポジトリをbitbucketに初めてpushするまでの手順を簡単に書いています。動作はWindows7Cygwin上で確認しています。
 githubの場合は基本的にはbitbucketの部分を適宜githubに変えれば同じようにできるはずです。

ローカルでの作業

ssh-keygenでssh秘密鍵・公開鍵を作成

$ ssh-keygen  -b 2048 -t rsa -f ~/.ssh/bitbucket_rsa

※-b:ビット数、-t:暗号化方式、-f:出力先ファイル
すると

Enter passphrase (empty for no passphrase):

と言われるので、秘密鍵だけでパスフレーズを設定しない場合は何も入力せずにエンターを押してください。その後再度パスフレーズを求められるので、もう一度何も入力せず(パスフレーズを設定する場合にはパスフレーズを入力してから)エンターを押してください。

・~/.ssh/configに以下を追加

Host bitbucket
  User git
  Port 22
  Hostname bitbucket.org
  IdentityFile ~/.ssh/bitbucket_rsa
  IdentitiesOnly yes

githubの場合、Hostnameのbitbucket.orgはgithub.comにする必要があるので注意

リモート

リポジトリの作成*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

※追記終わり

*1:bitbucket/githubリポジトリ作成に関しては省略

*2:.pubのついていない~/.ssh/bitbucket_rsa秘密鍵なのでコピーするファイルを間違えないよう注意

サバフェス!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についてですが数年前に一部で人気になった、脳波によって猫耳が動くというおもちゃです。
f:id:dwight_1011:20160328004854j:plain:w500
 necomimiでは2枚の基板が使われています。1つは「TGAM1」という脳波検出基板で、もう1つは猫耳を動かすサーボの制御基板です。制御基板はUARTで受け取った脳波のデータを基にサーボモータを動かしています。次の図は改造前の簡単な構成図です。
f:id:dwight_1011:20160328011917j:plain:w500

 脳波を検出するにあたって、このUARTの信号を横取りすれば自分でも脳波を見ることができるんじゃないか?ということで基板の送信部(TX)とGNDにケーブルをつなげました。
そしてUARTのデータをRaspberry Piに渡すために、イヤホンジャックをケーブルの先に付けるという改造を施しました。また今回はサーボモータを動かす必要が無かったのと、基板が入っていた場所がギリギリの大きさだったという理由からサーボモータに繋がるケーブルを切断してスペースを確保しました。
次の図は改造後の構成図です。
f:id:dwight_1011:20160328011901j:plain:w500
 実際の改造後の基板はこのような感じです。
f:id:dwight_1011:20160328003221j:plain:w500
 この改造によって無事に脳波のデータをUARTを使ってRaspberry Pi上で読むことができました。ハッカソンではここから脳波のデータをPythonプログラムで読んで、サーバーに送ってということを(後輩達が)しています。
 これによりnecomimiの外装はイヤホンジャックために開けた穴以外変わらず、ケーブルをそのまま出すよりも強度を上げることができたのでは無いかと個人的には満足しています。
f:id:dwight_1011:20160328013708j:plain:w500

 今回のハッカソンではほぼハードウェア部分のみを担当して、データの解析やサーバーへのデータ送信に関しては後輩たちがやっているのを見ている感じでした。
 それでも得られた知識や経験は多く、大学OBの方々を始め沢山の方と交流ができたのでサバフェス!2016に参加してとても良かったです。

*1:サーバー周りに関しては後輩達が書いてくれると思うので、そちらに任せます

2列ピンをブレッドボードに挿せるようにする

f:id:dwight_1011:20151122020653j:plain:w400

写真のような2列のピンをブレッドボードに挿すためのアダプターを作りました。

作り方は基本的に下のページ(以下、アイデア元)と同じですが、多少自己流に工夫したのでその部分を書いていきたいと思います。

2列ピンのものをブレッドボードに挿すやつ | なんでも独り言

使用した物

アダプターの作成には以下の物を使いました。
(使用した部品はすべて秋月電子通商で購入)

品名 個数
片面ユニバ​ーサル基板​(ブレッド​ボード配​線パターン​タイプ)​ 1枚
シングルピ​ンソケット​ (低メス​)​1*5 2個
ピンヘッダ 1*5 2個

(ピンソケットとピンヘッダは使用した数を書いているので、1*5単位では売っていません)


今回はメス-オスのアダプターのみ作成しました。オス-オスも作る場合にはアイデア元を参考にしてください。
また、ブレッドボードに挿したかったモノのピンが短い関係でピンソケットは低いタイプを使っています。
低いタイプのピンソケットには元から2列になっているものがありませんでした。*1
なので1列のものを並べたのですが2列並べると基板にまっすぐ挿せなかったのでプラスチックの部分をヤスリで削って調節しました。

ブレッドボード配線のユニバーサル基板について

イデア元では普通のユニバーサル基板の隣り合ったパターンを意図的にブリッジさせて接続しています。
しかし、自分はまだハンダ付けにあまり慣れておらず隣同士のパターンを意図的にブリッジさせて作成する方法に一度失敗したのでブレッドボード配線のユニバーサル基板を使うことにしました。
ブレッドボード配線のユニバーサル基板はブレッドボードと同じようにユニバーサル基板のパターンが接続されています。
用途としてはブレッドボード上で作成した回路を部品配置そのままに移植するための基板なのだそうです。
この基板の使う部分だけをニッパーで切り取り、写真のようにパターンが繋がってほしくない部分をカッター等で断線させることでブリッジさせずに隣り合ったパターンをつなげることができました。
f:id:dwight_1011:20151122024141j:plain:w400

あとはアイデア元と同じようにピンヘッダを加工してハンダ付けをすることで2列のピンをブレッドボードに挿すためのアダプターを作ることができました。
f:id:dwight_1011:20151122024358j:plain:w300 f:id:dwight_1011:20151122031637j:plain:w300

*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を経由してアクセスを行う。
f:id:dwight_1011:20150225031808j:plain
[ 図-1 ]

続きを読む