Maker Faire Tokyo 2018に行ってきた

めちゃくちゃ遅くなったけどMaker Faire Tokyo 2018に参加してきたので書く。

最初に感想を言っておくと めちゃくちゃいいイベントだった

あくまで個人の感想ですが今回のMFTの日程や感想を書いていきます。

会津出発

会津を高速バス出発したのは7/3の14:30ごろ。この日は午前中まで大学のテストがあったので、テストが終わってから色々と準備をして出発した。

バスタ新宿に着いたのは19:15ぐらい、途中何もなくスイスイ来られたのでほぼ時間通り。今回お手伝いする ウズキさん と合流した。MFTで使うテープなどを調達するために新宿の東急ハンズで買い出し&チケットや次の日の事を話すために飲みに行った。

Maker Faire に出展するのは去年シリコンバレーで出た mini Maker Faire 以来でほぼ一年ぶり、というかちゃんと出るのは今回が初めてだった。ウズキさんと会ったのもシリコンバレーで、日本に帰ってきてもちょくちょくお世話になっている(とてもありがたいです)。

ご飯を食べながら次の日の動きを確認し、ウズキさんに「初めて組んだPCのCPUはA10-5800K」という話をして一通り時代の流れを感じさせるなどして解散。川崎にある友人宅に11時過ぎくらいに帰った。

MFT1日目

🔜 国際展示場

ウズキさんと9:30分ごろに大崎駅で待ち合わせ、湘南新宿ラインで一本なので湘南新宿ラインは神。9:10くらいに着いたので飲み物とか塩分補給のThingsを調達。麦茶 ∧ 塩という意見がtwitterで強かったので麦茶1Lと酸っぱいタイプの梅を買った。少ししたらウズキさんが来たので合流。そのままりんかい線で国際展示場へ。

気分はコミケで国際展示場へ着く。オタクは少ないかと思ったら同時に三次元空間でスクフェスのイベが開催されていたらしく、ほぼコミケと同じくらいのオタク密度でりんかい線にオタクが乗ってた。

↪️ 国際展示場

MFT自体は西ホールで開催されてた。僕やウズキさんがブースを構えていた場所的には西1のゆ-18くらいのところ。ここでtomorrowさんと合流する。tomorrowさんはウズキさんと同じブースでM5stackを主に展示している方。

今回出展した内容的にはクラッピー鬼ごっこロボとM5Stackの展示。

ウズキさんはカムロボにiPhoneXを搭載、ESP32とwebBluetoothを使いYOLOを使って学習したものをCoreMLで動かし、クラッピーを認識して追いかけるロボットを展示。1日目の朝、前日に作ってきた止まれの標識も追加して、止まれの標識を見せたら停止するようにその場で改造していた。

tomorrowさんはM5stackの展示、自作の基板を8月下旬にswitch scienceで売り出すらしく、そのサンプル基板を展示、また、M5stackを使ったホワイトボードに自動で書いてくれるマシーンやwebBluetoothを使ったラジコンなどを展示していた。

今回ボクはウズキさんの「お手伝いして〜」という声に「ぜひ行きたいです」と志願して(拉致られて)ウズキさんやtomorrowさんのお手伝いに来ました。

初日に設営を終え、ちょっとブラブラ。

いろいろなものがあって、何がどこにあるのかも分からなかった。

とりあえずMFTが始まる。コミケじゃないのに開始のアナウンスとともに拍手が生まれるのは国際展示場名物。

1日目に見たもの

Superdiy

少し前にTwitterで話題になった Superdiy の原作者の方にお会いした。

お話をしたところステッカーを頂いた。すぐにThinkPadに貼り付けた。

Idein社

実在した。

Raspberry pi機械学習+ボーン検知のデモを展示してた。

ラズパイで動かすとすると良くて3~4FPSのものを30くらい普通に出しててやばい。

社員の方に話をお聞きすると

Raspberry piGPUを使用しています。ちなみに、標準だと動作をしないのでGPGPUを使用できるようにアセンブリとか使って一から実装しました」

と、さも当然かのようにお話をされていた。

卍邪悪卍

これをデモとして展示されてました。

SONYのspresenseのコスプレ

最近SONYさんから発売されたspresenseの広報として展示場内を歩いていたコスプレ衣装をまとった方。

www.sony-semicon.co.jp

超低消費電力、マルチGNSS測位機能、音がありえん良いらしい、この大きさでこの性能はやばいと思うので皆さん購入してIoTを始めてほしい。

そんなこんなで1日目が終了、個人的には白井さんの serial experiments lain に出てくるあの人みたいな風貌が一番性癖に突き刺さった。

その後はアキバのMograに言ってAkiparty、今までネット上でしか見たことのないギャル電さんにお会いすることができた。憧れの人の一人だったのでとても良かった。

(LEDビカビカさせてたら話しかけていただけた、最高)

MFT2日目

現地集合ということでウズキさんたちのブースに集合、2日目が始まる。

ブースについてお話をすると、 子供に大人気だった。ブースにクラッピーが置いてあって、それ目当てに来る子が多かった気がする。

www.youtube.com

「取っ手を握ったら拍手をする」という単純明快で音のなるおもちゃはやはり子供受けがすごい。

机に置いていたのはこれ、大きさ的には手のひらサイズで握るとパチパチ音がする。

ピンクや青とカラーバリエーションも多く、女の子が

「ピンクかわいい!」

とか、両手にクラッピーを持った子が延々と

「パチパチパチパチパチパチパチパチパチパチパチパチパチパチパチパチパチパチパチパチ」

と無心で遊んでいたことが心に残った。

会場にはデカイクラッピーがいて、お話しながらパチパチしていた。

これを見た子供なのか、他のところで遊んできた子供なのか、ブースに来る時に

「どうか売っていますように」

とお祈りしながら来る子まで来た。

ちなみに、このクラッピーはAmazonで500円くらいで売っているので皆さん買いましょう。

http://amzn.asia/4Qwwu7h

2日目に起きたこと

クラッピー夢の共演

クラッピーを見つけると追いかけていくロボットを作成していたのですが、なんと クラッピーをラジコンに改造していた人がいた。

何が起きるかと言うと

追いかけっこ

というわけで、夢の共演を果たしました。

Aizu IoTLTの開催

個人的にIoTが好きで、ArduinoやESPを使って色々動かしています。

IoTLTというものが開催されているというのは知っていました。しかし、開催される場所が会津から遠くどうしても行くことが難しかったりします。

今回のMFTでIoTLTに参加されている方々のブースに行き、代表ののびすけさんとお話をした。

IoTLTについて少し話をしていると

まさかのIoTLT Aizuの開催が決定した

僕とのびすけさんが主催ということで会津大学を舞台に実際にLTが開催されることに、

MFTで少し話をしただけでいろいろな方の力をもらい、実際に開催にこぎつけることができました。

今回初めて参加して思ったこと

MFTはtwitterなどで存在していることは知っていて、今回初めての参加でした。

今回紹介したのはごく一部で、国際展示場にはもっともっとありました。

控えめに言って最高だった。

まじでこの世の全てのMaker Faire好きに教えてあげたいんだが東京の国際展示場には全ての人間を虜にする禁断のイベントがある。 これが色んな人の作ったもので超絶面白いからぜひ全国のMaker Faire好き、Maker Faireを愛する者たち、Maker Faireを憎む者たち、全てのMaker Faire関係者に伝われ

Opencv 3.4.0のインストール(darknetでエラーの出まくっている方へ)

研究室で自分が使っているマシンで、darknetによるリアルタイム推論をしようとしたら全く動かなかった。

普通の推論(画像中の特徴にバウンディングボックスを設置する)だと、動いてくれる。

PCのスペック等

  • CPU ... Intel(R) Core(TM) i7-4771 CPU @ 3.50GHz
  • RAM ... 32GB
  • GPU ... GTX1080ti
  • OS ... Ubuntu 16.04 LTS

  • OpenCV ... version 3.4.1

  • CUDA ... 8.0

コレと言って変なところはなく、公式がサポートしてると謳っていたバージョンをすべて入れているはずだった。

ちなみに、使用しているレポジトリは公式ではなく、AlexeyAB氏の開発している方のdarknet。

github.com

これで、darknetを使用すると

  • 画像認識

./darknet detector test path/todata.data path/to_DLcfg.cfg yolov3-tiny.conv.15 path/want_to_detect_picture.jpg

出力例

f:id:flying_hato_bus:20180705095506j:plain

  • リアルタイム認識

./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights

出力 https://github.com/AlexeyAB/darknet/issues/932

Couldn't connect to webcam.
: Invalid argument
darknet: ./src/utils.c:193: error: Assertion `0' failed.

こんなのが出て落ちる。

色々と試してみたがうまく行かずにいると。フォーラムで、「最近新しいバージョンにしたからpullヨロ」のような文字が発見できたので git pull で最新バージョンにした。

新たにバージョンアップしたのでまた一からmakeをしようとした。

$ git pull
$ make

ここまで来たところでエラーが出た。

In file included from /usr/local/include/opencv2/core/types_c.h:59:0,
from /usr/local/include/opencv2/core/core_c.h:48,
from /usr/local/include/opencv2/highgui/highgui_c.h:45,
from ./src/image.c:14:
/usr/local/include/opencv2/core/cvdef.h:485:1: error: unknown type name ‘namespace’
namespace cv {
^
compilation terminated due to -Wfatal-errors.
gcc -DOPENCV pkg-config --cflags opencv -DGPU -I/usr/local/cuda/include/ -DCUDNN -DCUDNN_HALF -Wall -Wfatal-errors -Wno-unused-result -Wno-unknown-pragmas -Ofast -DOPENCV -DGPU -DCUDNN -I/usr/local/cudnn/include -DCUDNN_HALF -c ./src/blas.c -o obj/blas.o
Makefile:130: recipe for target 'obj/image.o' failed
make: *** [obj/image.o] Error 1
make: *** Waiting for unfinished jobs....

エラーメッセージから読み取れるに、opencvのエラーっぽい。

opencvで何か必要なのかとissueを漁っていたらこのような投稿を発見。

Can't compile with opnecv=1 · Issue #932 · AlexeyAB/darknet · GitHub

作成者本人曰く。

「今回のバージョンアップでなぜか知らんけど OpenCVの3.4.1だと動かなくなっちゃった。もし3.4.1入れてるんだったら、それ以前のモノ入れてね、というかREADMEにも書いてあるよ。」

This repository supports:

both Windows and Linux both OpenCV 2.x.x and OpenCV <= 3.4.0 (3.4.1 and higher isn't supported) both cuDNN v5-v7 CUDA >= 7.5 also create SO-library on Linux and DLL-library on Windows

らしい。最近更新された時に追加されたようで、昔の情報で全てを完結させていたのでコレに気づかなかった。

というわけで深夜1時ごろからOpenCV3.4.0のインストールを開始した。

公式を見ればわかるが、個人的にやったことを書いていく。

pkg-config --modversion opencv

3.4.1

$ cd ~/
$ mkdir src
$ cd src

インストールに使用するフォルダを作成

$ wget https://github.com/opencv/opencv/archive/3.4.0.tar.gz
$ tar xvzf 3.4.0.tar.gz 
$ ln -s opencv-3.4.0 opencv
$ wget https://github.com/opencv/opencv_contrib/archive/3.4.0.tar.gz
$ mv 3.4.0.tar.gz.1 opencv_contrib-3.4.0.tar.gz
$ tar xvzf opencv_contrib-3.4.0.tar.gz 
$ ln -s opencv_contrib-3.4.0 opencv_contrib

OpenCV 3.4.0のファイルとcontribパッケージをダウンロードして、リンクをしておく。

$ cd ~/src/opencv
$ mkdir build
$ cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
$ make -j8
$ make install

makeなどをしてインストール、ちなみにmakeにはめちゃくちゃ時間がかかるので心して待ちましょう。

インストールが終わって、pkg-config --modversion opencvを打ち、3.4.0が出力されればインストールは成功。

これでdarknetをmakeして動かすと。

こうなれば全てが終わり、お疲れ様でした。

電力会社を変えた

最近、電力会社をメジャーな東北電力から変えたので書きます。

変えたわけ

変えたわけなんですが、電力会社独特のサービスを受けられる からというのが大きいです。

私が変えた会社はオカモトでんきというところ

https://okamotonodenki.com

会津若松市内にセルフのガソリンスタンドがあり、バイト先から近いのでちょくちょく入れに行ってます。

そこでこのオカモトでんきの広告を見て、この会社にすることを決めました。

オカモトでんきのプラン

オカモト電気には2つのプランがあります。

  • そもそもの電気代が安くなる ホームプラン
  • お値段そのままでガソリン代が安くなる カーライフプラン

このカーライフプランに入りました。

カーライフプランの一番の目玉はガソリンが安くなるということ。

なんと、毎月50Lまではガソリン代がリッターあたり10円引きというプランです。

会津はただでさえガソリンが高いです。近所にあるガソリンスタンドでは 5月30日現在、レギュラーがリッターあたり154円でした。

アホか。

そんなわけで、この10円引きというのは結構でかいです。

50Lまでという制約はありますが、僕の車では月に1000km以上移動できるという計算になります。

東京から大阪まで往復でそれくらいになるので、一ヶ月に移動する距離としては十分かなと思います。

たまにプログラミングのできる5才児(@NoahOrberg)くんの子守りのために夜中に走ることはありますが、それを見越しても月に1000kmはそれなりに走れると思います。

もう一個のホームプランも話を聞きましたが、こっちはこっちで、毎月の電気代は安くなるうえ、ガソリン代が無制限でリッターあたり3円安くなるというメリットがあります。こっちは大口で電気代を使用している人向けっぽいです。

信頼性

「そもそも、こういう電力会社ってどこの電気を使ってるの?」

という疑問があります。

聞いてみると、電気自体は東北電力が作っている電気で、それに東北電力が張っている送電線を使用するらしいです。なので、停電が起こった際も東北電力に電話などをする必要があると言われました。

ここで東北電力から東北電力に変えるという図が生まれる

しかし、このおかげで後述する工事やメーターなどの交換が少なくてすむっぽいです。

申し込むまで

今住んでいるところによりますが、大体のアパートでは、電力会社を変える際には大家さんに話をしたほうがいいと感じました。

大家さんに電話

ぼく「あの〜、最近電力会社を変えようと思ってるんですけど〜」

大家「あ〜なるほど、こちらとしては大丈夫なんですが、何か大きな工事とかされて他の人の部屋が停電になったりしたら面倒なのでそういう工事がないとすれば大丈夫ですよ〜」

ぼく「わかりました、ちょっと聞いてみます。」

電力会社に電話

ぼ「ということなので、電力会社を変える際には何か大きな工事とかはありますか?」

会社「特に大きな工事とかはないんですが、今あるメーターをスマートメーターというのに変える工事は必要です〜。けどこれと言って大きなものは付けたりせず、今あるものを取り替えるって形で、工事自体もすぐ終わりますね。」

ぼ「わかりました、そんなに大きな工事にはならないんですね。ありがとうございます。」

再び大家さんに電話

ぼ「大きな工事は必要ないみたいです、停電もないっぽくて。これなら変えてもいいですか?」

大「そうですね〜、ただ今付いているメーターははとバスさんが今のアパートを出たら次の人が使うので原状復帰できるようであればいいですね〜」

ぼ「普通そのままでも使えるだろ(はい、ちょっと電力会社に聞いてみます)」

再び電力会社に電話

ぼ「スマートメーターって、僕がもとに戻してくださいって言ったら戻せますか?」

社「それはできませんが、スマートメーターはどの会社でも共通して使えます。今までのメーターは検針員さんが、使用状況を見て電気代を請求していたんですが、今のスマートメーターはそれを携帯の電波を使って会社に送っているので使用状況は自動的に請求されます。ちなみにこれをスマホでも確認できますよ」

ぼ「なるほど、ということは新しいメーターは他の会社でも使えるってことでいいですか?あとその使用状況を見れるAPIって生えてますか?」

社「えーぴーあい?知りませんが、スマートメーターは他の会社でも使えますよ」

ぼ「ありがとうございました」

この電話で原状復帰と言うよりは、新しいメーターを他の会社でも使えることが確認できたので、後は大家さんに説明した。

大家さんは「他の電力会社がメーターを使用できるなら大丈夫です」と言ってくれたので、すぐに電力会社を変えるように申し込みました。

2,3週間で電力が切り替わるようになると思うので、切り替わって少ししてからまた記事を書こうと思います。

ESP8266を使ってIotをするための準備を一から始める.

どうもはとバスです.今回はAizu Advent Calendar 2017の16日目の投稿となります.

adventar.org

本日は手軽に使える とされている ESP8266の始め方です.

そもそもESP8266って何よ

簡単に言うとめちゃくちゃ安いwi-fiモジュール.

f:id:flying_hato_bus:20171210163929j:plain

この画像が全て.

他の要件としては

  • 3.3V駆動
  • 安価( ESP8266自体は 550円くらいで買える)
  • 16ピンのGPIO, SPI, I2C
  • 技適ももちろん通っている

というわけで今回はこれを使ってLチカしてwifiで通信させて,httpを叩くところまでをする.

導入

色々なモジュールが登場していますが,私が今回購入したのはこれ.

Wi-Fiモジュール ESP-WROOM-02 DIP化キット

こんな感じでブレッドボードに直挿しできるので,回路の設計とかも簡単にできる.

f:id:flying_hato_bus:20171210170620j:plain

まず必要なのはブレッドボードと少しのジャンパワイヤ.いくつかの抵抗が必要です.

それ以外には,Lチカ用の抵抗とLED,あとはUSB to serialの変換基板があればいいです.

環境構築

今回は Platformio を使用します.

Platformioは様々な開発のツールチェインを抽象化して,コマンドラインから同一の手法で開発が行う組み込み開発用のツール.

ライブラリマネージャーも独自に持っているのでライブラリの管理にも便利。

インストールはpipでできる.(要 python2.7.*環境)

pip installまでくれば platformioは入っているはず,あとは対応するボードを確認してみる.

コマンドとしては platformio boardsで一覧を取得できる.

めちゃくちゃ多いので ESP8266に関するのだけgrep.

その中にesp_wroom_02があると思うので,これを開発できるようにinitializeする.

ここまでくればフォルダが以下のようになっているはずなので src/以下にプログラムを書いて行きます.

├── lib
│   └── readme.txt
├── platformio.ini
└── src

まずはきちんと動くかわからないのでLチカで動作確認をする.

書き込み

今回書き込むためにはシリアルで通信しないといけない.そのためにUSB to Serialの変換基板などが必要になります.

今回この書き込みのところではまっていました.どうやってもプログラムを書き込めなかった.

なぜかなと思ってデータシートをよくみるとこのような記載が.

f:id:flying_hato_bus:20171211022333p:plain

どうやらこのESP32はUART Down load Mode, Flash Boot Modeという二つのモードがあると言うことが判明.

UART Down load Modeはプログラムを書き込むモード,Flash Boot Modeはプログラムを実行すると言うモード

mode GPIO 15 GPIO 0 GPIO 2
UART Down load Mode LOW LOW HIGH
Flash Boot Mode LOW HIIGH HIGH

表を見るとわかるように,今回はGOPIO 0ピンの状態だけで二つのモードを遷移することになる.

これとまたもう一つ問題がある.実は,このESP8266にあるRSTピンもプログラムを書き込むためには,少し細工をしなければならない.

qiita.com

この記事にもあるように,ブートローダーモードに切り替えるために,ピンをリセットする必要がある.

リセットするには、 RST を1度 GND に落とさなければならない.

二つのモードを遷移するようにGPIOピンのHIGH, LOWを切り替え,その上リセットスイッチを作らなければいけない. めんどくさいね

そのためにプルアップ回路を使用して,モードを遷移できるようにする.

プルアップ回路

プルアップ回路は,デフォルトの状態がHIGH, ボタンなどが押された瞬間だけLOWになると言う回路.

今回持っているちょうどいい抵抗が4K7Ωしかなかったので,4K7を使って,プルアップ回路を組む.

これをESP8266に追加してあげると,ボタンを押している時には書き込みモード,

ボタンを離している時はプログラム実行モードと二つの状態を簡単に行き来することができるようになる.

また,ボタンを押すと,リセットがかかり,プログラムを書き込むことができるようにもなる.

f:id:flying_hato_bus:20171211100043p:plain

プルアップ回路は回路図的にはこんな感じ.

実際にテストしてみるとこうなる,今回はLEDを繋げてHIGH, LOWを見た.

この動画を見ればわかる通り,

  • 何もしない -> OUTPUT は HIGH になって LED が点灯
  • ボタンを押す -> OUTPUT が LOW になって LED が消灯

という回路になる.

GPIO0とRSTピンの二つに,プルアップ回路を組み込んであげて.書き込む前に

  • GPIO0をLOWにする(GPIOのボタンを押したままにする)
  • RSTピンをLOWにしてリセット (RSTのボタンを押して離す)
  • GPIO0をHIGHにする(GPIO0のボタンを離す)

ここまでするとプログラムを書き込みができるようになる.

電力問題

これで無事書き込めるーーーーー!!!!!と思ったら大間違い.

実は,ESP8266はめちゃくちゃ電流を必要とする.

ESP8266の消費電流の徹底調査 – Ambient

このページにあるように,立ち上がりの時にめちゃくちゃ電流を必要とする.

電源オンの立ち上がり時に200mA程度の電流が流れる

とある,USB to serial変換基盤から給電できるのは,出ても80mAくらい.

ぜんぜん足りないため,三端子レギュレータと言うものが必要になる.

akizukidenshi.com

こんなやつ

こいつは,小さい電流を大きい電流に変換してくれるスゲーやつ.

こいつを USB to serialのVCCに繋げて,ESP8266が必要としている電流に足りるくらいの電流にする.

ちなみに,三端子レギュレータは発振してしまうので,目当ての3.3Vよりも電圧が少し高くなる(出力電圧に波があり,目当ての電圧にすることが難しい)

そのため,コンデンサなどを使って整流してあげる.

というわけで以下のような回路を電源側で作ってあげる.

f:id:flying_hato_bus:20171214181543j:plain

青い方のコンデンサは 0.1 uF, 黒い方のコンデンサは 47uFのコンデンサを使用している.

このような回路を使うと,黄色の線から3.3V を最大 1Aまで使用できる.

ここまで回路ができたらあとは書き込みができる

全体像

全体像としてはこんな感じ.

Frizingで書いたのはこちら

f:id:flying_hato_bus:20171214175730p:plain

白いボタンがGPIO0に繋がっていて,赤いボタンがRSTに繋がっている.

モードセレクト等でいじるために必要なピンは全て4K7で HIGH LOWにさせている部分に注意する.

USB to serialでシリアル端子に接続して,あとは書き込みをするだけ.

書き込みとコンパイルを一度にする.

platformio.iniと言うファイルは最初にこのような記載がされている.

f:id:flying_hato_bus:20171214165934p:plain

これに targets = uploadというのを記載すると,コンパイルとプログラムの書き込みが一気にできるようになる.

f:id:flying_hato_bus:20171214170105p:plain

書き込み

ここまで来てようやく書き込みができる.

書き込み方としては

  1. GPIO0をLOWにする(GPIOのボタンを押したままにする)
  2. RSTピンをLOWにしてリセット (RSTのボタンを押して離す)
  3. GPIO0をHIGHにする(GPIO0のボタンを離す)
  4. terminalに platformio run を打ってプログラムを書き込み

これでESP8266にプログラムをアップロードできる.

ボタンを何回か押す必要があるけど,波動拳を打つよか簡単です.

書き込みが成功するとこのように [SUCCESS]と出る.

f:id:flying_hato_bus:20171214183201p:plain

実際に動かすとなるとこんな感じ

上で書いていたプログラムをそのまま動かしただけ. 配線のジャングルで死にそう

ということで初期設定 & 回路の作成はここまでで終了.

WiFi に繋いで http get

ESP8266系統はArduinoのライブラリが普通に動くので.Arduinoのライブラリでhttp getをしていく.

ライブラリの導入方法

platformioはコマンドライン上からライブラリのインストールができる.

今回はHttpClientが欲しいので

platformio lib search HttpClientでどのようなライブラリがあるのかを確認できる.

めちゃくちゃ出てくることなどがあるので

platformio lib search HttpClient | less

などで見た方が見やすい.今回は

f:id:flying_hato_bus:20171214185308p:plain

66のこのライブラリを使用する.

インストールのためには

$ platformio lib install Library ID

でインストールできるので.今回は

$ platformio lib install 66

でインストールができる.

というわけでHttpClientが使えるようになった.

あとはただコーディングしていくだけでなんでも作ることができます.

応用

今回はこれを応用して.

扉の開閉を感知して,僕の個人的なslackで教えてくれるくんを作ります.

まさにIotって感じだ...

と言うわけで作っていく.

slackはwebhookにjsonをPOSTすると,そのチャンネルに自由に投稿をすることができるので,今回はこれを使用します.

テスト

webhookのURLの取得方法は色々な人がやっているので,各自で調べてください.

ここではwebhookのURLが取得できたと言うことで進めていきます.

実際にwebhookで投稿ができるかテストをする.

vimmessage.jsonを作成します.

こんな感じでjsonを書きます.あとはこれをcurlなりでwebhook用のURLにPOSTすればいいだけ.

POSTの方法としては

curl -X POST "<Webhook URL>" -d @message.json

でPOSTができる.実行するとこんな感じで投稿されているはず.

f:id:flying_hato_bus:20171214232032p:plain

これをESP8266にやらせればよい.あとはリードスイッチをESP8266に接続する.

リードスイッチ

リードスイッチは扉の開閉などを検知できるセンサ.

Amazon CAPTCHA

こんなやつ

これをESP8266のGPIO12に接続した.

このセンサは磁力によってHIGHかLOWかを検知することができる.

くっついていたら 0を出力し,離れたら1を出力する.

ESP8266はこれを見ておいて,センサーが1を出力したらwebhookにjsonをPOSTするようにする.

というわけで実装に移す.

リードスイッチの配線

リードスイッチをプルダウンでGPIO12に繋げる.ここでの抵抗は4k7にした.

f:id:flying_hato_bus:20171215160607p:plain

抵抗的には1k以上だったらなんでも大丈夫.

(カラーコードわからない人は,三番目が赤色だったらだいたい大丈夫だと思ってもらえるとありがたい)

上で作った回路にリードスイッチを繋げるだけなので,上から順番にやって来ている人はちょこっと回路を増やすだけですね.

最終的な回路はこうなる.

あのまっさらなブレッドボードはどこへやら...

と言うわけでコーディング.

webhookのURLとかにPOSTする情報などを書いていくだけ.

実際のコードはこのようになっています.

ここで注意するのはWI-Fi機器の周波数帯.2.4GHzなら普通に動いてくれるが,5.0GHz帯には対応しておらず.うまく接続ができない.

これを書いたら.実際に ESP8266に転送をする.

転送をして,wi-fiに繋がったら,実際にリードスイッチを動かしてみる.

すると,シリアルモニタにはこんな感じの情報が流れて来ているはず.

f:id:flying_hato_bus:20171215161936p:plain

一番最初の Connecting の後ろには,設定したwi-fiSSIDが書かれていて,次のURLで,実際に叩いたURLが書かれている.

そうすると,200が帰って来て,リクエストが成功したとなる.

実際にリクエストが成功して,slackに投稿がされると.

f:id:flying_hato_bus:20171215162227p:plain

ちゃんと投稿がされていることが確認できる.

実際に動かした動画がこれです.

見たらわかるように,扉を開くとKaihei-Oshiete-Kureru-Kunが「トビラガアイタヨー」と言ってくれています.

というわけで,最近はやりのIotをArduino互換機でできました.

これで家の防犯とかが簡単にできるようになりますし.

他のセンサーを組み合わせたりするともっと他のこともできるようになります.

例)

  • 赤外線センサをつけて,何かが動いたら通知を出す.
  • 室温センサをつけて,家の気温を一定間隔で通知

色々な可能性を持っているESP8266でした.

今回はESP Wroom 02を最初からやる記事でした.

これを使って皆様がIotに興味を持ってくれますように.

どうもありがとうございました.

今回やった内容をgithubにて後悔しているのでそちらも参考によろしくお願いします.

github.com

Aizu LT 0x09に出た

出てきた.そして発表した.

今回作ったものの紹介も兼ねて,今回の記事を書こうと思います.

今回作ったものは Slack bot を作りました.その名も Hatsonくん.某IBM人工知能とグラハムベルの助手のワトソンくんをかけています.

f:id:flying_hato_bus:20171112165306p:plain

なぜ作った

11月11日にLT会が行われる予定だったんですが,LT会が開催されるのを11月10日の夜9時ごろに知りました.

実は来週にもLT会を控えていて,それと予定を勘違いしていました.

時間がない

ということで,以前ちょっと作ってそのまんまにしていたSlack Botを急遽作ることに.

最近のあくんが「自分のslack teamを作って,好きなASMR配信者の配信開始の時間に通知送ってくれるようにしたらね,捗ってしゃーない」って言っていたのと,webの知識を取り入れたいと思っていたのでAPIを叩く練習にもちょうどいいかなと思って,これを作ることにしました.

使ったもの

  • サーバー Raspberry pi 3
  • 言語 python3 (ver 3.4.5)
  • 使用ライブラリ slackbot
  • 使用API OpenWeatherMap Google calender API

サーバーとして使ったのは安心と安定のラズパイ,どうせずっと起動させるしちょうどいいですね,言語はpython3,ライブラリにめちゃくちゃ手軽にslackbotを作ることができるライブラリがあるのでpythonを使った.(pythonしか使えない人でもある)

使用したライブラリはこちら

github.com

slackbotにリプライ送ったり,設定した言葉を発言すると,それを受け取って,任意の行動をしてくれます.

今回は「〇〇の天気」と言ったらその場所の天気を表示してくれるようにしました.Google calender APIを叩こうと思いましたが,うまく叩けませんでした,

実装

作成方法はラズパイをセッテイングして,python3にして,ライブラリを入れればおk.

pyenv install 3.4.5でpython3.4.5にバージョンをインストールして,pyenv global 3.4.5にして,sudo pip3 install slackbotでライブラリを入れられます.

slackbot 用のディレクトリを作って,ファイルを以下のように設定します.

f:id:flying_hato_bus:20171112174416p:plain

最低限動かすならば,以下のようにしていく. run.pyに以下のように記載します.

from slackbot.bot import Bot
def main():
    bot = Bot()
    bot.run()

if __name__ == "__main__":
    main()

つぎはslackbot_settings.py

# botアカウントのトークン
API_TOKEN = "xxxx-xxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxx"

# このbot宛のメッセージで、どの応答にも当てはまらない場合の応答文字列
DEFAULT_REPLY = "ポッポ〜(意味不明)"

# プラグインスクリプトを置いてあるサブディレクトリ名のリスト
PLUGINS = ['plugins']

これだけで動いてしまうのでめちゃくちゃ楽だった.

python run.pyでもうslackbotを起動できる.

f:id:flying_hato_bus:20171112181141p:plain

こんな感じで動いてくれる.かわいいね.かわいいんだよ.ほら!!!かわいいだろ!!!かわいい!かわいい!

かわいいって言えよ!!!! なあ!!!

これからはハトソンくんはかわいいと定義します.

そんなことは言わないで,ここからbotを育てて行きます.

使う関数は以下のを流用していけばなんとかなる.

from slackbot.bot import respond_to     # @botname: で反応するデコーダ
from slackbot.bot import listen_to      # チャネル内発言で反応するデコーダ
from slackbot.bot import default_reply  # 該当する応答がない場合に反応するデコーダ

@respond_to("hoge")
def mention_func(message):
    message.reply('I catched hoge.') # メンションをつけて返事する.

@listen_to('hogehoge')
def listen_func(message):
    message.send('Someone posted hogehoge')      # ただ投稿をするだけ
    message.reply('Are you posted?')                           # メンションをつけて返事する

この二つで大体のことは事足りる.

例えば時間を知りたかったら,timeとかdatetimeとかをimportして.

f:id:flying_hato_bus:20171113104821p:plain

こんな感じに現在時刻を取得,POSTするようにすれば.

f:id:flying_hato_bus:20171113104938p:plain

時間を教えてくれるようになる.

天気情報の取得

天気の情報の取得には OpenWeatherMapを使用した.

openweathermap.org

日本国内のAPIを使おうとしたが,有料なのといい感じのが見つからなかったのでこれを使用した.

有料版もあるが,無料版にした.

メールアドレスを登録してちょっとやればAPIキーを発行できる.

料金体系はこんな感じ,まあ一人くらいだし一分間に60もAPIを叩くことはないでしょうということで,無料版にした.

f:id:flying_hato_bus:20171113105645p:plain

基本的にはhttp://api.openweathermap.org/data/2.5/forecastというURLのエンドポイントにいろいろ付け足していけばAPIを叩くことができる.

都市の天気を知るためには,二つの方法があった.一つは都市名を指定する方法,もう一つは緯度経度を指定する方法.

都市名でやろうとしたら結構都市名を検知するところがガバガバで,きちんとした都市の結果が表示されなかったので,

ある程度ガバガバでも緯度経度を算出してくれるpythonのGeocoderでやった.

地名を入れてくれると,緯度経度が 返ってくるのでとても便利.

例えば,会津若松市の緯度経度を知りたかったら.

from pygeocoder import Geocoder
address = '会津若松市'
results = Geocoder.geocode(address)
print(results[0].coordinates)

result = Geocoder.reverse_geocode(*results.coordinates, language="ja")

これで,緯度経度,住所が返ってくる.今回は会津若松市の市庁舎の住所が返ってきた.

print(result)

=> (37.4947611, 139.9298096)
=> 日本、〒965-0872 福島県会津若松市東栄町3−46 会津若松市役所本庁舎

タプルで緯度経度が返ってきて,あとはこれをエンドポイントにくっつけてあげて,APIを叩く.

あとはHatsonくんがどうやって都市名を取得するかだが,slackbotライブラリの反応する言葉には正規表現が使えたので.

「(.*)の天気」で「〇〇の天気」の「〇〇」を抽出できる.

実装としてはこうなる. f:id:flying_hato_bus:20171113111414p:plain

mode = jsonとしているので,json形式でデータがくる.

データとしては

{
    'coord': {'lon': 139.93, 'lat': 37.49}, 
    'weather': [{'id': 500, 'main': 'Rain', 'description': 'light rain', 'icon': '10n'}], 
    'base': 'stations', 
    'main': {'temp': 10.11, 'pressure': 929.48, 'humidity': 80, 'temp_min': 10.11, 'temp_max': 10.11, 'sea_level': 1017.83, 'grnd_level': 929.48},
    'wind': {'speed': 2.01, 'deg': 252.004}, 
    'rain': {'3h': 0.725},
    'clouds': {'all': 92}, 
    'dt': 1510342842, 
    'sys': {'message': 0.0101, 'country': 'JP', 'sunrise': 1510262103, 'sunset': 1510299179},
    'id': 1854742,
    'name': 'Ōdera',
    'cod': 200
}

と返ってきていて,ここでweatherとtempを表示している.ここに返ってきている情報は全部使用が可能なので,もっといろんなことに使える.

実際Hatsonくんはどうかと言うと...

f:id:flying_hato_bus:20171113113359p:plain

会津の天気はまだしも,平壌の天気も取得してくれる.

神だった

さすがHatsonくんでした.これはすごい,濡れた.

こんな感じで天気の部分は実装した.あとはgoogle calenderだ!と思ったけど,なんか触ってみたらエラーしか返ってこないので悲しくて,時間がなくなってきたのでやめた.

今後の展望としては,なんとかしてGoogle calender APIを叩いて今日やることの確認,ゴミだしの日を教えてくれるように変更したい.

というわけでこれをLT会で発表してきた.発表してきた時のスライドはこちらになります.

www.slideshare.net

API叩くの難しいと思いました.おわり!!!

Mashup Awardsに出てきた

ブログに書くまでがハッカソン

という言葉を,今回のMashup Awardsで聞いたので,このブログ記事を書くことで今回のハッカソンを閉じることができそうです.

そもそも,Mashup Awardsってなに?

MashupAwardsとは、2006年にはじまった日本最大級の開発コンテスト。様々なデバイスAPI、ハードウェア、技術をMashupし、さらに人や企業もMashupしながら、作品を生み出すことを楽しむ「ものづくりの祭典」です。パートナー企業は60社を超えます。最優秀賞は100万円!賞の数が多いこと、全国でイベント開催していることも特徴です

*About MA 2017より引用.

そんな日本最大級の開発コンテストが,僕の今いる会津若松市で,2017年10月28/29日で開催されました.

Mashup Awardsについて

午前10時に開始ということで,9時30分ごろに会津大学に集合.ネームプレートのようなものが渡され,ニックネームと,自分が持っている技術を書かされる.

ハードウェア大好き人間(できるとは言っていない)なので,持っている技術として書くものはArduinoRaspberry pi,そしてPythonを書く.

今回作りたかったもの

今回僕が作りたかったものとしては, 自動で動く赤べこです.

何回か作っていますが,赤べこネタはこれで最後くらいかなと思いまして,けっこう頑張って行こうと思いました.

過去の赤べこたち

今回は,vivosmart HRJを使用して,心拍数と合わせて首の動きをリアルタイムにリンクさせようとしていました.

作ることになったもの

心拍数データを使用した,健康管理サービス(with 赤べこ

模式図としてはこんな感じ.

f:id:flying_hato_bus:20171030210340j:plain

スマートウォッチから得てきた心拍数のデータをRaspberry piで取得.サーバーに送信し,Raspberry piがデータを取得,赤べこに反映させる また,モバイルアプリやwebサービス共連携し,1日の心拍数データなどを取得することもできる.

こんな感じでした.

大学でよくつるんでいる3人と合流し,4人で開発がスタート.

4人の内訳として,ハードウェア(ぼく),サーバーサイド,webフロント,モバイルアプリと,バランスの取れたチームだと思いました.

ほかの3人も,同様にブログを書いてくれていると思うので,今回は僕が実装したところ,気づいたところを書きます.

最初にやったことは,スマートウォッチとRaspberry piの連携.

参考にしていたのは,ここ.わかりやすい上に,1時間と少しくらいで全部実装ができた.

それくらいの時間でだいたい3時ごろ,そのあとそのあとに迫っていた電子工作部門で必要な部品を調達したり,別に買い物をしたりしてから,ようやくステッピングモータに.

一番手間取ったのがこのステッピングモータの部分でした.

まともに使えるライブラリが存在しませんでした.

使用したモータードライバはこちら

上の動画で動いている赤べこはこちらのドライバをArduinoで使用していました.

今回はこれをRaspberry piで動かそうとしました.

とりあえず,githubやら,ブログ記事やらに書かれている奴を片っ端から動かしていってみましたが,一向に動きませんでした.

これで大学でできる時間の大半を使い果たし,動かないまま僕の家への開発へ.

ずーっと探して試行錯誤するのにも面倒だと思って,「一から実装するか!!」と一念発起したらなぜか30分もかからず動いたので,今回はこれを書こうと思います.

EasyDrive

今回使用した easydriverの模式図です.

f:id:flying_hato_bus:20171031114834p:plain

ピン名 用途
PWR IN (GND / M+) モータへ電源を供給する
STEP 立ち上がりエッジでモーターが動く,パルス幅1ms min.
DIR 回転方向を決定
MS1, MS2 マイクロステップの設定。デフォルトは共にプルアップされており、1/8ステップ。
ENABLE HIGHにすると出力が止まる.今回はずっとLOW
RST 全シーケンスをHome Stateに設定,出力は停止,Reset端子がHighになるまでStep入力は無視
PFD 次の出力電流が前回より少なくなる場合,PFDピンへの入力で電流の抜け方が変化.VCCにプルアップされているので slow decay modeになっている。とりあえず非接続でよい
SLP Sleep機能,非接続でよい
MOTOR モーターに接続する。A/Bがそれぞれ一組
5V 5V出力
APWR (SJ1) ここをショートさせると外部からA3967へVCCを給電できる
3V/5V (SJ2) VCC設定。ショートさせると3.3V, オープンだと5Vになる
TP1 電流調整
  • バイポーラステッピングモータ用
  • 入力電圧は8V~30V (5V系), 6.4V~30V(3.3V系)
  • 出力は最大30V, 150~750mA
  • 1/1, 1/2, 1/4, 1/8 マイクロステップ動作対応
  • 特別な電源シーケンスは不要
  • (チップの)貫通電流防止、加熱防止、低電圧保護

とまあ,今となって見ると実装が簡単そうなもの.

実装

配線としてはこんな感じ.Raspberry piに繋げるのはGPIO23,24,GNDの3ピンくらい

f:id:flying_hato_bus:20171031175949j:plain

import RPi.GPIO as GPIO
import time
import sys

GPIO.setmode(GPIO.BCM)

GPIO.setup(23,GPIO.OUT)
#23 is DIR pin
GPIO.setup(24,GPIO.OUT)
#24 is STEP pin

class stpmotor():
    def __init__(self):
        pass 

    def Drive(self, rpm):
        one_rot = 200
        l = rpm * one_rot
        delay = 30/(2*float(l))
        steps = l/6 #rotato to 5 sec
        for x in range(1,steps):
            GPIO.output(24,GPIO.HIGH)
            time.sleep(delay)
            GPIO.output(24,GPIO.LOW)
            time.sleep(delay)

    def inv_Direction(self):
        GPIO.output(23, not GPIO.input(23))

if __name__ == '__main__':
    Motor = stpmotor()
    Motor.Drive(YOUR_VALUE)
    GPIO.cleanup()

これで動きます.細かい話はgithubリポジトリを参考に.

github.com

実装した感想なのですが,DIRで回転方向を決めて,STEPピンに矩形波を入れてあげればとりあえず動く.

Drive関数で矩形波を作成して動かしている.

ステッピングモータを動かすために必要なのはステップ数と,ステップ角,そしてちょっとした計算能力です.

ステップ角は一回のステップ(矩形波)で動く角度です.大体は1.8度とかになってます.

ということなので モータの回転量[°] というのは

モータの回転量[°]= モータ固有のステップ角[°]× 指令パルス数

一回転するためには 360/1.8 = 200 回パルスを送ってあげればいいことになる.

それを指定回数分回すことになるので,rpmを設定して.回転数などを取得します.

あとはforの求めたdelayを使ってHIGH,LOWを入れ替えます.

そしたら多分こうやって動く

こんな感じで動いてました.

辛かったこと

webの知識が全くないです

pythonでろくにPOSTも投げられませんでした.のあくんにめちゃくちゃキレられました.

API叩くなりして,これからもうちょっとwebの知識を入れていきます.

できたもの

こんな感じです.5秒に一回サーバーにGETリクエストをして,取ってきた情報から赤べこの首を動かしています.

今回はここら辺で終わり.もうちょっとwebの知識を入れてからハッカソンに臨もうと思いました.

金魚を飼い始めた.あと色々

はとバスです.

長いようでめちゃくちゃ短かった夏休みも終わり,絶賛授業とバイト先の案件で疲弊しているはとバスです.

授業の方はまだなんとかなるんですが,バイト先のコードがなかなかきついですね.

今回初めてgithubをゴリゴリ使用することになったので,今まではぼっちコミットしてた人には少し辛いものがあります.

やった実績として

  • masterにpushしてめちゃくちゃ怒られる
  • git rmgit mvでファイル管理してなくて面倒になった
  • コミットメッセージがいいのが思い浮かばなくてよく注意される

というような地雷プログラマーになってしまい,バイト先での人権が危ぶまれています.


ストレスの話

今僕は二年生で,そろそろ研究室配属ということで,研究という大きな目標も増えつつあります.

というわけでこれから襲ってくるのがストレス過労の二つです.

f:id:flying_hato_bus:20171014220822p:plain:w250 f:id:flying_hato_bus:20171014220833p:plain:w250

昨今,ストレス社会やら過労死やら暗いニュースばかりで,家に帰ったら死んでたとかざらにありそうです.

実際僕もストレスを貯めやすいというか,とにかく一人で解決しようとする人なので,何かストレスを癒していただくものがないとやってけないと思います.

というわけで夏休みが終わろうとしているタイミングで何かストレスがなくなるものをということで考え始めました.

ストレスがなくなるものとして以下の要件を満たすものを探し始めました.

  1. 何かを続けるのだったらある程度手のかかるもの
  2. 自分が嫌な思いをしなくても楽しめるもの
  3. できれば家の中で何かをやりたい
  4. 夜中にまで引きずらないもの
  5. お金はあまりかからないもの

1 なのですが,これは個人的に今追われているタスクを忘れるくらいに何かをするということからきてます.

何かに追われながらやるというのは精神衛生に良くない.ということで,タスクを忘れることができる(動いて忘れる or ぼーっとできる)ものがいいということでこれは外せないものでした.

2ですが,ストレス解消なのにストレス溜めてどうしろということです.

3ですが,家から出たくないというのもあるのですが, 絶対家に帰らなくてはいけない という状況を作り出すためにも必要でした.

大学にはフィットネスルーム的なものがあり,ベッドも置かれています.卒論に追われている先輩などでは,そこで寝泊まりしている人もいるのですが,さすがに家には帰らないといけないということで,3が出てきた感じです.

4,5についてはその通り,睡眠時間を削ってまでするようなものはしたくない,大学生だしお金もない.ということで出てきます.

こんな感じで小学生がおもちゃ売り場で駄々をこねるように,ストレスを解消するものの条件をリストアップしていきました.

そこでなぜ 金魚 という決断をしたかをちょっとお話しようかと.


金魚の話

僕の実家は,僕のじーちゃんが金魚とか熱帯魚とかを飼うのが好きな人です.

小さい頃もじーちゃんが金魚を育てていて,金魚というものが身近にありました.

個人的には金魚というのの中で青文魚という品種が好きなのですが,これも僕のじーちゃんのおかげです.

先日,この方のツイートを拝見しました.

実家で泳いでいたのはここまで見事なものではなかったですが,これです.

この渋い感じが好きでした.実家にいたのはもうちょっと若いものなので青味がかった灰色をしていましたが...

ちなみに,金魚を飼うきっかけというのは,これだけじゃありません.

個人的な話なんですが, 彼女ができました

実際アメリカ行く直前にできてたんですが,この場を借りて報告します.

彼女さんなんですが,金魚が好きな子です.彼女さんの推しによるのもちょっとありました.

魚ならば犬猫のように鳴いたりとか匂いが付いたりもしませんし,世話のために家に帰る習慣がつきます.

水換えなども結構大変ですが,ブルカミア でなんとかするということで解決.魚を見る時にぼーっとすればストレス解消にもなるだろうと,半ば彼女に脅されながらも金魚にしました.


金魚を飼うにあたって

実際は設備とかあんまりいらなくて,なんなら大きめのバケツに水はって,ブクブクさせてるだけでも飼育は可能です.(実家だと漬物用の大きなタルと,水槽で飼育してました)

水槽

さすがにタルで飼うわけにもいかないので,観賞用にと水槽はそれなりにいいやつを購入しました.

www.amazon.co.jp

安定のテトラ,水槽はピンキリですが角が目立たないラウンドのものを購入しました.45cmぐらいが スペース,値段的にちょうど良かったので45cm水槽で飼い始めることを決意しました.

ソイル(底に敷く砂)

www.amazon.co.jp

これが底に敷く砂,なんかバクテリアがめちゃくちゃ居心地がいいものらしく,そのバクテリアのおかげで水が綺麗なままだそう.

ろ過装置

www.amazon.co.jp

www.amazon.co.jp

この二つで水の濾過をする,水槽の底に配置して,ブルカミアで濾過という感じ.安いけどそれなりに動いてくれるそうなのでこれにした.

ライト

www.amazon.co.jp

別にライトなんて洒落たもの必要ないんですが,夜に見たいというのもあり購入しました.

エアレーション(ブクブク)

www.amazon.co.jp

www.amazon.co.jp

ブクブクのセット,フィルターが壊れた時などの非常用にあれば良いかなということで,これも最低限にしました.(今は補助として使用中)

あとはカルキ抜きとかちょこまか買って,占めて2,3万円というところでした.

魚を購入して来る

水槽の立ち上げもすぐに済ませて,少しの間魚を入れずに,水を回してから,ようやく金魚を購入する.

青文魚が欲しかったんですが,結構マイナーなお魚さんなので金魚専門店さんにもいませんでした.

ここで店主さんに「あれ好む人はあまりいないね」と言われた

結局お金もないし,ランチュウの当歳魚を飼育するほど技量はないので,お手頃なオランダシシガシラ,ニホンシシガシラを購入した.

二匹で2000くらいだった気がする.もっと値段張ってもいい感じのお魚なのになって印象.

彼女さんの実家の方でもオランダシシガシラを飼っているそうで,僕の家にいるシシガシラさんたちを溺愛してる感じです.

今はこの二匹,というかこれ以上増やすのもどうかと思うのでこの二匹をできるだけ長く飼ってあげたいと思う.


実際飼ってみてどーよ

生活にメリハリがつくようになった(気がする).

金魚の餌は一日一回でも大丈夫なので,朝起きた時にあげている.

遅くとも10時にはあげている感じなのでその時間には起きられている.

あとは帰る時間.

ライトはつけてあげたほうが金魚も喜ぶそうなので,餌やりのちょっと前から電気をつけて,それから夜の10時ごろに電気を消すことにしている.

これでできることが,友人宅で馬鹿騒ぎできなくなった.

これはしっかり睡眠を取ることに貢献してくれてるし,友人に「ごめん,金魚がいるから家帰るわ」

と,金魚のおかげで帰ることができるようになった.金魚様々.

実際何か行き詰まった時とかに見るものが増えもしたし.イスをニトリで購入したら,そこでちょっと優雅にお茶を飲めるようにもなった.

結構QOLにも貢献してくれてる感じがしてくれて,「生き物ってしゅごい...」って感じです.

悩みのタネとしては僕の家に来た彼女さんが水槽の前から動かなくなりました.

というわけで,では.