2023年10月7日土曜日

2023年夏アニメの総括

夏期も終わって秋アニメが始まりましたね。
秋アニメはきららアニメがあるので期待しています。
大衆アニメですが、毎エピソード盛り上がりがあるSPY FAMILYも楽しみですね。
夏アニメは何本か見ていたのでそれぞれ簡単に感想を。
誰が見るねんという内容なのですが、
人に何かアニメを勧めるときにメモがほしいなと思ったので、それだけです
核心部分のネタバレもあるのでご了承ください。


シュガーアップル・フェアリーテイル

途中からよくわかんなくなってしんどくなった
絵作りは結構ちゃんとしてると思うが、
間延びしててセリフや声に感情入ってないため
1話1話が長く感じて見ていてキツかった

うちの会社の小さい先輩の話

「奥手な二人が気づいたら付き合ってました系」
同期ちゃんや先輩がうざいよりライトなラブコメ。
登場人物全員いいヤツなので安心して見られるが、
それぞれキャラが立ってて役割がある。
NEW GAME!の毒気を抜いたような作品で、
疲れている人はこんなのを見ておくべき。
様式美として予定調和になる部分とそうならない部分のバランスがいい
猫になる先輩すこ

スパイ教室

今期はなかなか極上だった。
自分の武器がそれぞれなんなのか理解することで強くなっていき、
バラバラだったメンバーが、
それぞれが真価を発揮できるようになることで
お互いを認め合える関係になっていくさまが素晴らしかった。
毎話毎話、大どんでん返しをしてくれるので
短い尺の中で起伏があり見応えがあった。

AIの遺電子

ヒューマノイドが人間と同等に扱われて共生する社会。
生命倫理のような概念もヒューマノイドにも同様に
引き継がれたAI社会の社会問題を描くが、
人間特有の普遍的な問題や生々しいトラブルは
そのままというところがリアルだった。

好きな子がめがねを忘れた

まず言いたいのは、メガネキャラのメガネを安易に外さないでほしい。
1話OP前後の不自然な3Dモーションに不安になったものの、
半分くらいは同ポジの2人の画角なので2話以降は気にならなかった。
これも「奥手な二人が気づいたら付き合ってました系」アニメ。
主人公の生々しいリアクションが甘酸っぱいリアルな青春をよく描いている。
実際中学生ってこんな感じだと思う。
サブキャラが必要以上にかわいく描かれていないのは好感。
ちょっとリアル寄りでむしろ好きかも。
ただ、エピソードごとの前後の繋がりが薄く、
五月雨な短編集になっていることもあるが、
「僕ヤバ」ほどの駆け引きはなくて、引き込まれるような魅力は感じなかった。
心情表現が浅い(顔アップにナレーション程度)ので深みはない。
「久保さんは僕を許さない」よりリアルではあるが、
主人公に共感はするけど、感情移入まではできない。


白聖女と黒牧師

餃子のコスプレみたいな格好したロリ聖女がかわいい。
大事件は起こらず、幸せな日々を歩んでいるが、
それぞれのキャラクターの暗い過去を見せることで、
その結果幸せな現在があることを示すのは
ある種の希望を与えるいい作品なのかもしれない。
ただ、エピソードが全体的に弱いのでそこまで説得力はない。
現実的ではある。

無職転生

前期から自暴自棄になっていた主人公がギルドの信頼を得て
社会性を取り戻すものの、体調の異変に気づく
ここまではフラグ立てでつまらない盛り上がりに掛ける内容だったが、
伏線立てで必要な内容だった。
魔法学園編が始まり、殺伐とした世界で学園物らしい
微笑ましい展開や多様な人間関係をテンポよく描いている。
シリーズ共通の最低なシーンを嫌に強調せずさらっと流してくるところも巧で、
大してストーリーは進んでいないものの毎回内容が濃く、
毎話毎話エピソード間をぶつ切りにせずに
シームレスに話が繋がっている脚本が最高でOPからEDまで見入ってしまう。
今期覇権

ホリミヤ

熟年夫婦のようなべったりせず付かず離れずなカップルのラブコメ。
今期は堀さんと宮村くん以外の人間関係や親のエピソードも多く
各キャラクターの魅力が出ていた。
テンポのよいコメデイの部分は見ていて心地良いが、
必ずペースを落としてじっくりキャラクターの心情を描くシーンがあって、
はっとさせられる。
サザエさん方式のテーマごとのエピソード集という内容だが、
最後に締めていてあ、終わったという驚きがあった
ここでも普段ぶっきらぼうな堀さんがいいことを言っていて沁みた。
見てない人は最終話だけでも前半後半のペースの違いを感じてみてほしい。

Lv1魔王とワンルーム勇者

今期ダークホース。
異世界おじさんのようなちょっとイレギュラーな世界観の四畳半ストーリー。
複雑な対立構造があるものの、正義の違いからのもので、
悪者がいるわけではないところが単純な勧善懲悪ではない深みを出していた。
ガサツな主人公ゆえシリアスにならずにギャグ要素も多く
テンポもいいので尺を感じないので一気見にも最適

おかしな転生

めちゃくちゃな作品だったが最後まで見てしまった
おかしは片手で数えるほどしか作っていない、
尺稼ぎの毎回共通のアバンなど、残念な要素が多かった
貧乏自治領主の息子としてお菓子の国にするために奮闘するだけで
お菓子は作らないのはタイトル詐欺だと思う。
父子の魔法能力が強すぎてご都合主義で、
チートでコインをたくさん集めている気持ちよさのような感覚で、
脳死で楽しむ箸休めとして見ていた。
もう少しお前は子供なんだからすっこんでろと虐げられて
徐々に認められていくみたいな展開があればまだ深みが出たと思う。

私の幸せな結婚

令和版おしんみたいな話かと思ったが、
異能力バトル要素という全く不要な要素が入っていることがわかりゲンナリした。
主人公に救いが訪れて少しずつ明るくなり自己肯定感を上げていくところはよかったが、
後半はこれもご都合主義な展開で、尻すぼみに終わった感がある。

ライザのアトリエ

3話くらいまで見た。
ゲーム実況動画で見た内容をほぼそのままアニメにしていて非常に内容が薄く野暮ったい。
一生飛ばせないチュートリアルを見ている感じで見ていられなかった。


その他に映画だと、アリスとテレスのまぼろし工場も見ましたね
なかなか見応えのある作品が多くていいシーズンでした。

最近は、オーソドックスな異世界物を一つはニコニコでコメント付きで
ツッコミを入れながら見たりするのが恒例になっていたりします。
どれも大した山も谷もない展開なのですが、
数を見ているとたまに脳死で見られるものも
入れておきたくなるという不思議な現象です。
無職転生・リゼロのようなじっくり見られる大作ももちろん好きですが、
今期のLv.1魔王や異世界おじさんのような変わり種も続々出てきてほしいですね。

また、どうしても見てしまうのが「奥手な二人が気づいたら付き合っていました」
系ですね。これは奥手なオタクのハートをガッチリ掴んでいると思います。
今期の好きな子がめがねを忘れた、ですが、本当に大したことしてないんですよ
ただちょっとしたことでドキドキしてしまう、
そんな経験って登場人物くらいの年齢までしかない限界独身男性は
見てドキドキしちゃうんですよね。
このフォーマットはまだいくつか出てくるのではないかと思います。

来年には大室家の映画やゆるキャンなんかもあって秋期以降も忙しそうです。
最近ちょくちょくツイッターにシーズンごとの感想を書いているんですが、
せっかくブログがあるので、この形式で次期以降もまとめられたらと思います。

2023年1月8日日曜日

UART to USB HID変換IC CH9329を使ってみた

以前にCH9350を使ってみましたが、今回はよりシンプルなバージョンが
秋月電子で取り扱い開始したので早速使ってみました。
今回秋月電子に登場したCH9329は、単方向のUART入力USB HID出力ができるICです。
以前使ってみたCH9350は、USB HID to UARTもできるのでやや用途が異なります。

幅3.9mmのSOP-16パッケージです。変換基板と一緒に購入しました。



とりあえずこんな感じの回路で組んでみました。



3.3VとVCCをつなぐと3.3V駆動が可能ですが、
今回はUSBバスパワーで動かしています。
3.3Vレギュレーターが内蔵されているので、
ロジック用のプルアップなどはここから取れます。
MODE0とCFG0をGNDに落としていますが、
これにより後述の簡単モードになります。


変換基板を使っているので例によってユニバーサル基板に組みました。
USBケーブルはありものをちぎって
デュポンQI互換コネクタを圧着してピンヘッダに接続しています。
手前の4ピンコネクタがUART入力です。

USB接続するとドライバのインストールが始まり、
標準USBキーボードとして認識しました。



さて、操作方法ですが、CFG0とMODE0をローに落としていることで、
・単体のキーボードとして認識させる
・ASCIIモードにする
という設定が行われます。

ASCIIモードというのはもっともシンプルなキーボードをエミュレートするモードで、
UARTから8N1の9600baudでASCIIコードを送ることで
USB側はそのままキーボードとして同じキーコードのキーストロークが入力されます



M5StickCでSerial1.write('a');を200msごとにやってみると
こんな感じでキーボードとして入力が行われました。
UARTさえあれば結構簡単にキーボードになれるので便利なICですね

2022年12月17日土曜日

東京オタクPOP UP ストアメモ

アニメグッズのPOP UPストアとか行く機会がちょくちょく出てきたので
ここにメモを書き足していく予定の項です

POP UP ストアとは



アニメやゲームなどの人気シリーズのタイトルオンリーで
キャラクターグッズを販売するイベントで、
期間は2週間から長いものだと2ヶ月くらいの期間で行われることが多いです。

アニメ・ゲーム・ホビーショップのイベントスペースや、
商業施設のイベントスペースで常時さまざまなタイトルで開催されています。

壁面いっぱいの大きなタペストリー・ポスター、等身大ボードの展示など
イベントらしい展示も魅力的です。


何を売ってるの?

共通して、物としては、主に大物としてはタペストリーやTシャツ、
枕カバー、タオルやトートバッグ
小物ではクリアファイル・アクリルスタンドフィギュアや文具などに
キャラクターが印刷されたものが販売されているケースが多いです。




一部食品も販売していることがあります。
どうかしているものとしては、ご○うさの「おそばセット」(そば3食+シール)
ご○うさの「ラーメンセット」(ラーメン3食+キャラカード)や、


クッキーに小さいアクリルスタンドフィギュアや缶バッジなどがついているもの、
最近だとアニ○ュガーとかいうブランドで
プリン、ドーナッツ、ボトルケーキの3種の神器を出している
業者がいて、中身の菓子は複数タイトル購入しましたが同じでした笑



冷蔵商品なのでショーケースと一緒に出張って売ってるみたいですね。
特に美味しくも不味くもないので一度買ってみてもいいのではないかと思います。

食品は1000円以下で買える場合が多いので、当然食品としてのコスパは最悪ですが、
折角なのでお小遣いでファングッズをなにか買いたい!という
若年層ファンには助かる商品だと思いますね。
決してぼったくりとは言ってはいけないなと…
ぼったくってるけど

共通事項

主催業者にもよりますが、告知の段階で整理券配布要項などを
明示してくれる場合もあるので、
各イベント主催の公式ツイッターアカウントのフォローと
当日朝はちょっと早く出られる体制をおすすめします。

絵柄としてはイベントごとに新規に描き下ろしたイラストがあったり、
過去イベントの物販アイテムの再販などいろんなパターンがあります。
結構何度も同じ物が売られていたりするのでわざわざ並んだりしてまで
必死に買う必要のあるものは実は少ないです。肩の力を抜いていきましょう。
昨今、転売が社会問題化しているのでよく売れた物は転売対策ですぐ再販されます。

・秋葉原アトレコラボシリーズ

よくラジオ会館の通りの駅ビルの大窓に
アニメキャラのステッカーが貼ってあるやつです。



ツイッターでガラスの写真を見ていま○○やってるんだーなどと発見しやすいです。
夜中に貼り付けたての写真を投稿している人がだいたいいますね。
写真は、手前にある街灯が邪魔で一気に全景は撮りづらいのと、
日中は人通りが多くクリーンな絵を撮るのは難しいです。
オタクがたくさん写真撮ろうと群がっていると、
当然前は歩道なので歩行者優先ですが、前を通るのは結構憚られます…。

SNS時代なのであまり他人のカメラに写りたくないですし、
公共の場所で撮影しているオタクも人がいるときはカメラを下げるとか
考慮したほうがいいですね。
いい絵が撮れたらほかのオタクのためにさっと移動してあげた方がいいと思います。
が、道路を挟んで向かい側のソフマップ前まで離れてツイッターに画像を投稿してたら
K正会のお兄さんに絡まれたことがあります笑
イヤホンをしていたので聞こえないふりをしていたら悲しい顔をして去っていきました…。
秋葉原あるあるですね

ラッピング窓とセットなのが2階の物販です。
10時開店でコラボイベント初日は結構オタクが並びます。
概ね20名ほどの定員で入場制限、
5人出たら5人入るみたいな感じで入店できます

駅ビルの自由通路をくぐって反対側のガラス扉を開けると
階段があり、そこが待機列になることが多いです。
過去に見た一番多かった待機列は開店時点で100人以上並んでおり、
最終的に400人以上の列となり4時間待ちというケースもありました。

仮説レジなのでiPadの簡易レジで
高速に会計を捌けるようなシステムじゃなかったり
点数制限がバラバラでチェックに時間が取られたりなど
会計待ちが長いケースが多いです。

主催業者によるようですが、
そこまでの混雑を見込めなかったというようなこともあり、
これだけの待機列となっても整理券配布で
一度解散させるようなオペレーションが取られないこともあります。
初日や新商品解禁日なんかは冬は防寒対策を、
夏は日除けをして開店前に着いていないと
ものすごい時間並んだり売り切れたりしてしまいます…。

都内勤務で帰りに寄れるよみたいな人は平日行くとガラガラで
入場制限もなくゆっくり買い物できると思います。

・ゲーム/アニメ/ホビーショップで開催のPOP UPストア

情報をつかむのがなかなか難しいです。
お気に入りのタイトルの公式Twitterをフォロー・新着通知ONにしておいたり、
Androidスマホだと、ホーム画面右スワイプして出てくる
おすすめ記事みたいなやつにたまたま出てきて知るなど
アンテナを高くしておかないと見過ごしがちです。
総合情報サイトもありますが興味ないタイトルの情報も多いのでノイズが多いです
Googleのおすすめを最適化するのが一番ですね

結構広くスペースが取られる場合も多く期間が長く、既出過去作多め、
過去に買いそびれた絵柄を購入するチャンスです。
人気タイトルはやはり朝から並びますが、
初日に行かなくても結構物は買えるケースが多いです。

普段からオタクを相手にしているスタッフが販売しているので
サクサクレジも進むし、待機列整理のオペレーションもいいです。

・渋谷マルイ/新宿マルイ (マルイノアニメ)



マルイのアニメツイッターをフォローしたらちゃんと事前に告知されます。
物販だけでなく原画が見られるなどちょっとした展が開かれることも多い印象です。

おそらくオペレーションが一番こなれています。
初日は開店-開店1時間時に整理券配布するケースが多いです。
結構当日の直前にホームページのイベントページの内容が書き換わって
抽選入場の要項が更新されます。
道すがらブラウザを何度も更新させてチェックしましょう。
入場方法の告知はツイッターでやれよという感じですがしないのは、
担当者が違うんじゃないかなw

いずれにせよ初日は基本フリー入場はないので
開店前に集合する必要がありますが、周辺の歩道に溜まるしかないのと
必ず整理券配布があるので近くにたむろせずに
要項通りの時刻に集合して整理券を受け取れば入れます。

午後になってから再度整理券配布する場合もありますが、
朝の時点で人数が多い場合、
整理券配布時間を過ぎたらもうその日は一切入れません。

相当人気商品じゃなければフリー入場になった2週目3週目でも
購入可能な商品が多いと思われるので
特に気合い入れて初日行かなくてもとは思います。
10時整理券配布で抽選結果が出たら
あなたは19時に来てくださいみたいなこともありうるので、
最悪一日がかりになっちゃいます。

なお、抽選結果の入場時刻5分前くらいにイベント会場前に集合すると
番号が呼ばれてれるような形でした。

エポスカードに入るとその日の会計3000円オフ
○○円以上エポスカードでのお買い上げで抽選が引ける
という宣伝をされるのが特徴的で、
エポスカードのプロモーションとして開催しているようなもんですね。
レジでも再度勧誘を受けますが、相当食い下がられます。
しつこいし馴れ馴れしくて正直キレそうになります。

新宿マルイは2箇所あります。
新宿マルイメンが新宿5丁目・地下鉄新宿3丁目駅の北東側
新宿マルイアネックスが新宿3丁目駅の南です。
マルイメンにはアニメイトが、マルイアネックスには駿河屋があるので
抽選時間まで買い物をするにはぴったりですね。

抽選が遅い時間にあたって新宿で時間つぶせないよという諸君も
都営新宿線で岩本町まで行けば秋葉原もすぐなので
秋葉原まで行って食事や買い物をしてもいいのではないかと思います

希望のタイトルのイベントがどのマルイなのか事前に要チェックです。
渋谷も新宿も結構駅から降りて歩くのでその時間も加味が必要ですね

会場スタッフはレジの営業がウザい以外は嫌な感じはしないです。

・番外編 しまむら/アベイル

衣料品店ですがときどきコラボグッズが販売されています。



特徴としてはめちゃくちゃ単価が安いというのが魅力です。
寝具では、両面全面プリントの枕やシーツが2000円以下など
かなりリーズナブルに入手可能です。
この手のプリント布地物はオンラインストアで予約限定のものが多いです。
店頭受取だと送料無料でお近くのしまむらテンポで受け取りが可能です。
中身が見えない袋が無料なのもありがたいですね。



小物だとアクリルスタンドフィギュアやアクリルパネル、キーホルダーなどを
レジ横周辺に置いてあります。
売れ残りの結構前に発売された商品もそのまま置いてあることがあるので、
他タイトルの過去のグッズも入手できることがあります。
店舗数も多いので時々店舗を訪れると意外な発見があると思います。

2022年3月26日土曜日

さくらのクラウド「さくらのモノプラットフォーム」でLTE-Mを使ってCO2モニタリングしてみた

「さくらのIoT」でいち早くLTE接続対応のIoTデバイスとクラウドサービスの融合を実現していたさくらのインターネットがLTE-Mを使った新サービス
さくらのクラウド「さくらのモノプラットフォーム」をサービス開始しました。
https://iot.sakura.ad.jp/platform/

クローズドベータテスト募集がされていたので申し込み、いただいたアカウントと基板でサクッと試してみましたが、なかなか記事にできずにおりました

今回は、さくらのモノプラットフォームを使い作成したCO2モニタリングシステムについて紹介します。


テスター登録したところ、モノプラットフォームだけでなく、無料で各サービスを利用できるアカウントのログイン情報がメールで届きました。 また後日、

M5Stack対応LTEモジュール
DIP型LTEモジュール基板
LTEアンテナ
STM32Nucleo対応シールド基板
J-LINKコネクタ変換基板
のセットが到着しました。


利用開始前に、メールで届いたID、パスワードを使い、コンソールにログインしてSIMの登録を行います。
SIMはオンボードのeSIMで、基板上に書いてあるICCID、パスコードを入力して登録します。
あとはモノプラットフォームのメニューからプロジェクトを作成、SIMを紐付ければ準備完了です。
若干手順がありますが、このあたりはすべて丁寧なドキュメントがありますので、ドキュメントの手順どおりやれば問題ないです。
https://manual.sakura.ad.jp/cloud/manual-iotpf.html



さて、ハードウェア側です。Nucleoはあまり使っていないものの、M5Stackは出始めからいじっていたので早速つないでみました。
マニュアルにArduino用サンプルスケッチがあり、書き込むといきなりLTE-Mでさくらのサーバーと接続ができます。

サンプルは、M5StackのボタンA、ボタンB、ボタンCの押された回数をそれぞれ送信するもので、送信に成功すると、画面上の数字が増えていきます。

コンソールにログインすると、ブラウザ上で送信ログを確認できます。

もちろん、デバイスの送信データを受信するためのAPIもあります。
後述しますが、こちらはWebSocket APIになっており、デバイスがデータを送信するとJSONにシリアライズされて流れてくるストリーミングAPIです。

サンプルスケッチを見ると、LTEモジュールに送るコマンドフォーマットがわかるので、適宜改造すればサクッとデータを送信可能です。
データ形式は以下の通りです。

タグID
データ型 uint8からfloat64まで数種類
データ本文

これを設定して送信する形になります。
たとえば、温湿度センサーの値を送る場合、
タグID 0x01をfloat32で温度
タグID 0x02をint8で湿度
のようにして使うとそれぞれ別のものとして区別して送信できます。
サンプルスケッチでは、

ボタンAをタグID: 0x01のuint32
ボタンBをタグID: 0x02のuint32
ボタンCをタグID: 0x03のuint32

としてそれぞれ送信するようになっています。
試したところ、タグIDは0x00-0xFFまで使うことができたため、255個の変数を設定できそうです。

サンプルスケッチの、setup()にある接続周りの処理を実行すれば、あとはsipf_client.cppにある
SipfCmdTxコマンドでデータ送信が可能です。
先ほどの例で、気温を送信したい場合は、

SipfCmdTx(0x01, OBJ_TYPE_FLOAT32, (uint8_t*)&temperature, 4, buff);

のようにして送信できます。
引数は、第一引数から

//タグ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;

という理解で使うことができました。
それでは実際に任意の値を送ってみます。



M5StackにGROVE接続のSensirion SCD41 CO2 温湿度センサーを接続しました。
SCD41は、Sensirion公式のArduinoライブラリがあり、M5Stackで即動作させることが可能です。
SCD41のサンプルスケッチに、さくらのモノプラットフォームのサンプルスケッチを合体したものを作ってデータ送信してみました。
データ送信は、以下のようにしています。

//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);

タグID: 0x00をCO2
タグID: 0x01を気温
タグID: 0x02を湿度
にして、それぞれuint16 float32形式で送信しています。

測定は5秒に1度測定してLCDに表示、送信は1分に1度最新の値を送信するようにしました。

送信したデータは、WebSocket APIを使うとリアルタイムに確認することができます。



これはwscatを使ってコンソールで接続していますが、ブラウザのJavaScriptでWebSocket接続することも可能です。
(WebSocket APIのエンドポイントURLは公開しないほうがよさそうなので、公開するなら間にプロキシがいるかも)

デバイスが送信したデータを受信するAPIは、サービスアダプタと呼ぶようです。
サービスアダプタには、このWebSocket APIに加え、Outgoing Webhook、Incoming Webhookが作成できます。
HTTP APIを自前サーバーで作っておけば、データ受信時にHTTPリクエストで受け取ることも可能なようです。
それに加えて、今回は使っていませんが、デバイスからデータを送信するほかに、デバイスにデータを送信することも可能です。

それでは、データが送信できているのを確認したので、データ蓄積や表示ができるようにしたいと思います。

さくらのクラウドでは、もちろんVPSサーバーやデータベース、VPCルーターなどを作成可能であるため、
エッジデバイスのデータ送信からバックエンドまでワンストップで行うことが可能です。

モノプラットフォームのベータテストアカウントでは、なんと太っ腹なことにこれらのクラウドサーバーサービスも無料でトライアル可能でした。
非常にリッチなVPSなども立ち上げ可能ですが、1クライアントではそれほどのスペックは必要ないため、

プラン/2Core-2GB OSはUbuntuのサーバー ストレージは20GB SSD
MariaDB 10.4 シングル構成 1Core RAM2GB ディスク10GB
VPCルーター
スイッチ

という構成で組んでみました。



それぞれWebUIからぽちぽち押していくだけで作れるので簡単に設定できます。

Ubuntuサーバーを使って、Node.jsでWebSocket APIに接続し、データを受信したらデータベースに書き込み
別にNode.jsでHTTP APIも作ってデータベースから値を引っ張ってくるAPI動かすようにしました。
CO2、温度、湿度の順番でデータを送信しているため、それぞれ受信して3つが揃った段階でデータベースに書き込むようにしています。
あとはNginxで表示ページをホストして、Chart.jsでグラフを表示させるようにして完成です。



このへんはセンサー系のPoCではいつもどおりの作業ですね

使ってみた感想ですが、データ送信を非常に簡単に行えるのがメリットだと思います。

データ送信から受信までのプロセスを含め、1から作ることも可能ですが、
プロトコルを作るところから始まることになり非常に煩雑です。
モジュール、アンテナの技適やモデムコマンドを含むデータシートの開示のためのNDA契約など、
一切のプロセスを飛ばして、いきなりコマンドラインで受信可能な状態になることは
非常にアドバンテージがある仕組みだと思います。
セルラーIoTを初めたいけど、何からはじめていいかわからない、という方は1つのアカウントで
エッジデバイスからサーバーサイドまで管理できて明朗会計なさくらのモノプラットフォームがおすすめです!

2021年5月22日土曜日

USB HID-UARTブリッジ CH9350を使ってみる

秋月新商品で、CH340でおなじみWCH製、
USB HID-UART相互変換ブリッジICが出ていました。

USBマウス・キーボード用シリアル通信制御IC 
CH9350L: 半導体 秋月電子通商-電子部品・ネット通販
https://akizukidenshi.com/catalog/g/gI-16308/
 
早速先週末店頭で購入したので試してみます。
USB HIDホストになるUSBポート、USB HIDスレーブ(デバイス)になるUSBポート、
UARTのTx/Rxが付いています。

KVM Switch用に使うことが想定されているようで
このIC同士をシリアルで結ぶと、片方のホスト端子に繋いだUSBキーボードを、
もう片方のスレーブ端子につないだUSBコネクタでPCと接続させることができます。
[キーボード]--USB-->[Rx IC]--UART-->[Tx IC]--USB-->[PC]
という構図です。UARTをバススイッチで切り替えるのは容易ですし、
PCにはHIDとして認識させたまま切り離すとかできそうなのでKVMには最適ですね。
さらに、RS-422ドライバを載せたりすると相当延長できそうですよね。
そんなICです。

本来の使い方ではありませんが、UARTの通信を読めれば、
汎用のUSB HID-UARTとして、
マイコンに、面倒なSPI接続のUSBホストICを繋いだりせず
USBキーボードを接続できるのではと思い買ってみました。


データシート通りにこんな感じの配線で仮組みしてみました。
電源はUSBプラグからVBUSを入力、
ボタンを押しながらUSB接続するとUSBスレーブモード、
何もせずつなぐと電源供給のみで、USB HID to UARTブリッジとして動きます。

電源を入れて、USBキーボードとUSB-UART変換をつなぎ、
Tera TermのデバッグモードでUART出力をバイナリ表示してみるとこんな感じでした。


何も入力していないとき、
0x57 0xAB 0x82 0xA3
が繰り返し流れています。
入力すると、こんな感じのフォーマットでキー入力が拾えることがわかりました。


中国語データシートでなかなか読むのが難しく、詳しくは調べておらず、
現物合わせなのですが、Headersとなっている部分はおそらく状態表示も含んでいて、
微妙に変化があるかもしれませんが、
8バイト目から13バイト目にキー入力が表示されていました。
キー入力のフォーマットは、USB HID仕様の、Usage IDが表示されているようです。

何も入力していなくてもダーっと0x57 0xAB 0x82 0xA3が流れていて、
目で追うのは大変なのでPython3でパーサーを作りました。

押したキーがUsage IDのテーブルを参照して文字で表示できるようになっています。



おまけでNum Lock、Caps Lock、Scroll LockのLEDの制御ギミックも入れています。
これって、キーボードが状態を保持しているんじゃなくてホスト側からの司令で
点いていたんだなぁという発見がありました。(何もしないと点かない)

M5Stackなどの画面付きマイコンボードで文字入力をするのには、GROVEコネクタ1本で
かなり楽ちんに接続できてよさそうです。ぜひ一度お試しください。

2021年3月21日日曜日

えっ、まだESP32にRTC外付けしてるんですか!?

煽り気味のタイトルで始めてみましたが、今回はESP32の内蔵RTCの話をしようと思います。
ESP32にはRTCが内蔵されています。

RTC timer: 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 RTC Clock Source and affects accuracy only in sleep modes, in which case the time will be measured at 6.6667 us resolution.

公式のWikiにも書いてあるとおり、スリープ中も使えるクロックです。
deepsleepの復帰をタイマーで設定するAPIなんかはこのクロックを使っています。
ただ、このクロックは、標準では内蔵RCオシレーターを使うようになっており、
実測したところ30分でも数秒以上の誤差が出ることもありました。
何時何分のデータかタイムスタンプが重要なアプリケーションや、
正確な起動時間が求められるタイマーとしてはこのままでは使うことができません。

そこで、DS3231のようなI2C RTCを接続し、スリープの復帰をGPIO割り込みにして、
RTCのINTピンを使って起こすなんてことをよくしていると思います。
しかし、実はESP32内蔵のRTC、よくRTCに使われる32.786kHzのクロックを
外部から供給して、外付けRTC並の高精度な時刻保持ができるのです。
上記リンクを少し下へスクロールすると、 RTC Clock Sourceという項目があります。
そこには
・Internal 150kHz RC oscillator (default)
・External 32kHz crystal
・External 32kHz oscillator at 32K_XN pin
・Internal 8.5MHz oscillator, divided by 256 (~33kHz)
という利用できるクロックソースのリストがあります。
それぞれ、
標準で使用されるRCオシレーター、
外付け32k水晶
XNピンへのクロック入力
内蔵8.5MHzオシレーターの分周
となっていますが、標準のRCはご存知のようにかなり精度が悪いです。
また、8.5MHzから分周するのも、周波数安定度は高いものの、
周波数が近似値なので均一にかなりずれます。絶対時間での誤差ではRCのほうがマシでした。
そこで、32kHzの水晶を外部に接続する方法を試してみました。


ひどい話ですね。これまで流通していたESP-WROOM-32では
うまくRTC用クロックソースの水晶を発振できませんでした。
そんな矢先、秋月でもチップバージョン3のWROOM-32Eが発売されていたので
本当にそちらでは動くのか試してみました。

水晶のドライブに必要な回路はデータシートの11-12ページに書いてあります。


GPIO32, 33に並列に抵抗を入れて、あとは水晶と負荷容量をつなぐだけです。
並列の抵抗は5M~10MΩとされていたので、手持ちのある5.1Mを使いました。


なお、ハードウェア的に接続するだけで自動的に水晶が使われるわけではなく、
ビルドオプションでクロックソースを別途設定する必要があります。


idf.py menuconfigで
Component config->ESP32-specific
RTC clock sourceでEnterを押して
External 32kHz crystalを選択
Number of attempts to repeat 32k XTAL calibrationでEnterを押して、
適当に数値を増やす
(これをしないと、発振の開始が間に合わずRCに切り替わってしまいます。)
なお、この数値を莫大な数値にすると、
発振できない場合にブートローダー内でWDT Resetが掛かりブートループになります。

うまく発振できないと、ブートローダーでこのようにエラーが出て、RCに切り替わります。


プローブを当てて、発振できているのにこの表示になる場合は、
Number of attempts to repeat 32k XTAL calibrationの数値を増やすといいと思います。


うまく発振できると、App cpu upの周りでエラーが表示されなくなります。
このように、ESP-WROOM-32Eでは外付けの水晶を使ったRTCクロックソースを
使用することができました。

この状態で実際に仕事で使ってみていますが、半日時計合わせをしなくても
1秒以内の誤差になっているため、
外付けRTCなしでも絶対時刻が重要なアプリケーションで使用できています。

ちなみに、秋月で売っているESP-WROOM-32Eは、技適マークが刻印されておらず、
シールが添付されていますが、3月のロットからは技適マークが入るようになっています。

Changes of the marking on ESP32-WROVER-E and ESP32-WROVER-IE to add new certification identification

実際にDigiKeyで3月に購入したものについては、技適マークが入っていました。

2021年1月10日日曜日

WindowsでphpMyAdminを使う+多段SSHポートフォワードでDBのポートが通るようにする

サーバーサイドは本番環境は自分は作らず、試作や検証目的のことが多いので、
データベースは1つのVPS上にMariaDB+Webサーバ&phpMyAdminの環境を構築して
SSHポートフォワードで直接サーバ内のphpMyAdminを開いてSQLを投げていたのですが、
たまに本番環境のDBも時折直接編集する必要が出てきて、
Amazon AWS VPC内にあるRDSを多段踏み台経由で操作する必要ができました。
接続の構成としてはこんな感じ。

ひとまずRLoginで多段踏み台経由でRDSと接続するポートをSSHポートフォワーディング、
やはりGUIで操作したいのでMySQL Workbenchを使ってやっていたのですが、
phpMyAdminのほうが慣れていてやっぱり使いやすいよなということで、
ローカルにphpMyAdmin環境を構築し、リモートDBを参照できるように設定してみました。
結果はうまくいっていつもどおりphpMyAdminからRDSを操作できています。
ぱっと調べてもコピペで動くページが見つからなかったので手順をまとめておきます。

構成:
OS: Windows 10(x64) WSLも使わないしあんまりバージョンは問わない
Webサーバ: nginx version: nginx/1.19.6
php: PHP 8.0.0 (cgi-fcgi) (built: Nov 24 2020 22:02:53)
ターミナル: RLogink (x64) Version 2.25.6 (2020/12/09)
phpMyAdmin: 5.0.4

多段SSHポートフォワードでSQL用のポートが通るようにする
RLoginをダウンロード
Tera termのスクリプトとかでもできるみたいなんですが、
RLoginならGUIで全部設定できるので最近は結構使っています。
少しスクロールしたところに、GitHubからダウンロード、実行プログラム…
という項目があります。
64bit Windows 10なのでrlogin_x64.zipをダウンロードしました。
インストーラではなく解凍したところにいきなり実行ファイルがあるので、
適当な場所へ移動しておいたほうがいいと思います。

起動するとServer Selectというダイアログが出るので、新規をクリック

まずはエンドポイントとなる踏み台の接続情報を埋めていきます。
ホスト名に踏み台のホスト名あるいはIPアドレスを入力
ユーザー名に接続ユーザー名、パスワードログインが可能ならパスワード
鍵認証の場合は、SSH認証鍵ボタンで鍵ファイルを選択
エントリー欄にわかりやすい名前(踏み台1など)をつけておく

プロトコル項目のポートフォワードをクリック

新規をクリックしてSSH2ポートフォワード設定ウインドウで
Local Socksを選択
Host: localhost、Port: 11022(任意)
でOK

一旦つないでみて、SSH接続できたら踏み台1の設定はOK。
VPC内にあるDB接続用踏み台の接続プロファイルを作成
再びServer Selectウインドウで新規をクリック

右上にあるタブ(上)、前接続先(下)の下のプルダウンで
先ほど作成した接続プロファイルを選択

IPアドレス(Host名)、ユーザー、認証情報を入力
プロキシ設定ボタンでSelect Proxy Protocol: SOCKS5を選択
Server OptionでProxy Server Address: localhost
Socket Portを先ほど設定したポート 11022に設定してOK

プロトコル→ポートフォワードウインドウを開く
Listened: Local、 Host:localhost、 Port: 13306(任意)
Connect: Host: RDSのIPアドレス、 Port: 3306
に設定してOK

Server Selectに戻り、踏み台2のほうに接続すると、
自動的に多段SSH接続してくれて、RDSのポートも通るようになる。

Nginx+phpMyAdminを使えるようにする
上記手順でlocalhost:13306でRDSと接続できるようになったので、
phpMyadminをセットアップ。

Nginxをダウンロード
nginx/Windows-1.19.6 を選びました。解凍してC:\nginxに移動しました。

phpをダウンロード
x64 Non Thread Safe のZipをダウンロードしました。解凍してC:\phpに移動しました。

phpMyAdminをダウンロード
右側にDownloadってリンクボタンがあります。
解凍して、C:\nginx\html\phpmyadminに移動しました。

C:\nginx\conf\nginx.confをエディタで開き、
location ~\.php$...の部分のコメントアウトを外して有効にして、
SCRIPT_FILENAMEの行を修正します。

        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;
        }

とりあえずphpが動くようになったか確認してみます。
C:\nginx\html\phpinfo.phpに以下の内容のファイルを保存します。

<?php
phpinfo();
?>

Nginxとphp-cgiの起動スクリプトを作成します。
C:\nginx\run.batに以下の内容のファイルを保存します。

start nginx.exe
start C:\php\php-cgi.exe -b 127.0.0.1:9000

停止用スクリプトも作成します。
C:\nginx\stop.batに以下の内容のファイルを保存します。

  nginx -s stop
  taskkill /F /IM php-cgi.exe

run.batを実行して、
http://localhost/phpinfo.php
を開いて、
phpinfoが正常表示できれば準備完了です。
停止するときはstop.batを実行すればphp-cgiとnginxが停止します。


phpMyAdminの設定を行います。
C:\nginx\html\phpmyadmin\config.sample.inc.phpをコピーして、同じフォルダにconfig.inc.phpとして保存します。
内容を以下のように編集します。

  $cfg['Servers'][$i]['host'] = 'localhost';
  $cfg['Servers'][$i]['port'] = '13306';

ポートフォワードでローカルホストの13306でRDSと接続できるようにしたので、
host: localhost、port: 13306にします。
portの項目がない場合は行を追加すればOKです。
コメントアウトされている場合はコメントアウトを解除して設定を有効にしてください。
保存して、
http://localhost/phpmyadmin/index.php
を開くとphpMyAdminが開きます。
RDSの接続情報を入れればRDSをphpMyAdminで操作できます。