tag:blogger.com,1999:blog-75264838482137992322024-03-19T11:47:39.163+09:00チラ裏じてんしゃPhttp://www.blogger.com/profile/01771693136106799787noreply@blogger.comBlogger28125tag:blogger.com,1999:blog-7526483848213799232.post-89710281609944559652023-10-07T22:36:00.003+09:002023-10-07T22:36:26.225+09:002023年夏アニメの総括<div style="text-align: left;">夏期も終わって秋アニメが始まりましたね。<br />秋アニメはきららアニメがあるので期待しています。</div><div style="text-align: left;">大衆アニメですが、毎エピソード盛り上がりがあるSPY FAMILYも楽しみですね。</div><div style="text-align: left;">夏アニメは何本か見ていたのでそれぞれ簡単に感想を。</div><div style="text-align: left;"><div>誰が見るねんという内容なのですが、</div><div>人に何かアニメを勧めるときにメモがほしいなと思ったので、それだけです</div></div><div style="text-align: left;">核心部分のネタバレもあるのでご了承ください。</div><div style="text-align: left;"><br /></div><div style="text-align: left;"><br /></div><div style="text-align: left;"><h4 style="text-align: left;">シュガーアップル・フェアリーテイル</h4><div>途中からよくわかんなくなってしんどくなった</div><div>絵作りは結構ちゃんとしてると思うが、</div><div>間延びしててセリフや声に感情入ってないため</div><div>1話1話が長く感じて見ていてキツかった</div><div><br /></div><h4 style="text-align: left;">うちの会社の小さい先輩の話</h4><div>「奥手な二人が気づいたら付き合ってました系」</div><div>同期ちゃんや先輩がうざいよりライトなラブコメ。</div><div>登場人物全員いいヤツなので安心して見られるが、</div><div>それぞれキャラが立ってて役割がある。</div><div>NEW GAME!の毒気を抜いたような作品で、</div><div>疲れている人はこんなのを見ておくべき。</div><div>様式美として予定調和になる部分とそうならない部分のバランスがいい</div><div>猫になる先輩すこ</div><div><br /></div><h4 style="text-align: left;">スパイ教室</h4><div>今期はなかなか極上だった。</div><div>自分の武器がそれぞれなんなのか理解することで強くなっていき、</div><div>バラバラだったメンバーが、</div><div>それぞれが真価を発揮できるようになることで</div><div>お互いを認め合える関係になっていくさまが素晴らしかった。</div><div>毎話毎話、大どんでん返しをしてくれるので</div><div>短い尺の中で起伏があり見応えがあった。</div><div><br /></div><h4 style="text-align: left;">AIの遺電子</h4><div>ヒューマノイドが人間と同等に扱われて共生する社会。</div><div>生命倫理のような概念もヒューマノイドにも同様に</div><div>引き継がれたAI社会の社会問題を描くが、</div><div>人間特有の普遍的な問題や生々しいトラブルは</div><div>そのままというところがリアルだった。</div><div><br /></div><h4 style="text-align: left;">好きな子がめがねを忘れた</h4><div>まず言いたいのは、メガネキャラのメガネを安易に外さないでほしい。</div><div>1話OP前後の不自然な3Dモーションに不安になったものの、</div><div>半分くらいは同ポジの2人の画角なので2話以降は気にならなかった。</div><div>これも「奥手な二人が気づいたら付き合ってました系」アニメ。</div><div>主人公の生々しいリアクションが甘酸っぱいリアルな青春をよく描いている。</div><div>実際中学生ってこんな感じだと思う。</div><div>サブキャラが必要以上にかわいく描かれていないのは好感。</div><div>ちょっとリアル寄りでむしろ好きかも。</div><div>ただ、エピソードごとの前後の繋がりが薄く、</div><div>五月雨な短編集になっていることもあるが、</div><div>「僕ヤバ」ほどの駆け引きはなくて、引き込まれるような魅力は感じなかった。</div><div>心情表現が浅い(顔アップにナレーション程度)ので深みはない。</div><div>「久保さんは僕を許さない」よりリアルではあるが、</div><div>主人公に共感はするけど、感情移入まではできない。</div><div><br /></div><div><br /></div><h4 style="text-align: left;">白聖女と黒牧師</h4><div>餃子のコスプレみたいな格好したロリ聖女がかわいい。</div><div>大事件は起こらず、幸せな日々を歩んでいるが、</div><div>それぞれのキャラクターの暗い過去を見せることで、</div><div>その結果幸せな現在があることを示すのは</div><div>ある種の希望を与えるいい作品なのかもしれない。</div><div>ただ、エピソードが全体的に弱いのでそこまで説得力はない。</div><div>現実的ではある。</div><div><br /></div><h4 style="text-align: left;">無職転生</h4><div>前期から自暴自棄になっていた主人公がギルドの信頼を得て</div><div>社会性を取り戻すものの、体調の異変に気づく</div><div>ここまではフラグ立てでつまらない盛り上がりに掛ける内容だったが、</div><div>伏線立てで必要な内容だった。</div><div>魔法学園編が始まり、殺伐とした世界で学園物らしい</div><div>微笑ましい展開や多様な人間関係をテンポよく描いている。</div><div>シリーズ共通の最低なシーンを嫌に強調せずさらっと流してくるところも巧で、</div><div>大してストーリーは進んでいないものの毎回内容が濃く、</div><div>毎話毎話エピソード間をぶつ切りにせずに</div><div>シームレスに話が繋がっている脚本が最高でOPからEDまで見入ってしまう。</div><div>今期覇権</div><div><br /></div><h4 style="text-align: left;">ホリミヤ</h4><div>熟年夫婦のようなべったりせず付かず離れずなカップルのラブコメ。</div><div>今期は堀さんと宮村くん以外の人間関係や親のエピソードも多く</div><div>各キャラクターの魅力が出ていた。</div><div>テンポのよいコメデイの部分は見ていて心地良いが、</div><div>必ずペースを落としてじっくりキャラクターの心情を描くシーンがあって、</div><div>はっとさせられる。</div><div>サザエさん方式のテーマごとのエピソード集という内容だが、</div><div>最後に締めていてあ、終わったという驚きがあった</div><div>ここでも普段ぶっきらぼうな堀さんがいいことを言っていて沁みた。</div><div>見てない人は最終話だけでも前半後半のペースの違いを感じてみてほしい。</div><div><br /></div><h4 style="text-align: left;">Lv1魔王とワンルーム勇者</h4><div>今期ダークホース。</div><div>異世界おじさんのようなちょっとイレギュラーな世界観の四畳半ストーリー。</div><div>複雑な対立構造があるものの、正義の違いからのもので、</div><div>悪者がいるわけではないところが単純な勧善懲悪ではない深みを出していた。</div><div>ガサツな主人公ゆえシリアスにならずにギャグ要素も多く</div><div>テンポもいいので尺を感じないので一気見にも最適</div><div><br /></div><h4 style="text-align: left;">おかしな転生</h4><div>めちゃくちゃな作品だったが最後まで見てしまった</div><div>おかしは片手で数えるほどしか作っていない、</div><div>尺稼ぎの毎回共通のアバンなど、残念な要素が多かった</div><div>貧乏自治領主の息子としてお菓子の国にするために奮闘するだけで</div><div>お菓子は作らないのはタイトル詐欺だと思う。</div><div>父子の魔法能力が強すぎてご都合主義で、</div><div>チートでコインをたくさん集めている気持ちよさのような感覚で、</div><div>脳死で楽しむ箸休めとして見ていた。</div><div>もう少しお前は子供なんだからすっこんでろと虐げられて</div><div>徐々に認められていくみたいな展開があればまだ深みが出たと思う。</div><div><br /></div><h4 style="text-align: left;">私の幸せな結婚</h4><div>令和版おしんみたいな話かと思ったが、</div><div>異能力バトル要素という全く不要な要素が入っていることがわかりゲンナリした。</div><div>主人公に救いが訪れて少しずつ明るくなり自己肯定感を上げていくところはよかったが、</div><div>後半はこれもご都合主義な展開で、尻すぼみに終わった感がある。</div><div><br /></div><h4 style="text-align: left;">ライザのアトリエ</h4><div>3話くらいまで見た。</div><div>ゲーム実況動画で見た内容をほぼそのままアニメにしていて非常に内容が薄く野暮ったい。</div><div>一生飛ばせないチュートリアルを見ている感じで見ていられなかった。</div><div><br /></div><div><br /></div><div>その他に映画だと、アリスとテレスのまぼろし工場も見ましたね</div><div>なかなか見応えのある作品が多くていいシーズンでした。</div><div><br /></div><div>最近は、オーソドックスな異世界物を一つはニコニコでコメント付きで</div><div>ツッコミを入れながら見たりするのが恒例になっていたりします。</div><div>どれも大した山も谷もない展開なのですが、</div><div>数を見ているとたまに脳死で見られるものも</div><div>入れておきたくなるという不思議な現象です。</div><div>無職転生・リゼロのようなじっくり見られる大作ももちろん好きですが、</div><div>今期のLv.1魔王や異世界おじさんのような変わり種も続々出てきてほしいですね。</div><div><br /></div><div>また、どうしても見てしまうのが「奥手な二人が気づいたら付き合っていました」</div><div>系ですね。これは奥手なオタクのハートをガッチリ掴んでいると思います。</div><div>今期の好きな子がめがねを忘れた、ですが、本当に大したことしてないんですよ</div><div>ただちょっとしたことでドキドキしてしまう、</div><div>そんな経験って登場人物くらいの年齢までしかない限界独身男性は</div><div>見てドキドキしちゃうんですよね。</div><div><div>このフォーマットはまだいくつか出てくるのではないかと思います。</div></div><div><br /></div><div>来年には大室家の映画やゆるキャンなんかもあって秋期以降も忙しそうです。</div><div>最近ちょくちょくツイッターにシーズンごとの感想を書いているんですが、</div><div>せっかくブログがあるので、この形式で次期以降もまとめられたらと思います。</div></div>じてんしゃPhttp://www.blogger.com/profile/01771693136106799787noreply@blogger.com0tag:blogger.com,1999:blog-7526483848213799232.post-11791616528300063372023-01-08T16:17:00.002+09:002023-01-15T18:25:05.479+09:00UART to USB HID変換IC CH9329を使ってみた<div style="text-align: left;"><a href="https://blog.nyancotech.online/2021/05/usb-hid-uart-ch9350.html" target="_blank">以前にCH9350を使ってみました</a>が、今回はよりシンプルなバージョンが<br /><a href="https://akizukidenshi.com/catalog/g/gI-17539/" target="_blank">秋月電子で取り扱い開始</a>したので早速使ってみました。</div><div style="text-align: left;"><a href="https://akizukidenshi.com/catalog/g/gI-17539/">https://akizukidenshi.com/catalog/g/gI-17539/</a></div><div style="text-align: left;">今回秋月電子に登場したCH9329は、単方向のUART入力USB HID出力ができるICです。</div><div style="text-align: left;">以前使ってみたCH9350は、USB HID to UARTもできるのでやや用途が異なります。</div><div style="text-align: left;"><br /></div><div style="text-align: left;">幅3.9mmのSOP-16パッケージです。変換基板と一緒に購入しました。</div><div style="text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhH_cB27rWNtlT_IXvTpY8kDjjjgxR3p1Ve4DT_ct9H39Eire3T60KSHOzCR7ZiGT06K0fYfqq_HERQtG0vL1hBTXAnJshb2h-vtM91wBy9kgL5giIoAiFjnK5_-ExtAaoxUuAeqkzRvUsf-PDBWdYjJOcB1_0stu1IfUFQ7tAey0mNwhRudPjukqBB/s4032/PXL_20230108_011925568.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhH_cB27rWNtlT_IXvTpY8kDjjjgxR3p1Ve4DT_ct9H39Eire3T60KSHOzCR7ZiGT06K0fYfqq_HERQtG0vL1hBTXAnJshb2h-vtM91wBy9kgL5giIoAiFjnK5_-ExtAaoxUuAeqkzRvUsf-PDBWdYjJOcB1_0stu1IfUFQ7tAey0mNwhRudPjukqBB/w400-h300/PXL_20230108_011925568.jpg" width="400" /></a></div><br /><div style="text-align: left;"><br /></div><div style="text-align: left;">とりあえずこんな感じの回路で組んでみました。</div><div style="text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFvUwiVxodbagfNT26GH1QxtrXK--TAxip5LXAKz09bUBfXvhEsV7nlJ9ifeTmlZe7pjhvURxdvACsbzvJhKr2rpbyjgbWnnKQ1qmZg89pTKzr88p28Gm6b22XQo6ZccpyscE0jLWquqOQrKKJt_n-cqq_v8-Q5EnZ1YW4ULjy_0Hy3h0HEpc9mD8s/s1295/ch9329_sch.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1025" data-original-width="1295" height="316" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFvUwiVxodbagfNT26GH1QxtrXK--TAxip5LXAKz09bUBfXvhEsV7nlJ9ifeTmlZe7pjhvURxdvACsbzvJhKr2rpbyjgbWnnKQ1qmZg89pTKzr88p28Gm6b22XQo6ZccpyscE0jLWquqOQrKKJt_n-cqq_v8-Q5EnZ1YW4ULjy_0Hy3h0HEpc9mD8s/w400-h316/ch9329_sch.png" width="400" /></a></div><br /><div style="text-align: left;"><br /></div><div style="text-align: left;">3.3VとVCCをつなぐと3.3V駆動が可能ですが、</div><div style="text-align: left;">今回はUSBバスパワーで動かしています。</div><div style="text-align: left;">3.3Vレギュレーターが内蔵されているので、</div><div style="text-align: left;">ロジック用のプルアップなどはここから取れます。</div><div style="text-align: left;">MODE0とCFG0をGNDに落としていますが、</div><div style="text-align: left;">これにより後述の簡単モードになります。</div><div style="text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVzFoWtwALi0mCPfCcsR1BhGJEQOJnjUgfGr37CE1R0YGsM5q5L6h7Y2ncqDEY0wrWcorEryGFrMpq1joF3NNzJgTkkQWeoV3uuj_3rdcNC2_irifkF_5fCWys5NfcQ6iCkF7Q8gVNT3ZgW8VrAK_OlbsH0qIrDYFwwz2JpEWNp4mDSc33STUAHKfX/s4032/PXL_20230108_021612716.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVzFoWtwALi0mCPfCcsR1BhGJEQOJnjUgfGr37CE1R0YGsM5q5L6h7Y2ncqDEY0wrWcorEryGFrMpq1joF3NNzJgTkkQWeoV3uuj_3rdcNC2_irifkF_5fCWys5NfcQ6iCkF7Q8gVNT3ZgW8VrAK_OlbsH0qIrDYFwwz2JpEWNp4mDSc33STUAHKfX/w400-h300/PXL_20230108_021612716.jpg" width="400" /></a></div><br /><div style="text-align: left;">変換基板を使っているので例によってユニバーサル基板に組みました。</div><div style="text-align: left;">USBケーブルはありものをちぎって</div><div style="text-align: left;">デュポンQI互換コネクタを圧着してピンヘッダに接続しています。</div><div style="text-align: left;">手前の4ピンコネクタがUART入力です。</div><div style="text-align: left;"><br /></div><div style="text-align: left;">USB接続するとドライバのインストールが始まり、</div><div style="text-align: left;">標準USBキーボードとして認識しました。</div><div style="text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQntZf0BgmF6wLgK-vyeiOoKW1BPF7dNd-5Jt0Lvy4lxHR4cCVbcdP9z9uROblJEB-zX2MjVwrm6uBwwce5FxWZioEc0Jl-pG3Ri76rnrIi82HEbM28B9kMfphWapW2DNbEh_FCv_uvJNF9Vdzk5EVJfAy8Su983PX81AX7DJeWBWe9u3h5N9ruyEJ/s518/Fl6nlfGaAAEXavr.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="518" data-original-width="465" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQntZf0BgmF6wLgK-vyeiOoKW1BPF7dNd-5Jt0Lvy4lxHR4cCVbcdP9z9uROblJEB-zX2MjVwrm6uBwwce5FxWZioEc0Jl-pG3Ri76rnrIi82HEbM28B9kMfphWapW2DNbEh_FCv_uvJNF9Vdzk5EVJfAy8Su983PX81AX7DJeWBWe9u3h5N9ruyEJ/w359-h400/Fl6nlfGaAAEXavr.png" width="359" /></a></div><br /><div style="text-align: left;"><br /></div><div style="text-align: left;">さて、操作方法ですが、CFG0とMODE0をローに落としていることで、</div><div style="text-align: left;">・単体のキーボードとして認識させる</div><div style="text-align: left;">・ASCIIモードにする</div><div style="text-align: left;">という設定が行われます。</div><div style="text-align: left;"><br /></div><div style="text-align: left;">ASCIIモードというのはもっともシンプルなキーボードをエミュレートするモードで、</div><div style="text-align: left;">UARTから8N1の9600baudでASCIIコードを送ることで</div><div style="text-align: left;">USB側はそのままキーボードとして同じキーコードのキーストロークが入力されます</div><div style="text-align: left;"><br /></div><div style="text-align: left;"><br /></div><blockquote class="twitter-tweet"><p dir="ltr" lang="ja">ASCIIコード送るだけでキーボード入力される <a href="https://t.co/bhd8Y0xXdr">pic.twitter.com/bhd8Y0xXdr</a></p>— じてんしゃP (@jitenshap) <a href="https://twitter.com/jitenshap/status/1611932173455732736?ref_src=twsrc%5Etfw">January 8, 2023</a></blockquote> <script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script><div style="text-align: left;"><br /></div><div style="text-align: left;">M5StickCでSerial1.write('a');を200msごとにやってみると</div><div style="text-align: left;">こんな感じでキーボードとして入力が行われました。</div><div style="text-align: left;">UARTさえあれば結構簡単にキーボードになれるので便利なICですね</div>じてんしゃPhttp://www.blogger.com/profile/01771693136106799787noreply@blogger.com0tag:blogger.com,1999:blog-7526483848213799232.post-36901672527681147312022-12-17T23:10:00.011+09:002022-12-18T15:29:48.238+09:00東京オタクPOP UP ストアメモアニメグッズのPOP UPストアとか行く機会がちょくちょく出てきたので<div>ここにメモを書き足していく予定の項です<div><br /></div></div><h3 style="text-align: left;">POP UP ストアとは</h3><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3Wmoh5fhycf0atYcSnJ8KPW1PETy9km-EB87b7GQsv_82IaaB_XEJ2nsH4WpyxfkEzBLcJHeG1NydsM_vU3S-jbuIjJ1W-BzC62Ce6hPU4R7tUpc1AybSnh3kRlh7WfY2wyj1LkdTOykT3l0Mf4TDAcyXKN8AExLlX83vADR0hDlQUtBy5MjGplio/s4032/PXL_20221120_055749387.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3Wmoh5fhycf0atYcSnJ8KPW1PETy9km-EB87b7GQsv_82IaaB_XEJ2nsH4WpyxfkEzBLcJHeG1NydsM_vU3S-jbuIjJ1W-BzC62Ce6hPU4R7tUpc1AybSnh3kRlh7WfY2wyj1LkdTOykT3l0Mf4TDAcyXKN8AExLlX83vADR0hDlQUtBy5MjGplio/w400-h300/PXL_20221120_055749387.jpg" width="400" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div><br /></div><div>アニメやゲームなどの人気シリーズのタイトルオンリーで</div><div>キャラクターグッズを販売するイベントで、</div><div><div>期間は2週間から長いものだと2ヶ月くらいの期間で行われることが多いです。</div></div><div><br /></div><div>アニメ・ゲーム・ホビーショップのイベントスペースや、</div><div>商業施設のイベントスペースで常時さまざまなタイトルで開催されています。</div><div><br /></div><div>壁面いっぱいの大きなタペストリー・ポスター、等身大ボードの展示など</div><div>イベントらしい展示も魅力的です。</div><div><br /></div><div><br /></div><h3 style="text-align: left;">何を売ってるの?</h3><div><div>共通して、物としては、主に大物としてはタペストリーやTシャツ、</div><div>枕カバー、タオルやトートバッグ</div><div>小物ではクリアファイル・アクリルスタンドフィギュアや文具などに</div><div>キャラクターが印刷されたものが販売されているケースが多いです。</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmj_NDtIklwAK0XcxIdqm4-LGtZ2Mj7z7qi9rIMhZdlbJZbOEZZK_D6T4LYqvsWyUAu0r0jaTMRfwIaDrx87CeQ05r_ZVWqZ5OXilq2b6AKa1ALF4kaznOuocRfc37aSrAdtxasmcnUGAEROB8ruzxqEl-Jn4ht2EuW_do0LPZCK9wQgzMFuQs8Ql_/s4032/PXL_20221103_093728913.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmj_NDtIklwAK0XcxIdqm4-LGtZ2Mj7z7qi9rIMhZdlbJZbOEZZK_D6T4LYqvsWyUAu0r0jaTMRfwIaDrx87CeQ05r_ZVWqZ5OXilq2b6AKa1ALF4kaznOuocRfc37aSrAdtxasmcnUGAEROB8ruzxqEl-Jn4ht2EuW_do0LPZCK9wQgzMFuQs8Ql_/w400-h300/PXL_20221103_093728913.jpg" width="400" /></a></div><br /><div><br /></div><div><br /></div><div>一部食品も販売していることがあります。</div><div>どうかしているものとしては、ご○うさの「おそばセット」(そば3食+シール)</div><div>ご○うさの「ラーメンセット」(ラーメン3食+キャラカード)や、</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhi9yBSHrQFV0h3phqZeaXmc7Gpp1_gl4JoBxz4Kv4MkY-5RT2laeuaxNsQOg27RORRHbovRvYuhjP3Le2SPG97FCDsOk5f6bnVG7GiIARPX-fXvSizeB1uoTtAiMxSt0EfmG7sfRg9_DWTvMxLqFWByndANU9lRR1CaY7cqFpdgLysqza1oKVTjqQR/s4032/PXL_20221211_050837921.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="4032" data-original-width="3024" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhi9yBSHrQFV0h3phqZeaXmc7Gpp1_gl4JoBxz4Kv4MkY-5RT2laeuaxNsQOg27RORRHbovRvYuhjP3Le2SPG97FCDsOk5f6bnVG7GiIARPX-fXvSizeB1uoTtAiMxSt0EfmG7sfRg9_DWTvMxLqFWByndANU9lRR1CaY7cqFpdgLysqza1oKVTjqQR/s320/PXL_20221211_050837921.jpg" width="240" /></a></div><div><br /></div><div>クッキーに小さいアクリルスタンドフィギュアや缶バッジなどがついているもの、</div><div>最近だとアニ○ュガーとかいうブランドで</div><div>プリン、ドーナッツ、ボトルケーキの3種の神器を出している</div><div>業者がいて、中身の菓子は複数タイトル購入しましたが同じでした笑</div></div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrshQA1-IOo3sLkNCxJVMOsx6VAcVui45r4fRs6SaqFh4wTqSZDGlank1-yjs6RH79t7Dx4MKV_IoszhdH4HmZu7riic74rLDtAlgoh7UMiuEt6z5mQCw0Oiqle7wexNiQrkO30pa9WHKEfg4cZyuVXuMgHYSJqlj7CNDVOXVD1hzZYkO59Ikt411K/s4032/PXL_20221211_050304103.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrshQA1-IOo3sLkNCxJVMOsx6VAcVui45r4fRs6SaqFh4wTqSZDGlank1-yjs6RH79t7Dx4MKV_IoszhdH4HmZu7riic74rLDtAlgoh7UMiuEt6z5mQCw0Oiqle7wexNiQrkO30pa9WHKEfg4cZyuVXuMgHYSJqlj7CNDVOXVD1hzZYkO59Ikt411K/w200-h150/PXL_20221211_050304103.jpg" width="200" /></a></div><br /><div><br /></div><div>冷蔵商品なのでショーケースと一緒に出張って売ってるみたいですね。</div><div>特に美味しくも不味くもないので一度買ってみてもいいのではないかと思います。</div><div><br /></div><div>食品は1000円以下で買える場合が多いので、当然食品としてのコスパは最悪ですが、</div><div>折角なのでお小遣いでファングッズをなにか買いたい!という</div><div>若年層ファンには助かる商品だと思いますね。</div><div>決してぼったくりとは言ってはいけないなと…</div><div><strike>ぼったくってるけど</strike></div><div><strike><br /></strike></div><h3 style="text-align: left;">共通事項</h3><div><div>主催業者にもよりますが、告知の段階で整理券配布要項などを</div><div>明示してくれる場合もあるので、</div><div>各イベント主催の公式ツイッターアカウントのフォローと</div><div>当日朝はちょっと早く出られる体制をおすすめします。</div><div><br /></div></div><div><div>絵柄としてはイベントごとに新規に描き下ろしたイラストがあったり、</div><div>過去イベントの物販アイテムの再販などいろんなパターンがあります。</div><div>結構何度も同じ物が売られていたりするのでわざわざ並んだりしてまで</div><div>必死に買う必要のあるものは実は少ないです。肩の力を抜いていきましょう。</div><div>昨今、転売が社会問題化しているのでよく売れた物は転売対策ですぐ再販されます。</div></div><div><br /></div><h3 style="text-align: left;">・秋葉原アトレコラボシリーズ</h3><div>よくラジオ会館の通りの駅ビルの大窓に</div><div>アニメキャラのステッカーが貼ってあるやつです。</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbNrgV8XUqluSgjJHP3xyYYwQk7SFZrzMg27bH4OrmGx8EcGAIg39wsMKJTPkzeHVNmDMSdSo8fkMKXGoo2DubpApElAu5ULUnrQwNI0KCWXqxoK4ewA8bg8R29ScBncKQegi4AEUUWk-X0kUSttWgZw4ke1M1zTZSHRpXReQHRSgI5t238oqjnhxI/s4032/PXL_20220717_044520430.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbNrgV8XUqluSgjJHP3xyYYwQk7SFZrzMg27bH4OrmGx8EcGAIg39wsMKJTPkzeHVNmDMSdSo8fkMKXGoo2DubpApElAu5ULUnrQwNI0KCWXqxoK4ewA8bg8R29ScBncKQegi4AEUUWk-X0kUSttWgZw4ke1M1zTZSHRpXReQHRSgI5t238oqjnhxI/w400-h300/PXL_20220717_044520430.jpg" width="400" /></a></div><div><br /></div><div><br /></div><div>ツイッターでガラスの写真を見ていま○○やってるんだーなどと発見しやすいです。</div><div>夜中に貼り付けたての写真を投稿している人がだいたいいますね。</div><div>写真は、手前にある街灯が邪魔で一気に全景は撮りづらいのと、</div><div>日中は人通りが多くクリーンな絵を撮るのは難しいです。</div><div>オタクがたくさん写真撮ろうと群がっていると、</div><div>当然前は歩道なので歩行者優先ですが、前を通るのは結構憚られます…。</div><div><br /></div><div>SNS時代なのであまり他人のカメラに写りたくないですし、</div><div>公共の場所で撮影しているオタクも人がいるときはカメラを下げるとか</div><div>考慮したほうがいいですね。</div><div>いい絵が撮れたらほかのオタクのためにさっと移動してあげた方がいいと思います。</div><div>が、道路を挟んで向かい側のソフマップ前まで離れてツイッターに画像を投稿してたら</div><div>K正会のお兄さんに絡まれたことがあります笑</div><div>イヤホンをしていたので聞こえないふりをしていたら悲しい顔をして去っていきました…。</div><div>秋葉原あるあるですね</div><div><br /></div><div>ラッピング窓とセットなのが2階の物販です。</div><div>10時開店でコラボイベント初日は結構オタクが並びます。</div><div>概ね20名ほどの定員で入場制限、</div><div>5人出たら5人入るみたいな感じで入店できます</div><div><br /></div><div><div>駅ビルの自由通路をくぐって反対側のガラス扉を開けると</div><div>階段があり、そこが待機列になることが多いです。</div></div><div>過去に見た一番多かった待機列は開店時点で100人以上並んでおり、</div><div>最終的に400人以上の列となり4時間待ちというケースもありました。</div><div><br /></div><div>仮説レジなのでiPadの簡易レジで</div><div>高速に会計を捌けるようなシステムじゃなかったり</div><div>点数制限がバラバラでチェックに時間が取られたりなど</div><div>会計待ちが長いケースが多いです。</div><div><br /></div><div><div><div>主催業者によるようですが、</div><div>そこまでの混雑を見込めなかったというようなこともあり、</div><div>これだけの待機列となっても整理券配布で</div><div>一度解散させるようなオペレーションが取られないこともあります。</div><div>初日や新商品解禁日なんかは冬は防寒対策を、</div><div>夏は日除けをして開店前に着いていないと</div><div>ものすごい時間並んだり売り切れたりしてしまいます…。</div></div></div><div><br /></div><div>都内勤務で帰りに寄れるよみたいな人は平日行くとガラガラで</div><div>入場制限もなくゆっくり買い物できると思います。</div><div><br /></div><h3 style="text-align: left;">・ゲーム/アニメ/ホビーショップで開催のPOP UPストア</h3><div>情報をつかむのがなかなか難しいです。</div><div>お気に入りのタイトルの公式Twitterをフォロー・新着通知ONにしておいたり、</div><div>Androidスマホだと、ホーム画面右スワイプして出てくる</div><div>おすすめ記事みたいなやつにたまたま出てきて知るなど</div><div>アンテナを高くしておかないと見過ごしがちです。</div><div>総合情報サイトもありますが興味ないタイトルの情報も多いのでノイズが多いです</div><div>Googleのおすすめを最適化するのが一番ですね</div><div><br /></div><div>結構広くスペースが取られる場合も多く期間が長く、既出過去作多め、</div><div><div>過去に買いそびれた絵柄を購入するチャンスです。</div></div><div>人気タイトルはやはり朝から並びますが、</div><div>初日に行かなくても結構物は買えるケースが多いです。</div><div><br /></div><div>普段からオタクを相手にしているスタッフが販売しているので</div><div>サクサクレジも進むし、待機列整理のオペレーションもいいです。</div><div><br /></div><h3 style="text-align: left;">・渋谷マルイ/新宿マルイ (マルイノアニメ)</h3><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgBcZhGT0-xopvIVZndWWUlcKe0RRWdDjPfuwd0I8_suaWZwvu_ppCIOPUVGdCGHU38MgoC9PULIMu7F3k81ffUwGIXpCW0vylnh1ZbGv1NkFaamhoToT93sI9lyMYhLgpahypOqa_OJrYes0AgREr2QOKsLBVATzkpt2GrqG9ic7iGPnZm1m4w5E-/s4032/PXL_20221103_060222651.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgBcZhGT0-xopvIVZndWWUlcKe0RRWdDjPfuwd0I8_suaWZwvu_ppCIOPUVGdCGHU38MgoC9PULIMu7F3k81ffUwGIXpCW0vylnh1ZbGv1NkFaamhoToT93sI9lyMYhLgpahypOqa_OJrYes0AgREr2QOKsLBVATzkpt2GrqG9ic7iGPnZm1m4w5E-/w400-h300/PXL_20221103_060222651.jpg" width="400" /></a></div><div><br /></div><div><br /></div><div>マルイのアニメツイッターをフォローしたらちゃんと事前に告知されます。</div><div>物販だけでなく原画が見られるなどちょっとした展が開かれることも多い印象です。</div><div><br /></div><div>おそらくオペレーションが一番こなれています。</div><div>初日は開店-開店1時間時に整理券配布するケースが多いです。</div><div>結構当日の直前にホームページのイベントページの内容が書き換わって</div><div>抽選入場の要項が更新されます。</div><div>道すがらブラウザを何度も更新させてチェックしましょう。</div><div><div>入場方法の告知はツイッターでやれよという感じですがしないのは、</div><div>担当者が違うんじゃないかなw</div></div><div><br /></div><div>いずれにせよ初日は基本フリー入場はないので</div><div>開店前に集合する必要がありますが、周辺の歩道に溜まるしかないのと</div><div>必ず整理券配布があるので近くにたむろせずに</div><div>要項通りの時刻に集合して整理券を受け取れば入れます。</div><div><br /></div><div>午後になってから再度整理券配布する場合もありますが、</div><div>朝の時点で人数が多い場合、</div><div>整理券配布時間を過ぎたらもうその日は一切入れません。</div><div><br /></div><div>相当人気商品じゃなければフリー入場になった2週目3週目でも</div><div>購入可能な商品が多いと思われるので</div><div>特に気合い入れて初日行かなくてもとは思います。</div><div>10時整理券配布で抽選結果が出たら</div><div>あなたは19時に来てくださいみたいなこともありうるので、</div><div>最悪一日がかりになっちゃいます。</div><div><br /></div><div><div>なお、抽選結果の入場時刻5分前くらいにイベント会場前に集合すると</div><div>番号が呼ばれてれるような形でした。</div></div><div><br /></div><div>エポスカードに入るとその日の会計3000円オフ</div><div>○○円以上エポスカードでのお買い上げで抽選が引ける</div><div>という宣伝をされるのが特徴的で、</div><div>エポスカードのプロモーションとして開催しているようなもんですね。</div><div>レジでも再度勧誘を受けますが、相当食い下がられます。</div><div>しつこいし馴れ馴れしくて正直キレそうになります。</div><div><br /></div><div>新宿マルイは2箇所あります。</div><div>新宿マルイメンが新宿5丁目・地下鉄新宿3丁目駅の北東側</div><div>新宿マルイアネックスが新宿3丁目駅の南です。</div><div>マルイメンにはアニメイトが、マルイアネックスには駿河屋があるので</div><div>抽選時間まで買い物をするにはぴったりですね。</div><div><br /></div><div>抽選が遅い時間にあたって新宿で時間つぶせないよという諸君も</div><div>都営新宿線で岩本町まで行けば秋葉原もすぐなので</div><div>秋葉原まで行って食事や買い物をしてもいいのではないかと思います</div><div><br /></div><div>希望のタイトルのイベントがどのマルイなのか事前に要チェックです。</div><div>渋谷も新宿も結構駅から降りて歩くのでその時間も加味が必要ですね</div><div><br /></div><div>会場スタッフはレジの営業がウザい以外は嫌な感じはしないです。</div><br /><h3 style="text-align: left;">・番外編 しまむら/アベイル</h3><div>衣料品店ですがときどきコラボグッズが販売されています。</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiESjNreouFplWQRV5WfUdsdwkckhvIPks_cQz0XUthXGJSkVp0WwlogM-Dz0s5CqTx9RO_kKbwzrsAakaCY0hh3wGL-AQ94JaGWGbdHI75OFw5n5Q4nS_zqDa3d7UHSNXYEqiYGa74VZ-8eIwhLLDa2RNFcS1AW0A9F5erGb3O9T6a3Egawaz9A1g9/s4032/PXL_20221119_153412000.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiESjNreouFplWQRV5WfUdsdwkckhvIPks_cQz0XUthXGJSkVp0WwlogM-Dz0s5CqTx9RO_kKbwzrsAakaCY0hh3wGL-AQ94JaGWGbdHI75OFw5n5Q4nS_zqDa3d7UHSNXYEqiYGa74VZ-8eIwhLLDa2RNFcS1AW0A9F5erGb3O9T6a3Egawaz9A1g9/s320/PXL_20221119_153412000.jpg" width="320" /></a></div><br /><div><br /></div><div>特徴としてはめちゃくちゃ単価が安いというのが魅力です。</div><div>寝具では、両面全面プリントの枕やシーツが2000円以下など</div><div>かなりリーズナブルに入手可能です。</div><div>この手のプリント布地物はオンラインストアで予約限定のものが多いです。</div><div>店頭受取だと送料無料でお近くのしまむらテンポで受け取りが可能です。</div><div>中身が見えない袋が無料なのもありがたいですね。</div><div><br /></div>
<blockquote class="twitter-tweet"><p dir="ltr" lang="ja">しまむらはアニメグッズショップ <a href="https://t.co/urHaiJtCiE">pic.twitter.com/urHaiJtCiE</a></p>— じてんしゃP (@jitenshap) <a href="https://twitter.com/jitenshap/status/1579443926272212995?ref_src=twsrc%5Etfw">October 10, 2022</a></blockquote> <script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<div><br /></div><div><br /></div><div>小物だとアクリルスタンドフィギュアやアクリルパネル、キーホルダーなどを</div><div>レジ横周辺に置いてあります。</div><div>売れ残りの結構前に発売された商品もそのまま置いてあることがあるので、</div><div>他タイトルの過去のグッズも入手できることがあります。</div><div>店舗数も多いので時々店舗を訪れると意外な発見があると思います。</div>じてんしゃPhttp://www.blogger.com/profile/01771693136106799787noreply@blogger.com0tag:blogger.com,1999:blog-7526483848213799232.post-76541796404577826212022-03-26T19:03:00.007+09:002022-03-27T21:13:56.910+09:00さくらのクラウド「さくらのモノプラットフォーム」でLTE-Mを使ってCO2モニタリングしてみた「さくらのIoT」でいち早くLTE接続対応のIoTデバイスとクラウドサービスの融合を実現していたさくらのインターネットがLTE-Mを使った新サービス<br>
さくらのクラウド「さくらのモノプラットフォーム」をサービス開始しました。<br>
<a href="https://iot.sakura.ad.jp/platform/" target="_blank">https://iot.sakura.ad.jp/platform/</a><br>
<br>
クローズドベータテスト募集がされていたので申し込み、いただいたアカウントと基板でサクッと試してみましたが、なかなか記事にできずにおりました<br>
<br>
今回は、さくらのモノプラットフォームを使い作成したCO2モニタリングシステムについて紹介します。<br>
<br>
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEit2-hqXfZV78D9l5baqmTjadeSHbVE4oCf3-l4tTXSVAfF-8KRAyUxVEmmiaY7TJsFa5ImiVAO0hl5S4Y4I8eDfWafYYHmVN2SdmiwT-ERC9FUUrfcHlOb5B3k_Yu5cPjzM051-imLWEbRQA84yOYyVNEauPxxVftTyCYzEU2zsmCmUjg3bletScXq/s1204/m5module.jpg" style="display: block; padding: 1em 0; text-align: center; "><img alt="" border="0" width="400" data-original-height="903" data-original-width="1204" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEit2-hqXfZV78D9l5baqmTjadeSHbVE4oCf3-l4tTXSVAfF-8KRAyUxVEmmiaY7TJsFa5ImiVAO0hl5S4Y4I8eDfWafYYHmVN2SdmiwT-ERC9FUUrfcHlOb5B3k_Yu5cPjzM051-imLWEbRQA84yOYyVNEauPxxVftTyCYzEU2zsmCmUjg3bletScXq/s400/m5module.jpg"/></a></div>
<br>
テスター登録したところ、モノプラットフォームだけでなく、無料で各サービスを利用できるアカウントのログイン情報がメールで届きました。
また後日、<br>
<br>
M5Stack対応LTEモジュール<br>
DIP型LTEモジュール基板<br>
LTEアンテナ<br>
STM32Nucleo対応シールド基板<br>
J-LINKコネクタ変換基板<br>
のセットが到着しました。<br>
<br>
<br>
利用開始前に、メールで届いたID、パスワードを使い、コンソールにログインしてSIMの登録を行います。<br>
SIMはオンボードのeSIMで、基板上に書いてあるICCID、パスコードを入力して登録します。<br>
あとはモノプラットフォームのメニューからプロジェクトを作成、SIMを紐付ければ準備完了です。<br>
若干手順がありますが、このあたりはすべて丁寧なドキュメントがありますので、ドキュメントの手順どおりやれば問題ないです。<br>
<a href="https://manual.sakura.ad.jp/cloud/manual-iotpf.html" target="_blank">https://manual.sakura.ad.jp/cloud/manual-iotpf.html</a><br>
<br>
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhORaD_vO8pty7VzbE3-tkRlV2fX2hhBWWzFF8dqYAAeXPiUGogv3H7U41EWcROyXHyU5g9Qc6zE1SN8GuVoL2-QB2_mkmub8VNIEdaCRCnZCS48Eh9fGz5A18UqXGYrzbyr7xWvoh-b2zCgwI0QAB7MZJF_LRhrYPqyz8Q3gL2DMkmRpAtcI8NLFum/s2880/addsim.jpg" style="display: block; padding: 1em 0; text-align: center; "><img alt="" border="0" width="400" data-original-height="1800" data-original-width="2880" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhORaD_vO8pty7VzbE3-tkRlV2fX2hhBWWzFF8dqYAAeXPiUGogv3H7U41EWcROyXHyU5g9Qc6zE1SN8GuVoL2-QB2_mkmub8VNIEdaCRCnZCS48Eh9fGz5A18UqXGYrzbyr7xWvoh-b2zCgwI0QAB7MZJF_LRhrYPqyz8Q3gL2DMkmRpAtcI8NLFum/s400/addsim.jpg"/></a></div>
<br>
<br>
さて、ハードウェア側です。Nucleoはあまり使っていないものの、M5Stackは出始めからいじっていたので早速つないでみました。<br>
マニュアルにArduino用サンプルスケッチがあり、書き込むといきなりLTE-Mでさくらのサーバーと接続ができます。<br>
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">完全に理解した <a href="https://t.co/y9vtK1lgij">pic.twitter.com/y9vtK1lgij</a></p>— じてんしゃっぷ (@jitenshap) <a href="https://twitter.com/jitenshap/status/1436877133037518865?ref_src=twsrc%5Etfw">September 12, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script><br>
サンプルは、M5StackのボタンA、ボタンB、ボタンCの押された回数をそれぞれ送信するもので、送信に成功すると、画面上の数字が増えていきます。<br>
<br>
コンソールにログインすると、ブラウザ上で送信ログを確認できます。<br>
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDsK1KaTNnTUO4G2p4v_I5FZowofX7e-XOz04IllAs3JRp-w_yeer8EPkaPEMlLSkIa40x18_bH5p1hO7M-UyPKWzMSD8fjBDSbnSR_QAYcd5_yf919nz8MW-yxiKHtXcbI6dEtuAG6xixBrtE14trl9YjaFr9DngVqmeStvEoioxSw1z7kvlUck3Z/s2551/console_txrx.jpg" style="display: block; padding: 1em 0; text-align: center; "><img alt="" border="0" width="400" data-original-height="932" data-original-width="2551" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDsK1KaTNnTUO4G2p4v_I5FZowofX7e-XOz04IllAs3JRp-w_yeer8EPkaPEMlLSkIa40x18_bH5p1hO7M-UyPKWzMSD8fjBDSbnSR_QAYcd5_yf919nz8MW-yxiKHtXcbI6dEtuAG6xixBrtE14trl9YjaFr9DngVqmeStvEoioxSw1z7kvlUck3Z/s400/console_txrx.jpg"/></a></div><br>
もちろん、デバイスの送信データを受信するためのAPIもあります。<br>
後述しますが、こちらはWebSocket APIになっており、デバイスがデータを送信するとJSONにシリアライズされて流れてくるストリーミングAPIです。<br>
<br>
サンプルスケッチを見ると、LTEモジュールに送るコマンドフォーマットがわかるので、適宜改造すればサクッとデータを送信可能です。<br>
データ形式は以下の通りです。<br>
<br>
タグID<br>
データ型 uint8からfloat64まで数種類<br>
データ本文<br>
<br>
これを設定して送信する形になります。<br>
たとえば、温湿度センサーの値を送る場合、<br>
タグID 0x01をfloat32で温度<br>
タグID 0x02をint8で湿度<br>
のようにして使うとそれぞれ別のものとして区別して送信できます。<br>
サンプルスケッチでは、<br>
<br>
ボタンAをタグID: 0x01のuint32<br>
ボタンBをタグID: 0x02のuint32<br>
ボタンCをタグID: 0x03のuint32<br>
<br>
としてそれぞれ送信するようになっています。<br>
試したところ、タグIDは0x00-0xFFまで使うことができたため、255個の変数を設定できそうです。<br>
<br>
サンプルスケッチの、setup()にある接続周りの処理を実行すれば、あとはsipf_client.cppにある<br>
SipfCmdTxコマンドでデータ送信が可能です。<br>
先ほどの例で、気温を送信したい場合は、<br>
<br>
<pre class="prettyprint">
SipfCmdTx(0x01, OBJ_TYPE_FLOAT32, (uint8_t*)&temperature, 4, buff);
</pre>
<br>
のようにして送信できます。<br>
引数は、第一引数から<br>
<br>
<pre class="prettyprint">
//タグID(0x00-0xff)
uint8_t tag_id;
//spif_client.h enum SimpObjTypeId データ型enum
SimpObjTypeId type;
//データ本文
uint8_t *value;
//データレングス(バイト)
uint8_t value_len;
//モジュールからのレスポンスバッファー(?)
uint8_t *otid;
</pre>
<br>
という理解で使うことができました。<br>
それでは実際に任意の値を送ってみます。<br>
<br>
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxF3N64-Xztlnes8E32RtrUH3MVnpPJHv6PZIzqEMeH6sscvdfcvrezGKHWuypyqx3YHIA0-lc0EuWBhoyhP5Yzz4fpgk8y5Wh-qhDvJgQkfknH0Efse4aYpxXoYGrORwmd-Ll3YlZV9_9vXKnWZu0G4i0P3tj4l2ahBpzZjCVJqeQNiQ8E0iM2qri/s4032/PXL_20220326_092328040.jpg" style="display: block; padding: 1em 0; text-align: center; "><img alt="" border="0" width="400" data-original-height="3024" data-original-width="4032" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxF3N64-Xztlnes8E32RtrUH3MVnpPJHv6PZIzqEMeH6sscvdfcvrezGKHWuypyqx3YHIA0-lc0EuWBhoyhP5Yzz4fpgk8y5Wh-qhDvJgQkfknH0Efse4aYpxXoYGrORwmd-Ll3YlZV9_9vXKnWZu0G4i0P3tj4l2ahBpzZjCVJqeQNiQ8E0iM2qri/s400/PXL_20220326_092328040.jpg"/></a></div><br>
<br>
M5StackにGROVE接続のSensirion SCD41 CO2 温湿度センサーを接続しました。<br>
SCD41は、Sensirion公式のArduinoライブラリがあり、M5Stackで即動作させることが可能です。<br>
SCD41のサンプルスケッチに、さくらのモノプラットフォームのサンプルスケッチを合体したものを作ってデータ送信してみました。<br>
データ送信は、以下のようにしています。<br>
<br>
<pre class="prettyprint">
//CO2送信コマンド発行
ret = SipfCmdTx(0x00, OBJ_TYPE_UINT16, (uint8_t*)&co2, 2, buff);
//気温送信コマンド発行
ret = SipfCmdTx(0x01, OBJ_TYPE_FLOAT32, (uint8_t*)&temperature, 4, buff);
//湿度送信コマンド発行
ret = SipfCmdTx(0x02, OBJ_TYPE_FLOAT32, (uint8_t*)&humidity, 4, buff);
</pre>
<br>
タグID: 0x00をCO2<br>
タグID: 0x01を気温<br>
タグID: 0x02を湿度<br>
にして、それぞれuint16 float32形式で送信しています。<br>
<br>
測定は5秒に1度測定してLCDに表示、送信は1分に1度最新の値を送信するようにしました。<br>
<br>
送信したデータは、WebSocket APIを使うとリアルタイムに確認することができます。<br>
<br>
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpe2GFX39qe9vMG87E7gHJF1pAwEekYR_kNMOw-Q6jAiCAddn0OpTwY8bw4L41qjYY4okXenMfTTwaEsmV1AbuJnGU9YLrmrGaC2fWaAY_iYZTSsaQnM0RoGECjLLE6msVwXJzhod0yBVmgVVb8fx6OhYppnW2BSJVt456bvGKAlbLWDg1Ah8iAWQw/s979/wsapi.jpg" style="display: block; padding: 1em 0; text-align: center; "><img alt="" border="0" width="400" data-original-height="512" data-original-width="979" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpe2GFX39qe9vMG87E7gHJF1pAwEekYR_kNMOw-Q6jAiCAddn0OpTwY8bw4L41qjYY4okXenMfTTwaEsmV1AbuJnGU9YLrmrGaC2fWaAY_iYZTSsaQnM0RoGECjLLE6msVwXJzhod0yBVmgVVb8fx6OhYppnW2BSJVt456bvGKAlbLWDg1Ah8iAWQw/s400/wsapi.jpg"/></a></div><br>
<br>
これはwscatを使ってコンソールで接続していますが、ブラウザのJavaScriptでWebSocket接続することも可能です。<br>
(WebSocket APIのエンドポイントURLは公開しないほうがよさそうなので、公開するなら間にプロキシがいるかも)<br>
<br>
デバイスが送信したデータを受信するAPIは、サービスアダプタと呼ぶようです。<br>
サービスアダプタには、このWebSocket APIに加え、Outgoing Webhook、Incoming Webhookが作成できます。<br>
HTTP APIを自前サーバーで作っておけば、データ受信時にHTTPリクエストで受け取ることも可能なようです。<br>
それに加えて、今回は使っていませんが、デバイスからデータを送信するほかに、デバイスにデータを送信することも可能です。<br>
<br>
それでは、データが送信できているのを確認したので、データ蓄積や表示ができるようにしたいと思います。<br>
<br>
さくらのクラウドでは、もちろんVPSサーバーやデータベース、VPCルーターなどを作成可能であるため、<br>
エッジデバイスのデータ送信からバックエンドまでワンストップで行うことが可能です。<br>
<br>
モノプラットフォームのベータテストアカウントでは、なんと太っ腹なことにこれらのクラウドサーバーサービスも無料でトライアル可能でした。<br>
非常にリッチなVPSなども立ち上げ可能ですが、1クライアントではそれほどのスペックは必要ないため、<br>
<br>
プラン/2Core-2GB OSはUbuntuのサーバー ストレージは20GB SSD<br>
MariaDB 10.4 シングル構成 1Core RAM2GB ディスク10GB<br>
VPCルーター<br>
スイッチ<br>
<br>
という構成で組んでみました。<br>
<br>
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6p4XshBam5xTkf5mK2tmkjJPQgtabJFSygb-6nkS8pzOx2cc298qbR7LC8QxSBXFgnJfPjA2bQwnPCQiogLGNHea0mTYV8DdnfDCA9eL3xb0vZvsg0nxa8lt4Xs_noJCWGoo8X913T1Y4sDVcn90qp_DFOcpOirl9OaWsCet5pV0B2F-vMnwQpRSf/s291/map.jpg" style="display: block; padding: 1em 0; text-align: center; "><img alt="" border="0" height="600" data-original-height="291" data-original-width="278" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6p4XshBam5xTkf5mK2tmkjJPQgtabJFSygb-6nkS8pzOx2cc298qbR7LC8QxSBXFgnJfPjA2bQwnPCQiogLGNHea0mTYV8DdnfDCA9eL3xb0vZvsg0nxa8lt4Xs_noJCWGoo8X913T1Y4sDVcn90qp_DFOcpOirl9OaWsCet5pV0B2F-vMnwQpRSf/s600/map.jpg"/></a></div><br>
<br>
それぞれWebUIからぽちぽち押していくだけで作れるので簡単に設定できます。<br>
<br>
Ubuntuサーバーを使って、Node.jsでWebSocket APIに接続し、データを受信したらデータベースに書き込み<br>
別にNode.jsでHTTP APIも作ってデータベースから値を引っ張ってくるAPI動かすようにしました。<br>
CO2、温度、湿度の順番でデータを送信しているため、それぞれ受信して3つが揃った段階でデータベースに書き込むようにしています。<br>
あとはNginxで表示ページをホストして、Chart.jsでグラフを表示させるようにして完成です。<br>
<br>
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhr6oC8--A9W_2au74Z3Quz6hUXENowghABPOdUn4nhQyaqIM0BwmqKlMQZiotLYLfTJLunSrwKzoJtbLG_UboxMqB9ConjXNp4ViZLQ8GpuP01ChZnCol4pNUv3-wx_is14DT42dApTtmbSP5X_JZuDpVSJgxsqh_bcqA4zOlbRDrIElfZmSAI2yoW/s1315/chart.jpg" style="display: block; padding: 1em 0; text-align: center; "><img alt="" border="0" width="400" data-original-height="858" data-original-width="1315" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhr6oC8--A9W_2au74Z3Quz6hUXENowghABPOdUn4nhQyaqIM0BwmqKlMQZiotLYLfTJLunSrwKzoJtbLG_UboxMqB9ConjXNp4ViZLQ8GpuP01ChZnCol4pNUv3-wx_is14DT42dApTtmbSP5X_JZuDpVSJgxsqh_bcqA4zOlbRDrIElfZmSAI2yoW/s400/chart.jpg"/></a></div><br>
<br>
このへんはセンサー系のPoCではいつもどおりの作業ですね<br>
<br>
使ってみた感想ですが、データ送信を非常に簡単に行えるのがメリットだと思います。<br>
<br>
データ送信から受信までのプロセスを含め、1から作ることも可能ですが、<br>
プロトコルを作るところから始まることになり非常に煩雑です。<br>
モジュール、アンテナの技適やモデムコマンドを含むデータシートの開示のためのNDA契約など、<br>
一切のプロセスを飛ばして、いきなりコマンドラインで受信可能な状態になることは<br>
非常にアドバンテージがある仕組みだと思います。<br>
セルラーIoTを初めたいけど、何からはじめていいかわからない、という方は1つのアカウントで<br>
エッジデバイスからサーバーサイドまで管理できて明朗会計なさくらのモノプラットフォームがおすすめです!<br>じてんしゃPhttp://www.blogger.com/profile/01771693136106799787noreply@blogger.com0tag:blogger.com,1999:blog-7526483848213799232.post-41996957578243885442021-05-22T18:44:00.002+09:002021-05-22T21:12:19.546+09:00USB HID-UARTブリッジ CH9350を使ってみる秋月新商品で、CH340でおなじみWCH製、
<div>USB HID-UART相互変換ブリッジICが出ていました。</div><div><br /></div><div><span style="font-size: x-small;">USBマウス・キーボード用シリアル通信制御IC </span></div><div><span style="font-size: x-small;">CH9350L: 半導体 秋月電子通商-電子部品・ネット通販</span></div><div><a href="https://akizukidenshi.com/catalog/g/gI-16308/">https://akizukidenshi.com/catalog/g/gI-16308/<br /></a>
<div>早速先週末店頭で購入したので試してみます。</div></div><div>USB HIDホストになるUSBポート、USB HIDスレーブ(デバイス)になるUSBポート、</div><div>UARTのTx/Rxが付いています。</div><div><br /></div><div>KVM Switch用に使うことが想定されているようで</div><div>このIC同士をシリアルで結ぶと、片方のホスト端子に繋いだUSBキーボードを、</div><div>もう片方のスレーブ端子につないだUSBコネクタでPCと接続させることができます。</div><div>[キーボード]--USB-->[Rx IC]--UART-->[Tx IC]--USB-->[PC]</div><div>という構図です。UARTをバススイッチで切り替えるのは容易ですし、</div><div>PCにはHIDとして認識させたまま切り離すとかできそうなのでKVMには最適ですね。</div><div>さらに、RS-422ドライバを載せたりすると相当延長できそうですよね。</div><div>そんなICです。</div><div><br /></div><div>本来の使い方ではありませんが、UARTの通信を読めれば、</div><div>汎用のUSB HID-UARTとして、</div><div>マイコンに、面倒なSPI接続のUSBホストICを繋いだりせず</div><div>USBキーボードを接続できるのではと思い買ってみました。</div><blockquote class="twitter-tweet"><p dir="ltr" lang="ja">とりあえず買ってみた <a href="https://t.co/VUN22zY3LS">pic.twitter.com/VUN22zY3LS</a></p>— じてんしゃっぷ (@jitenshap) <a href="https://twitter.com/jitenshap/status/1393420278118576129?ref_src=twsrc%5Etfw">May 15, 2021</a></blockquote> <script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<div><br /></div>
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQ8-yca33qGzO9_LfQFFtLPU1DeUAc-nk178n1qTcMA_DQSDsNcomfaIUiji6WW1NtkOMTGZA7tcr1QAsvzx8oO85K-mHCpLyBdzClv9Q5BBiPfP-z-AzhCgJhiGZrvSZav0oDwVAIJYA/s1315/ch9350_sch.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="891" data-original-width="1315" height="271" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQ8-yca33qGzO9_LfQFFtLPU1DeUAc-nk178n1qTcMA_DQSDsNcomfaIUiji6WW1NtkOMTGZA7tcr1QAsvzx8oO85K-mHCpLyBdzClv9Q5BBiPfP-z-AzhCgJhiGZrvSZav0oDwVAIJYA/w400-h271/ch9350_sch.jpg" width="400" /></a></div><br /><div>データシート通りにこんな感じの配線で仮組みしてみました。</div><div>電源はUSBプラグからVBUSを入力、</div><div>ボタンを押しながらUSB接続するとUSBスレーブモード、</div><div>何もせずつなぐと電源供給のみで、USB HID to UARTブリッジとして動きます。</div>
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyzyj18VhsAKGQu8vNX55PFzRblttdCRknTUKWVi3Ghjl9N7Max1qwRFDN9tAKk36RSacKk-gEqQjB459h5ACTeiIcyI2udFjfUGuV55hHRwVZrWp_93yZdXqberw_rKrFXCGq0S9hEkY/s2048/E1wzSPlUcAQGCVI.jpg" style="display: block; padding: 1em 0px; text-align: center;"><img alt="" border="0" data-original-height="1536" data-original-width="2048" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyzyj18VhsAKGQu8vNX55PFzRblttdCRknTUKWVi3Ghjl9N7Max1qwRFDN9tAKk36RSacKk-gEqQjB459h5ACTeiIcyI2udFjfUGuV55hHRwVZrWp_93yZdXqberw_rKrFXCGq0S9hEkY/w400-h300/E1wzSPlUcAQGCVI.jpg" width="400" /></a></div>
<div><br /></div><div><div>電源を入れて、USBキーボードとUSB-UART変換をつなぎ、</div><div>Tera TermのデバッグモードでUART出力をバイナリ表示してみるとこんな感じでした。</div></div><div><br /></div>
<blockquote class="twitter-tweet"><p dir="ltr" lang="ja">ホスト側もなんか動いたっぽい。何もしなくてもダーってなんか流れてて、キー押すと加速する <a href="https://t.co/rhBZTUV8Yq">pic.twitter.com/rhBZTUV8Yq</a></p>— じてんしゃっぷ (@jitenshap) <a href="https://twitter.com/jitenshap/status/1393851804455116804?ref_src=twsrc%5Etfw">May 16, 2021</a></blockquote> <script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<div><br /></div><div>何も入力していないとき、</div><div>0x57 0xAB 0x82 0xA3</div><div>が繰り返し流れています。</div><div>入力すると、こんな感じのフォーマットでキー入力が拾えることがわかりました。</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2rA002JCpw-U0f6a77hrkSGCjdi56iB7hTC-MTQv3fUlPB5rmNgk3PJd5Ju7NHYN6uBTiPL7l_fvoOTE1q4WqgaE0O8aKe3K-rsYeCzUFGSiPM3Rwm1LGSEglgJdoecTpkeebFwmc5tw/s614/E1hM6YpVgAIh0Ic.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="614" data-original-width="608" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2rA002JCpw-U0f6a77hrkSGCjdi56iB7hTC-MTQv3fUlPB5rmNgk3PJd5Ju7NHYN6uBTiPL7l_fvoOTE1q4WqgaE0O8aKe3K-rsYeCzUFGSiPM3Rwm1LGSEglgJdoecTpkeebFwmc5tw/w396-h400/E1hM6YpVgAIh0Ic.png" width="396" /></a></div><div><br /></div><div>中国語データシートでなかなか読むのが難しく、詳しくは調べておらず、</div><div>現物合わせなのですが、Headersとなっている部分はおそらく状態表示も含んでいて、</div><div>微妙に変化があるかもしれませんが、</div><div>8バイト目から13バイト目にキー入力が表示されていました。</div><div>キー入力のフォーマットは、USB HID仕様の、Usage IDが表示されているようです。</div><div><br /></div><div>何も入力していなくてもダーっと0x57 0xAB 0x82 0xA3が流れていて、</div><div>目で追うのは大変なのでPython3でパーサーを作りました。</div><div><a href="https://github.com/jitenshap/CH9350Parser-Python">https://github.com/jitenshap/CH9350Parser-Python</a></div><br /><div>押したキーがUsage IDのテーブルを参照して文字で表示できるようになっています。</div><div><br /></div>
<blockquote class="twitter-tweet"><p dir="ltr" lang="ja">Lチカ <a href="https://t.co/swAYrfeg1H">pic.twitter.com/swAYrfeg1H</a></p>— じてんしゃっぷ (@jitenshap) <a href="https://twitter.com/jitenshap/status/1395944188500271111?ref_src=twsrc%5Etfw">May 22, 2021</a></blockquote> <script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<div><br /></div><div><br /></div><div>おまけでNum Lock、Caps Lock、Scroll LockのLEDの制御ギミックも入れています。</div><div>これって、キーボードが状態を保持しているんじゃなくてホスト側からの司令で</div><div>点いていたんだなぁという発見がありました。(何もしないと点かない)</div><div><br /></div><div>M5Stackなどの画面付きマイコンボードで文字入力をするのには、GROVEコネクタ1本で</div><div>かなり楽ちんに接続できてよさそうです。ぜひ一度お試しください。</div>じてんしゃPhttp://www.blogger.com/profile/01771693136106799787noreply@blogger.com0tag:blogger.com,1999:blog-7526483848213799232.post-34598848189351824432021-03-21T18:12:00.002+09:002021-03-21T18:22:46.359+09:00えっ、まだESP32にRTC外付けしてるんですか!?<div style="text-align: left;">煽り気味のタイトルで始めてみましたが、今回はESP32の内蔵RTCの話をしようと思います。</div><div style="text-align: left;">ESP32にはRTCが内蔵されています。</div><div style="text-align: left;"><br /></div><div style="text-align: left;"><i><span face="Lato, proxima-nova, "Helvetica Neue", Arial, sans-serif" style="background-color: #fcfcfc; box-sizing: border-box; color: #404040; font-size: 16px; font-weight: 700;">RTC timer</span><span face="Lato, proxima-nova, "Helvetica Neue", Arial, sans-serif" style="background-color: #fcfcfc; color: #404040; font-size: 16px;">: Allows keeping the system time during any resets and sleep modes, only the power-up reset leads to resetting the RTC timer. The frequency deviation depends on an </span><a class="reference internal" href="https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/system_time.html#rtc-clock-source" style="background-color: #fcfcfc; box-sizing: border-box; color: #2980b9; cursor: pointer; font-family: Lato, proxima-nova, "Helvetica Neue", Arial, sans-serif; font-size: 16px; text-decoration-line: none;">RTC Clock Source</a><span face="Lato, proxima-nova, "Helvetica Neue", Arial, sans-serif" style="background-color: #fcfcfc; color: #404040; font-size: 16px;"> and affects accuracy only in sleep modes, in which case the time will be measured at 6.6667 us resolution.</span></i></div><div style="text-align: left;"><a href="https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/system_time.html">https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/system_time.html</a></div><div style="text-align: left;"><br /></div><div style="text-align: left;">公式のWikiにも書いてあるとおり、スリープ中も使えるクロックです。</div><div style="text-align: left;"><div>deepsleepの復帰をタイマーで設定するAPIなんかはこのクロックを使っています。</div></div><div style="text-align: left;">ただ、このクロックは、標準では内蔵RCオシレーターを使うようになっており、</div><div style="text-align: left;">実測したところ30分でも数秒以上の誤差が出ることもありました。</div><div style="text-align: left;">何時何分のデータかタイムスタンプが重要なアプリケーションや、</div><div style="text-align: left;">正確な起動時間が求められるタイマーとしてはこのままでは使うことができません。</div><div style="text-align: left;"><br /></div><div style="text-align: left;">そこで、DS3231のようなI2C RTCを接続し、スリープの復帰をGPIO割り込みにして、</div><div style="text-align: left;">RTCのINTピンを使って起こすなんてことをよくしていると思います。</div><div style="text-align: left;">しかし、実はESP32内蔵のRTC、よくRTCに使われる32.786kHzのクロックを</div><div style="text-align: left;">外部から供給して、外付けRTC並の高精度な時刻保持ができるのです。</div><div style="text-align: left;">上記リンクを少し下へスクロールすると、 RTC Clock Sourceという項目があります。</div><div style="text-align: left;">そこには</div><div style="text-align: left;"><i>・Internal 150kHz RC oscillator (default)</i></div><div style="text-align: left;"><i>・External 32kHz crystal</i></div><div style="text-align: left;"><i>・External 32kHz oscillator at 32K_XN pin</i></div><div style="text-align: left;"><i>・Internal 8.5MHz oscillator, divided by 256 (~33kHz)</i></div><div style="text-align: left;">という利用できるクロックソースのリストがあります。</div><div style="text-align: left;">それぞれ、</div><div style="text-align: left;">標準で使用されるRCオシレーター、</div><div style="text-align: left;">外付け32k水晶</div><div style="text-align: left;">XNピンへのクロック入力</div><div style="text-align: left;">内蔵8.5MHzオシレーターの分周</div><div style="text-align: left;">となっていますが、標準のRCはご存知のようにかなり精度が悪いです。</div><div style="text-align: left;">また、8.5MHzから分周するのも、周波数安定度は高いものの、</div><div style="text-align: left;">周波数が近似値なので均一にかなりずれます。絶対時間での誤差ではRCのほうがマシでした。</div><div style="text-align: left;">そこで、32kHzの水晶を外部に接続する方法を試してみました。</div><div style="text-align: left;"><br /></div>
<blockquote class="twitter-tweet"><p dir="ltr" lang="en"><a href="https://t.co/9EJqUo62JN">https://t.co/9EJqUo62JN</a><br />>Optimized 32.768 KHz crystal oscillator stability, the issue was reported by client that<br />there is a low probability that under ECO V1 hardware, the 32.768 KHz crystal oscillator<br />couldn’t start properly.</p>— じてんしゃっぷ (@jitenshap) <a href="https://twitter.com/jitenshap/status/1346414006362230784?ref_src=twsrc%5Etfw">January 5, 2021</a></blockquote> <script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<div style="text-align: left;"><br /></div><div style="text-align: left;">ひどい話ですね。これまで流通していたESP-WROOM-32では</div><div style="text-align: left;">うまくRTC用クロックソースの水晶を発振できませんでした。</div><div style="text-align: left;">そんな矢先、秋月でもチップバージョン3のWROOM-32Eが発売されていたので</div><div style="text-align: left;">本当にそちらでは動くのか試してみました。</div><div style="text-align: left;"><br /></div><div style="text-align: left;">水晶のドライブに必要な回路はデータシートの11-12ページに書いてあります。</div><div style="text-align: left;"><a href="https://www.espressif.com/sites/default/files/documentation/esp32_hardware_design_guidelines_en.pdf">https://www.espressif.com/sites/default/files/documentation/esp32_hardware_design_guidelines_en.pdf</a></div><div style="text-align: left;"><span style="color: #0000ee;"><u><br /></u></span><a href="https://www.espressif.com/sites/default/files/documentation/esp32_hardware_design_guidelines_en.pdf"></a><div class="separator" style="clear: both; text-align: center;"><a href="https://www.espressif.com/sites/default/files/documentation/esp32_hardware_design_guidelines_en.pdf"></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiI-S-M44Wm826RRtxbd5jFYAhAylFfk9qlQXTbpE81VI_cgNSaduTrBlsASB13OulX4tjz5Gv46VWcM_y3ersJ8U0vKYV4DTIdrUK-ANUoGvTgPzYqRdrUJRydvV8YCxOkrmmy5V4mSZk/s1133/32k_schematic.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="926" data-original-width="1133" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiI-S-M44Wm826RRtxbd5jFYAhAylFfk9qlQXTbpE81VI_cgNSaduTrBlsASB13OulX4tjz5Gv46VWcM_y3ersJ8U0vKYV4DTIdrUK-ANUoGvTgPzYqRdrUJRydvV8YCxOkrmmy5V4mSZk/s320/32k_schematic.jpg" width="320" /></a></div><br /></div><div style="text-align: left;">GPIO32, 33に並列に抵抗を入れて、あとは水晶と負荷容量をつなぐだけです。</div><div style="text-align: left;">並列の抵抗は5M~10MΩとされていたので、手持ちのある5.1Mを使いました。</div><div style="text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgg3g4sOVoa_qmiXO1XcYbsZi8KHjILdq_P1myqBVcmaZIsfetMZ8NO9tDksVHE6VN73DZjxhUwNu8dBHBUFN306sFWyp6LMVqSFohLY-jllmxL6P4eTan6MOIU4ukeLpzfjTxAAXNs8p4/s2048/32k_pcb.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1536" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgg3g4sOVoa_qmiXO1XcYbsZi8KHjILdq_P1myqBVcmaZIsfetMZ8NO9tDksVHE6VN73DZjxhUwNu8dBHBUFN306sFWyp6LMVqSFohLY-jllmxL6P4eTan6MOIU4ukeLpzfjTxAAXNs8p4/s320/32k_pcb.jpg" width="320" /></a></div><br /><div style="text-align: left;">なお、ハードウェア的に接続するだけで自動的に水晶が使われるわけではなく、</div><div style="text-align: left;">ビルドオプションでクロックソースを別途設定する必要があります。</div><div style="text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUBsijyekIYi4bK4NjxMF_B24u_OLBOUZqfrHKFM_gkvMI2VkOyhTaND0DS9NNc8b0G4g66RscYGUpd5QhwheMU32Eu5XEx_13D2bSCVFX8e7upRO4xLMmXQpN5fxDSbLxMnGhpa5MaAE/s1468/32k_xtal_menuconfig.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1468" height="336" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUBsijyekIYi4bK4NjxMF_B24u_OLBOUZqfrHKFM_gkvMI2VkOyhTaND0DS9NNc8b0G4g66RscYGUpd5QhwheMU32Eu5XEx_13D2bSCVFX8e7upRO4xLMmXQpN5fxDSbLxMnGhpa5MaAE/w640-h336/32k_xtal_menuconfig.jpg" width="640" /></a></div><div><br /></div>idf.py menuconfigで<div>Component config->ESP32-specific</div><div>RTC clock sourceでEnterを押して</div><div>External 32kHz crystalを選択</div><div>Number of attempts to repeat 32k XTAL calibrationでEnterを押して、</div><div>適当に数値を増やす</div><div>(これをしないと、発振の開始が間に合わずRCに切り替わってしまいます。)</div><div>なお、この数値を莫大な数値にすると、</div><div>発振できない場合にブートローダー内でWDT Resetが掛かりブートループになります。</div><div><br /></div><div>うまく発振できないと、ブートローダーでこのようにエラーが出て、RCに切り替わります。</div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5M1mqsSGzDl-aK6h4gOvfLe_Yhdw4sdJGMPuevW5FBzReeXc17Td8dQPsHZjGqv-sFPpEdgaUGoY4DJpkCFDetVfo4ZOL8vwReI8ISZA3bZtC1w25IUBLnPCwG5HumCP5PWUi69ExxPo/s1468/32k_xtal_not_found.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1468" height="336" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5M1mqsSGzDl-aK6h4gOvfLe_Yhdw4sdJGMPuevW5FBzReeXc17Td8dQPsHZjGqv-sFPpEdgaUGoY4DJpkCFDetVfo4ZOL8vwReI8ISZA3bZtC1w25IUBLnPCwG5HumCP5PWUi69ExxPo/w640-h336/32k_xtal_not_found.jpg" width="640" /></a></div><br /><div>プローブを当てて、発振できているのにこの表示になる場合は、</div><div>Number of attempts to repeat 32k XTAL calibrationの数値を増やすといいと思います。</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMO3USzJGTEUTZsskBaIgVGRY36VOHdpiLSnRAmxcEOV1fOe6zQIaZHQxm_dUu8aRTu9efJ0dqUGoskxlLEg0S0qpuhgVEnT_vXRCMMCc7YdJUzfkW0msTha21bp13zPxFoRjulemnviQ/s1468/32k_xtal_success.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1468" height="336" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMO3USzJGTEUTZsskBaIgVGRY36VOHdpiLSnRAmxcEOV1fOe6zQIaZHQxm_dUu8aRTu9efJ0dqUGoskxlLEg0S0qpuhgVEnT_vXRCMMCc7YdJUzfkW0msTha21bp13zPxFoRjulemnviQ/w640-h336/32k_xtal_success.jpg" width="640" /></a></div><br /><div>うまく発振できると、App cpu upの周りでエラーが表示されなくなります。</div><div>このように、ESP-WROOM-32Eでは外付けの水晶を使ったRTCクロックソースを</div><div>使用することができました。</div><div><br /></div><div>この状態で実際に仕事で使ってみていますが、半日時計合わせをしなくても</div><div>1秒以内の誤差になっているため、</div><div>外付けRTCなしでも絶対時刻が重要なアプリケーションで使用できています。</div><div><br /></div><div>ちなみに、秋月で売っているESP-WROOM-32Eは、技適マークが刻印されておらず、</div><div>シールが添付されていますが、3月のロットからは技適マークが入るようになっています。</div><div><br /></div><div>Changes of the marking on ESP32-WROVER-E and ESP32-WROVER-IE to add new certification
identification</div><div><a href="https://media.digikey.com/pdf/PCNs/Espressif/PCN-2020-016.pdf">https://media.digikey.com/pdf/PCNs/Espressif/PCN-2020-016.pdf</a></div><div><br /></div><div>実際にDigiKeyで3月に購入したものについては、技適マークが入っていました。</div><div><br /></div>じてんしゃPhttp://www.blogger.com/profile/01771693136106799787noreply@blogger.com4tag:blogger.com,1999:blog-7526483848213799232.post-33205839233634829712021-01-10T01:13:00.002+09:002021-01-10T01:13:11.069+09:00WindowsでphpMyAdminを使う+多段SSHポートフォワードでDBのポートが通るようにする<div style="text-align: left;"><div>サーバーサイドは本番環境は自分は作らず、試作や検証目的のことが多いので、</div><div>データベースは1つのVPS上にMariaDB+Webサーバ&phpMyAdminの環境を構築して</div><div>SSHポートフォワードで直接サーバ内のphpMyAdminを開いてSQLを投げていたのですが、</div><div>たまに本番環境のDBも時折直接編集する必要が出てきて、</div><div>Amazon AWS VPC内にあるRDSを多段踏み台経由で操作する必要ができました。</div><div>接続の構成としてはこんな感じ。</div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiG1cQ0Z1FUaSVUBzdnqK142nPCLomTWJxf1p6CCA8SPcupY64MAHy4GezdRh6BfDU4BHC2xbmN1GPF9c_c87-zPBr2yAz1CpYLqitpMPQQwayN9usDpbd9y_R7OdkVaNNtlA2JGaliPcE/s960/%25E7%2584%25A1%25E9%25A1%258C%25E3%2581%25AE%25E3%2583%2597%25E3%2583%25AC%25E3%2582%25BC%25E3%2583%25B3%25E3%2583%2586%25E3%2583%25BC%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%25B3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="540" data-original-width="960" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiG1cQ0Z1FUaSVUBzdnqK142nPCLomTWJxf1p6CCA8SPcupY64MAHy4GezdRh6BfDU4BHC2xbmN1GPF9c_c87-zPBr2yAz1CpYLqitpMPQQwayN9usDpbd9y_R7OdkVaNNtlA2JGaliPcE/s320/%25E7%2584%25A1%25E9%25A1%258C%25E3%2581%25AE%25E3%2583%2597%25E3%2583%25AC%25E3%2582%25BC%25E3%2583%25B3%25E3%2583%2586%25E3%2583%25BC%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%25B3.jpg" width="320" /></a></div></div><div><br /></div><div>ひとまずRLoginで多段踏み台経由でRDSと接続するポートをSSHポートフォワーディング、</div><div>やはりGUIで操作したいのでMySQL Workbenchを使ってやっていたのですが、</div><div>phpMyAdminのほうが慣れていてやっぱり使いやすいよなということで、</div><div>ローカルにphpMyAdmin環境を構築し、リモートDBを参照できるように設定してみました。</div><div>結果はうまくいっていつもどおりphpMyAdminからRDSを操作できています。</div><div>ぱっと調べてもコピペで動くページが見つからなかったので手順をまとめておきます。</div><div><br /></div><div>構成:</div><div>OS: Windows 10(x64) WSLも使わないしあんまりバージョンは問わない</div><div>Webサーバ: nginx version: nginx/1.19.6</div><div>php: PHP 8.0.0 (cgi-fcgi) (built: Nov 24 2020 22:02:53)</div><div>ターミナル: RLogink (x64) Version 2.25.6 (2020/12/09)</div><div>phpMyAdmin: 5.0.4</div><div><br /></div><div><b>多段SSHポートフォワードでSQL用のポートが通るようにする</b></div><div>RLoginをダウンロード</div><div>Tera termのスクリプトとかでもできるみたいなんですが、</div><div>RLoginならGUIで全部設定できるので最近は結構使っています。</div><div><a href="http://nanno.dip.jp/softlib/man/rlogin/">http://nanno.dip.jp/softlib/man/rlogin/</a></div><div>少しスクロールしたところに、GitHubからダウンロード、実行プログラム…</div><div>という項目があります。</div><div>64bit Windows 10なのでrlogin_x64.zipをダウンロードしました。</div><div>インストーラではなく解凍したところにいきなり実行ファイルがあるので、</div><div>適当な場所へ移動しておいたほうがいいと思います。</div><div><br /></div><div>起動するとServer Selectというダイアログが出るので、新規をクリック</div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEji_LE4cxeWuzo2syqtRdJ7iRR3ld643qIrSDxgbxte1BCLC6cYlXTz2P3CfE9eD2WRlQZJCNsFo-1kPuD0TQZyJbQ3DhdauSADrzDcaK0TUZ8yFjHsFW9lTtOqb0L8Q13bhF1Pg9MGYr0/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="202" data-original-width="510" height="127" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEji_LE4cxeWuzo2syqtRdJ7iRR3ld643qIrSDxgbxte1BCLC6cYlXTz2P3CfE9eD2WRlQZJCNsFo-1kPuD0TQZyJbQ3DhdauSADrzDcaK0TUZ8yFjHsFW9lTtOqb0L8Q13bhF1Pg9MGYr0/" width="320" /></a></div><div><br /></div>まずはエンドポイントとなる踏み台の接続情報を埋めていきます。</div><div>ホスト名に踏み台のホスト名あるいはIPアドレスを入力</div><div>ユーザー名に接続ユーザー名、パスワードログインが可能ならパスワード</div><div>鍵認証の場合は、SSH認証鍵ボタンで鍵ファイルを選択</div><div>エントリー欄にわかりやすい名前(踏み台1など)をつけておく</div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgId0_P3HMJ-MDTErWiDMXRMJCvfkR0kpV6-2A4NoG7eshYLz056ecfFSMLvzkUc4m0qD29x1PnO34x1JZkIKwutqgI0Qc0BpbiSXiog2CjlbduXo6Kj01D62jlJbrkTU8HqzaoyIlB8gA/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="530" data-original-width="597" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgId0_P3HMJ-MDTErWiDMXRMJCvfkR0kpV6-2A4NoG7eshYLz056ecfFSMLvzkUc4m0qD29x1PnO34x1JZkIKwutqgI0Qc0BpbiSXiog2CjlbduXo6Kj01D62jlJbrkTU8HqzaoyIlB8gA/" width="270" /></a></div><div><br /></div><div>プロトコル項目のポートフォワードをクリック</div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQk-ZpkXnPMaV5zbbgBNk7_ll3fm4eYFBzNAlv0CaIWUPHMcY5TAOirvLpSxjsFfDCjGsDTMPLBek5lBIdoobB45V5Oss0s9pMaNa2ReV7HwhSC8IOJulILPNDjumMWS3gbxSWGcv4ld4/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="662" data-original-width="682" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQk-ZpkXnPMaV5zbbgBNk7_ll3fm4eYFBzNAlv0CaIWUPHMcY5TAOirvLpSxjsFfDCjGsDTMPLBek5lBIdoobB45V5Oss0s9pMaNa2ReV7HwhSC8IOJulILPNDjumMWS3gbxSWGcv4ld4/" width="247" /></a></div><br />新規をクリックしてSSH2ポートフォワード設定ウインドウで</div><div>Local Socksを選択</div><div>Host: localhost、Port: 11022(任意)</div><div>でOK</div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiViUp4pFjdfhxNFY87OHgFYVf8UHlJ35I4WxgdjhViGu4t4auEdJwBlmTH8yc2qUqMQyIcMthk7xRugiKtyqFK2vI4ClLIQcHbwzD3NElrdm6qgrHdPCyu8m5s37MVQ9oM4dSYM_aCJ8/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="361" data-original-width="414" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiViUp4pFjdfhxNFY87OHgFYVf8UHlJ35I4WxgdjhViGu4t4auEdJwBlmTH8yc2qUqMQyIcMthk7xRugiKtyqFK2vI4ClLIQcHbwzD3NElrdm6qgrHdPCyu8m5s37MVQ9oM4dSYM_aCJ8/" width="275" /></a></div><br />一旦つないでみて、SSH接続できたら踏み台1の設定はOK。</div><div>VPC内にあるDB接続用踏み台の接続プロファイルを作成</div><div>再びServer Selectウインドウで新規をクリック</div><div><br /></div><div>右上にあるタブ(上)、前接続先(下)の下のプルダウンで</div><div>先ほど作成した接続プロファイルを選択</div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEih8j6igI1vWORAruojGBa4hsP22-VtzSsKHKaa3b2jNsFOHwdsi2qCMVDFv3bLpAvTwBHu7bWB8LWGQWdIxIFOXzbWpZcmsZA0MUqhYC4mfLjca6jX6cz1ymVx0yVHpu5lFREhb5hoFOg/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="662" data-original-width="682" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEih8j6igI1vWORAruojGBa4hsP22-VtzSsKHKaa3b2jNsFOHwdsi2qCMVDFv3bLpAvTwBHu7bWB8LWGQWdIxIFOXzbWpZcmsZA0MUqhYC4mfLjca6jX6cz1ymVx0yVHpu5lFREhb5hoFOg/" width="247" /></a></div><br /></div><div>IPアドレス(Host名)、ユーザー、認証情報を入力</div><div>プロキシ設定ボタンでSelect Proxy Protocol: SOCKS5を選択</div><div>Server OptionでProxy Server Address: localhost</div><div>Socket Portを先ほど設定したポート 11022に設定してOK</div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEit-vhwCOvt9nKrXZzJzbBycJ0g3uJmVEP54ETAR904JLUqQbt12wXOgd2mMbnL_Y0_DnfNGnuc-16V4PAZVUb_GV2r0Bwk5fshrSQEpn4O9dnd1m9AjLs9ISZuwPhS8kA08RtOaE4mOL4/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="489" data-original-width="480" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEit-vhwCOvt9nKrXZzJzbBycJ0g3uJmVEP54ETAR904JLUqQbt12wXOgd2mMbnL_Y0_DnfNGnuc-16V4PAZVUb_GV2r0Bwk5fshrSQEpn4O9dnd1m9AjLs9ISZuwPhS8kA08RtOaE4mOL4/" width="236" /></a></div><br />プロトコル→ポートフォワードウインドウを開く</div><div><div>Listened: Local、 Host:localhost、 Port: 13306(任意)</div><div>Connect: Host: RDSのIPアドレス、 Port: 3306</div><div>に設定してOK</div></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7jIBsf2LDUIQzfpYoE0lxEv9VcbOXoruDo9GfW7QbOg7Dbjk3c6Aq3sTh4EwHR0BrrCBe5fJ8zyIBh5CIUL84Q-WqF5rTmSSc5rXRbiaELP7qae5RmtX-zL995a9ProW8L2qz3KJggVE/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="361" data-original-width="414" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7jIBsf2LDUIQzfpYoE0lxEv9VcbOXoruDo9GfW7QbOg7Dbjk3c6Aq3sTh4EwHR0BrrCBe5fJ8zyIBh5CIUL84Q-WqF5rTmSSc5rXRbiaELP7qae5RmtX-zL995a9ProW8L2qz3KJggVE/" width="275" /></a></div><br /></div><div>Server Selectに戻り、踏み台2のほうに接続すると、</div><div>自動的に多段SSH接続してくれて、RDSのポートも通るようになる。</div></div><div><br /></div><div><div><b>Nginx+phpMyAdminを使えるようにする</b></div></div><div>上記手順でlocalhost:13306でRDSと接続できるようになったので、</div><div>phpMyadminをセットアップ。</div><div><br /></div><div>Nginxをダウンロード</div><div><a href="http://nginx.org/en/download.html">http://nginx.org/en/download.html</a></div><div>nginx/Windows-1.19.6 を選びました。解凍してC:\nginxに移動しました。</div><div><br /></div><div>phpをダウンロード</div><div><a href="https://windows.php.net/download/">https://windows.php.net/download/</a></div><div>x64 Non Thread Safe のZipをダウンロードしました。解凍してC:\phpに移動しました。</div><div><br /></div><div>phpMyAdminをダウンロード</div><div><a href="https://www.phpmyadmin.net/">https://www.phpmyadmin.net/</a></div><div>右側にDownloadってリンクボタンがあります。</div><div>解凍して、C:\nginx\html\phpmyadminに移動しました。</div><div><br /></div><div>C:\nginx\conf\nginx.confをエディタで開き、</div><div>location ~\.php$...の部分のコメントアウトを外して有効にして、</div><div>SCRIPT_FILENAMEの行を修正します。</div><div><br /></div><div><div>
<pre class="prettyprint"> location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
</pre>
</div></div><div><br /></div><div>とりあえずphpが動くようになったか確認してみます。</div><div>C:\nginx\html\phpinfo.phpに以下の内容のファイルを保存します。</div><div><br /></div><div><pre class="prettyprint"><?php
phpinfo();
?>
</pre><div><br /></div><div>Nginxとphp-cgiの起動スクリプトを作成します。</div><div>C:\nginx\run.batに以下の内容のファイルを保存します。</div><div><br /></div><div>
<pre class="prettyprint">start nginx.exe
start C:\php\php-cgi.exe -b 127.0.0.1:9000
</pre>
<div><br /></div><div>停止用スクリプトも作成します。</div><div>C:\nginx\stop.batに以下の内容のファイルを保存します。</div><div><br /></div><pre class="prettyprint"> nginx -s stop
taskkill /F /IM php-cgi.exe
</pre>
<div><br /></div><div>run.batを実行して、</div><div>http://localhost/phpinfo.php</div><div>を開いて、</div><div>phpinfoが正常表示できれば準備完了です。</div><div>停止するときはstop.batを実行すればphp-cgiとnginxが停止します。</div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaBw4mE1tLQ9ViNOiAJFkl4boFlQZlXg3TM7hcI3FpOYebXgtx6VgYBvaDmAUyr5xyRxkuSwwBM-Xu7zIrc4Mc3NsnaS2FpxDIXuvAsLS8r3YBWEj-UHA_USjNGEhAJHi6ySzZZs1hVX8/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="486" data-original-width="1116" height="139" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaBw4mE1tLQ9ViNOiAJFkl4boFlQZlXg3TM7hcI3FpOYebXgtx6VgYBvaDmAUyr5xyRxkuSwwBM-Xu7zIrc4Mc3NsnaS2FpxDIXuvAsLS8r3YBWEj-UHA_USjNGEhAJHi6ySzZZs1hVX8/" width="320" /></a></div><br /><br /></div><div>phpMyAdminの設定を行います。</div><div>C:\nginx\html\phpmyadmin\config.sample.inc.phpをコピーして、同じフォルダにconfig.inc.phpとして保存します。</div><div>内容を以下のように編集します。</div><div><br /></div>
<pre class="prettyprint"> $cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['port'] = '13306';
</pre>
<div><br /></div><div>ポートフォワードでローカルホストの13306でRDSと接続できるようにしたので、</div><div>host: localhost、port: 13306にします。</div><div>portの項目がない場合は行を追加すればOKです。</div><div>コメントアウトされている場合はコメントアウトを解除して設定を有効にしてください。</div><div>保存して、</div><div>http://localhost/phpmyadmin/index.php</div><div>を開くとphpMyAdminが開きます。</div><div>RDSの接続情報を入れればRDSをphpMyAdminで操作できます。</div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDVEKrYfjxymdp39xYGlCcIphbB_izaYz_s35tj4jhQEIFnl46zZY38mntQ2E8NWRLqhD2FGwJ2Br4rp24CdkhJNJa42VF5bveuOrAeoecTCi8SPOFzDYj0lNTaBKUHIOk53f3HUxzLy8/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1080" data-original-width="1920" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDVEKrYfjxymdp39xYGlCcIphbB_izaYz_s35tj4jhQEIFnl46zZY38mntQ2E8NWRLqhD2FGwJ2Br4rp24CdkhJNJa42VF5bveuOrAeoecTCi8SPOFzDYj0lNTaBKUHIOk53f3HUxzLy8/" width="320" /></a></div><br /><br /></div></div></div></div>じてんしゃPhttp://www.blogger.com/profile/01771693136106799787noreply@blogger.com0tag:blogger.com,1999:blog-7526483848213799232.post-36283710827510814002021-01-02T17:50:00.009+09:002021-01-02T18:38:22.780+09:00ジョゼと虎と魚たちを見た感想<div style="text-align: left;">劇場版ヴァイオレット・エヴァーガーデンを見てから、一人映画もなかなかいいなと思い、</div><div style="text-align: left;">ご飯食べにでかけた先で折角来たのでみたいな感じで、</div><div style="text-align: left;">ヴァイオレット・エヴァーガーデンは3回も見たりしてました。</div><div style="text-align: left;">大人向けアニメ映画自体それほどぶわーっと人が入る映画でもないので、</div><div style="text-align: left;">館内もわりと閑散としていてコロナ禍向きのエンターテインメントだなと思っています。</div><div style="text-align: left;">映画館ごとに椅子の座り心地とか、スピーカーのセッティングが違うのがわかり、好みもわかってきたような気がします。</div><div style="text-align: left;"><br /></div><div style="text-align: left;">ヴァイオレット・エヴァーガーデンを見るときに予告編で何度か見ていた、</div><div style="text-align: left;">「ジョゼと虎と魚たち」を今度は見ようと思っていて、</div><div style="text-align: left;">たまたま最寄りの映画館の予約を見たら1席しか予約入っていなかったので</div><div style="text-align: left;">空いてていいじゃんと今日行ってきました。</div><div style="text-align: left;">結局僕を含めて5人くらいしか入ってなかったです。この回、赤字なのでは…</div><div style="text-align: left;"><br /></div><blockquote class="twitter-tweet"><p dir="ltr" lang="ja">各映画サイトにて高得点獲得‼️‼️<br /><br /> 『<a href="https://twitter.com/hashtag/%E3%82%B8%E3%83%A7%E3%82%BC%E3%81%A8%E8%99%8E%E3%81%A8%E9%AD%9A%E3%81%9F%E3%81%A1?src=hash&ref_src=twsrc%5Etfw">#ジョゼと虎と魚たち</a> 』<br /> 🌟「Yahoo!映画」4.28点 🌟<br /> 🌟 「映画.com」 4.0点 🌟<br /><br />24万人以上の方が注目してくださり、感動の声続々到着!😭<br />➡️ <a href="https://t.co/IzFUODb3eF">https://t.co/IzFUODb3eF</a><a href="https://twitter.com/hashtag/%E3%82%B8%E3%83%A7%E3%82%BC%E8%99%8E?src=hash&ref_src=twsrc%5Etfw">#ジョゼ虎</a> <a href="https://twitter.com/hashtag/%E5%A4%A7%E3%83%92%E3%83%83%E3%83%88%E4%B8%8A%E6%98%A0%E4%B8%AD?src=hash&ref_src=twsrc%5Etfw">#大ヒット上映中</a> <a href="https://twitter.com/hashtag/%E3%83%9C%E3%83%B3%E3%82%BA?src=hash&ref_src=twsrc%5Etfw">#ボンズ</a> <a href="https://twitter.com/hashtag/Eve?src=hash&ref_src=twsrc%5Etfw">#Eve</a> <a href="https://twitter.com/hashtag/%E4%B8%AD%E5%B7%9D%E5%A4%A7%E5%BF%97?src=hash&ref_src=twsrc%5Etfw">#中川大志</a> <a href="https://twitter.com/hashtag/%E6%B8%85%E5%8E%9F%E6%9E%9C%E8%80%B6?src=hash&ref_src=twsrc%5Etfw">#清原果耶</a> <a href="https://twitter.com/hashtag/%E8%A6%8B%E5%8F%96%E3%82%8A%E5%9B%B3?src=hash&ref_src=twsrc%5Etfw">#見取り図</a></p>— アニメ映画『ジョゼと虎と魚たち』大ヒット上映中!! (@joseetora_movie) <a href="https://twitter.com/joseetora_movie/status/1343392131855970305?ref_src=twsrc%5Etfw">December 28, 2020</a></blockquote> <script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script><div style="text-align: left;"><br /></div><div style="text-align: left;">さて、内容ですが、</div><div style="text-align: left;">生まれつき足が動かないようで、車椅子に乗ったジョゼと、</div><div style="text-align: left;">アルバイトでもダイビングショップで働くダイビングをライフワークにしている学生、管理人と、</div><div style="text-align: left;">ダイビングショップのアルバイトの同僚が主な登場人物です。</div><div style="text-align: left;">ひょんなことから主人公の大学生は「管理人」としてジョゼの世話焼きのアルバイトを始めます。</div><div style="text-align: left;"><div>ジョゼはおばあちゃんと二人暮らし。</div><div>おばあちゃんには外は危険で恐ろしい猛獣ばかりと言い聞かされながら毎日家の中で過ごしています。</div><div>ふわふわした可愛らしい見た目ですが毒舌で横暴。</div><div>自分の部屋のふすまを閉めたまま、ふすま越しに管理人に無茶な要求をして使い走らせます。</div><div>高額な時給を目当てに管理人は必死で要求に答えますが、</div><div>掛け持ちバイト先のダイビングショップの同僚に、「アイツ絶対泣かす」とボヤきます。</div><div><br /></div><blockquote class="twitter-tweet"><p dir="ltr" lang="ja">🐠ℂ𝕙𝕒𝕣𝕒𝕔𝕥𝕖𝕣:二ノ宮舞✨<br /><br />恒夫がバイトしているダイビングショップの後輩。<br />魚の水中写真を撮ることが好き。<br />恒夫に想いを寄せているが打ち明けられずにいる。<br /><br />CV <a href="https://twitter.com/hashtag/%E5%AE%AE%E6%9C%AC%E4%BE%91%E8%8A%BD?src=hash&ref_src=twsrc%5Etfw">#宮本侑芽</a><a href="https://twitter.com/hashtag/%E3%82%B8%E3%83%A7%E3%82%BC%E8%99%8E?src=hash&ref_src=twsrc%5Etfw">#ジョゼ虎</a> <a href="https://t.co/5YDfozg79h">pic.twitter.com/5YDfozg79h</a></p>— アニメ映画『ジョゼと虎と魚たち』大ヒット上映中!! (@joseetora_movie) <a href="https://twitter.com/joseetora_movie/status/1313055579628331009?ref_src=twsrc%5Etfw">October 5, 2020</a></blockquote> <script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script><div><br /></div><div><br /></div><div>ある日、いつものようにジョゼの家へ行くとジョゼの姿がありません。</div><div>管理人はおばあちゃんと一緒に探し回ります。ジョゼを見つけた管理人は、</div><div>これからたくさんジョゼと一緒に外の世界へ出歩くことになります…</div><div><br /></div><div>ネタバレはこれくらいにしときます。予告見た感じだと全然話わからなかったので、</div><div>これくらいの情報は知ってても良かったなと思ったのをまとめたのが上のあらすじです。</div><div><br /></div><div>内容ではありませんが、音楽がヴァイオレット・エヴァーガーデンと同じEvan Callさんで、</div><div>とても情景に合った効果的なBGMになっていたと思います。</div><div>舞台は大阪の市街地で、ちょうど先日マジミラ併催イベントの通天ミクを見に行ったので記憶に新しい町並みが丁寧に描かれていました。</div><div><br /></div><div>主人公の管理人はひたむきで人当たりもいい好青年。</div><div>自身の夢、目標に対して一歩一歩近づいていきます。</div><div>この時点で、僕はこういう人に弱いので自己実現を応援したくなります。</div><div>一つステップを進むたび、こちらもうれしくなります。</div><div>夢を掴むためのステップを自分で組み立てて一歩ずつ進んで行く感じがよく描かれています。</div><div>僕自身進路とかを真面目に考えたことがほとんどなくて、</div><div>成り行きで大学卒業まで進んできたので、しっかりとした夢や目標がある人に憧れる部分があるのかなと思います。</div><div>ストレートに何もかもうまく行ってしまうと物語にならないのでやはり挫折があります。</div><div>絶望で空っぽになってしまったところ、仲間に夢を思い出させてもらう、月並みなパターンですが、内容が、本当に自分も頑張ろうと思うだろうなという説得力のあるエピソードになっています。</div><div><br /></div><div>ジョゼも、家に閉じ込められていたところから、怖い世界だと思っていた外の世界に触れ、</div><div>友達もできて、自分の生き方や目標を見つけます。</div><div><br /></div><blockquote class="twitter-tweet"><p dir="ltr" lang="ja">🐠ℂ𝕙𝕒𝕣𝕒𝕔𝕥𝕖𝕣:岸本花菜✨<br /><br />ジョゼが恒夫と共に訪れた図書館の司書。<br />フランソワーズ・サガンが好きで、初めて出会ったジョゼと小説の話で意気投合する。<br /><br />CV <a href="https://twitter.com/hashtag/Lynn?src=hash&ref_src=twsrc%5Etfw">#Lynn</a><a href="https://twitter.com/hashtag/%E3%82%B8%E3%83%A7%E3%82%BC%E8%99%8E?src=hash&ref_src=twsrc%5Etfw">#ジョゼ虎</a> <a href="https://t.co/78zdsBhaRZ">pic.twitter.com/78zdsBhaRZ</a></p>— アニメ映画『ジョゼと虎と魚たち』大ヒット上映中!! (@joseetora_movie) <a href="https://twitter.com/joseetora_movie/status/1343483172109967360?ref_src=twsrc%5Etfw">December 28, 2020</a></blockquote> <script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script><div><br /></div><div>「何者」という映画があって、就職活動を描く作品で、</div><div>大してやりたいこともないけどどっかに入らないといけない。</div><div>何社受けても面接で落とされる。じゃあどんな自分を作って面接で見せたらいいんだろう。</div><div>そもそもこんなことはなんの意味があるんだろう?</div><div>みたいな鬱々とした作品なのですが、その逆って感じですね</div><div><br /></div><div>今就職活動中や、受験する大学を決めようみたいな進路について考えている学生は、</div><div>やりたいことがない人も、多少なりとも夢がある人も「何者」よりはジョゼを見たほうがいいと思いますw</div><div>やりたいことがあって、自分でそのためにどうしたらいいか考え、歩きながら、</div><div>そのやりたいことに対して周りの理解や応援があると、</div><div>それが実現してもしなくても本当に幸せだろうなと思うのですよ。</div><div>自分がそうじゃなくても夢を追う人を支える側になり、一歩一歩自己実現に近づくのを共に喜ぶこともやはり幸せだろうなとダイビングショップの仲間を見ていて思いました。</div><div><br /></div><div>本音ですか?</div><div>管理人のように芯のあるヤツだったら人生豊かで楽しいだろうなと思いました。</div><div>自分でバシィッ!と目標を決めて突き進むのは自分の人生を作り上げていく感じがするんだろうなと。</div><div>僕なんか成り行きで薄っぺらい人生を歩んでいますよ。それが不幸とまでは感じませんが。</div></div>じてんしゃPhttp://www.blogger.com/profile/01771693136106799787noreply@blogger.com0tag:blogger.com,1999:blog-7526483848213799232.post-72078757322558874352020-10-28T23:28:00.008+09:002020-11-01T17:45:25.342+09:00劇場版ヴァイオレット・エヴァーガーデン見た感想<div>ヴァイオレット・エヴァーガーデン、すごく評判良くて</div><div>映画館とか5年くらい行ってないので久しぶりに行くかー</div><div>と思ってたので先週末見に行きました。</div><br />
<blockquote class="twitter-tweet"><p dir="ltr" lang="ja">見てきた。<br />いいカット多かった。ヴァイオレットさんの表情が全部いい。登場人物全員慈愛に満ちてるし。<br />鼻涙管洗浄したわ <a href="https://t.co/fr7E9XJx88">pic.twitter.com/fr7E9XJx88</a></p>— じてんしゃP (@jitenshap) <a href="https://twitter.com/jitenshap/status/1319978597449228288?ref_src=twsrc%5Etfw">October 24, 2020</a></blockquote> <script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<div>結論から言うとかなりよかったです。</div><div><br /></div><div>久しぶりの映画館は鬼滅の刃ばっかりやっていて鬼滅キッズで溢れていてロビーが密でした。</div><div>僕が入ったシアター自体はちょうど埋まってる座席がちょうど半分くらい。</div><div>快適に見ることができました。</div><div><br /></div><div>映画の設定ですが、</div><div>舞台は外国のどこかで、ヨーロッパのどっかなのかなーみたいな景色でした。</div><div>主人公のヴァイオレット・エヴァーガーデンさんは郵便局に務め、</div><div>当時の識字率がそれほど高くない世の中で、手紙や文章が書くのが得意でない人の代わりに文書の代筆をする、自動手記人形の仕事をしています。</div><div>依頼主の伝えたい意図をよく汲み取って非常にいい手紙や文章を書くことで高く評価されています。</div><div>そんな彼女も実は暗い過去がありました。</div><div>戦争中、ヴァイオレットさんはある軍人一家の兄弟に拾われ、幼くして戦場に駆り出されていました。</div><div>そんな中、弟である少佐はヴァイオレットさんのことをかわいがり、まだ幼くして感情をなくし、戦闘マシーンと化していた彼女に、勉強や情緒などたくさんのことを教えてあげていました。</div><div>戦争が激しくなり、お互いボロボロになりながら離れ離れになってしまった少佐のことを、ヴァイオレットさんは人気自動手記人形として活躍しながらも忘れられずにいた…</div><div>という設定でした。</div><div><br /></div><div>あんまりにネタバレしてもあれなので、ざっくりよかったところをいうと、</div><div>はじめに人気自動手記人形として活躍するヴァイオレットさんを見せて華やかな感じになりつつも、暗い過去の説明で一度下げる、さらに吉報を受け取りまた感情が高ぶって、そうストレートにはうまくいかない…とまた下がる。クライマックスに向けてさらにもう1段上げて下げて…というメリハリが効いた感情の起伏があり、主題の合間合間に挟まれるサブエピソードも相まって非常に見ている人を引き込みます。</div><div>それぞれのシーンでヴァイオレットさんのひたむきさを感じることができ、感情移入してしまいます。</div><div><br /></div><div>そのシーンを引き立てているのが背景で、心象風景が非常に効果的に使われています。</div><div>肝心のシーンでは背景がものすごくきれいで、説得力を高めています。</div><div><br /></div><div>ちなみにどのシーンもヴァイオレットさんかわいいです。ちびヴァイオレットさんもかわいいし、真剣なヴァイオレットさんもかわいいし、すっごい喜んでるヴァイオレットさんもかわいい。</div><div><br /></div><div>そして、登場人物の人柄もいい。慈愛に満ちています。</div><div>同僚はヴァイオレットさんを慕い、強かながら弱い部分もあるヴァイオレットさんを温かく支えています。登場人物全員いい人です。</div><div>一人ひとりの登場人物のヴァイオレットさんとの関係性がまた、この作品からにじみ出る優しさや暖かさを作っています。</div><div><br /></div><div>映画を見ながら、自分もこんな仲間が欲しいなぁと何度も思いました。</div><div>仲間を想い支える側としても、よくわかり合って本当に必要なときにそばにいてもらう側としても、こんな仲間がいればどんなときもやっていけるだろうなと。</div><div>テーマは、「大切な人のことを思い出して、大切な人に伝えるべきことを伝えているか?」</div><div>ということのようですが、友達がいないのでまずその大切な仲間がほしいなと思ったのでした。。。</div><br />
<blockquote class="twitter-tweet"><p dir="ltr" lang="ja">なるほどもう一回見るなら再来週以降だな<br />「ヴァイオレット・エヴァーガーデン」ドルビーシネマ上映、新たな入場者特典も <a href="https://t.co/rQTvahjmXc">https://t.co/rQTvahjmXc</a></p>— じてんしゃP (@jitenshap) <a href="https://twitter.com/jitenshap/status/1322426033975357440?ref_src=twsrc%5Etfw">October 31, 2020</a></blockquote> <script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script><br />
<div>追記</div><div>サブスク系ではNetflix独占配信のTVアニメ版と外伝もそのためにNetflix入って観ました。</div><div>ヴァイオレットさんが持っているブローチ、手袋、傘など</div><div>ひとつひとつにもエピソードがあったのですね…。</div><div>それに、同僚との関係性も、徐々に作り上げていったものだったのを知って</div><div>ヴァイオレットさんのひたむきさに涙腺崩壊でした。</div><div>ヴァイオレットさんが、少佐の言った「あいしてる」の意味をどのようにして知ったのか、</div><div>映画から入った人もぜひTVアニメ版も見てほしいですね</div>じてんしゃPhttp://www.blogger.com/profile/01771693136106799787noreply@blogger.com0tag:blogger.com,1999:blog-7526483848213799232.post-26612719828321470822020-09-21T23:01:00.001+09:002020-09-21T23:01:14.600+09:00GoToを使って帰省してみた(JR東日本 びゅうトラベル使用)<p> GoToトラベルとかいう謎企画やってるじゃないですか。</p><p>やり始めてすぐはまだ厳重に警戒してる人も多くて批判もされてましたが、</p><p>結局のところ、主たる完成経路は飛沫か接触でしょうということになり、</p><p>どちらも起きにくい状況であれば別に移動しようが何しようがいいんじゃね?</p><p>という流れになりつつありますね。僕もそういうものかーと受け入れて</p><p>5月の連休、盆休みともにしてなかった帰省をGoToトラベルを使ってやってみました。</p><p>GoToを使うとなると旅行パックになるので交通宿泊費合計から補助が出る感じです。</p><p>帰省はするけど実家に泊まらずホテルに泊まって顔だけ出すのもこの状況だしありかなと思い、連休前の木曜日に調べてみました。</p><p><br /></p><p>埼玉在住、実家は新潟なので、移動経路は新幹線です。</p><p>ちょうど検索したらJRのびゅうトラベルのサイトが出てきたので</p><p>その中で4連休中に使えるプランを探してみました。</p><p><a href="https://www.jre-travel.com/lp/goto/?utm_source=go&utm_medium=sea&utm_campaign=goto&utm_content=goto&gclid=Cj0KCQjwnqH7BRDdARIsACTSAdtXItBCDPBBtDkuKDg6HyltX-ZTO2exB7sIc9xXkitn9k_bYlTNP8kaAii2EALw_wcB">https://www.jre-travel.com/lp/goto/?utm_source=go&utm_medium=sea&utm_campaign=goto&utm_content=goto&gclid=Cj0KCQjwnqH7BRDdARIsACTSAdtXItBCDPBBtDkuKDg6HyltX-ZTO2exB7sIc9xXkitn9k_bYlTNP8kaAii2EALw_wcB</a></p><p>もともと東京から新潟まで1万円くらいする新幹線ですが、プランを見ていくと、</p><p>連休中でも1万9千円を切る価格で往復新幹線代と宿泊費が込みのプランがありました。</p><p>宿も素泊まりのプランですが、数年前にできた新潟駅南口に直結されているJRが運営しているきれい目のビジネスホテルです。</p><p>新潟帰ったらまず実家に泊まるしここに泊まる機会なんてそうそうないだろうなと思っていたのでいい機会だしと予約ボタンをぽちぽち。</p><p>注意事項が複雑で、またパックなので合計金額しか出ておらず内訳が不明で本当にこの料金だけでいいのかな?など何度も確認しつつ、行き帰りの新幹線の時間を設定。</p><p>旅程表というのがPDFで出てきて、これを印刷して旅行中持ち歩けと出ていましたが、</p><p>結局一度も使う機会はありませんでした。</p><p>もし新幹線乗り遅れ、時間変更が必要になったさいなど、</p><p>みどりの窓口に駆け込んだ際に必要になるかもなので、携帯でPDFをダウンロードしておいたり、予約番号を控えておいたりはしたほうがいいかもしれません。</p><p><br /></p><p>旅行当日、出発駅の新幹線の切符が出せる券売機でチケットを発券します。</p><p>いつも指定席予約を受け取るときのとおりインターネット予約のえきねっと予約の受け取り→予約したクレジットカードで受け取るってやったところ、そこからは受け取れなかったようで、カードをお返ししますと出てしまいました。</p><p>取り消しボタンを押して最初の画面に戻って、インターネット予約の受け取り→JR東日本国内ツアーの受け取りというボタンがあったので、そこから予約したクレジットカードで受け取るというボタンを押したところ、往復分の切符がでてきました。</p><p><a href="https://www.eki-net.com/travel/guide/payment/mv.html">https://www.eki-net.com/travel/guide/payment/mv.html</a></p><p>ここに受け取り方が書いてありました。僕のような心配性の人は見といて損はないと思います。</p><p>「クーポン2枚の発券があります」と予約画面で出てましたが、この企画マーク付き切符がそれのようです。</p><p>とりあえず発券したので昼食を食べ、いい時間になったので新幹線乗り場へ。</p><p>3時間弱で新潟へ着き、</p><blockquote class="twitter-tweet"><p dir="ltr" lang="ja">🍚食べ放題 <a href="https://t.co/rgILfkUewY">pic.twitter.com/rgILfkUewY</a></p>— じてんしゃっぷ (@jitenshap) <a href="https://twitter.com/jitenshap/status/1307549543701991424?ref_src=twsrc%5Etfw">September 20, 2020</a></blockquote> <script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script><p>実は目的の一つだった、<a href="http://www.kiraraten.jp/">まんがタイムきらら展 in 新潟を</a>見に<a href="http://museum.nmam.jp/">新潟市マンガ・アニメ情報館</a>へ。</p><p>市内出身で地元とは言え学校と家の往復ばかりの引きこもりだったのであまり街中を歩いたことがなく、実は土地勘がない新潟駅東口エリアを歩くこと20分くらい。</p><p>万代シティバスセンターのすぐ近くビルボードプレイスとかいうなんか都会的でおしゃれっぽい名前の建物の中にありました。2階が映画館になっていて、1階が漫画アニメ情報館みたいですね。</p><blockquote class="twitter-tweet"><p dir="ltr" lang="ja">よかった <a href="https://t.co/7iv1nkZwKS">pic.twitter.com/7iv1nkZwKS</a></p>— じてんしゃっぷ (@jitenshap) <a href="https://twitter.com/jitenshap/status/1307565669941014531?ref_src=twsrc%5Etfw">September 20, 2020</a></blockquote> <script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script><p>入り口では手のひらを使った非接触検温、手指のアルコール消毒ののち、入場料を支払いチケットを受け取っておー入れるーと思ったらもう一段階あって、注意事項の説明がありました。これがなかなか長い説明で、おお…これ全員に対して読み上げるのキツそうだなぁと思いながら聞いて、アッハイわかりましたーって進もうとするとまだ続きがある…、30秒くらいだったと思います。ちゃんと聞きましょうね。</p><p>きらら自体は漫画はあまり読んだことがなくて、先日も書きましたが単行本全部読んだのはひだまりスケッチくらいでしょうか。ただきらら原作のアニメは刺さるものが多くてNEWGAME!などそれなりにハマっているものも多かったので来れてよかったです。</p><p>撮影禁止のメインの展示エリアでしたが、これまでの発刊されたきらら誌がずらーっと並んで飾ってあるところでは、</p><p>ひだまりスケッチもまだ始まってないころなんだこれ!とか、</p><p>おおーこのへんでNEWGAMEアニメ化した!とか、</p><p>最近やっぱりひだまりスケッチ載ってないけど載ると必ず表紙って聞いてたとおりなんだな</p><p>とかいろいろ見られて面白かったです。</p><p>あとは僕はあまりソシャゲー自体が合わなくてやってないですが、</p><p>きららファンタジアキャラクターの等身大パネル的なものを見て、</p><p>えっ、キルミーベイベーのやすなってひだまりのゆのっちより背低いの!!</p><p>など驚きながら、</p><p>展示を出た後に物販コーナーでささやかながら戦利品を手にして一度ホテルへ向かいました。</p><p>ホテルに入りチェックイン。はてさてGoToの場合だと何か特殊なことがあるのかしらとか思って帰りの新幹線の切符や持ち歩いてくださいと書いてあったPDFの印刷を用意してフロントに行き、予約した(苗字)です~って言ったら、フルネーム様ですねって言われて、ほかのビジホでやるように宿泊票に連絡先書いてカードキー貰って終わりでした。</p><p>会計のときにまた何かあるのかなーと思いながら部屋へ。</p><blockquote class="twitter-tweet"><p dir="ltr" lang="ja">GoToなので実家に泊まらないやつ <a href="https://t.co/8fUPrCmM4K">pic.twitter.com/8fUPrCmM4K</a></p>— じてんしゃっぷ (@jitenshap) <a href="https://twitter.com/jitenshap/status/1307594513234489344?ref_src=twsrc%5Etfw">September 20, 2020</a></blockquote> <script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script><p>さすがにできて数年しかたってないのできれいな部屋でした。禁煙室だし。</p><p>本当にタダで泊まっていいのか…と思いながらベッドにぱふ。普通のビジホのベッドって感じですがあまり外泊しないのでちょっとプレミアム感を感じます。</p><p>日が暮れてきておなかもすいたので再び夕食のために外出。</p><p>入居しているビル自体の耐震工事のため一時閉店してましたが復活したというバスセンターのカレー(<a href="https://www.google.com/maps/place/%E5%90%8D%E7%89%A9+%E4%B8%87%E4%BB%A3%E3%81%9D%E3%81%B0/@37.9165131,139.0534128,17z/data=!3m1!5s0x5ff4c9920c038867:0x1065c4142acabc8f!4m8!1m2!2m1!1z44OQ44K544K744Oz44K_44O844Gu44Kr44Os44O8!3m4!1s0x5ff4c9920b2e8a87:0x73201fee06d68fc0!8m2!3d37.9167099!4d139.0555537" target="_blank">名物 万代そば</a>)を試食しました。</p><blockquote class="twitter-tweet"><p dir="ltr" lang="und"><a href="https://t.co/bi84zMm8l3">pic.twitter.com/bi84zMm8l3</a></p>— じてんしゃっぷ (@jitenshap) <a href="https://twitter.com/jitenshap/status/1307611100297310208?ref_src=twsrc%5Etfw">September 20, 2020</a></blockquote><p> <script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>ソウルフードロスからの解放ということで、メディアにもたくさん取り上げられたようで閉店時刻間際でしたがそれなりにお客さんが入っていました。</p><p>立ち食いのスタイルですが女子高生のような感じのお客さんもいて流行ってんなーと。</p><p>僕は前述のとおり街中詳しくなかったので最近知って初めて食べに来ました。</p><p>色的にボンカレー的なものかなと思っていましたが、</p><p>中辛と辛口の中間くらいでわりとそれなりの辛さがあるルウで、</p><p>ぶ厚めに切った肉がコロコロと入ってました。</p><p>量も、女性がミニを頼んでいてサイズを見たら小さかったので、</p><p>普通盛りにしましたがこれだと結構多め。440円でこれはかなりの高コスパです。</p><p>確かに近くにあったらしょっちゅう来る感じ。</p><p>そして歩き疲れておなかすいていたのでそれだけでは飽き足らず</p> <blockquote class="twitter-tweet"><p dir="ltr" lang="und"><a href="https://t.co/SOV2eOFZ5L">pic.twitter.com/SOV2eOFZ5L</a></p>— じてんしゃっぷ (@jitenshap) <a href="https://twitter.com/jitenshap/status/1307618928256905216?ref_src=twsrc%5Etfw">September 20, 2020</a></blockquote><p><br /></p><p>これも市民のソウルフードのみかづき「イタリアン」</p><p>ベーシックなものではなく期間限定の麻婆豆腐味というのが出てたので買って帰りました。</p><p>完全にオーバーカロリーですがたくさん歩いたのでいいでしょう…</p><p>わずかながらでも地元にお金落とさないとだし…ね?</p><p>うちはあまり外食とかしなくて実家に帰ってしまうと実家の飯しか食べないので、この機会にジャンクフードでちょっとした観光気分を味わってみました。</p><p>宿に帰り、ゆっくり休んで翌朝チェックアウト。</p><p>チェックアウトも拍子抜けで、ありがとうございましたー。とカードキーを返却したら「お会計はお済でございます。ありがとうございました。」とコインパーキングみたいなことを言われて終了でした。</p><p>びゅうトラベル、コミュ障には最高のサービスですね。</p><p>ほとんどコミュニケーションをしなくても旅行ができる。マジ最高です。</p><p>そこから実家へ向かい、数時間の間実家に滞在しました。</p><p>食事以外はマスクをつけたまま最近の話を聞いたりして、17時すぎの便でまた東京へ。</p><blockquote class="twitter-tweet"><p dir="ltr" lang="ja">さいなら <a href="https://t.co/YbwbD34knH">pic.twitter.com/YbwbD34knH</a></p>— じてんしゃっぷ (@jitenshap) <a href="https://twitter.com/jitenshap/status/1307958520520695809?ref_src=twsrc%5Etfw">September 21, 2020</a></blockquote><p>そんな感じで新しい生活様式の規制をGoToトラベル制度を使ってやってみました。</p><p>連休なので新幹線往復普通に取るより1000円ちょっとしか変わりませんでしたが、</p><p>平日だと1万5千円くらいで圧倒的に普通に新幹線乗るより安く、</p><p>しかも宿泊付きになったりするので、</p><p>たとえば金曜日、あるいは月曜日だけお休みして、お盆に帰省できなかった分、</p><p>少しだけ家族に会いに行くのもいいのではないかと思います。</p> <script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>じてんしゃPhttp://www.blogger.com/profile/01771693136106799787noreply@blogger.com0tag:blogger.com,1999:blog-7526483848213799232.post-76080612342600118852020-07-13T23:15:00.023+09:002022-01-30T12:16:08.047+09:00Nginxを使って素の状態のブラウザで視聴可低遅延ライブストリーミングをしてみる(Nginx-http-flv-module)<b><span style="font-size: x-large;">コロナ禍で!</span></b><br />
コロナ禍でライブ配信が注目されてますね。ええ。コロナ禍と言いたかっただけです。<br />
ZOOMのようなビデオチャットや、Youtube Live ニコニコ生放送のような<br />
1対多の生放送アプリまで、実際に集まって行う会議やイベント、<br />
あるいは授業なんかもライブ配信で済ませている。そんな時代が一気に訪れました。<br />
ここではWebRTCなどを使った双方向のビデオチャットではなく、<div>いわゆる映像配信と言われる1対多のストリーミングサービスの話題が中心です。<br />
<br />
そんな中、セキュリティの関係もあり自分でライブ配信プラットフォームを作れないか</div><div>という相談が寄せられた人もいることでしょう。</div><div>
これまでは、Adobe Media ServerやWowzaを動かしてそこにRTMPで打ち上げ、</div><div>Flash Playerで視聴といったアプリケーションが一般的でしたが、</div><div>ライセンス料をはじめ、非常にサーバーのコストがかかりました。<br />
また、映像送信側では現役で使われているRTMPも、</div><div>現在では視聴環境側のブラウザでは、<br />
RTMPの受信に必須であるFlash Playerのサポートを打ち切られているなど</div><div>すでに終わった技術になりつつあります。<br />
RTMPで打ち上げるのはいいけどじゃあどうやって見るの?という話になるわけです。<br />
<br />
いくつか方法があり、<br />・サーバーでHTTP Live Streaming形式に変換し、</div><div>HTTPプロトコルでのストリーミング視聴を可能にする<br />・同じくMPEG-DASH形式にしてHTTPプロトコルでのストリーミング視聴を可能にする<br /><br /></div><div>
主に使われているのはこの2種類です。<br />
<br />
どちらも仕組みとしては、配信したい映像を一定時間に区切ったTSファイルにして、</div><div>TSファイルの構成を示したプレイリストと一緒にブラウザでダウンロード、</div><div>プレイリストにしたがって再生、プレイリストを逐次更新して</div><div>また新しいTSファイルをダウンロードという形で、</div><div>HTTP GETを繰り返ししていくことにより映像をつながった状態で見られる仕組みです。<br />
<br />
RTMPで打ち上げた映像をそのままHLS形式に変換してくれる機能まで持ったのが、</div><div>Nginx-RTMP-moduleです。<br />
<a href="https://github.com/arut/nginx-rtmp-module">https://github.com/arut/nginx-rtmp-module</a><br />
WebサーバーとしてはおなじみのNginxのモジュールで、</div><div>設定をするとRTMPサーバーとして動作、</div><div>HLSファイルの生成をONにしてWebサーバーでホストするとTSファイルと</div><div>M3U8プレイリストを生成して、HLSの配信環境も作ることができます。<br /><br /></div><div>
これはすでに試している方も多いと思います。<br />
HLSはサポートしているブラウザも多く、スマホでもPCでも安定して視聴できます。<br />
しかし、先に述べた仕組みなので、<br />
TSファイルの長さ分、録画した動画ファイルを生成してからプレイリストに乗せて、</div><div>ブラウザがダウンロード、再生ということでその分遅延が大きくなります。<br />
このへんは調べるか、実際にやってみるとよく分かると思います。<br />
僕が限界までチューニングした結果3秒くらいの遅延までは縮められましたが、</div><div>回線が遅くなったりするとすぐ映像が途切れてしまうピーキーな感じになってしまいました。</div><div>
<br />
毎回前置きが長いですが、そこでタイトルのNginx-http-flv-moduleの出番です。<br />
<a href="https://github.com/winshining/nginx-http-flv-module">https://github.com/winshining/nginx-http-flv-module</a><br />
まずはサクッとインストールから。<br /><br />環境: Ubuntu 20系 (NTTArena Indigo VPS)</div><div>nginx/1.20.2 使用</div><div>追加モジュール以外はapt-getでインストールされるNginxと同じビルドオプションに</div><div>Nginx-http-flv-moduleを追加</div><div><br />
<pre class="prettyprint">sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get install build-essential libpcre3 libpcre3-dev libssl-dev zlib1g-dev -y
</pre>
<br />
Nginx-flv-moduleモジュールレポジトリをダウンロードしてビルド<br />
<pre class="prettyprint">git clone https://github.com/winshining/nginx-http-flv-module.git
wget http://nginx.org/download/nginx-1.20.2.tar.gz
tar -zxvf nginx-1.20.2.tar.gz
cd nginx-1.20.2/
./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock \
--http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp \
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
--http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module \
--with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module \
--with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module \
--with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream \
--with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-g -O2 -fdebug-prefix-map=/data/builder/debuild/nginx-1.20.2/debian/debuild-base/nginx-1.20.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fPIC' \
--with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -pie' \
--add-dynamic-module=./../nginx-http-flv-module
</pre>
<br />
<pre class="prettyprint">make
sudo make install
</pre>
<br />成功すると、/usr/sbin/にnginxのバイナリが作成されます。</div><div>
<br>
サービスの登録<br>
<pre class="prettyprint">sudo vi /usr/lib/systemd/system/nginx.service
</pre>
<br>
<pre class="prettyprint">[Unit]
Description=A high performance web server and a reverse proxy server
Documentation=man:nginx(8)
After=network.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -q -g 'daemon on; master_process on;'
ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;'
ExecReload=/usr/sbin/nginx -g 'daemon on; master_process on;' -s reload
ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid
TimeoutStopSec=5
KillMode=mixed
[Install]
WantedBy=multi-user.target
</pre>
<br>
<pre class="prettyprint">sudo systemctl enable nginx
</pre>
<br>
Nginxの設定</div><div><br />
<pre class="prettyprint">sudo vi /etc/nginx/nginx.conf
</pre>
<br />
<pre class="prettyprint">
#追加
include /etc/nginx/streams-enabled/*;
#http内に追加
include /etc/nginx/sites-enabled/*;
</pre>
<br />
<pre class="prettyprint">
sudo mkdir /var/cache/nginx
sudo useradd nginx
sudo mkdir /var/cache/nginx/client_temp
sudo mkdir /etc/nginx/sites-available
sudo mkdir /etc/nginx/sites-enabled
sudo vi /etc/nginx/sites-available/vod
</pre>
<br />
<pre class="prettyprint">
location /http-flv {
flv_live on;
chunked_transfer_encoding on;
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' true;
}
</pre>
<br />
RTMPサーバー用設定ファイルを作る。<br />
各パラメーターの詳細はNginx-RTMP-Moduleのドキュメントに書いてあります。<br />
<pre class="prettyprint">sudo mkdir /etc/nginx/streams-available
sudo mkdir /etc/nginx/streams-enabled
</pre>
<br />
<pre class="prettyprint">sudo vi /etc/nginx/streams-available/rtmp
</pre>
<br />
<pre class="prettyprint">rtmp_auto_push on;
rtmp_auto_push_reconnect 1s;
rtmp_socket_dir /tmp;
rtmp {
out_queue 4096;
out_cork 8;
max_streams 8;
timeout 3s;
drop_idle_publisher 5s;
log_interval 5s;
log_size 1m;
server {
listen 1935;
server_name localhost;
application rtmp {
live on;
}
}
}
</pre>
<br />
設定有効化(sites-available、sites-enabledにリンク)<br />
<pre class="prettyprint">sudo rm /etc/nginx/sites-enabled/default
sudo ln -s /etc/nginx/sites-available/vod /etc/nginx/sites-enabled/vod
sudo ln -s /etc/nginx/streams-available/rtmp /etc/nginx/streams-enabled/rtmp
sudo /usr/sbin/nginx
</pre>
<br />
こんな感じで設定したらOBSなどでRTMPの配信を受けられます。
<br />
<div>
そして、プレイヤーの画面を作っていきます。</div>
<div>
プレイヤーにはbilibiliのflv.jsを使います。</div>
<div>
<a href="https://github.com/Bilibili/flv.js/">ht</a><a href="https://github.com/Bilibili/flv.js/">tps://github.com/Bilibili/flv.js/</a></div>
<div>
<a href="https://github.com/bilibili/flv.js/releases">https://github.com/bilibili/flv.js/releases</a></div>
<div>
から、flv.min.jsをダウンロードしてwwwrootに置きます。</div>
<div>
同じくプレイヤーのHTMLを作ります。</div>
<br />
<pre class="prettyprint">sudo vi /var/www/html/player.html
</pre>
<br />
<pre class="prettyprint"><script src="flv.js"></script>
<video id="videoElement" muted autoplay controls></video>
<script>
if (flvjs.isSupported()) {
var videoElement = document.getElementById('videoElement');
var flvPlayer = flvjs.createPlayer({
type: 'flv',
isLive: true,
enableStashBuffer: false,
autoCleanupSourceBuffer: true,
stashInitialSize: 1024 * 128,
url: '/http-flv?port=1935&app=rtmp&stream=stream01'
});
flvPlayer.attachMediaElement(videoElement);
flvPlayer.load();
flvPlayer.play();
}
</script>
</pre>
<br />
<div>
これでhttp://localhost/player.htmlを見ると、</div>
<div>
rtmp://localhost/rtmp/stream01宛にRTMPで送った映像が見られます。</div><div><br /></div>
<div>
仕組みとしては、 /etc/nginx/sites-available/vodに設定を書きましたが、</div>
<div>
受け取ったRTMPストリームを、80番ポートで再配信しています。</div><div>location /http-flv...</div><div>という部分がそれです。</div><div>flv live on;とすると、</div><div>locationになっている/http-flvにAPIが生成されます。</div><div><br /></div><div>このAPIは、</div><div>port: RTMPストリーム受信ポート</div><div>app: live on;にしているRTMPサーバーのapplication名</div><div>stream: ストリームキー名</div><div>をクエリパラメータに食わすと、内部で該当ストリームをHTTP経由で返してくれます。</div>
<div><br /></div><div>
これにより、RTMPストリーム(FLV)を直接HTTP GETできるようになっています。</div>
<div>
Flash playerがないとRTMPを再生できないのは、ブラウザがrtmp://プロトコルをサポートしていないのが主な要因ですが、HTTPプロトコルでストリームが受信できるとなると話は別です。</div>
<div>
flv.jsは、RTMP over HTTPのストリームをデコードしてHTML5プレイヤーで再生します。<br />
視聴中の通信イメージとしては、動画をHTTP GETするとチャンクドレスポンスで、Content-Lengthが無限のBodyが降り続けてきて、ずっと配信が続く限り無限に終わらない動画のダウンロードをしている感じです。</div>
<div><br /></div><div>
実際に試してみると、VPSサーバーに作った配信サーバーでも2秒くらいの遅延でした。</div><div><br /></div><div>さらに追試したところ、遅延はキーフレームの約2倍になるようで、</div><div>キーフレームを1秒にしたときは2秒、2秒にしたときは4秒ほどの遅延になりました。</div><div>動画はキーフレームが来るまでデコード開始できないので、</div><div>その分待ち時間が生まれてしまうのも納得です。</div><div><br /></div><div>HLS配信の場合も、TSファイルの分割時間で設定した時間が短くてもストリームのキーフレーム間隔のほうが長いと、キーフレーム間隔を最短時間として分割してしまいます。</div><div>遅延と戦うには多少画質を犠牲にしてでもキーフレーム間隔を短くする必要がありそうです。</div><div><br /></div><div>エンコーダーの設定でキーフレーム間隔をさらに短くできれば、遅延も減りそうです。</div>
<div>
<br /></div>
<blockquote class="twitter-tweet">
<div dir="ltr" lang="ja">
OBSのブラウザが遅延してるんだわ。<br />
配信画面と比較したら2秒ちょい。早い!! <a href="https://t.co/oNAar7DfDY">pic.twitter.com/oNAar7DfDY</a></div>
— じてんしゃっぷ (@jitenshap) <a href="https://twitter.com/jitenshap/status/1280879858730467328?ref_src=twsrc%5Etfw">July 8, 2020</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<div>
<br /></div>
<div>
<br /></div>
<div>
チャット付きのライブ配信や監視系など、遅延が大きすぎると問題なアプリケーションではとても威力を発揮しそうです。</div>
<div>
<br /></div>
</div>じてんしゃPhttp://www.blogger.com/profile/01771693136106799787noreply@blogger.com0tag:blogger.com,1999:blog-7526483848213799232.post-57997848909346355022020-07-13T00:12:00.002+09:002020-07-13T00:12:33.198+09:00今更ながらひだまりスケッチを最新巻まで一気読みした感想<div>
Amazonが芳文社セールでKindleの芳文社単行本の一部が77円になっています。</div>
<a href="https://amzn.to/2OeWBNv">https://amzn.to/2OeWBNv</a>この機会に、アニメを見てそれなりに好きだったひだまりスケッチを全巻買って、<br />
週末一気に読んでいました。<br />
最新巻だけ通常価格でしたが、一気読みして続きがあるのに読めないのは生殺し感があってそれもホイホイ買ってしまいました。思うつぼです。<br />
<br />
ひだまりスケッチのこれまでのイメージ(アニメ1期を全部見ただけ)では、<br />
ほぼほのぼの系のストーリーの中、天然だけどすごい頑張り屋さんのゆのっちがかわいくて応援したくなる感じだなぁくらいに思っていました。<br />
実際1期分のストーリーではそんな感じなのですが、続きを読んで感想が変わりました。<br />
<br />
内気で臆病なゆのっちは新しいことをするたびに不安がり、将来の目標もなかなか決まらず深く悩んでしまいます。そんなとき宮ちゃんはいつもコミカルに茶化しながら、さりげなくフォローしています。<br />
これが読み進めていくごとにわかってきて、明るく破天荒ながら優しい宮ちゃんの魅力に引き込まれます。<br />
卒業した沙英先輩の部屋へ行った宮ちゃん。いつも4人で集まりにぎやかだった部屋。<br />
空っぽの部屋で一人、、<br />
このシーンで、人に見せていないながらもやっぱり宮ちゃんはいろいろ考えていたんだろうなぁと確信しました。<br />
<br />
他にも、いつもお金がなくお腹を空かせている苦学生の宮ちゃん。これ以上親を頼って大学進学していいのかという葛藤を抱えながら、実家に電話するシーンまで他の人には深く悩んでいる様子を見せませんでした。<br />
<br />
10巻まで高校生活の2年半、局面ごとにはゆのっちと同じかそれ以上悩みや葛藤があったはずです。<br />
もっと弱いところを見せてもいいのになと思いますが、もっとずっと弱いゆのっちを、持ち前の明るさで元気付けることで自分も元気をもらっていたのかなと思います。完璧なお姉さんです。<br />
<br />
アニメを見た方もぜひ宮ちゃんに注目して単行本も読んでみてください。じてんしゃPhttp://www.blogger.com/profile/01771693136106799787noreply@blogger.com0tag:blogger.com,1999:blog-7526483848213799232.post-43390803557421627422020-05-17T23:19:00.000+09:002020-07-14T22:50:08.842+09:00Wio Terminalを使ってGPSなし・Wi-Fiだけで測位してみる(Google Geolocation API使用)<br />
なんだかSeeed StudioのWio Terminalが話題ですね。<br />
秋月やスイッチサイエンスでも取り扱いが始まりましたが、<br />
即在庫切れになったりしているようで大人気みたいです。<br />
<br />
<br />
<blockquote class="twitter-tweet">
<div dir="ltr" lang="ja">
人生 <a href="https://t.co/0Yh8JHJVvQ">pic.twitter.com/0Yh8JHJVvQ</a></div>
— じてんしゃっぷ (@jitenshap) <a href="https://twitter.com/jitenshap/status/1261128067075825666?ref_src=twsrc%5Etfw">May 15, 2020</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
会社で買ってもらったので、週末いろいろいじってみました。<br />
内容としてはMicroChipのATSAMD51系MCUに、RealtekのRTL8720DNが乗っていて、<br />
M5Stackのように画面やら何やらいろいろついてケースに入っている豪華マイコンボードです。<br />
公式通販<br />
<a href="https://jp.seeedstudio.com/Wio-Terminal-p-4509.html">https://jp.seeedstudio.com/Wio-Terminal-p-4509.html</a><br />
公式Wiki<br />
<a href="https://wiki.seeedstudio.com/jp/Wio-Terminal-Getting-Started/">https://wiki.seeedstudio.com/jp/Wio-Terminal-Getting-Started/</a><br />
<div>
<br /></div>
RealtekのRTL8720DNは、先に出ているESP8266/ESP32とは違い、<br />
5GHzのWi-Fiに対応した新しいWi-Fi搭載マイコンです。<br />
これを早く使ってみたいという人も多かったはずで、<br />
Wio Terminalの登場により、いち早く技適マーク付きの試せる環境が手に入りました。<br />
どうやらメインマイコンのSAMDと、Wi-Fi用のRTL8720DNはSPIでつながっており、<br />
このライブラリでArduino Wi-Fi API互換にラップしていますが、<br />
実は内部ではATコマンドを叩いて通信しているようです。すごい!<br />
<br />
<br />
<blockquote class="twitter-tweet">
<div dir="ltr" lang="ja">
Wio Terminal、<br />
ATコマンドどこで叩いてるんだろと思ったらesp-at-libのesp_int.cにあった。ATコマンドを全部ラップしてArduino WiFi API互換にしてるのすごいな…<a href="https://t.co/PIIznQUkGt">https://t.co/PIIznQUkGt</a> <a href="https://t.co/fsldr5mbSN">pic.twitter.com/fsldr5mbSN</a></div>
— じてんしゃっぷ (@jitenshap) <a href="https://twitter.com/jitenshap/status/1261653067386155008?ref_src=twsrc%5Etfw">May 16, 2020</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
さて、本題ですが、せっかくなので温めていたネタを、<br />
この新しいボードで試してみようとやってみたのが今回のWi-Fiを使った測位です。<br />
<br />
スマートフォンなんかではよくWi-Fiをオンにするとマップアプリの測位が早くなったり、<br />
正確な位置が表示されやすくなったりするのはご存知な方も多いと思います。<br />
これは、Googleのデータベースから、<br />
飛んでいるWi-Fi APのMACアドレスと緯度経度を紐付けた情報が提供されているから<br />
実現できています。<br />
(Google以外にも、Apple他も同じことをしているのかもしれませんが、<br />
よく知りません。)<br />
<br />
あまり知られていませんが、Wi-Fi APの情報から現在位置を推定するAPIは公開されていて、スマートフォンに組み込みの機能以外からもアクセスできるようになっています。<br />
今回はこれを使ってみようと思います。<br />
<br />
先に準備を。<br />
Google アカウントにログインして、APIコンソールを開きます。<br />
<a href="https://console.developers.google.com/?hl=JA">https://console.developers.google.com/?hl=JA</a><br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrX9aAslrQqSKWnXWyf08DO5QwADtaQyD-py2pJmU7jsk2qKJEO0d-kTJhr9wtDSzlZ7c5JwoFGElHbb1nPbRorovL3BeE4MYtlO6YshqBwF0JzA_esHkWGM-dXL7TXEuaesl60GKFdmo/s1600/1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="489" data-original-width="845" height="230" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrX9aAslrQqSKWnXWyf08DO5QwADtaQyD-py2pJmU7jsk2qKJEO0d-kTJhr9wtDSzlZ7c5JwoFGElHbb1nPbRorovL3BeE4MYtlO6YshqBwF0JzA_esHkWGM-dXL7TXEuaesl60GKFdmo/s400/1.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
すでにプロジェクトがある場合もあると思いますが、<br />
ここでははじめに新規プロジェクトを作っていきます。<br />
Google APIsと書いてある文字の右側をクリックしてプロジェクトの選択画面を表示<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMy5E0T5uD74FvDhMS-j48LvNUfKikFSfB4m7QYfmIf3QqfEo8c3hO60y20Vyt5SqKz9dXVFh1C2nPRI59EotiBxPeYpKl5xnsgxm758FF-sK__537v3ZYb6GZwPE5JI_cXtaCsIZq9S0/s1600/2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="689" data-original-width="817" height="336" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMy5E0T5uD74FvDhMS-j48LvNUfKikFSfB4m7QYfmIf3QqfEo8c3hO60y20Vyt5SqKz9dXVFh1C2nPRI59EotiBxPeYpKl5xnsgxm758FF-sK__537v3ZYb6GZwPE5JI_cXtaCsIZq9S0/s400/2.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
新しいプロジェクトボタンをクリック</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNZ6BmmZFW451LUGYyl1LlL_E1_0GBFL4OIG-07BP6_t11Nuircu_tmZjRaAyvUP6xj-08CjnN_6p4mezYlS6G3cLo-XeeWShlCNrUm0m1__Z6-mJh19AufqtvhXuhCfFlHA_43bTRIo4/s1600/3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="477" data-original-width="570" height="333" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNZ6BmmZFW451LUGYyl1LlL_E1_0GBFL4OIG-07BP6_t11Nuircu_tmZjRaAyvUP6xj-08CjnN_6p4mezYlS6G3cLo-XeeWShlCNrUm0m1__Z6-mJh19AufqtvhXuhCfFlHA_43bTRIo4/s400/3.jpg" width="400" /></a></div>
<br />
適当にわかりやすい名前をつけます。<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiW90SHGlX-lVDb5soMI3lng3GAC5kzVeLX7ZkOMNbE_7XmEusrppUqveKJYAxiOvhDpzPUIHEmxeWmk3iwP4PhnRtkgcTUV0Y2yrW7Fkz6caczVUCCrlJTTbDsox1syeBVVUr_Ux0vn9I/s1600/4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="771" data-original-width="864" height="356" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiW90SHGlX-lVDb5soMI3lng3GAC5kzVeLX7ZkOMNbE_7XmEusrppUqveKJYAxiOvhDpzPUIHEmxeWmk3iwP4PhnRtkgcTUV0Y2yrW7Fkz6caczVUCCrlJTTbDsox1syeBVVUr_Ux0vn9I/s400/4.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
こんな画面に飛ばされたら、APIとサービスを検索の検索窓に<br />
Geolocationと入力<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLoTnlCEyTC9Nqx11tKKKBR4Muq5-ndb4jHOCij-oUXz284-Ouq0Ll3n3T9s-6rWPhNAyDjVUWD-b9q2HcricNfIBRHUTDond47iL1i-ED0KehzpfAFH9c6e51XahQ0w76fqjhbXKLtx0/s1600/5.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="441" data-original-width="653" height="270" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLoTnlCEyTC9Nqx11tKKKBR4Muq5-ndb4jHOCij-oUXz284-Ouq0Ll3n3T9s-6rWPhNAyDjVUWD-b9q2HcricNfIBRHUTDond47iL1i-ED0KehzpfAFH9c6e51XahQ0w76fqjhbXKLtx0/s400/5.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
Geolocation APIが出てきたらクリック<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmoJ7IqTlR3XNTN-voAISPVCJL_db8eavkCW_m1KMIoH3gyZSA5T59csvfsMgtDd2BjzvfFQbO400pe80dxf52WZRFVeI4XguOcP1XMcJA1HWPKwG24CHGH_AeX-L2IfMQpDbgqi7peNM/s1600/6.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="756" data-original-width="844" height="357" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmoJ7IqTlR3XNTN-voAISPVCJL_db8eavkCW_m1KMIoH3gyZSA5T59csvfsMgtDd2BjzvfFQbO400pe80dxf52WZRFVeI4XguOcP1XMcJA1HWPKwG24CHGH_AeX-L2IfMQpDbgqi7peNM/s400/6.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
有効にする。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsrOGPYQlvMw9JUNAoQsp_EssvWt9qvTIsItwXaRKDRU4VBQAsKnfbARccH_Ir5VLl44CbykfV0Xm68NhbIzg_Qn31dihA9bVIPdOortXkD731gPzc90KCbaVN1ySMQAFTW4vKwzL0klA/s1600/7.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="673" data-original-width="895" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsrOGPYQlvMw9JUNAoQsp_EssvWt9qvTIsItwXaRKDRU4VBQAsKnfbARccH_Ir5VLl44CbykfV0Xm68NhbIzg_Qn31dihA9bVIPdOortXkD731gPzc90KCbaVN1ySMQAFTW4vKwzL0klA/s400/7.jpg" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
左側にある認証情報をクリック<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlGpFgdAFsC0evbU6ZO1uXuN9Qnr9DYbXP_kJmYiRbTtQ6h0_s46QiWzbv4bSJylOATdxUs-egSyEZiBSPd6MleCtbEF2bOplYW6hxUpceGKnY4-GtF4VAwLXlNDrOc6h9p_kk8CNY1Xk/s1600/8.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="440" data-original-width="1600" height="108" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlGpFgdAFsC0evbU6ZO1uXuN9Qnr9DYbXP_kJmYiRbTtQ6h0_s46QiWzbv4bSJylOATdxUs-egSyEZiBSPd6MleCtbEF2bOplYW6hxUpceGKnY4-GtF4VAwLXlNDrOc6h9p_kk8CNY1Xk/s400/8.jpg" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
今回は使わないですが、OAuthの同意画面を作成<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiidpL7XJ7wUS2l70Yf_UqaKTmBybdyu3lewkjw2q5kKNioqC-2xw_Bh2pN7_BPF9d_NI2nGEVXO7xtzREl6AmauGS9xwt15Z-UgnX0yihuDqone4WYJm9DV8aGfQUC6HoJWgKf_k0tFKw/s1600/9.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="497" data-original-width="799" height="248" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiidpL7XJ7wUS2l70Yf_UqaKTmBybdyu3lewkjw2q5kKNioqC-2xw_Bh2pN7_BPF9d_NI2nGEVXO7xtzREl6AmauGS9xwt15Z-UgnX0yihuDqone4WYJm9DV8aGfQUC6HoJWgKf_k0tFKw/s400/9.jpg" width="400" /></a></div>
<br />
外部を選択。次の画面の写真はありませんが、<br />
名前の場所だけ埋めればとりあえず使えます。<br />
このへんからはセキュリティに関わってくるので、各自調べながらやってください。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBpCxh5DuZJxvNi1eeXCW0hSEsReJAeoKyEO4oWHl7CDMizz_Nz4OW1MtCYXfhSS-jJweboJG92h_HrrHvOFJMyIsXhHB_EHFuC8CD5TwLR9GW7RjjaZkWTPdyn0EP_dN31WWBbtI5n-E/s1600/10.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="558" data-original-width="965" height="231" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBpCxh5DuZJxvNi1eeXCW0hSEsReJAeoKyEO4oWHl7CDMizz_Nz4OW1MtCYXfhSS-jJweboJG92h_HrrHvOFJMyIsXhHB_EHFuC8CD5TwLR9GW7RjjaZkWTPdyn0EP_dN31WWBbtI5n-E/s400/10.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
OAuth認証画面が作成できたら、</div>
<div class="separator" style="clear: both; text-align: left;">
認証情報のページで認証情報を作成→APIキーをクリック</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiheJvRMUXIdQOu0jqClW4LNYy55StnzFA1wKmMGqo2x8m5Jkeg-8u3_WOB6JfTyxv7BtcigyhEzDreMH_jlIRgA3DEEvpb2gCqB32BhUwz_gmWr2TUpaG0yYU7417PmvJi3dI8miDMx0o/s1600/11.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="657" data-original-width="785" height="333" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiheJvRMUXIdQOu0jqClW4LNYy55StnzFA1wKmMGqo2x8m5Jkeg-8u3_WOB6JfTyxv7BtcigyhEzDreMH_jlIRgA3DEEvpb2gCqB32BhUwz_gmWr2TUpaG0yYU7417PmvJi3dI8miDMx0o/s400/11.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
APIキーが取得できたら準備完了です。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
このレポジトリにWio Terminalに書き込むスケッチと、Node.jsスクリプトがあります。</div>
<div class="separator" style="clear: both; text-align: left;">
<a href="https://github.com/jitenshap/Arduino-Wi-Fi-LocationLog">https://github.com/jitenshap/Arduino-Wi-Fi-LocationLog</a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
git cloneしてArduino IDEで書き込んだら、SDカードを入れて起動するだけで、</div>
<div class="separator" style="clear: both; text-align: left;">
30秒おきにスキャンした周囲のWi-Fi APの情報がSDカードに保存されていきます。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
終わったら、PCにSDカード内のbssids.csvをコピーします。</div>
<div class="separator" style="clear: both; text-align: left;">
↑のレポジトリに入っている、getloc.jsと同じディレクトリにコピーしてください。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Node.jsの実行環境がない場合は、適当にインストールしてください。</div>
<div class="separator" style="clear: both; text-align: left;">
また、CSVパーサーライブラリのインストールが必要です。</div>
<div class="separator" style="clear: both; text-align: left;">
適宜</div>
<div class="separator" style="clear: both; text-align: left;">
npm install csv-parse</div>
<div class="separator" style="clear: both; text-align: left;">
とかやってインストールしましょう。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
get_loc.jsを開いて、YOUR_API_KEYの部分に先ほど取得したAPIキーを貼り付けて、</div>
<div class="separator" style="clear: both; text-align: left;">
node getloc.js</div>
<div class="separator" style="clear: both; text-align: left;">
すると、result.csvというファイル名で緯度経度に変換された結果が保存されます。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
読み方ですが、1列目の数字はタイムスタンプ(起動時からのミリ秒)、</div>
<div class="separator" style="clear: both; text-align: left;">
2列目に緯度、経度、誤差(m)と続く構造です。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
めんどくさがって結果出力をKMLファイルとかにしてないわけですが、</div>
<div class="separator" style="clear: both; text-align: left;">
世の中には便利なサイトがありまして、CSVを貼るとKMLにしてくれるサイトがあります。</div>
<div class="separator" style="clear: both; text-align: left;">
<a href="https://www.convertcsv.com/csv-to-kml.htm">https://www.convertcsv.com/csv-to-kml.htm</a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
ここに、CSVの中身を貼って、</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmo7wCqmQ-3DAO0nKo8xtMKeW0zB6wNON4uQVVKNomxl0kgPLhRak3RukMhBV84JKbRGRSKYOoXT5c9AHnq0g4YpENal3dg9WExmK28laQ3usF7iMQDjz4P7shasO8LDHMD8b5XBMuaq4/s1600/12.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="583" data-original-width="771" height="301" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmo7wCqmQ-3DAO0nKo8xtMKeW0zB6wNON4uQVVKNomxl0kgPLhRak3RukMhBV84JKbRGRSKYOoXT5c9AHnq0g4YpENal3dg9WExmK28laQ3usF7iMQDjz4P7shasO8LDHMD8b5XBMuaq4/s400/12.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
こんな設定にしてあげるとあらかんたん、KMLファイルとして出力されます。</div>
<div class="separator" style="clear: both; text-align: left;">
(ピンのタイトルがタイムスタンプになります)</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Google Mapsのマイマップ機能やGoogle Earthにインポートすると結果が見られます。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
こんな感じでわりとかんたんにWi-Fiだけを使った測位ができてしまいます。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Wio Terminalには3G/LTEのようなWWANがありませんが、</div>
<div class="separator" style="clear: both; text-align: left;">
テザリングやモバイルルータを使うなどすれば</div>
<div class="separator" style="clear: both; text-align: left;">
リアルタイムでの測位も可能と思います。</div>
<div class="separator" style="clear: both; text-align: left;">
(その場合はモバイルルータのMACアドレスを除外するなど</div>
<div class="separator" style="clear: both; text-align: left;">
ちょっと工夫が必要そうです。)</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<blockquote class="twitter-tweet">
<div dir="ltr" lang="ja">
Wio Terminalで周辺のWi-Fi APのBSSIDをMicroSDにログして、帰ったあとデータを吸い出してGoogle GeoLocation APIで緯度経度に変換、会社の最寄り駅から会社までの経路をGPSなしで測位に成功。 <a href="https://t.co/7phv5SyD4a">pic.twitter.com/7phv5SyD4a</a></div>
— じてんしゃっぷ (@jitenshap) <a href="https://twitter.com/jitenshap/status/1261968589801656320?ref_src=twsrc%5Etfw">May 17, 2020</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
なお、Google Geolocation APIがなぜそれほど浸透していないのか、</div>
<div class="separator" style="clear: both; text-align: left;">
理由はおそらく簡単で、料金だと思います。</div>
<div class="separator" style="clear: both; text-align: left;">
↑の画像にも実はチラっと写っていますが、</div>
<div class="separator" style="clear: both; text-align: left;">
利用料金なんと1000リクエストで5USDくらいだそうです。</div>
<div class="separator" style="clear: both; text-align: left;">
この記事を読んで試す場合、さすがに無料枠内で試せると思いますが、</div>
<div class="separator" style="clear: both; text-align: left;">
高頻度で24時間動かし続けたり、商用で何台もクライアントがいると</div>
<div class="separator" style="clear: both; text-align: left;">
かなりの金額になりそうです…。</div>
じてんしゃPhttp://www.blogger.com/profile/01771693136106799787noreply@blogger.com0tag:blogger.com,1999:blog-7526483848213799232.post-65633982395198154802020-03-03T23:40:00.000+09:002020-03-15T23:27:39.474+09:00怪我をしたので松葉杖に取り付ける荷重管理デバイスを製作しました。数年前に下書きを作って公開してない記事でした。令和になって初公開です。<br />
<br />
膝の内側を怪我しました。前十字靭帯付着部裂離骨折という骨折のようです。<br />
経緯についてはこちらの動画をどうぞ…<br />
<br />
<iframe frameborder="0" height="176" scrolling="no" src="https://ext.nicovideo.jp/thumb/sm29679209" style="border: solid 1px #ccc;" width="312"><a href="https://www.nicovideo.jp/watch/sm29679209">膝の内側を骨折した話①</a></iframe>
前十字靭帯の付け根にあたる膝の骨を剥離骨折する、<br />
<i>"前十字靭帯付着部裂離骨折"</i>という怪我のようです。<br />
骨にトンネルを開け、ワイヤを通し靭帯と結び、浮いた骨を元の位置に抑える手術をしました。<br />
入院は一週間半、私は大学生で学期末の時期だったので<br />
ちょっと成績的にまずくなったりしましたが、大学生活に疲れ精神的にも参っていた中、<br />
一時の休みを得られてよかったとも感じています。<br />
名医に出会えたので、術後の経過は良好で疼痛もなく順調でしたが、<br />
骨が接合するまでには3ヶ月の時間を要するということで、術後2ヶ月は杖を欠かせませんでした。<br />
<br />
術後の経過日数により、はじめの2週間は負傷側の足を地面につくことなく過ごすこと、<br />
次の週は体重の1/3まで掛けてよい…など、徐々に負荷制限が緩和されていきました。<br />
しかし、極度の運動音痴の私は、1/3荷重がこれくらいだと両足別々の体重計に乗せられて、<br />
教えられたところで感覚を覚えられません。負傷側にも体重をかければ、<br />
松葉杖を持つ手は楽なのですが、荷重制限を越えるとどうなるかわかったものではありません。<br />
一方で、荷重を掛けず養生している負傷側はどんどん衰えていき、リハビリの先生には、<br />
「寝たきりの老人並」と言われました。太ももが頬のように柔らかくなったのはショックでした。<br />
荷重を掛けなければ筋肉を取り戻すことはできないのです。<br />
<br />
そんなジレンマを抱えつつ、やはりこわいので余り荷重を掛けないようにしていたまま、<br />
全体重の2/3荷重を負傷側に掛けていいと許可されました。<br />
2/3荷重を掛けられると、松葉杖を両手に抱えずに1本で歩く、「片松葉」ができるようです。<br />
以前と同じ荷重のままでは、手に掛かる荷重は両松葉のときの2倍になってしまいます。<br />
右手がボロボロになりながら、ちゃんと2/3荷重を掛けられるようになろう。と考えました。<br />
<br />
前置きが長くなりましたが、製作工程を…。<br />
<br />
Wii fitというゲーム用コントローラーのバランスWiiボードをAmazonで買いました。<br />
早速バラし…<br />
<br />
<blockquote class="twitter-tweet">
<div dir="ltr" lang="ja">
Wii FitのバランスWiiボード(わざわざ中古買った)から取り出したロードセルで重量測定までできた <a href="https://t.co/8dp3kztXlD">pic.twitter.com/8dp3kztXlD</a></div>
— じてんしゃP (@jitenshap) <a href="https://twitter.com/jitenshap/status/766886887407562752?ref_src=twsrc%5Etfw">August 20, 2016</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
松葉杖用の先端に取り付けました<br />
<br />
<blockquote class="twitter-tweet">
<div dir="ltr" lang="ja">
接地面はもともとついてたバランスWiiボードの足。<br />これはプラスチックが引っかかってはまってるだけなので分解するとロードセルと分離してしまうからクッション性のある3Mの強力両面テープで接着。 <a href="https://t.co/tkPOUgazvc">pic.twitter.com/tkPOUgazvc</a></div>
— じてんしゃP (@jitenshap) <a href="https://twitter.com/jitenshap/status/766892818300215296?ref_src=twsrc%5Etfw">August 20, 2016</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
テープ固定じゃ心もとないので、Amazonで杖の先のゴム石突部を買って加工しねじ止めしました。<br />
<br />
<blockquote class="twitter-tweet">
<div dir="ltr" lang="ja">
バランスWiiボードの足改め松葉杖の接地面、グルーガンですべり止めパターン作ってやったらどこで突いても滑らなくなった。冷えると結構硬いけど効果はあるみたい。<br />硬化しても効果あるってか <a href="https://t.co/sCwAjnvTN8">pic.twitter.com/sCwAjnvTN8</a></div>
— じてんしゃP (@jitenshap) <a href="https://twitter.com/jitenshap/status/767355517672972288?ref_src=twsrc%5Etfw">August 21, 2016</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
測定値を正確にするために、校正用の機能と設備も用意。<br />
<br />
<blockquote class="twitter-tweet">
<div dir="ltr" lang="ja">
画面を付けて、校正初期化が単体でできるようになったよ! <a href="https://t.co/CLR7q1Mn7x">pic.twitter.com/CLR7q1Mn7x</a></div>
— じてんしゃP (@jitenshap) <a href="https://twitter.com/jitenshap/status/767765756612259841?ref_src=twsrc%5Etfw">August 22, 2016</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
で、ちょいちょいっとしきい値を設定してLEDが点くようにしてみました。
<br />
<br />
<blockquote class="twitter-tweet">
<div dir="ltr" lang="ja">
使ってみた。わかりやすい!!<br />左足に全体重の2/3を掛けて残りの約20kgを杖に掛けたいので、20kg~30kgまでは緑、かけすぎの30kg以上は白、20kg以下は黄色にLEDが点灯。 <a href="https://t.co/rr41ENmUvp">pic.twitter.com/rr41ENmUvp</a></div>
— じてんしゃP (@jitenshap) <a href="https://twitter.com/jitenshap/status/766923886483021824?ref_src=twsrc%5Etfw">August 20, 2016</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
じてんしゃPhttp://www.blogger.com/profile/01771693136106799787noreply@blogger.com0tag:blogger.com,1999:blog-7526483848213799232.post-75074700561852008112020-03-03T22:57:00.000+09:002020-03-03T23:03:26.676+09:00ESP32でBosch BME680の拡張ライブラリ Bsecを使う少し前に、秋月でも気温・湿度・気圧に加え、MEMSガスセンサを搭載した、<br />
<div>
Bosch BME680の取り扱いが始まりましたね。</div>
<div>
<a href="http://akizukidenshi.com/catalog/g/gK-14469/">http://akizukidenshi.com/catalog/g/gK-14469/</a></div>
<div>
サクっと4ピン出ていてすぐにI2Cで繋げられそうな感じになっています。</div>
<div>
自分は去年しばらくストロベリーリナックスのBME680を使って</div>
<div>
しばらく実験していたので、使い方について少しまとめてみます。</div>
<div>
<br /></div>
<div>
BME680は、公開されているデータシートやサンプルコードを使うと</div>
<div>
・気温</div>
<div>
・湿度</div>
<div>
・気圧</div>
<div>
・ガスセンサの抵抗値</div>
<div>
が取得できるセンサーです。</div>
<div>
ガスセンサの構造ですが、電気応用みたいな名前の科目で習った通りだとすると</div>
<div>
金属をヒーターで温める→酸化して抵抗値が上がる</div>
<div>
周辺の雰囲気に水素などがあると還元されて抵抗値が下がる</div>
<div>
という原理で可燃性ガスの有無がわかるという原理だったと思います。</div>
<div>
なのでセンサがしっかりと加熱されるまでしばらく新鮮な雰囲気下で動かして、</div>
<div>
ベースラインの抵抗値を控えておいて、それより抵抗値が下回ったら</div>
<div>
何かガスが出てるなという判断が可能です。</div>
<div>
<br /></div>
<div>
しかし、抵抗値が表示されても相対的な評価しかできないので、</div>
<div>
何か単位がついた空気品質の指標が欲しいですよね。</div>
<div>
<br /></div>
<div>
そこでBosch謹製のBsecライブラリというものをご紹介します。</div>
<div>
<a href="https://www.bosch-sensortec.com/software-tools/software/bsec/">https://www.bosch-sensortec.com/software-tools/software/bsec/</a></div>
<div>
ボッシュのラボテストの結果、センサーから取得できる生データをもとに、</div>
<div>
・推定CO2</div>
<div>
・IAQ(屋内空気品質)</div>
<div>
・推定呼気VOC</div>
<div>
・湿度・気温補正値(ヒーターの影響を考慮した値)</div>
<div>
を計算してくれるArduinoライブラリです。(RPi版もある)</div>
<div>
<br /></div>
<div>
最新版はGitHubにあります。早速cloneしましょう。</div>
<div>
<a href="https://github.com/BoschSensortec/BSEC-Arduino-library">https://github.com/BoschSensortec/BSEC-Arduino-library</a></div>
<div>
<br /></div>
<div>
README.mdを読むとわかるのですが、インストールに一癖も二癖もあります。</div>
<div>
なぜかというと、BoschはこのBsecライブラリのソースコードを公開していません。</div>
<div>
特定環境向けに、コンパイル済みバイナリとヘッダーファイルという形で提供しています。</div>
<div>
このコンパイル済みのライブラリを使うために、Arduino IDEに修正が必要です。</div>
<div>
<br /></div>
<div>
現時点で最新のインストール方法についてご説明します。</div>
<div>
<br /></div>
<div>
はじめに、Arduino IDE 1.8.11のポータブル版を用意します。</div>
<div>
<a href="https://www.arduino.cc/en/main/OldSoftwareReleases">https://www.arduino.cc/en/main/OldSoftwareReleases</a></div>
<div>
ここに過去バージョンの一覧があるので入手可能です。</div>
<div>
Windows ZIP file for non admin installとあるリンクからZipファイルになったポータブル版をダウンロードして解凍しました。Macの場合は知りません。</div>
<div>
<br /></div>
<div>
解凍したら、できたフォルダにportableという名前のフォルダを作成します。</div>
<div>
これですでに入っているArduino IDEとパスを共有しなくなります。</div>
<div>
ライブラリやボードマネージャの設定などは入れなおしになります。</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZEwC0ysAVJ8_-KaZ_-80pOu5B4WxGs-m26-DIYnaPVveUnVrCvJ9YNKfGwUFx07Om2BjwnLfqlArNytqNNGYfp26HHfDts78SBY7TcCYHPQoU372c5xSmD-SfCRhNT6Tr_6IHiTRLC9g/s1600/arduino-1.8.12+2020_03_03+0_02_07.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="680" data-original-width="1280" height="212" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZEwC0ysAVJ8_-KaZ_-80pOu5B4WxGs-m26-DIYnaPVveUnVrCvJ9YNKfGwUFx07Om2BjwnLfqlArNytqNNGYfp26HHfDts78SBY7TcCYHPQoU372c5xSmD-SfCRhNT6Tr_6IHiTRLC9g/s400/arduino-1.8.12+2020_03_03+0_02_07.jpg" width="400" /></a></div>
<div>
<br /></div>
<div>
フォルダ内のexeからArduino IDEを起動します。</div>
<div>
今回はESP32を使うので、ボードマネージャでESP32を使えるように設定し、(省略)</div>
<div>
ライブラリをインクルードより、まずは普通にダウンロードした</div>
<div>
Bsecライブラリをインポートします。</div>
<div>
なお、ESP32ボードのパッケージはv1.0.4を使います。</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_NTedYAzBJ4veh2ug6c21kodCKPt76H6rqFOyZiJX4Ll9ABaCHoI1FRp9H_D41iFIMKXfxmGZAC7XGOuLTDcEBGqtyqYNfje8Mxu2ae914mZX6oIWC2icpnJgQ6qzYRKMXUxmcCwJNJM/s1600/sketch_mar03a+_+Arduino+1.8.12+2020_03_03+0_02_43.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="553" data-original-width="482" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_NTedYAzBJ4veh2ug6c21kodCKPt76H6rqFOyZiJX4Ll9ABaCHoI1FRp9H_D41iFIMKXfxmGZAC7XGOuLTDcEBGqtyqYNfje8Mxu2ae914mZX6oIWC2icpnJgQ6qzYRKMXUxmcCwJNJM/s320/sketch_mar03a+_+Arduino+1.8.12+2020_03_03+0_02_43.jpg" width="278" /></a></div>
<br />
Arduino 1.8.11のフォルダ\portable\packages\esp32\hardware\esp32\1.0.4<br />
を開きます。<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVe66KiQJrMF898IxL-bq-QgOiuEzohGHIx0g7gchqefZ0LoWmlYJVLafAr-vDVjseDVZCoSxQ3o6Q4PV7zh81Az_C6B2x1O63exfShG9aHl-iHyWU3q2G5cX19PdETROFM56I2E3owew/s1600/1.0.4+2020_03_03+0_09_33.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="680" data-original-width="1280" height="212" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVe66KiQJrMF898IxL-bq-QgOiuEzohGHIx0g7gchqefZ0LoWmlYJVLafAr-vDVjseDVZCoSxQ3o6Q4PV7zh81Az_C6B2x1O63exfShG9aHl-iHyWU3q2G5cX19PdETROFM56I2E3owew/s400/1.0.4+2020_03_03+0_09_33.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
platform.txtを開き、</div>
<div class="separator" style="clear: both;">
compiler.c.extra_flags=</div>
<div class="separator" style="clear: both;">
compiler.c.elf.extra_flags=</div>
<div class="separator" style="clear: both;">
compiler.S.extra_flags=</div>
<div class="separator" style="clear: both;">
compiler.cpp.extra_flags=</div>
<div class="separator" style="clear: both;">
compiler.ar.extra_flags=</div>
<div class="separator" style="clear: both;">
compiler.objcopy.eep.extra_flags=</div>
<div class="separator" style="clear: both;">
compiler.elf2hex.extra_flags=</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
あたりを</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
compiler.c.extra_flags=</div>
<div class="separator" style="clear: both;">
compiler.c.elf.extra_flags=</div>
<div class="separator" style="clear: both;">
#compiler.c.elf.extra_flags=-v</div>
<div class="separator" style="clear: both;">
compiler.cpp.extra_flags=</div>
<div class="separator" style="clear: both;">
compiler.S.extra_flags=</div>
<div class="separator" style="clear: both;">
compiler.ar.extra_flags=</div>
<div class="separator" style="clear: both;">
compiler.elf2hex.extra_flags=</div>
<div class="separator" style="clear: both;">
<span style="color: #cc0000;">compiler.libraries.ldflags=</span></div>
<div>
とします。(コメントアウトが増えてるけど公式のやつそのままコピペなので)</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfZomf7u5AuFSqoEw5xaRHANcTGLH5epImQwlNWBUzQrD_vsnITRXmjN7c-q8-A_Mb_KIHgkg9iVHFPUDf5Y8PFlsdc_EwjxPSBx5E1oNjb76l3XjCKRn_SY9qtDbhH2XDtzrZlOr5FUM/s1600/_platform.txt+-+%25E3%2583%25A1%25E3%2583%25A2%25E5%25B8%25B3+2020_03_03+0_10_28.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="650" data-original-width="1280" height="202" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfZomf7u5AuFSqoEw5xaRHANcTGLH5epImQwlNWBUzQrD_vsnITRXmjN7c-q8-A_Mb_KIHgkg9iVHFPUDf5Y8PFlsdc_EwjxPSBx5E1oNjb76l3XjCKRn_SY9qtDbhH2XDtzrZlOr5FUM/s400/_platform.txt+-+%25E3%2583%25A1%25E3%2583%25A2%25E5%25B8%25B3+2020_03_03+0_10_28.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
さらに、</div>
<div class="separator" style="clear: both;">
## Combine gc-sections, archives, and objects</div>
<div class="separator" style="clear: both;">
recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" {build.exception_flags} -Wl,-Map "-Wl,{build.path}/{build.project_name}.map" {compiler.c.elf.flags} {compiler.c.elf.extra_flags} -o "{build.path}/{build.project_name}.elf" -Wl,--start-group {object_files} "{archive_file_path}" -Wl,--end-group "-L{build.path}"</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
の行を</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" {compiler.c.elf.flags} {compiler.c.elf.extra_flags} -Wl,--start-group {object_files} "{archive_file_path}" <span style="color: #cc0000;">{compiler.c.elf.libs}</span> -Wl,--end-group {compiler.libraries.ldflags} -Wl,-EL -o "{build.path}/{build.project_name}.elf" <span style="color: #cc0000;">-lm -lgcc</span></div>
<div>
<br /></div>
<div>
とします。</div>
<div>
これでコンパイルが通るようになります。</div>
<div>
<br /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVNGd4H0qApv0NLJQUKfG495WBguhhb1d4iNy2S3X86nKHvrfAMA2w00VI0NvBdKi0RVCG97vh4zqFGeOAFjeiHOhDC985Tjf1o03sLo0rNpugDcQzj0SLwX6w7Qc93JlIYr13TMEpOkM/s1600/_platform.txt+-+%25E3%2583%25A1%25E3%2583%25A2%25E5%25B8%25B3+2020_03_03+0_19_44.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="938" data-original-width="1226" height="305" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVNGd4H0qApv0NLJQUKfG495WBguhhb1d4iNy2S3X86nKHvrfAMA2w00VI0NvBdKi0RVCG97vh4zqFGeOAFjeiHOhDC985Tjf1o03sLo0rNpugDcQzj0SLwX6w7Qc93JlIYr13TMEpOkM/s400/_platform.txt+-+%25E3%2583%25A1%25E3%2583%25A2%25E5%25B8%25B3+2020_03_03+0_19_44.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
そして、Arduino IDEを再起動後、スケッチ例→Bsec Software Library→basic</div>
<div class="separator" style="clear: both; text-align: left;">
をコンパイルしてみましょう。I2C接続でセンサーデータを取得するサンプルです。</div>
<div class="separator" style="clear: both; text-align: left;">
必要に応じて、LED_BUILTINを#define LED_BUILTIN 19のように置き換え</div>
<div class="separator" style="clear: both; text-align: left;">
BME680_I2C_ADDR_PRIMARYを0x77(BME680_I2C_ADDR_PRIMARYは0x76)</div>
<div class="separator" style="clear: both; text-align: left;">
としてあげると動くと思います。</div>
<div class="separator" style="clear: both; text-align: left;">
ESP32の場合、Wire.beginの部分で</div>
<div class="separator" style="clear: both; text-align: left;">
Wire.begin(21, 22);のようにピンを置き換えしてあげる必要があります。</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijAcTIkXT7v4JDW2iwcbzIvghaDE3YdUhY8-Xo-8pFAHFLGuo5jgbXGLYjEzzvhrwHf4HPafh98IZBXBZTazSp8h8lIXLc51ZvlgzrjAUUWLDeDPygBBIjowFBZ0VLijCYJ3YOC2qDiSo/s1600/COM15+2020_03_03+22_15_15.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="408" data-original-width="1128" height="143" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijAcTIkXT7v4JDW2iwcbzIvghaDE3YdUhY8-Xo-8pFAHFLGuo5jgbXGLYjEzzvhrwHf4HPafh98IZBXBZTazSp8h8lIXLc51ZvlgzrjAUUWLDeDPygBBIjowFBZ0VLijCYJ3YOC2qDiSo/s400/COM15+2020_03_03+22_15_15.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
成功するとこんな感じでセンサーデータが出てきます。</div>
<div class="separator" style="clear: both; text-align: left;">
呼気VOCなんかは簡易アルコールチェッカーとして使えそうだったり、</div>
<div class="separator" style="clear: both; text-align: left;">
気温測定の代わりに今流行っているCO2も推定値が出てきます。</div>
<div class="separator" style="clear: both; text-align: left;">
また、空気品質もIAQという指標となる値が出てくるため評価しやすい値となっています。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
春休みにBME680をいじってみてはいかがでしょうか。</div>
じてんしゃPhttp://www.blogger.com/profile/01771693136106799787noreply@blogger.com0tag:blogger.com,1999:blog-7526483848213799232.post-88681242075759111022020-02-16T18:01:00.003+09:002020-07-14T23:53:37.113+09:00ESP-IDF v4をWindowsのVS Codeで使いやすくしてみる(PlatformIOなし)<a href="https://blog.nyancotech.online/2020/02/windowsesp32esp-idf.html">https://blog.nyancotech.online/2020/02/windowsesp32esp-idf.html</a><br />
の続きです。<br />
WindowsでESP-IDF v4環境の構築は上記ページをご覧ください。<br />
<br />
まずは普通にインストールされたESP-IDF Command Promptを開きます。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_MCuBRAipRP2LGbkfgLre8AUYLMLLheaRQ73yakRMiN8DEEVtpjJ5y5tDwBIUEz3YwMMY6Cy3cGxzB93GJWG8cTJAMlw0fKN6oduLJRa23hbux8OIY7Z-RYZdbDKKbvcU6DKLb_T3qdY/s1600/Screenshot+2020_02_16+17_37_26.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="372" data-original-width="401" height="296" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_MCuBRAipRP2LGbkfgLre8AUYLMLLheaRQ73yakRMiN8DEEVtpjJ5y5tDwBIUEz3YwMMY6Cy3cGxzB93GJWG8cTJAMlw0fKN6oduLJRa23hbux8OIY7Z-RYZdbDKKbvcU6DKLb_T3qdY/s320/Screenshot+2020_02_16+17_37_26.jpg" width="320" /></a></div>
<br />
<br />
<pre class="prettyprint">
Using Python in C:\Users\admin\AppData\Local\Programs\Python\Python37\
Python 3.7.3
Using Git in C:\Program Files\Git\cmd\
git version 2.25.0.windows.1
Setting IDF_PATH: C:\Users\admin\esp\esp-idf
</pre>
この部分をメモっておきます。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfoguHOG1Fknb_X9EfSoezKAV0eEA69Z4h8ZGyHO4kN71QV-MxTzJp_Y4RfMENSWXlzdEGXEdwzzrL5e5XEobim1DzOM8iZ_0sK5TWfcXFC4DAA3ZoLX27jjjB2CKIZR3_EKVjgBzSdLk/s1600/ESP-IDF+Command+Prompt+%2528cmd.exe%2529+-+_C__Users_admin_.espressif_idf_cmd_init.bat_++_C__Users_admin_AppData_Local_Programs_Python_Python37__+_C__Program+Files_Git_cmd__+2020_02_15+21_36_56.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="600" data-original-width="1200" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfoguHOG1Fknb_X9EfSoezKAV0eEA69Z4h8ZGyHO4kN71QV-MxTzJp_Y4RfMENSWXlzdEGXEdwzzrL5e5XEobim1DzOM8iZ_0sK5TWfcXFC4DAA3ZoLX27jjjB2CKIZR3_EKVjgBzSdLk/s400/ESP-IDF+Command+Prompt+%2528cmd.exe%2529+-+_C__Users_admin_.espressif_idf_cmd_init.bat_++_C__Users_admin_AppData_Local_Programs_Python_Python37__+_C__Program+Files_Git_cmd__+2020_02_15+21_36_56.jpg" width="400" /></a></div>
<br />
VS CodeでESP-IDFディレクトリを、「フォルダを開く」から開いたあと、<br />
左下の歯車ボタンから設定を開きます。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgo4mcEdPPfKlZoIneBlGnRifZrkAd07XCGKRnJVRx0ErSV80-EqXlqaHq9nXF7HzKrwSwT3zQFe7dZrAAMDm_T_c6getg85XW5YyMxn_N39qeiyYGgtzzh4rNHXCOqz_Z90_G1vELlNUY/s1600/Settings+-+esp-idf+-+Visual+Studio+Code+2020_02_16+17_37_00.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="554" data-original-width="629" height="281" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgo4mcEdPPfKlZoIneBlGnRifZrkAd07XCGKRnJVRx0ErSV80-EqXlqaHq9nXF7HzKrwSwT3zQFe7dZrAAMDm_T_c6getg85XW5YyMxn_N39qeiyYGgtzzh4rNHXCOqz_Z90_G1vELlNUY/s320/Settings+-+esp-idf+-+Visual+Studio+Code+2020_02_16+17_37_00.jpg" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Workspaceタブを選択し、Terminal欄をクリック、Edit in settings.jsonをクリック</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg3BJCJTvXnQnJ7YqRgPcVcsV1phr1Zuwh8_Tf4EXsZXwmtmsYiRIC3-B58ktqJr9_Rqw9Ks01OYdt7kQMnLBeK_yo_2pdeIPK4AvYPpcnRCYy_TDBDOHbGMB5_8P-DeiAzrwotyxkPUg/s1600/Settings+-+esp-idf+-+Visual+Studio+Code+2020_02_16+17_36_38_LI.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="684" data-original-width="1030" height="265" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg3BJCJTvXnQnJ7YqRgPcVcsV1phr1Zuwh8_Tf4EXsZXwmtmsYiRIC3-B58ktqJr9_Rqw9Ks01OYdt7kQMnLBeK_yo_2pdeIPK4AvYPpcnRCYy_TDBDOHbGMB5_8P-DeiAzrwotyxkPUg/s400/Settings+-+esp-idf+-+Visual+Studio+Code+2020_02_16+17_36_38_LI.jpg" width="400" /></a></div>
<br />
<pre class="prettyprint">
{
"terminal.integrated.shellArgs.windows": [
"cmd",
"/k",
"..\\.espressif\\idf_cmd_init.bat",
"C:\\Users\\admin\\AppData\\Local\\Programs\\Python\\Python37\\",
"C:\\Program Files\\Git\\cmd\\"
]
}
</pre>
ここに上のJSONを環境に合わせて変更して入力後保存します。<br />
<pre class="prettyprint">
..\\.espressif\\idf_cmd_init.bat
</pre>
<br>
の行には、インストールした.espressifディレクトリ内の<br />
idf_cmd_init.batへのパスを入力してください。<br />
自分は<br />
<br>
esp- .espressif<br />
L esp-idf<br />
というディレクトリ構成にしているので<br />
カレントディレクトリのesp-idfディレクトリから見ると<br />
..\.espressifが.espressifの場所になってます。<br />
Python37というのが書いてある行は、<br />
初めにESP-IDF Command Promptで表示されていた<br />
「Using Python in...」の右に書いてあるディレクトリを入力します。<br />
Git\\cmdというのが書いてある行は、同じく<br />
「Using Git in...」に書かれている行を入力します。<br />
<br />
それぞれパスの区切り文字はエスケープ文字として認識されてしまうので、<br />
\\と2つ続けて入力してください。<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu_MnIowfEbEMeDugnD9f3bAuJ8kpK6FgeEE5s7_N727qIpjyDPi4emsRj_kNfqIwUBIoxtbHO5goAI5hKhGd0CBclRILwbDwBaoZF0fpQFHCkOn7zNBakJ_8ezCIBbq2Z_uBQJU_mgf0/s1600/settings.json+-+esp-idf+-+Visual+Studio+Code+2020_02_16+17_40_48.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="631" data-original-width="812" height="310" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu_MnIowfEbEMeDugnD9f3bAuJ8kpK6FgeEE5s7_N727qIpjyDPi4emsRj_kNfqIwUBIoxtbHO5goAI5hKhGd0CBclRILwbDwBaoZF0fpQFHCkOn7zNBakJ_8ezCIBbq2Z_uBQJU_mgf0/s400/settings.json+-+esp-idf+-+Visual+Studio+Code+2020_02_16+17_40_48.jpg" width="400" /></a></div>
<br />
<br />
settings.jsonを保存して、Terminal->New Terminalでターミナルを開くと、<br />
VS CodeからESP-IDF Command Promptが使用できます!<br />
idf.py flash -p COM10とかやればこの画面のまま書き込みまでできます!<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidbXLDI2VJ2kHv2ckCfc2a8VTHN4QHPSRjjalPPDk0R0akePgsAowcJrFRzu_gg6ujV7na4j6JTSPwnEJMqDhH15Do1ZD84oMtaEat8w-_xIk0Cpk16X2_kbYP_Jueh1cZA4kedjE_Y3A/s1600/EQ3KfUVVUAE9hWx.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="686" data-original-width="1280" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidbXLDI2VJ2kHv2ckCfc2a8VTHN4QHPSRjjalPPDk0R0akePgsAowcJrFRzu_gg6ujV7na4j6JTSPwnEJMqDhH15Do1ZD84oMtaEat8w-_xIk0Cpk16X2_kbYP_Jueh1cZA4kedjE_Y3A/s400/EQ3KfUVVUAE9hWx.jpg" width="400" /></a></div>
<br />じてんしゃPhttp://www.blogger.com/profile/01771693136106799787noreply@blogger.com0tag:blogger.com,1999:blog-7526483848213799232.post-38086888815838148512020-02-15T22:23:00.001+09:002020-03-15T23:27:25.772+09:00【令和最新版】WindowsにESP32開発環境ESP-IDFをインストールするこれまでESP32の開発環境はUnixシェル用のものしか用意されておらず、
Windowsではmsysを使って実行する方法が公式で紹介されていました。
そんな中、最近になって、Espressif純正の一括インストーラが出ていたので試してみました。
<br />
<a href="https://docs.espressif.com/projects/esp-idf/en/latest/get-started/windows-setup.html">https://docs.espressif.com/projects/esp-idf/en/latest/get-started/windows-setup.html</a><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgojK8IrXBqblC6voRQ2oLUWxYUu51AT_yiopra9ENlrjguW1OXLWJ6_fzcJqWsWW1pdVV-TlJDvqZn6VXlYGxMPeVGR21mtH1j-ChL4VgI_Vn94yk7Wns6r428oUPoUwMLE5UyxFRMMTs/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+%25281%2529.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="585" data-original-width="771" height="303" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgojK8IrXBqblC6voRQ2oLUWxYUu51AT_yiopra9ENlrjguW1OXLWJ6_fzcJqWsWW1pdVV-TlJDvqZn6VXlYGxMPeVGR21mtH1j-ChL4VgI_Vn94yk7Wns6r428oUPoUwMLE5UyxFRMMTs/s400/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+%25281%2529.jpg" width="400" /></a></div>
<div>
<br /></div>
<div>
ダウンロードしたexeファイルを開き、インストールしていきます。</div>
<div>
<br /></div>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2x0iOiUh4ib-Bh99p0BNJ7DfdwyIQ8BX6M_X3tk5IJDxhOUynqGrvApBu1eekQKLbbRBF8_Uv-xRnIW0_mshFqVgsDU5miJGsndZx59Gfet1Vi42fkrUvVEzXPk_DbUkGUM0MzAPMeiA/s1600/Setup+2020_02_15+21_09_16.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="532" data-original-width="696" height="305" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2x0iOiUh4ib-Bh99p0BNJ7DfdwyIQ8BX6M_X3tk5IJDxhOUynqGrvApBu1eekQKLbbRBF8_Uv-xRnIW0_mshFqVgsDU5miJGsndZx59Gfet1Vi42fkrUvVEzXPk_DbUkGUM0MzAPMeiA/s400/Setup+2020_02_15+21_09_16.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
必要なパッケージをインストールしてくれますが、Pythonやgitなど、</div>
<div class="separator" style="clear: both; text-align: left;">
すでに入っているものがあればそれを選択することで</div>
<div class="separator" style="clear: both; text-align: left;">
新しくインストールすることなく進むことができます。</div>
<div class="separator" style="clear: both; text-align: left;">
よくできてますね</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsuMcp8NeBdZubGhxBntwIt8HztYIgOwgfNiy4lSeSqCzcUCtSdHWLL-YH4GFdkzA1j40jv7SPfrqh8iiUHo3g7-mPApkWbyRTUEHOt5yhkvZWiufQEGYlO19_Pi15B_N_CgY4fnfkjJE/s1600/Setup+2020_02_15+21_09_31.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="532" data-original-width="696" height="305" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsuMcp8NeBdZubGhxBntwIt8HztYIgOwgfNiy4lSeSqCzcUCtSdHWLL-YH4GFdkzA1j40jv7SPfrqh8iiUHo3g7-mPApkWbyRTUEHOt5yhkvZWiufQEGYlO19_Pi15B_N_CgY4fnfkjJE/s400/Setup+2020_02_15+21_09_31.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiaznUFxOdpKmDjY0EV3QbrT9L7suvo2klMp-fe9v0v8kyyH-8LIi0rB0vxbJPyUNn4Y7d6QUdx9PuTfTVQvEjHsUma_57mDSieOl1IkhmFxWNWR344nQvlFZ8bDOB_vVRyFoivlSTofo/s1600/Setup+2020_02_15+21_09_37.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="532" data-original-width="696" height="305" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiaznUFxOdpKmDjY0EV3QbrT9L7suvo2klMp-fe9v0v8kyyH-8LIi0rB0vxbJPyUNn4Y7d6QUdx9PuTfTVQvEjHsUma_57mDSieOl1IkhmFxWNWR344nQvlFZ8bDOB_vVRyFoivlSTofo/s400/Setup+2020_02_15+21_09_37.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
ESP-IDFのレポジトリをすでにダウンロードしてあれば</div>
<div class="separator" style="clear: both; text-align: left;">
そのディレクトリを使うことができます。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcp8cwNJfQOXitiXl1rBKLiBj7K2Rrt7IdA4vppFxrNT2hPgS0_lHDOVlDpRoLPn-mLLfEJYXCW19dN6jZx7e6TTzdi68AFw9VLB1Ic6i6WFOwXn1r_IPMMy8g_kXzK41fP8q31nJvs-0/s1600/Setup+2020_02_15+21_09_43.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="532" data-original-width="696" height="305" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcp8cwNJfQOXitiXl1rBKLiBj7K2Rrt7IdA4vppFxrNT2hPgS0_lHDOVlDpRoLPn-mLLfEJYXCW19dN6jZx7e6TTzdi68AFw9VLB1Ic6i6WFOwXn1r_IPMMy8g_kXzK41fP8q31nJvs-0/s400/Setup+2020_02_15+21_09_43.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
ESP-IDFをダウンロードする場合はバージョンを選択できます。</div>
<div class="separator" style="clear: both; text-align: left;">
使用するコンポーネントの互換性の問題などがなければ、</div>
<div class="separator" style="clear: both; text-align: left;">
4.0を選んだほうが後々アップデートする手間を減らせるかもしれません。</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4X9mL9y4DZ3c86MQ14dX0Ql46mLqLnGVfdrEFSHrdXACEgVYn3pJ1qkby_4ipl8njo1ibu-ioTKoprYfXM9OEU8_hdyxMsWS_2lGI7xarKCp7MkFCOaXPLriJet7oPDbYFLiQNOzXqKo/s1600/Setup+2020_02_15+21_09_49.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="532" data-original-width="696" height="305" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4X9mL9y4DZ3c86MQ14dX0Ql46mLqLnGVfdrEFSHrdXACEgVYn3pJ1qkby_4ipl8njo1ibu-ioTKoprYfXM9OEU8_hdyxMsWS_2lGI7xarKCp7MkFCOaXPLriJet7oPDbYFLiQNOzXqKo/s400/Setup+2020_02_15+21_09_49.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
ツールチェーンやPythonの仮想環境を保存する先を選択します。</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtQzUY5xzo0m8fUaROeZdHSlbUUe-5tjORIjW2hq5-5VfnVeCTdzgtlSX_b0wqB2ZZChFkZ74gHhHLczZwpx9zSUKGQTaQ42BUmBWMQJ1PVVyOmVdbrjo79j5lz3U7WW__TRGNKgqa1AY/s1600/Setup+2020_02_15+21_10_13.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="532" data-original-width="696" height="305" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtQzUY5xzo0m8fUaROeZdHSlbUUe-5tjORIjW2hq5-5VfnVeCTdzgtlSX_b0wqB2ZZChFkZ74gHhHLczZwpx9zSUKGQTaQ42BUmBWMQJ1PVVyOmVdbrjo79j5lz3U7WW__TRGNKgqa1AY/s400/Setup+2020_02_15+21_10_13.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
一発でESP-IDF用のターミナルを開くショートカットを</div>
<div class="separator" style="clear: both; text-align: left;">
スタートメニューやデスクトップに登録できます。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCqWC4NAGuStVO5sTW4ldJtFybIPOWmMcmideshOVfSfVtBT2-yTVju4UhieAlaiRa9i90wWPvZ4OPLk8YyOx_i2c94OPffUsF6ELKQEZril0LH9fMWAhP0TJ7TZXYae2-iHcG2qLK_08/s1600/Setup+2020_02_15+21_10_26.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="532" data-original-width="696" height="305" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCqWC4NAGuStVO5sTW4ldJtFybIPOWmMcmideshOVfSfVtBT2-yTVju4UhieAlaiRa9i90wWPvZ4OPLk8YyOx_i2c94OPffUsF6ELKQEZril0LH9fMWAhP0TJ7TZXYae2-iHcG2qLK_08/s400/Setup+2020_02_15+21_10_26.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
各種設定が完了するといよいよインストールです。</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXn18AXfHX5BYTK8yQ9rXWi_cZTOY2CcibWsvKCVAzBF5OqsTZ3myastU8jL_2aD94MCK9p7yRGRLwpj0dV1JB_w8ykubQxqPt7nxHKKR4vUYoo1yHvqBYTsrquE3kpV0_77apUXlvHLo/s1600/Setup+2020_02_15+21_10_33.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="532" data-original-width="696" height="305" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXn18AXfHX5BYTK8yQ9rXWi_cZTOY2CcibWsvKCVAzBF5OqsTZ3myastU8jL_2aD94MCK9p7yRGRLwpj0dV1JB_w8ykubQxqPt7nxHKKR4vUYoo1yHvqBYTsrquE3kpV0_77apUXlvHLo/s400/Setup+2020_02_15+21_10_33.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
ESP-IDFレポジトリはとても大きいのでダウンロードに時間がかかります。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhS6h7_dA539E0_vkhEX6W8Tkl-tdNvoeeBlUiZVxrQFLUueHKsGhNBsbkWmP0Bs6eabN9nTUya-T7n3e7dtKjhKqLV7s47t-qcGN4Fv-gW0aufuDirYgK71HIN5Ld7oXtLC_1MLu_IupI/s1600/Setup+2020_02_15+21_10_39.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="532" data-original-width="696" height="305" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhS6h7_dA539E0_vkhEX6W8Tkl-tdNvoeeBlUiZVxrQFLUueHKsGhNBsbkWmP0Bs6eabN9nTUya-T7n3e7dtKjhKqLV7s47t-qcGN4Fv-gW0aufuDirYgK71HIN5Ld7oXtLC_1MLu_IupI/s400/Setup+2020_02_15+21_10_39.jpg" width="400" /></a></div>
</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
しばらくして、インストールができ…</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEfO0qUk6d9CE7DP8V7zG98TtdgyViJJLMWvF3kF2HFD30JELFYqx-b0UhlMNzuZ6YV8uj5wwwdOPpjfKSB79_nPCVxD6rPA81zNBKl26B4B3bP3UHapQLeWOZQfjZDRmI9n_IJTj-Mqg/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+%25284%2529.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="574" data-original-width="1064" height="215" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEfO0qUk6d9CE7DP8V7zG98TtdgyViJJLMWvF3kF2HFD30JELFYqx-b0UhlMNzuZ6YV8uj5wwwdOPpjfKSB79_nPCVxD6rPA81zNBKl26B4B3bP3UHapQLeWOZQfjZDRmI9n_IJTj-Mqg/s400/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+%25284%2529.jpg" width="400" /></a></div>
<div>
<br /></div>
<h2>
<b>ませんでした。</b></h2>
<div class="separator" style="clear: both; text-align: left;">
表示されたログを見ると、Python virtualenvに</div>
<div class="separator" style="clear: both; text-align: left;">
--no-site-packeagesなんてオプションないよと言われています。</div>
<div>
<br /></div>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyWm6oDWHNK4GqSUB8lD4PBoshI35TwjRpN6xMF1AFHAHe_QmkIKJtn30wKYbdVrFbSizuhK-gWMiOXcSy7870RqwmvngKfRdBRcFlW3ZoWvKDNvVVBDID4UMMmdkSC3aT2CVaUsO5bmo/s1600/Setup+Log+2020-02-15+%2523006.txt+-+%25E3%2583%25A1%25E3%2583%25A2%25E5%25B8%25B3+2020_02_15+21_20_37.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="770" data-original-width="1280" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyWm6oDWHNK4GqSUB8lD4PBoshI35TwjRpN6xMF1AFHAHe_QmkIKJtn30wKYbdVrFbSizuhK-gWMiOXcSy7870RqwmvngKfRdBRcFlW3ZoWvKDNvVVBDID4UMMmdkSC3aT2CVaUsO5bmo/s400/Setup+Log+2020-02-15+%2523006.txt+-+%25E3%2583%25A1%25E3%2583%25A2%25E5%25B8%25B3+2020_02_15+21_20_37.jpg" width="400" /></a></div>
</div>
<div>
<br /></div>
<div>
はてさてexeファイルの中身に入ってるんだろうしどうしたものかと調べていると、</div>
<div>
修正版が出ていました。</div>
<div class="separator" style="clear: both; text-align: left;">
<a href="https://github.com/espressif/esp-idf/issues/4744">https://github.com/espressif/esp-idf/issues/4744</a></div>
<div class="separator" style="clear: both; text-align: left;">
下のほうに直リン貼ってる人がいます。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVsts2mGa6ifj3BvZyibpxjpMpOL1dTsSVW5_iFStMS2DwiK3AANYI68dnt0adiCk_yH6uyl1uRBwdbtmALwaEJ2HKd3rRubVeImeUreQ7GFaBt4JcKhEtdQzDmomClnc1o_hBZ2g3r18/s1600/ESP-IDF+Tools+Installer+v2.2+does+not+work+due+to+two+different+issues+%2528IDFGH-2670%2529+%25C2%25B7+Issue+%25234744+%25C2%25B7+espressif_esp-idf+-+Google+Chrome+2020_02_15+21_21_56.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="502" data-original-width="916" height="218" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVsts2mGa6ifj3BvZyibpxjpMpOL1dTsSVW5_iFStMS2DwiK3AANYI68dnt0adiCk_yH6uyl1uRBwdbtmALwaEJ2HKd3rRubVeImeUreQ7GFaBt4JcKhEtdQzDmomClnc1o_hBZ2g3r18/s400/ESP-IDF+Tools+Installer+v2.2+does+not+work+due+to+two+different+issues+%2528IDFGH-2670%2529+%25C2%25B7+Issue+%25234744+%25C2%25B7+espressif_esp-idf+-+Google+Chrome+2020_02_15+21_21_56.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
気を取り直してやり直し。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjZq39arWXRpp3XktMUNdR287bue0X-u6cXdEfvZaEa-1jpOhSK1s8nau30GNQ_Q16mufJWPGkxSMWe4wPZO8p8jkjjsEO3ecrmTHJgFPUnlyil8dXecUH2CHLsz-71rxzBd3OM8v6OoU/s1600/complete.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="568" data-original-width="696" height="326" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjZq39arWXRpp3XktMUNdR287bue0X-u6cXdEfvZaEa-1jpOhSK1s8nau30GNQ_Q16mufJWPGkxSMWe4wPZO8p8jkjjsEO3ecrmTHJgFPUnlyil8dXecUH2CHLsz-71rxzBd3OM8v6OoU/s400/complete.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
インストールできました。</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEionl8_DcMYtVxw9a9sJA7ylo4XvGDBsxAy2IWFtWbCbAuYsU1X3Fy3KrvYi2HUOvlwXVf2ttTIoNB9HuPg6eiVp6aWaiyTmh_g-sghHdr2OwXe4LVgTnjqxuJ5ZLMRShFkoxVAq7_1-SA/s1600/complete.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="568" data-original-width="696" height="326" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEionl8_DcMYtVxw9a9sJA7ylo4XvGDBsxAy2IWFtWbCbAuYsU1X3Fy3KrvYi2HUOvlwXVf2ttTIoNB9HuPg6eiVp6aWaiyTmh_g-sghHdr2OwXe4LVgTnjqxuJ5ZLMRShFkoxVAq7_1-SA/s400/complete.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Pythonのパッケージは専用の環境としてインストールされ、</div>
<div class="separator" style="clear: both; text-align: left;">
PATHもシステム標準のものではなく専用のPATHが設定されるようです。</div>
<div class="separator" style="clear: both; text-align: left;">
ほかの開発環境と競合せずに動いてありがたいですね。</div>
<div class="separator" style="clear: both; text-align: left;">
早速esp-idf\examples\get-started\hello-worldディレクトリで</div>
<div class="separator" style="clear: both; text-align: left;">
make menuconfig相当の<b>"idf.py menuconfig"</b>をしてみると…</div>
<div class="separator" style="clear: both;">
<b>なんかUnicodeDecodeErrorとか言われています…。</b></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoK6daUYbEKg0kszWgxpHuFVXRHZ_DP7lMN3QHl59dIWSxZjyV-QnCvZa_cwzpBKRhyphenhyphenPKLpgNYHYJrPTPbWeUWKEOoecHA4eOV4w0vkorAQnJ82iejyIKe0LEfWSzDJxtJGuIEEARohyc/s1600/ESP-IDF+Command+Prompt+%2528cmd.exe%2529+-+_C__Users_admin_.espressif_idf_cmd_init.bat_++_C__Users_admin_AppData_Local_Programs_Python_Python37__+_C__Program+Files_Git_cmd__+2020_02_15+21_36_56.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="600" data-original-width="1200" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoK6daUYbEKg0kszWgxpHuFVXRHZ_DP7lMN3QHl59dIWSxZjyV-QnCvZa_cwzpBKRhyphenhyphenPKLpgNYHYJrPTPbWeUWKEOoecHA4eOV4w0vkorAQnJ82iejyIKe0LEfWSzDJxtJGuIEEARohyc/s400/ESP-IDF+Command+Prompt+%2528cmd.exe%2529+-+_C__Users_admin_.espressif_idf_cmd_init.bat_++_C__Users_admin_AppData_Local_Programs_Python_Python37__+_C__Program+Files_Git_cmd__+2020_02_15+21_36_56.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
ちょっとぐぐったらこんなすばらしいコピペで動きそうな記事を発見</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both;">
最近のUnicodeDecodeError</div>
<div class="separator" style="clear: both; text-align: left;">
<a href="https://qiita.com/ousttrue/items/527a9c3045f710806aa9">https://qiita.com/ousttrue/items/527a9c3045f710806aa9</a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
.espressif\python_env\idf4.0_py3.7_env\Lib\site-packages\sitecustomize.py</div>
<div class="separator" style="clear: both; text-align: left;">
に上記記事のように</div>
<div class="separator" style="clear: both;">
<i><span style="font-size: x-small;">import builtins</span></i></div>
<div class="separator" style="clear: both;">
<i><span style="font-size: x-small;">__original = open</span></i></div>
<div class="separator" style="clear: both;">
<i><span style="font-size: x-small;">def __open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None):</span></i></div>
<div class="separator" style="clear: both;">
<i><span style="font-size: x-small;"> if 'b' not in mode and not encoding:</span></i></div>
<div class="separator" style="clear: both;">
<i><span style="font-size: x-small;"> encoding = 'utf-8'</span></i></div>
<div class="separator" style="clear: both;">
<i><span style="font-size: x-small;"> return __original(file, mode, buffering, encoding, errors, newline, closefd, opener)</span></i></div>
<div class="separator" style="clear: both;">
<i><span style="font-size: x-small;">builtins.open = __open</span></i></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
と記述したファイルを置き、標準のopen関数を上書きしてあげます。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUVlYMMnmAOEYxxkaJcGsScK0BNjKj1AjUzM4H9VHJp_g-GNnWVt5O5F1rKuwfR2-js7a9xOb2n8oJnf28I3k7q3w9WGgEkF84eaQleLSPrXVLHhOp-h-bz3CmNVJOw2pnvDOrWGGe-UA/s1600/%25E2%2597%258F+sitecustomize.py+-+Visual+Studio+Code+2020_02_15+21_37_13.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="960" data-original-width="1280" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUVlYMMnmAOEYxxkaJcGsScK0BNjKj1AjUzM4H9VHJp_g-GNnWVt5O5F1rKuwfR2-js7a9xOb2n8oJnf28I3k7q3w9WGgEkF84eaQleLSPrXVLHhOp-h-bz3CmNVJOw2pnvDOrWGGe-UA/s400/%25E2%2597%258F+sitecustomize.py+-+Visual+Studio+Code+2020_02_15+21_37_13.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
すると…</div>
<h3 style="clear: both; text-align: left;">
うーんなんか周り文字化けてるけど<b>とりあえず動いた!</b></h3>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3nPQ9ZyWD-LYLyrzCuROt-j4mGa9kAcQrWgUJJLJI169DOYnKDEnS5IQyMGh5VmyiRbY9Dp0JBMHtnuiE2Uo0yAY5cXcqvtYhIPPNZ_I_5bKNZkaYItXEbTYM0zqKZxUjlqUxsfbfzQ4/s1600/ESP-IDF+Command+Prompt+%2528cmd.exe%2529+-+_C__Users_admin_.espressif_idf_cmd_init.bat_++_C__Users_admin_AppData_Local_Programs_Python_Python37__+_C__Program+Files_Git_cmd__+-+idf.py++menuconfig+2020_02_15+21_37_57.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="600" data-original-width="1200" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3nPQ9ZyWD-LYLyrzCuROt-j4mGa9kAcQrWgUJJLJI169DOYnKDEnS5IQyMGh5VmyiRbY9Dp0JBMHtnuiE2Uo0yAY5cXcqvtYhIPPNZ_I_5bKNZkaYItXEbTYM0zqKZxUjlqUxsfbfzQ4/s400/ESP-IDF+Command+Prompt+%2528cmd.exe%2529+-+_C__Users_admin_.espressif_idf_cmd_init.bat_++_C__Users_admin_AppData_Local_Programs_Python_Python37__+_C__Program+Files_Git_cmd__+-+idf.py++menuconfig+2020_02_15+21_37_57.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div style="clear: both; text-align: left;">
このように、Espressif Systems様が提供してくださっている</div>
<div style="clear: both; text-align: left;">
Windows版インストーラにより、</div>
<h4 style="clear: both; text-align: left;">
簡単にWindowsでの開発環境が作れました!</h4>
<div>
(正直これでも今までよりは楽だと思います)</div>
<div>
<br /></div>
<div>
あとはメモですが</div>
<div>
idf.py menuconfig</div>
<div>
でmenuconfig</div>
<div>
Serial flusher configでフラッシュの設定ができたりします。</div>
<div>
idf.py makeでビルド</div>
<div>
idf.py flash -p COMxxでCOMxxポートに接続されたESP32へ書き込み</div>
<div>
idf.py monitor -p COMxxでシリアルモニタ(トレースバック付き)</div>
<div>
monitor中に</div>
<div>
Ctrl+T -> Ctrl+Shift+Fで再書き込み</div>
<div>
<div>
Ctrl+T -> Ctrl+Rでリセット</div>
<div>
などができます。便利ですね!<br />
<br />
<br />
<a href="https://www.blogger.com/u/1/goog_335185846">VS CodeからESP-IDF Command Promptを使用する方法についてもまとめました</a><br />
<a href="https://blog.nyancotech.online/2020/02/esp-idf-v4windowsvs-codeplatformio.html">https://blog.nyancotech.online/2020/02/esp-idf-v4windowsvs-codeplatformio.html</a><br />
<br /></div>
</div>
じてんしゃPhttp://www.blogger.com/profile/01771693136106799787noreply@blogger.com1tag:blogger.com,1999:blog-7526483848213799232.post-3633533163149424592019-11-16T23:42:00.000+09:002019-12-23T23:37:09.718+09:00ROHM BP35A1 ローム製Wi-SUN通信モジュールを使ってスマートメーターにBルート接続するTwitterでM5StickC用にRohmのBP35A1を取り付けるアダプターを<br />
作っておられる方がいて、BOOTHで購入できたので買ってみました。<br />
<blockquote class="twitter-tweet">
<div dir="ltr" lang="ja">
M5StickC用「Wi-SUN HAT」キット<br />
<br />
BOOTHの在庫復活!!<a href="https://t.co/4uM4XwpxDo">https://t.co/4uM4XwpxDo</a> <a href="https://t.co/iC9yhdUoPW">pic.twitter.com/iC9yhdUoPW</a></div>
— norifumi (@norifumi5001) <a href="https://twitter.com/norifumi5001/status/1190920249807237120?ref_src=twsrc%5Etfw">November 3, 2019</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
サンプルコードも配布されていますが、開いてみるとMicroPythonだったので、Arduinoのスケッチを書いてArduinoで使ってみました<br />
<br />
<blockquote class="twitter-tweet">
<div dir="ltr" lang="ja">
.<a href="https://twitter.com/norifumi5001?ref_src=twsrc%5Etfw">@norifumi5001</a> さんのWi-SUN Hatを使ってM5StickCをArduinoでプログラムしてスマートメーターと通信し、瞬時電力を取得するサンプル作った<a href="https://t.co/oHj370zD7Q">https://t.co/oHj370zD7Q</a></div>
— じてんしゃP (@jitenshap) <a href="https://twitter.com/jitenshap/status/1195500680292655104?ref_src=twsrc%5Etfw">November 16, 2019</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
そもそもBルートとはなにか?<br />
電力会社の設置している、各家庭にある電力量計は、アラゴの円板を使っていたアナログのものからデジタル化されています。<br />
デジタル化されたメーターは、サブギガ(920MHzあたり)を使う無線で通信ができるようになっています。<br />
<br />
なんのために無線通信できるのか?<br />
毎月の検針を、検針員がメーターを直接読み取らなくても手元のプリンターで積算電力量を受信して印刷できます。<br />
植栽や建物の密集度の関係上検針しにくい住宅や、集合住宅などでは集合ポスト前で一括受信・印刷することができるのだと思います。検針員はとても省力化できると思います。実際のところ、電波の到達距離も大したことがないため、どのような運用をしているのかはわかりません。<br />
また、遠隔で電力供給の休止を行えるとされています。<br />
<br />
これらはすべて電力会社が電力の使用を監視・制御するための通信で、Aルートと呼ばれています。<br />
今回の話題であるBルートは、需要家(ユーザー)ごとにスマートハウスのようなHEMS機器とスマートメーターを直接無線接続して、使用電力のマネジメントなどを行うための仕組みです。<br />
<br />
現在の使用電力量や各電力機器の動作状況をHEMS機器同士で共有することで、効率的に電力の使用ができるとされています。<br />
<br />
今回使ったモジュールはこのようなHEMS対応機器を開発するための通信モジュールです。<br />
<br />
スマートメーターと通信モジュールをBルート接続して使うためには電力会社にBルート接続用ID、パスワードを発行してもらう必要があります。<br />
東京電力の場合、スマートメーター化されていない電力量計であっても、ID発行の申請を行うことでスマートメーターへの切り替えも行えるようです。(要工事)<br />
<br />
BP35A1はUARTでシリアル通信コマンドを使って制御します。<br />
公式のコマンドリファレンスは日本語ですが、この手のモジュールを使ったことがないと、読んでも心が折れそうだと思います。<br />
<br />
ざっくりとした流れとしては<br />
<br />
Bルート接続用ID/パスワードを設定<br />
スマートメーターの電波をスキャン<br />
スキャン結果からスマートメーターの接続情報を調べる<br />
スキャン結果の接続情報を接続先として設定<br />
接続開始・完了<br />
電力取得コマンド送信<br />
結果受信<br />
<br />
と、初期化シーケンスがいろいろあってめんどくさいです。<br />
とりあえずシリアルターミナルで手打ちして接続までいけるようにこれら一連の流れをメモしておきます。<br />
上記のWi-SUN HATの場合、ピンを下にして裏面を向けて、<br />
左側のピンから<br />
GND/NC/NC/TX/RX/NC/3.3V/NC<br />
というピン配置になっているため、電源とUARTを接続すればUSBシリアル変換などを使って使うこともできます。<br />
115200bps 3.3VのUART 改行コード\r\nです。<br />
<br />
以下コマンドでスマートメーターの接続までを行います。<br />
<br />
Bルートのパスワードを設定<br />
<pre class="prettyprint lang-c linenums">
SKSETPWD C passwordhere
</pre>
<br />
BルートのIDを設定<br />
<pre class="prettyprint lang-c linenums">
SKSETBID idhere<br />
</pre>
<br />
アクティブスキャンを実行<br />
<pre class="prettyprint lang-c linenums">
SKSCAN 2 FFFFFFFF 6
</pre>
<br />
結果が返ってくる<br />
<pre class="prettyprint lang-c linenums">
EVENT 20 FE80:0000:0000:0000:xxxx:xxxx:xxxx:xxxx
EPANDESC
Channel:31
Channel Page:09
Pan ID:ABCD
Addr:xxxxxxxxxxxxxx
LQI:93
PairID:00E79995
EVENT 22 FE80:0000:0000:0000:xxxx:xxxx:xxxx:xxxx
</pre >
<br />
<br />
取得したスマートメーターのアドレスをIPv6アドレスに変換<br />
<pre class="prettyprint lang-c linenums">
SKLL64 xxxxxxxxxxxxxx //Addrの値
FE80:0000:0000:0000:xxxx:xxxx:xxxx:xxxx
</pre>
<div>
<br /></div>
<div>
チャンネルを設定</div>
<pre class="prettyprint lang-c linenums">
SKSREG S2 31 //Channelの値
</pre >
<br />
Pan IDを設定<br />
<pre class="prettyprint lang-c linenums">
SKSREG S3 ABCD //Pan IDの値
</pre >
<br />
接続開始<br />
<pre class="prettyprint lang-c linenums">
SKJOIN FE80:0000:0000:0000:xxxx:xxxx:xxxx:xxxx //IPv6アドレスに変換後の値
</pre >
<div>
<br /></div>
EVENT 25が来ると接続成功です。<br />
私は当初、EVENT 24で接続失敗しかしなかったのですが、<br />
東電のフォームでパスワードを変更依頼したところ、以降つながるようになりました。<br />
以前のパスワードではスマートメーターの設定がうまくできていなかったのかもしれません。<br />
<br />
接続完了後、電力取得のコマンドを送信します。<br />
<br />
<pre class="prettyprint lang-c linenums">
SKSENDTO 1 FE80:0000:0000:0000:xxxx:xxxx:xxxx:xxxx 0E1A 1 000E
</pre >
000Eのあとに半角スペースを入れて、続いてバイナリで<br />
{0x10, 0x81, 0x00, 0x01, 0x05, 0xFF, 0x01, 0x02, 0x88, 0x01, 0x62, 0x01, 0xE7, 0x00} + \r\n<br />
を送信すると瞬時電力が取得できます。<br />
<br />
成功すると<br />
<pre class="prettyprint lang-c linenums">
ERXUDP FE80:0000:0000:0000:xxxx:xxxx:xxxx:xxxx
FE80:0000:0000:0000:xxxx:xxxx:xxxx:xxxx 0E1A 0E1A xxxxxxxxxxxxxxx 1 0012 xxxxxxxxxxxxxxxxxxxxxxxxxxxx000000BA
</pre >
のようなレスポンスが返ってきます。<br />
ここで見るのは最後の8桁、000000BAです。<br />
これをそのまま10進に変換して、0xBA=瞬時電力186W<br />
というような感じで読むようです。<br />
上記サンプルコードでは、M5StickCで本体の液晶画面にこの数字を取得表示するようにしています。<br />
Arduinoのスケッチなので、これを改良して、Wi-Fi経由でデータ送信して、<br />
遠隔地から電力量を確認するような使い方も可能です。<br />
<br />
それほど死ぬほど難しいわけではないですが、まだまだ情報量が少なく、<br />
活用例も乏しいためもっと使う人が増えると楽しいのかなと思います。<br />
<br />
<br />
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">わいわい <a href="https://t.co/rn3COJx8gT">pic.twitter.com/rn3COJx8gT</a></p>— じてんしゃP (@jitenshap) <a href="https://twitter.com/jitenshap/status/1195508661180755968?ref_src=twsrc%5Etfw">November 16, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>じてんしゃPhttp://www.blogger.com/profile/01771693136106799787noreply@blogger.com0tag:blogger.com,1999:blog-7526483848213799232.post-4869108420264152562019-04-28T22:16:00.003+09:002019-12-23T23:38:45.283+09:00ESP32をWi-Fi AP/イーサネットコンバーターにする(LAN8720使用)最近になって、昨年公式githubに<a href="https://github.com/espressif/esp-iot-solution/tree/master/examples/eth2wifi">”eth2wifi”</a>というサンプルが上がっているのに気づきました。<br />
どうやらこれを使うと、有線LANをつないでWi-Fiアクセスポイントを立ち上げる<br />
あるいはESP32がWi-Fiアクセスポイントに接続して、ESP32を介して有線LANの機器をLANに接続する<br />
ということができるようです。1000円そこらでAPが作れるのは画期的です。<br />
<br />
ESP32は、Wi-Fiの他に、物理層の部分以外Ethernetにも対応しています。<br />
実際にEthernetを使うためにはEthernet PHY(フィジカル=物理層)<br />
の回路が必要です。<br />
よく知りませんが、通信用のクロックを作ったり、<br />
信号レベルなどを有線LANの規格にあわせたりしてくれる回路なのだと思います。<br />
これらの回路をESP32内部に入れるのはあまり使う人いないのに不毛ということで<br />
物理層がはじめからは載っていないのだと思います。僕もそれでいいと思います。<br />
<br />
調べるとEthernet PHYのICというものがいろいろ出ていて、簡単にブレークアウトボードに乗っているものが手に入るICとして、LAN8720がESP32ではよく使われているようです。<br />
<br />
というわけで、LAN8720の載った基板をAliexpressで注文しました。<br />
200円くらいで売っています。<br />
<a href="https://www.aliexpress.com/item/1pcs-Smart-Electronics-LAN8720-module-network-module-Ethernet-transceiver-RMII-interface-development-board-for-arduino/32947407343.html?spm=2114.search0204.3.41.18a547acrOaaW9&ws_ab_test=searchweb0_0,searchweb201602_4_10065_10068_319_10059_10884_317_10887_10696_321_322_10084_453_10083_454_10103_10618_10307_537_536,searchweb201603_16,ppcSwitch_0&algo_expid=a53a62b5-87f4-46c8-8fea-e77569fc6b6b-6&algo_pvid=a53a62b5-87f4-46c8-8fea-e77569fc6b6b&transAbTest=ae803_5">https://www.aliexpress.com/item/1pcs-Smart-Electronics-LAN8720-module-network-module-Ethernet-transceiver-RMII-interface-development-board-for-arduino/32947407343.html?spm=2114.search0204.3.41.18a547acrOaaW9&ws_ab_test=searchweb0_0,searchweb201602_4_10065_10068_319_10059_10884_317_10887_10696_321_322_10084_453_10083_454_10103_10618_10307_537_536,searchweb201603_16,ppcSwitch_0&algo_expid=a53a62b5-87f4-46c8-8fea-e77569fc6b6b-6&algo_pvid=a53a62b5-87f4-46c8-8fea-e77569fc6b6b&transAbTest=ae803_5</a><br />
<br />
届いたので、<br />
冒頭のリンクのURLに書いてあるとおり配線しました。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhb7CRoxj52bZ0UItxvlrYOl2k_Ja0WgEXXLKIJC0epoUJMZc5VQyqnb7D00UTBYkadWFqA_MRtJ-7Jrjq6DwBZmWRbuHtKqiBIIio7CZjnDV9HBzMUeyzlznfRyvGSfwGog4T2bxLTZT4/s1600/IMG_20190428_213210.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1568" data-original-width="1600" height="391" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhb7CRoxj52bZ0UItxvlrYOl2k_Ja0WgEXXLKIJC0epoUJMZc5VQyqnb7D00UTBYkadWFqA_MRtJ-7Jrjq6DwBZmWRbuHtKqiBIIio7CZjnDV9HBzMUeyzlznfRyvGSfwGog4T2bxLTZT4/s400/IMG_20190428_213210.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
まあたくさん配線しないといけなくて、めんどくさいですがジャンパ線で直接接続のバラックです。<br />
リンク先に注意書きが書いてあるのですが、<br />
LAN8720ボードからのクロック出力をGPIO0に入力していますが、<br />
ESP32の起動時にGPIO0がローに落ちていると、ファーム書き込みモードに入ってしまいます。<br />
そこで、<a href="https://sautter.com/blog/ethernet-on-esp32-using-lan8720/">調べたら出てきた対策</a>をします。<br />
発振子の足をNCのピンに引き出して、GPIO17につなぎます。<br />
GPIO17はコードの中でクロック出力の有効化・無効化をしてくれています。<br />
こんなやり方でいいのか?という感じがしますがこれでうまくいきました。<br />
基板を立ち上げるなら、トランジスタで電源ごと切ったりするほうが健全な気もします。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrNT9NsKxzPSaUV6mRjCTqySGlz6-gdASs-uSK2HPEPa29-j3ecRwq2hXpx6P7eoTVal_8N5axE4sOq0XosU7gz7X2Z2CdqvexBkgVR-9g9IYHrTjvBtR6LpRiepsp0utmMObYU96m4vc/s1600/IMG_20190428_213226.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1456" data-original-width="1600" height="291" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrNT9NsKxzPSaUV6mRjCTqySGlz6-gdASs-uSK2HPEPa29-j3ecRwq2hXpx6P7eoTVal_8N5axE4sOq0XosU7gz7X2Z2CdqvexBkgVR-9g9IYHrTjvBtR6LpRiepsp0utmMObYU96m4vc/s320/IMG_20190428_213226.jpg" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXxQz_mAi7PMVFP2xtrNOw5Hb95f5aVuqQqn9Sq6uUZxzL55p1CDhBpHqVEVImgq4tqMN_COuL_oyUmjSRdoRNvjviBbfTkYTW7aLcUnpE9UmvckKAXKXrPTtFJpxVPhXvbTeCNebl6Ug/s1600/IMG_20190428_213247.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1205" data-original-width="1600" height="241" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXxQz_mAi7PMVFP2xtrNOw5Hb95f5aVuqQqn9Sq6uUZxzL55p1CDhBpHqVEVImgq4tqMN_COuL_oyUmjSRdoRNvjviBbfTkYTW7aLcUnpE9UmvckKAXKXrPTtFJpxVPhXvbTeCNebl6Ug/s320/IMG_20190428_213247.jpg" width="320" /></a></div>
<br />
eth2wifiサンプルのディレクトリで、make menuconfigで動作の設定ができます。<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmaHrLL8itkhTv3_-Sw6AMeHb_r6lBIlWlXWTOLOZMi3vEZS0oAvNETbNyhb-tk0wE41Ai38ER__qs_vIFptgkjcyvixje1f2WmjCtG5CTfQcQV_RaB8wu5uzziCC7Q9k70ZgL0wvL300/s1600/menuconfig.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="769" data-original-width="1468" height="334" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmaHrLL8itkhTv3_-Sw6AMeHb_r6lBIlWlXWTOLOZMi3vEZS0oAvNETbNyhb-tk0wE41Ai38ER__qs_vIFptgkjcyvixje1f2WmjCtG5CTfQcQV_RaB8wu5uzziCC7Q9k70ZgL0wvL300/s640/menuconfig.jpg" width="640" /></a></div>
<br />
僕が買ったボードのPHY Addressは1でした。<br />
USE PHY Power pinにチェックが入っていると、PHY Power GPIOで制御ができます。<br />
WiFi station modeにチェックが入っていると、イーサネットコンバーター<br />
チェックを外すとAPになります。<br />
<br />
実際通信してみましたが、CATV12Mではほぼ上限の値が出ていたので、実際にはもっと早いスピードで通信できると思います。<br />
ツイッターを見ながらプライムビデオを流すくらいの使い方は余裕でできました。<br />
本当に1000円そこらでAPを自作できるのはすごいですね。<br />
2つ数珠つなぎにしてAP-イーサネットコンバーターとやれば中継機とかも組めそうです。<br />
(それはもっとうまいやり方がありそうですが)<br />
<br />
どうやってこれを実現しているのか?コードを見るととてもシンプルで驚きます。<br />
<br />
<pre class="prettyprint lang-c linenums">
static esp_err_t tcpip_adapter_sta_input_eth_output(void* buffer, uint16_t len, void* eb)
{
if (ethernet_is_connected) {
esp_eth_tx(buffer, len);
}
esp_wifi_internal_free_rx_buffer(eb);
return ESP_OK;
}
</pre>
<br />
Wi-Fiに受信バッファがあったらEthernetに送る<br />
Ethernetに受信バッファがあったらWi-Fiに送るというような関数があります<br />
シリアル通信のようなノリでこんなことができているのですね。<br />
パケットをそのまま処理しているので、ESP32自身に宛てられたパケットを判別して処理するようなコードを書かないとESP32自身は通信ができないような気がします。<br />
市販のAPのようにWebUIを実装したりするのは結構たいへんそうです。<br />
ボタンを押しながら起動で別モードとして設定モードが立ち上がるような実装だと特に問題なく作れそうです。じてんしゃPhttp://www.blogger.com/profile/01771693136106799787noreply@blogger.com0tag:blogger.com,1999:blog-7526483848213799232.post-52305961918778725792019-02-24T23:04:00.001+09:002019-02-24T23:06:56.644+09:00M5CameraでGoogle Driveにアップロードする結論というか、基本的にはこちらのブログがとてもためになるので読んでください<br />
<div>
<a href="https://www.blogger.com/goog_2074682347">琴線探査: Google DriveにCURLでアップロードするには?</a><br />
<div>
<a href="http://kinsentansa.blogspot.com/2012/07/google-drivecurl.html">http://kinsentansa.blogspot.com/2012/07/google-drivecurl.html</a></div>
</div>
<div>
<br /></div>
<div>
ESP32にWROVERというSPI RAM付きモデルが出て、大容量のRAMを使えるようになりました。</div>
<div>
そこで、200万画素のCMOSセンサーが作る画像をバッファすることも容易になり、M5Stackシリーズを作っているメーカーから出ているM5Cameraをはじめとして、Omnivision OV2640が載ったESP32ボードが続々登場しています。</div>
<div>
<br /></div>
<div>
購入してすぐ、本体がSoftAPモードで立ち上がり、本体のWebサーバーにブラウザでつなぐとカメラの映像がストリーミングできるなどアツい展開になっています。</div>
<div>
ただまあ、映像オタク的にはそれをやるなら別にネットワークカメラやWi-Fi付きデジカメのほうが画質もいいしいいじゃんということで、</div>
<div>
マイコンにやらせるなら、実際にはなにかのトリガーで写真を撮ってどこかにアップロードさせたいみたいな用途のほうが強みが発揮できそうです。</div>
<div>
<br /></div>
<div>
そこで、M5CameraでGoogle Driveに写真をアップロードしてみました。</div>
<div>
<br /></div>
<div>
Google Driveは、Drive APIというものが用意されており、これを使うとRESTでファイル操作が可能になります。が、</div>
<div>
一番冒頭にリンクさせていただいた、cURLでGoogle Driveにアップロードする方法をご覧いただくとわかるように、認証がやや面倒です。</div>
<div>
<br /></div>
<div>
簡単にまとめると</div>
<div>
・APIを登録</div>
<div>
・クライアントIDとシークレットキーを取得</div>
<div>
・ブラウザでクライアントID付きの登録URLを開いて認証コードを取得(OAuth認証)</div>
<div>
・認証コードとクライアントIDとシークレットキーをPOSTしてリフレッシュトークンを取得※</div>
<div>
ここまでが初期設定です。</div>
<div>
<br /></div>
<div>
次からがファイルをPOSTするたびに行う操作です。</div>
<div>
・リフレッシュトークンとクライアントIDとシークレットキーをPOSTしてアクセストークンを取得</div>
<div>
・アクセストークンとファイル、ファイル情報をPOSTしてファイルをアップロード</div>
<div>
<br /></div>
<div>
※アクセストークンには有効期限があり、アクセストークンを取得するためのトークンがリフレッシュトークンです。</div>
<div>
そのため、毎回リフレッシュトークンから有効なアクセストークンを取得する必要があります。</div>
<div>
<br /></div>
<div>
これらの操作をすべて行い、実際にM5Cameraで画像をアップロードするサンプルをArduinoで作ってみました。この例をちょっといじれば、カメラ画像以外にも、</div>
<div>
ローカルのSPIフラッシュやSDカードに貯めたセンサーデータをまとめてCSVでアップロードするなど、ArduinoでGoogle Driveにファイルをアップロードできます。</div>
<div>
<br /></div>
<div>
<a href="https://github.com/jitenshap/m5camera-arduino-googleDrive">https://github.com/jitenshap/m5camera-arduino-googleDrive</a></div>
<div>
<br /></div>
<div>
さて、このサンプルを使う前にはGoogle DriveのAPIキーを取得する必要があります。</div>
<div>
この操作がしょっちゅう画面構成が変わって、探してもやり方が見つからない場合があるので自分用にもメモしておきます。</div>
<div>
<br /></div>
<div>
Google Developers Consoleを開く</div>
<div>
<a href="https://console.developers.google.com/">https://console.developers.google.com/</a></div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoz4mvgwSoaTIdbb0nornfnRrUY5qr1InLdz3K0tLmAj9O8G_sD1F0yUIXisqbpBkaVKB3yheAxUY_p2jFVGQcLJxjklEp8zkjSV3qiDCY2cuomG7agXiZIFUXWbPh6idFCFI8wcDXiec/s1600/dashboard.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="331" data-original-width="889" height="238" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoz4mvgwSoaTIdbb0nornfnRrUY5qr1InLdz3K0tLmAj9O8G_sD1F0yUIXisqbpBkaVKB3yheAxUY_p2jFVGQcLJxjklEp8zkjSV3qiDCY2cuomG7agXiZIFUXWbPh6idFCFI8wcDXiec/s640/dashboard.jpg" width="640" /></a></div>
<div>
<br /></div>
<div>
プロジェクトの選択をクリック</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggYWaSuWNFvhg7HfOs40L9WRLtBwzNn-P8k8-l2DJ60w8dD99MRONEbwCnyGBktqlvSOehEV0I_rwBJuaWgTxEvus2aNbS8Cjax0AIEQeDL_qOGfkkxHqmJxAoirzjKL5YnTG-_SJKp3s/s1600/newproject.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="412" data-original-width="585" height="450" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggYWaSuWNFvhg7HfOs40L9WRLtBwzNn-P8k8-l2DJ60w8dD99MRONEbwCnyGBktqlvSOehEV0I_rwBJuaWgTxEvus2aNbS8Cjax0AIEQeDL_qOGfkkxHqmJxAoirzjKL5YnTG-_SJKp3s/s640/newproject.jpg" width="640" /></a></div>
<div>
<br /></div>
<div>
新しいプロジェクトを適当に作成</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDJXTGIaa5-h29R5xdf-zDy9NivIrCGBxRTX2NUCRQAt4jNtun4EhjP5FwJi2SfPL3bLXenbGJobIsG8Wodz5KyPAoRDgz6e50FJUPgpWpe_s4ZpM8asIBXSxKOhpGhdASujur_qZoRQQ/s1600/createAuthB.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="348" data-original-width="952" height="232" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDJXTGIaa5-h29R5xdf-zDy9NivIrCGBxRTX2NUCRQAt4jNtun4EhjP5FwJi2SfPL3bLXenbGJobIsG8Wodz5KyPAoRDgz6e50FJUPgpWpe_s4ZpM8asIBXSxKOhpGhdASujur_qZoRQQ/s640/createAuthB.jpg" width="640" /></a></div>
<div>
<br /></div>
<div>
<div>
認証情報→OAuthクライアントID</div>
</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgneLJd9M6otGv4Nh1FnGCjSxgmOki3lTW1pdGW6PqaQ7zJ-m9kRa4qc2uDxJTdum964JIipu9FM75ndL9__IybXHWN73sjP8J3CbB563r3rV5AvbqHY0FqZ6pnZHRYLGUmCdkkJPDNWWI/s1600/createoauth.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="365" data-original-width="1423" height="164" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgneLJd9M6otGv4Nh1FnGCjSxgmOki3lTW1pdGW6PqaQ7zJ-m9kRa4qc2uDxJTdum964JIipu9FM75ndL9__IybXHWN73sjP8J3CbB563r3rV5AvbqHY0FqZ6pnZHRYLGUmCdkkJPDNWWI/s640/createoauth.jpg" width="640" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
同意画面を設定</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinKUQGoqwPAdI68DrMR5AyaFw1ymX34FddvdJbhJm9jPb0OqGJDrqc_2_Fpu5u-b7rOBiFUX4o6Cp3H4RLRHDk7W9MA2-LazNSRdFGDuSp2LJ4Ljfcyv0KFNoFUj8kts6T7rMj45506o8/s1600/editConfirm.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1212" data-original-width="452" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinKUQGoqwPAdI68DrMR5AyaFw1ymX34FddvdJbhJm9jPb0OqGJDrqc_2_Fpu5u-b7rOBiFUX4o6Cp3H4RLRHDk7W9MA2-LazNSRdFGDuSp2LJ4Ljfcyv0KFNoFUj8kts6T7rMj45506o8/s640/editConfirm.jpg" width="238" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div>
<br /></div>
<div>
名前を適当につけて保存</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7US2XWEsB4F7zdrNkfdtepzwSxATWYcHJhBZTATkCpJjBNasC4m_gTt_Ayb_-esdG9pkLFjwjziA3qAulgnsScfSjtuBqkexdVHMg_B9VefpvkONyAfbS9uBd_syOmYW9SBtz0VuO5xw/s1600/createoauth2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="374" data-original-width="642" height="232" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7US2XWEsB4F7zdrNkfdtepzwSxATWYcHJhBZTATkCpJjBNasC4m_gTt_Ayb_-esdG9pkLFjwjziA3qAulgnsScfSjtuBqkexdVHMg_B9VefpvkONyAfbS9uBd_syOmYW9SBtz0VuO5xw/s400/createoauth2.jpg" width="400" /></a></div>
<div>
<br /></div>
<div>
アプリケーションの種類:その他</div>
<div>
名前適当で作成</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_co2zJD7vxXQY2wFO8CCBWuTitlkAb391uoe_xV1HOkrKtcSnCV1NqxenYRl8hUUGtItDyrG7hbh55e38IQsa9lorxCKiI0eNL6RWH7AH6b9xLTEVBsKG_dm4IvSAkbKw9V6Zb1tLpQs/s1600/gotclient_secret.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="495" data-original-width="623" height="508" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_co2zJD7vxXQY2wFO8CCBWuTitlkAb391uoe_xV1HOkrKtcSnCV1NqxenYRl8hUUGtItDyrG7hbh55e38IQsa9lorxCKiI0eNL6RWH7AH6b9xLTEVBsKG_dm4IvSAkbKw9V6Zb1tLpQs/s640/gotclient_secret.jpg" width="640" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
クライアントIDとクライアントシークレットが取得できた。</div>
<div>
<br /></div>
<div>
あとはファームを入れ替えたM5Cameraを起動し、シリアルモニターを開くと、これらを聞いてきて、OAuth認証用コード取得URLが表示されるので、</div>
<div>
要求されるコードを入力していくと、SPIフラッシュにそれらが保存されて次からは電源を入れるだけでGoogle Driveに写真を撮ってアップロードしてくれます。</div>
じてんしゃPhttp://www.blogger.com/profile/01771693136106799787noreply@blogger.com0tag:blogger.com,1999:blog-7526483848213799232.post-64515849768228483272018-12-01T11:16:00.001+09:002021-01-04T22:06:48.435+09:00ESP-IDFでESP32を開発するときにハマったこといろいろ<div>2021-01-04追記: 古い記事です。ESP-IDF v4系はだいぶ変わっています。</div><div><br /></div>さて、エスプリのESP32がM5Stackの登場もありMaker界隈で大人気ですね<div>
メーカーが作っているというArduino Coreもあり、お手軽に始めることはできるのですが、Arduino Coreを使うとメモリが足りなくなったり、細かいことをいじろうとすると</div>
<div>
IDFの関数を直叩きしたりするので、じゃあ最初からIDFで作ろうよということで、</div>
<div>
基本のSDKとして配布されている、ESP-IDFをぼちぼち使っていくことにしました。</div>
<div>
<br /></div>
<div>
正直まだ全然よくわかっていないのですが、とりあえず導入から。</div>
<div>
自分が使っているマシンが基本Windows 10なので、Windowsに直に導入してもいいのですが、Windows Subsystem for LinuxにUbuntuがいるので、そこから使おうということで、</div>
<div>
<a href="https://docs.espressif.com/projects/esp-idf/en/latest/get-started/linux-setup.html">https://docs.espressif.com/projects/esp-idf/en/latest/get-started/linux-setup.html</a></div>
<div>
WSLから、↑のUbuntuの手順で導入しました。</div>
<div>
<br /></div>
<div>
導入したらとりあえずビルド。</div>
<div>
サンプルを読んでもどこで何をしてるかさっぱりだったので一行ずつコメントつけたLチカのデモをgithubにおいておきました。</div>
<div>
<a href="https://github.com/jitenshap/ESP32-Blink">https://github.com/jitenshap/ESP32-Blink</a></div>
<div>
<br /></div>
<div>
git clone して、プロジェクトルートで<span style="background-color: black; color: white;">make menuconfig</span>コマンドを入れると、コンパイルの設定や、コード内で#define CONFIG_VALUE とかやってる設定を簡単に変えられるやーつが出ます。</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIp_uZKAHT22be2r6a9N2QpU_0DuYoDmU5tRkCO9qhM8mRQJC0zjLLWdVIfVJLi06k4oZ6SXAyDKWMSEUaP0HyzrK7U1q9i16fqIDTiVaIVOti-6DFjNu5Y2oKjSvKIaT9LA2XepaV9nk/s1600/menuconfig.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="766" data-original-width="1468" height="207" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIp_uZKAHT22be2r6a9N2QpU_0DuYoDmU5tRkCO9qhM8mRQJC0zjLLWdVIfVJLi06k4oZ6SXAyDKWMSEUaP0HyzrK7U1q9i16fqIDTiVaIVOti-6DFjNu5Y2oKjSvKIaT9LA2XepaV9nk/s400/menuconfig.jpg" width="400" /></a></div>
<div>
<br /></div>
<div>
書き込み設定は、Serial flasher Configで変更できます。</div>
<div>
WSLでWindowsのCOMポートを使いたいときは、例えばWindowsでCOM5として認識してる場合は、"/dev/ttyS5"とかやるとそのまま使えます。</div>
<div>
Flash sizeは使ってるモジュールに合わせて変更します。</div>
<div>
あとおすすめは、Default baud rateを921600くらいに上げたほうがいいと思います。</div>
<div>
どうでもいいことしかやってなくても結構ファームのサイズが大きくアップロードに時間がかかりますが、ここで書き込みスピードを上げるとArduino UNOなんかを使うときと遜色ないくらいの速さにできます。</div>
<div>
<br /></div>
<div>
設定が終わったらSave→Exitで終了。ここで作ったコンフィグはプロジェクトルートのsdkconfigに書かれています。</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPRNcVOHF05WPNMcHFqIJNBVnzs4e6gC8eK0HQERSWHnmQ5sACz4GBKdklDNopmr8m1d6XN3kkFOOovMy3seDn1iB8SeatqM_KkqI6dFN7dyv9qm01ER2KJgVkaXQtFrtUahivedDdNU8/s1600/sdkconfig.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="766" data-original-width="1468" height="166" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPRNcVOHF05WPNMcHFqIJNBVnzs4e6gC8eK0HQERSWHnmQ5sACz4GBKdklDNopmr8m1d6XN3kkFOOovMy3seDn1iB8SeatqM_KkqI6dFN7dyv9qm01ER2KJgVkaXQtFrtUahivedDdNU8/s320/sdkconfig.jpg" width="320" /></a></div>
<div>
<br /></div>
<div>
ビルドはmake allでできます。</div>
<div>
<br /></div>
<div>
そしてとりあえず書き込みしたいということで、</div>
<div>
<span style="background-color: black; color: white;">make flash</span>すると書き込めます。esptool.pyを呼んで作ったビルドしたファイルを書き込んでくれるのですね。</div>
<div>
書き込み時、RSTとIO0を、シリアルポートのRTS/CTSピンで自動的に切り替えて書き込みモードにしてくれてます。当然ESP32、USB-UARTが乗ってるボードにその仕組みがないとできません。うまく書き込まれないときはIO0をLOWにし続けながら、一旦リセットを掛けると手動で同じ状態にできます。</div>
<div>
<br /></div>
<div>
いろいろ作っていくと、Arduinoみたいにライブラリをもらってきて入れて使いたいですね。</div>
<div>
そんなときは、プロジェクトルートに”components”ディレクトリを作ってそこへ入れるもののようです。</div>
<div>
というわけで、</div>
<div>
<span style="background-color: black; color: white;">mkdir components</span></div>
<div>
<span style="background-color: black; color: white;">cd components</span></div>
<div>
で、そこに入れたいコンポーネントをクローンしたりする。</div>
<div>
仮にtestcmpntとかいう名前だとしますが</div>
<div>
とりあえずその中身を見るとだいたいこんな感じだと思います</div>
<div>
<span style="background-color: black; color: white;">$ ls testcmpnt/</span></div>
<div>
<span style="background-color: black; color: white;">component.mk </span><span style="background-color: lime; color: blue;">include </span><span style="background-color: black; color: white;"> testcmpnt.c </span></div>
<div>
<br /></div>
<div>
この中身のcomponent.mkを見ると、こんな感じになっていると思います。</div>
<div>
<div>
COMPONENT_ADD_INCLUDEDIRS = /include/.</div>
<div>
COMPONENT_SRCDIRS := .</div>
</div>
<div>
<br /></div>
<div>
これが、SRCDIRSがtestcmpntのルート、INCLUDEDIRSが/include</div>
<div>
も見てねって指示のようです。</div>
<div>
これがちゃんと書いてあるとmake allしたときに一緒にコンパイルしてくれます</div>
<div>
たまにcomponentを借りて持ってくるとこの中身が空だったりして、メインファイルでインクルードしたヘッダーファイルが見つからないよとエラーになったりします。</div>
<div>
ここでプチハマりしました。ここに何も書いてなければ知らんがなってことなのですね</div>
<div>
プロジェクトルート/mainに全部入れるといろいろ入れたときにゴチャゴチャしてしまいますし、わかってしまえば便利ですね。</div>
<div>
<br /></div>
<div>
とりあえずまだまだ使いこなしてないので一旦ここまでです。</div>
<div>
なにか間違えてたら教えてください。</div>
<div>
<br /></div>
<div>
ほかにもぼちぼちわかったことやハマったことがあったら追記していきたいと思います</div>
じてんしゃPhttp://www.blogger.com/profile/01771693136106799787noreply@blogger.com0tag:blogger.com,1999:blog-7526483848213799232.post-91834192514835641092017-11-16T20:14:00.002+09:002021-01-02T18:33:50.931+09:00RS232対応を謳うバーコードリーダーでシリアルが使えなかったのでTTLレベルでシリアルを出せるようにしました。タイトルが長い。<br />
<br />
今春、Aliexpressでバーコードリーダーを買いました。<br />
<br />
<br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
たーのしー <a href="https://t.co/rJsMkzWxJB">pic.twitter.com/rJsMkzWxJB</a></div>
— じてんしゃP (@jitenshap) <a href="https://twitter.com/jitenshap/status/857549278729846784?ref_src=twsrc%5Etfw">2017年4月27日</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
これです<br />
<a href="https://www.aliexpress.com/item/Barcode-Scanners-NT-2012-Film-Portable-Laser-Reader-Handheld-USD-Bar-Code-Scanner-USB-Reader-Mobile/32802257553.html?spm=a2g0s.9042311.0.0.53ws4W">https://www.aliexpress.com/item/Barcode-Scanners-NT-2012-Film-Portable-Laser-Reader-Handheld-USD-Bar-Code-Scanner-USB-Reader-Mobile/32802257553.html?spm=a2g0s.9042311.0.0.53ws4W</a><br />
<br />
NETUM NT-2012って言うらしいんですが<span face=""arial" , "helvetica" , sans-serif" style="background-color: white;"> </span><span face=""arial" , "helvetica" , sans-serif" style="background-color: white;">USB or PS/2 or RS232</span><br />
<span face=""arial" , "helvetica" , sans-serif" style="background-color: white;">と書いてあるのでシリアルでも出せるのかぁ。</span><br />
<span face=""arial" , "helvetica" , sans-serif" style="background-color: white;">マイコンで使えるなぁと思っていたら、</span><span face=""arial" , "helvetica" , sans-serif" style="background-color: white;">シリアルが出てなかったのでバラしました。</span><br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
<span face=""arial" , "helvetica" , sans-serif" style="background-color: white; font-size: 18px;">シリアル出せるって書いてたバーコードリーダー、外に出てるピン全部試しても出て来なかったので直接UART引き出すのに成功。TTL<->RS232変換の石が未実装だったから信号が来てなかったって話で、それのUART側パターンから直でって具合ですかね <a href="https://t.co/HHPGUsQwPP">pic.twitter.com/HHPGUsQwPP</a></span></div>
<span face=""arial" , "helvetica" , sans-serif" style="background-color: white; font-size: 18px;">— じてんしゃP (@jitenshap) <a href="https://twitter.com/jitenshap/status/929013966868590592?ref_src=twsrc%5Etfw">2017年11月10日</a></span></blockquote>
<span face=""arial" , "helvetica" , sans-serif" style="background-color: white; font-size: 18px;">
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
</span>
<span face=""arial" , "helvetica" , sans-serif" style="background-color: white; font-size: 18px;"><br /></span><span face=""arial" , "helvetica" , sans-serif" style="background-color: white;">するとすぐにRS232ドライバ(MAX232?)が載りそうなパターンがあり、USB-UARTから線を出して触れさせると読み込んだデータがbaud=19200で出てきました。</span><br />
<div>
<span face=""arial" , "helvetica" , sans-serif" style="background-color: white;">本来はここでTTLのUARTをRS232レベルに変換してコネクタに出力していたのですね。</span></div>
<div>
<span face=""arial" , "helvetica" , sans-serif" style="background-color: white;">これは当たりだということで、MAX232のデータシートを読んで、RS232レベルの信号出力のピンにこのピンをUEW線でジャンパ。</span></div>
<div>
<span face=""arial" , "helvetica" , sans-serif" style="background-color: white;"><br /></span></div>
<div>
<span face=""arial" , "helvetica" , sans-serif" style="background-color: white; font-size: 18px;"><br />
</span><br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
<span face=""arial" , "helvetica" , sans-serif" style="background-color: white; font-size: 18px;">見づらいけど入出力直結して無事インターフェースのRJ50(RJ45の10ピン版)ジャックと結ばれた <a href="https://t.co/ZoXhq07KtE">pic.twitter.com/ZoXhq07KtE</a></span></div>
<span face=""arial" , "helvetica" , sans-serif" style="background-color: white; font-size: 18px;">— じてんしゃP (@jitenshap) <a href="https://twitter.com/jitenshap/status/929018381163839488?ref_src=twsrc%5Etfw">2017年11月10日</a></span></blockquote>
<span face=""arial" , "helvetica" , sans-serif" style="background-color: white; font-size: 18px;">
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
</span></div>
<div>
<span face=""arial" , "helvetica" , sans-serif" style="background-color: white; font-size: 18px;"><br /></span></div>
<div>
<span face=""arial" , "helvetica" , sans-serif" style="background-color: white;">無事TTLレベルですがシリアルを出すことができました。</span><br />
<span face=""arial" , "helvetica" , sans-serif" style="background-color: white;">まあ逆に、マイコンに直接入れられるので便利ですね。</span><br />
<span face=""arial" , "helvetica" , sans-serif" style="background-color: white;"><br /></span>
<span face=""arial" , "helvetica" , sans-serif" style="background-color: white;">早速ESP-WROOM-02で使ってみました。</span><br />
<span face=""arial" , "helvetica" , sans-serif" style="background-color: white;">ESP-WROOM-02ではソフトウェアシリアルで受信したデータをそのままUDPでPCのIPアドレス(ポート9000)へ送信、</span><br />
<span face=""arial" , "helvetica" , sans-serif" style="background-color: white;">PC側はC# .NET でUDP受信のコードを書き、受けたデータをURLエンコードして</span><span face=""arial" , "helvetica" , sans-serif" style="background-color: white;">Amazonの検索URLに突っ込み、</span><span face=""arial" , "helvetica" , sans-serif" style="background-color: white;">WebBrowserで表示させることで読んだバーコードをAmazon検索するようにしてみました。</span><br />
<br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
バーコード読み取るとWi-Fi接続のPCでAmazon検索してくれるやーつ <a href="https://t.co/wBclZU5fQf">pic.twitter.com/wBclZU5fQf</a></div>
— じてんしゃP (@jitenshap) <a href="https://twitter.com/jitenshap/status/929366090504839168?ref_src=twsrc%5Etfw">2017年11月11日</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
Amazonはバーコードをそのまま検索すると商品名が出るので便利ですね。<br />
Amazonの検索URLについては次のブログを参考にさせていただきました。<br />
<a href="https://www.blogger.com/goog_2094347845">Amazon.co.jpの検索URL | oitake blog</a><br />
<a href="http://oitake.jugem.jp/?eid=4">http://oitake.jugem.jp/?eid=4</a></div>
じてんしゃPhttp://www.blogger.com/profile/01771693136106799787noreply@blogger.com0tag:blogger.com,1999:blog-7526483848213799232.post-32721463613418262932017-07-24T22:04:00.000+09:002017-07-24T22:04:03.324+09:00久々にカメラを持ちました:NT金沢2017えー、一応趣味でビデオやってますなんてことをよく言うんですが忙しくて、<br />
Twitterによく動画ツイートをするような人のほうがずっとビデオを回しているような状況でしたが、NT金沢2017というイベントで声をかけていただき、久々にカメラを持ち、<br />
機材をいじりました。そしたら分かった反省です。<br />
<br />
ロケについて:<br />
このイベントはアマチュアからプロまで幅広い"Maker"が自身のものづくりを紹介するイベントで、たくさんのブースに個人や団体が出展しています。<br />
<br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
<a href="https://twitter.com/hashtag/NT%E4%BA%AC%E9%83%BD2017?src=hash">#NT京都2017</a> 参加者の皆様お疲れ様でした。<a href="https://twitter.com/hashtag/NT%E9%87%91%E6%B2%A22017?src=hash">#NT金沢2017</a> は7/8,9に金沢駅地下もてなしドームで開催です!5月上旬に参加募集はじめます。 <a href="https://t.co/5220y1rDnu">pic.twitter.com/5220y1rDnu</a></div>
— 五味 (@GomiHgy) <a href="https://twitter.com/GomiHgy/status/843392162465120257">2017年3月19日</a></blockquote>
<script async="" charset="utf-8" src="//platform.twitter.com/widgets.js"></script>
各ブースをまわり、出展者さんにご紹介いただくという形式でロケを行いました。<br />
機材はHDR-AX2000と最近導入した無指向性のインタビューマイクSM63です。<br />
<br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
じてんしゃっぷ <a href="https://twitter.com/hashtag/NT%E9%87%91%E6%B2%A2?src=hash">#NT金沢</a> <a href="https://t.co/OL3XlrqPO6">pic.twitter.com/OL3XlrqPO6</a></div>
— めむくろ (@MEMchro) <a href="https://twitter.com/MEMchro/status/883527020616925184">2017年7月8日</a></blockquote>
<script async="" charset="utf-8" src="//platform.twitter.com/widgets.js"></script>
ここでまずひとつ目の失敗:三脚がおかしい!!<br />
はじめの数ブースは三脚を立てて取材を行ったのですが、<br />
インタビューのあと三脚を下げて接写で物撮りというのを繰り返していたら<br />
三脚の脚がロックされなくなってきてすーっと下がってきてしまい、<br />
手で抑える始末…。結局、それ以降手持ちで周りました。<br />
人ごみのため、結果としてはそのほうがよかったのですが…。<br />
ちなみに2日目は六角レンチでロック部品のネジを締めて使えるようにしました。<br />
機材チェックは入念にやるってのは原則として行っていたのですが、<br />
前後の忙しさにかまけて、また、しばらくカメラを手にしていなかったため<br />
その感覚を失っていました。<br />
<br />
自分の師匠に当たる人は現場で機材トラブルは映像屋の恥<br />
取材相手の前で機材トラブルで待たせるとか絶対にありえないから<br />
出る前に必ず確認しろといつも言っていました。<br />
これが舞台撮影だったら終わっていました…。<br />
<br />
高校時代ドキュメンタリーもどきを撮っていましたが、チームで活動していたため、<br />
取材のときはインタビュアーがいて、サブカメラがいるのが普通でした。<br />
今回、スポットでたくさんやるワンマン取材って意外と大変ということがわかりました。<br />
取材対象が決まっていて数人の方に一日でインタビューを撮らせていただくようなことは何度もしていましたが、それでも一日終わるとクタクタでしたが、<br />
数十人の方に数十秒ずつコメントをいただくために奔走する…。<br />
ディレクターが自分で回している街頭インタビューなんかはそんな感じなのでしょうか。できるのはすごい体力だと思います。<br />
重たいカメラを持ち、片手でマイクケーブルをあしらって、<br />
マイクは取材対象の方に持ってもらっていたのですが、それで画角を合わせて…。<br />
モニター用イヤホンが絡んでカメラに顔を貼り付けないと聞けない…<br />
でもインタビュー中なので気合でfixを保ちつつ聞く…。<br />
<br />
高校時代、インタビューは2カメでずっと撮影していました。<br />
2カメあると、「えー」みたいな声をカットしてそこでカメラを切り替えてしまうと<br />
切ったのがわからないとかそういうメリットもあるのですが、(悪用禁止<br />
インタビューで失敗したので同じコメントをもう一度というわけにはいかないため、<br />
片方が失敗してももう片方のカメラは画角は違えど撮れている<br />
という意図でそうするように指導されていました。<br />
<br />
何が言いたいかというと、1カメで撮るのは失敗できないのです。<br />
前述した音声の話なども含めて1人で頑張らないといけないのです…。<br />
プロの方はすごい…当然クルーは一人ではないことのほうが多いと思いますが。<br />
<br />
トークセッションについて<br />
<br />
すでに完パケがアップロードされています…。<br />
<br />
<iframe allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/-H-2_vCpLt4" width="560"></iframe>
イベントの主催者の方である秋田氏、SF小説家の野尻氏、チームラボの高須氏の3名のトークセッションです。<br />
今のトークイベントはパワポや動画がつきものですね。<br />
そこで、スクリーンに投影される映像をそのまま録画してしまえばその内容をきれいに記録できるのではと寄せ集めの機材でチャレンジしました…が、失敗しました<br />
以下に原因を書きます。<br />
<br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
本日のじてんしゃっぷ <a href="https://twitter.com/hashtag/NT%E9%87%91%E6%B2%A2?src=hash">#NT金沢</a> <a href="https://t.co/oxNcCcPxQl">pic.twitter.com/oxNcCcPxQl</a></div>
— めむくろ (@MEMchro) <a href="https://twitter.com/MEMchro/status/883853341511503877">2017年7月9日</a></blockquote>
<script async="" charset="utf-8" src="//platform.twitter.com/widgets.js"></script>
設備音響には、VGA入力の切替器付きミキサーが入っています。<br />
VGA出力は2系統あり、どちらも同じ映像が出てくるようなので、<br />
それをHDMIにして録画しちゃおうという魂胆でした。<br />
<br />
ただ、手持ちの機材はPC向けではなく、映像機器向けのフォーマットしか録画ができません。具体的には、WXGAなどは録画できず、1080iや720pといった解像度にしか対応していません。<br />
そこで、手持ちの機材を寄せ集めて変換に変換を重ねて対処しました。<br />
自宅での検証時にはうまくいきました。<br />
すると、はじめにA/Dに使っていた中華VGA→HDMIコンバーターが入力解像度に対応していないようで、おかしな映像がでてきました。<br />
仕方がないので機材を変えてみると、映像が中心だけ拡大されて出てきました。<br />
以前にコンバーターの設定を変更してから、検証時にこれではダメなので設定を変更して成功後、デフォルトとして設定をし忘れており、もとの設定に戻ってしまっていたのでした。<br />
コンバーターの設定変更にはパソコンと専用アプリが必要で、持ってきたパソコンにはコンバーターの設定アプリが入っておらず、その場でダウンロードしたのですが他にもランタイムが必要で結局動かず、諦めることになりました…。<br />
<br />
これが現場で機材トラブルを起こす映像屋の恥です…。<br />
<br />
音声はTASCAM DR-60Dに設備音響ミキサーの音声をライン入力して録音、<br />
カメラマイクにRODE NTG-1を装着してポスプロで混ぜるという具合で収録しました。<br />
<br />
撮影は、客席後方に2m以上まで上がるライティングスタンドを立て、そこにGopro<br />
客席最前列に座ってHDR-SR11とHDR-AX2000で撮影しました。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxlabe70f6xHPENGaFG4hpX2u2j45IvNgeXTvR8u1OtzaKVUPSBaA9q6-LmoNKV51xFL2WwiEQWIxaKMjCZruphAU18sX8JfjDwWoYerF-wkixiVDufDiwu7kpW-mw1IyiaK224T3TTFU/s1600/IMG_5811.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="1200" data-original-width="1600" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxlabe70f6xHPENGaFG4hpX2u2j45IvNgeXTvR8u1OtzaKVUPSBaA9q6-LmoNKV51xFL2WwiEQWIxaKMjCZruphAU18sX8JfjDwWoYerF-wkixiVDufDiwu7kpW-mw1IyiaK224T3TTFU/s320/IMG_5811.JPG" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilf7C6B6o-6XzBKtGtylIgnlfsEul6suX9tfoq_qOSP-Wf0HGOPS8SB7X0kIIKVI-dLLaoS2BaQ_FTrii7NdWZD4sQbrh0u56NEmPG8TuWsw1O_Vk7aj9omLQ7bWOf5ZqsMHCHtUXgN1Q/s1600/IMG_5810.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilf7C6B6o-6XzBKtGtylIgnlfsEul6suX9tfoq_qOSP-Wf0HGOPS8SB7X0kIIKVI-dLLaoS2BaQ_FTrii7NdWZD4sQbrh0u56NEmPG8TuWsw1O_Vk7aj9omLQ7bWOf5ZqsMHCHtUXgN1Q/s320/IMG_5810.JPG" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<span id="goog_29809373"></span><br />
ここでまた失敗がありました。HDR-SR11はスクリーンを含めた登壇者3名を基本としてほぼfixで撮影していたのですが、WBをオートにしたままでした…。<br />
スクリーンの色に引っ張られてWBがコロコロと変わり、ピンクになったり緑になったり…<br />
結局、ポスプロで修正しきれませんでした。また、露出が完全にスクリーンに合っていたため、登壇者の顔が暗い…結局ポスプロで少し持ち上げました。<br />
実は登壇者のバストショット狙いのAX2000でも同じ失敗をしていて、<br />
WBは固定していましたが、露出がスクリーンに合っている…。<br />
この条件ではオートでうまくいくはずがないのです。<br />
これもポスプロで修正…。<br />
3板CMOSなので修正に余裕はあるのですがおかしな映像に…。<br />
<br />
そんな具合で、イベントの反省でした。<br />
まとめると、自分腕落ちたなというところ、<br />
以前は勘で「これとこれは予備で用意しておかないとやばそう」<br />
みたいに思っていた感覚も含めて腕が落ちた感じがします。<br />
あとは基本的なことが全然できていないということ<br />
自分で8の字巻したマイクケーブルを何度も絡ませて巻き直していました。<br />
ホワイトバランスや露出は画面を見ていれば気づくはずなのに、<br />
現場で気になっていませんでした。<br />
前後が忙しかったのも当然あるのですが、感覚が鈍っているのを取り戻したい、<br />
また、基本的なことをちゃんと勉強し直したいと思いました。<br />
そしてもう一つは、こういうことはチームでやったほうがもっとたくさんのことが、分業してちゃんとできるのでチームでやるべきだと感じました。<br />
チームで活動していたときは独りよがりなワンマンディレクターでしたが、<br />
仲間の支えがあってやれていたんだなというのを再び感じました。<br />
物理的限界というのは必ずあるので、一人より二人、あるいはそれ以上いるともっと色々できて楽しそうです。たとえば、この日の場合ライブカメラのスクリーン出しも、スイッチャー担当がいれば可能な機材を持っています。録音やPAも専属のオペレーターがいたほうがいいですし、取材もインタビュアーがいればもっとスムーズかつ落ち着いた撮影ができます。<br />
一匹狼的なのが好きなのですが、少し仲間もほしいかなと思ったりしました。<br />
最後に、ご協力いただいた方に感謝いたします。ありがとうございました。じてんしゃPhttp://www.blogger.com/profile/01771693136106799787noreply@blogger.com0tag:blogger.com,1999:blog-7526483848213799232.post-15778936770038037392017-03-05T17:25:00.001+09:002017-03-05T17:47:27.107+09:00Blackmagic Design ATEMシリーズ用ソフトウェアコントロールパネルをWindows 32bit環境で動かす<b><span style="color: red;">※実際に行われる場合は自己責任で、業務で使用される際には特によろしくお願いします。</span></b><br />
<b><span style="color: red;">純正アプリはフリーウェアですがライセンス的にもありなのかどうかわかりません。</span></b><br />
<br />
いつからか、Blackmagic Design ATEMスイッチャー用ソフトウェアコントロールパネルが64bit PCでしか動作しなくなりましたね。<br />
しかしどうやらこのアプリケーション、インストーラが64bit専用なだけでアプリケーションは32bitアプリなのです。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjd85Mnse_ZjcDhoqKFuyeHzrAJgUhsro0Js8fciu8MHrGHLzzHDMLPLLGvoo2H7BSbjUeZTsJyEfXm0iAQbhaCv-p9Uz9fgFEpkltYuBl-Gwbww1EBAq7nA4QsoxebZEqStZoUeiQlCWQ/s1600/atem1.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="120" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjd85Mnse_ZjcDhoqKFuyeHzrAJgUhsro0Js8fciu8MHrGHLzzHDMLPLLGvoo2H7BSbjUeZTsJyEfXm0iAQbhaCv-p9Uz9fgFEpkltYuBl-Gwbww1EBAq7nA4QsoxebZEqStZoUeiQlCWQ/s400/atem1.jpg" width="400" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
これは64bit PCにインストールしたあとこのフォルダごと32bit PCのProgram Filesにコピーすれば動くんじゃないかと思ったのですが、そうはいきませんでした。(インストールする途中にレジストリの登録も行っているようです。)<br />
そこで、手動でレジストリの登録を行う必要があります。<br />
以下その方法を書いておきます。<br />
C:\Program Files\Blackmagic Design\Blackmagic ATEM Switchersにコピーした場合の例です。<br />
<br />
C:\Windows\System32\cmd.exeを右クリック、管理者として実行<br />
<span style="background-color: black; color: white;">cd C:\Program Files\Blackmagic Design\Blackmagic ATEM Switchers </span>と入力してEnterキー<br />
<span style="background-color: black; color: white;">regsvr32 BMDSwitcherAPI.dll</span> と入力してEnterキー、<br />
レジストリ登録成功のダイアログボックスを閉じる<br />
C:\Program Files\Blackmagic Design\Blackmagic ATEM Switchers¥ATEM Software Control.exeを開く<br />
必要に応じてスタートメニューやデスクトップにリンクを貼れば起動しやすくなります。<br />
<br />
インストールは少々面倒ですが一応切り替えは問題なくできています。<br />
<br />
再度申し上げますが、こんなこともできるのか程度に見ていただければ幸いです。<br />
実際に行われる場合は自己責任にてよろしくお願いします。<br />
(この情報はFacebook ユーザーグループ <a href="https://www.facebook.com/groups/ATEMTecLab/?fref=nf">ATEM Tech Lab</a>で先に紹介させていただいたものです。<a href="https://www.facebook.com/groups/ATEMTecLab/?fref=nf">https://www.facebook.com/groups/ATEMTecLab/?fref=nf</a>)じてんしゃPhttp://www.blogger.com/profile/01771693136106799787noreply@blogger.com0tag:blogger.com,1999:blog-7526483848213799232.post-64736519213191892852017-03-05T17:04:00.000+09:002017-03-05T17:06:40.704+09:00Blackmagic Design ATEM Television Studio用ハーフラックコントロールパネルの製作最近、<a href="https://www.blackmagicdesign.com/jp/products/atemtelevisionstudiohd">新型のATEM Television Studio HDが発売</a>されましたね。<br />
<a href="http://jitenshap.blogspot.jp/2016/09/blackmagic-design-atem-television-studio.html">前記事ではATEM用のタリーランプを制作しました</a>が、<br />
今回は新型を見てコントロールパネルがラックケースについていれば<br />
同じような操作感で操作ができそうだと考えて<br />
今度は簡易コントロールパネルを制作しました。<br />
<br />
以前から自照スイッチをユニバーサル基板にプルダウン抵抗、電流制限抵抗とともに実装し、配線した基板を作って寝かせていたのですが、<br />
それに目隠しパネルとマイコンを取り付けました。<br />
<br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
残念な工作\(^o^)/ <a href="https://t.co/KKepwkKUAc">pic.twitter.com/KKepwkKUAc</a></div>
— じてんしゃP (@jitenshap) <a href="https://twitter.com/jitenshap/status/831529207192694784">2017年2月14日</a></blockquote>
<script async="" charset="utf-8" src="//platform.twitter.com/widgets.js"></script><br />
<br />
実装したスイッチは1~6ch、メディアプレイヤー1のPVW、PGM、およびオートテイクとカットのボタンに割り当てるようにプログラムを作りました。<br />
PVW、PGM列それぞれの自照スイッチは現在選択中のタリーが点灯します。<br />
ATEMタリーのときと同じ古いATEMライブラリを使っているからか、<br />
メディアプレイヤー1のタリーを取得することができなかったため、入力1~6以外が選択されているとき点灯という場当たり的対応をしました。<br />
<br />
ここでTipsですが、後日記事にしたいと思いますがソフトウェアコントロールパネルを純正のサンプルプログラムから改造して作ってみたりもしています。<br />
そこでわかったことなのですが、メディアプレイヤー1、2、およびカラーバー・カラージェネレーターにも入力1~6と同じように入力IDがあります。<br />
一覧にしますと、<br />
入力1: 1<br />
入力2: 2<br />
入力3: 3<br />
入力4: 4<br />
入力5: 5<br />
入力6: 6<br />
Bars: 1000<br />
Color1 :2001<br />
Media Player 1: 3010<br />
Media Player 2: 3020<br />
<br />
どういうことかというと、たとえばPGMをメディアプレイヤー1に切り替えたいときは、<br />
入力1なら<br />
AtemSwitcher.changeProgramInput(1);<br />
となるところを<br />
AtemSwitcher.changeProgramInput(3010);<br />
としてあげればいいわけですね。<br />
<br />
<div>
そんな感じでサクッとサンプルスケッチを改造して作れました。</div>
<div>
キーマトリクスとか組むのかったるいし、スイッチはすでに実装してしまっていたためIOエキスパンダなどを使うこともできなかったので、</div>
<div>
マイコンボードにArduino MEGA互換機を用いてArduino MEGAの暴力的なIOピン数を使って愚直にすべてパラレル結線でマイコンボードとスイッチ基板を結びました。<br />
下記画像は途中までしか結線していませんが、完成品はこのユニバーサル基板の端々までコードがついています。<br />
<br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
中華イーサネットシールドに貼ったヒートシンク、結構熱くなるし貼っておいて正解かも <a href="https://t.co/iv0Ccxe1dj">pic.twitter.com/iv0Ccxe1dj</a></div>
— じてんしゃP (@jitenshap) <a href="https://twitter.com/jitenshap/status/830819256606433280">2017年2月12日</a></blockquote>
<script async="" charset="utf-8" src="//platform.twitter.com/widgets.js"></script>
</div>
<div>
<br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
気持ち悪いものできた<br />
Arduino MEGAのGPIOの数使って10進のまま突っ込む <a href="https://t.co/rng2aP05PD">pic.twitter.com/rng2aP05PD</a></div>
— じてんしゃP (@jitenshap) <a href="https://twitter.com/jitenshap/status/777069660344684544">2016年9月17日</a></blockquote>
<script async="" charset="utf-8" src="//platform.twitter.com/widgets.js"></script><br />
<br />
ピンヘッダを付けたユニバーサル基板に、100均のLANケーブルをバラしたものをはんだ付けして安上がりに結線しています。</div>
<div>
ピンヘッダで取り付けているため、メンテナンス時はそれごと引っこ抜けばマイコンボードとスイッチ基板を切り離すことができます。</div>
<div>
<br />
こんな感じで動きます。我ながらいい感じです。<br />
<br />
<blockquote class="twitter-video" data-lang="ja"><p lang="ja" dir="ltr">NyancoTechオリジナル<br>ハーフラックATEMコントロールパネルできました <a href="https://t.co/fip7GwYv3m">pic.twitter.com/fip7GwYv3m</a></p>— じてんしゃP (@jitenshap) <a href="https://twitter.com/jitenshap/status/832428818778329089">2017年2月17日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script><br />
<br />
<br /></div>
<div>
使ってみたところ、やはりパソコンなしでとりあえず切り替えて絵出しをチェックできるのは便利ですね。だからATEM Television Studio HDを買いましょう(え</div>
じてんしゃPhttp://www.blogger.com/profile/01771693136106799787noreply@blogger.com0