閉じる

UI言語[UI Language]

記事自体は翻訳されません! 記事によって英語版があったりなかったりします。翻訳がある記事は文頭に記載があるよ!
Each articles themselves will not be translated by this setting. Some of article has translation and some of them doesn't. You will notice if the article has its translation by its preamble!

テーマ[Theme]


アイキャッチ画像

【軸の秤】 version 0.2.0 リリースノート


前回の0.1.1にバグがあったのでそこだけ直してさっさと公開すればよかったんですが、直してるとあちこちいじりたくなってしまい、時間かかってしまいました。

ファームウェアのダウンロードや書き込み方法はファームウェアのダウンロードの記事からお願いいたします。
0.2.0からファームウェアの書き込みに加えて、(Webサーバー機能で使う)SPIFFSに置くファイルの更新が必要になりますのでよろしくお願いします。


新機能

ファームウェアアップデート機能

ファームウェアアップデート機能

こういう更新機能が付くと、いよいよ“ファームウェア”感が出てちょっと満足です。


Webサーバー機能

軸の秤 ダークモード
軸の秤 ダークモード

ライトモードでの表示(左)とダークモード(右)。


その他

軸の秤 測定データの並び替え

並び順はとりあえず 〈書き込み順〉〈名前順(0-9)〉〈名前順(9-0)〉のみです。


変更点


バグ修正


裏話

Webサーバー機能

内部的な変更なので表には全く見えないんですが、Webサーバー機能は大改修でした……

大きな改修は2つあって、一つは必要なHTMLファイル等をESP32のSPIFFS領域に直に保存していたんですが、これを一つのバイナリファイルにまとめました。ファームウェアのアップデート機能が付いたので、バージョンアップ時にこちらも簡単に書き換えられる必要があって、そうすると複数ファイルより楽かなと……
実体部分は無圧縮で結合しただけなんですけど、必要な部分を取り出せるよう独自形式のインデックスを書き出すスクリプトを作ったり、それを取り出す仕組みを実装したり。時間かかりましたが、おかげでSPIFFSに置かなければならないファイルは一つで済むようになり、アップデート処理はわかりやすくなったはず。

もう一つはけっこう頑張って作ったSDカードブラウザです。ESP32は比較的簡単にWebサーバー機能を実現できるようになってるんですが、<input type="file">を含むmultipart/form-dataを良きに計らってくれるほど万能ではないので、HTTPリクエストとそこに含まれるバイナリデータを受信しながら同時にSDカードに書き込む処理をセコセコ実装することに。
HTTPリクエストヘッダの境界文字列なるものを初めて知ったし、その処理とかもめんどくさかったー…… PCみたくガッとメモリに一括受信して後から処理っていう富豪プログラミングができなくて、受信しながらSDカードに書き込まないといけないのがつらみポイントでした。そのせいでどーしてもバイナリが一致しない事があるのでMD5チェックするようにしたり……
あ、そういえばJavaScript、File.lastModifiedはあるのに作成日時が参照できないの不思議ですね。

測定機能のStateパターン化

測定中の処理も地味に複雑でごちゃごちゃしていたので、ステートマシン的な感じで個々の状態を表すクラスを作って処理を任せる形にまるっと変更。コード量は多くなるけど、やっぱり処理と関連変数がまとまってクラスでブラックボックスになってるとわかりやすいなーと。


多言語対応の文字列リソースとか

文字列を扱う場面での英語と日本語の場合分けも増えてきたので、文字列リソース的な仕組みも作りました。日本語と英語の各種メッセージを羅列したファイルを作っておいて、そこから必要なメッセージを取り出せるような、よくある仕組みです。JSON形式のリソースファイルをPythonスクリプトが.hに変換してくれて、それを扱うちょっとしたクラスみたいな形にまとまってます。
モバイルアプリなんかだと大抵はフレームワークに標準搭載されてたりしますが、Arduinoの様なマイコン的なやつだとあんまり無い…… のかな? そもそもこんな小さな画面で多言語対応する必要ないですしね……

ついでに日本語のピクセルフォントもかなり増えました。漢字は美咲ゴシックをベースにしつつ、7x7ピクセルに収める必要はないので必要に応じてアレンジしてます。ひらがなはほとんど描き起こし。前述のPythonスクリプトが不足しているピクセルフォントを教えてくれるので過不足無く文字を増やせます。

軸の秤 ピクセルフォント変換ツール

Pythonで作ったピクセルフォントの変換ツール。意外と少ない漢字でいろんなメッセージ表現できるもんだなーと思いました。


PlatformIOはイイ感じ

C++言語にも徐々に慣れてきたと言うか、いろいろ知らなかった機能を学んでおります。constexprとか、enum classとかも最近やっと知ったので、コード上には最初の方に作った#defineマクロとが混在するごちゃまぜ状態、一貫性ゼロ……

あ、あと開発環境をArduino IDEからPlatformIOに変えました。
ライブラリのソースに一切手を加えずにマクロを上書きしたくて導入した(PlatformIOだとコンパイラフラグを使ってそういう事が出来ちゃう)んですが、エディタとして使っていたVS Codeと統合されて使いやすいし、コンパイルも進捗が表示されるので速くなった気がするし、コンパイルエラーもクリックして該当位置にジャンプできるしで快適です。
ってか軸の秤、ソースファイルは優に120超えてるので、むしろさっさとArduino IDEを卒業すべきだったのかもしれないです。タブ表示大変なことになってたし(笑)。
移行に伴うソースの書き換えは思ったより少なくて済みました。むしろ、inoファイルだとメソッドの前方宣言が必要なケースと不要なケースの違いが不明瞭で、たまに謎のエラーが発生しては一日悩んだ挙げ句前方宣言で解消するという事があって気持ち悪かったんですが、PlatformIOだと基本的に必ず前方宣言しなければならない(C言語の基本的なルール通り)なのでわかりやすいですし、精神衛生上もよろしいです。


いじょ!
というわけで軸の秤、ファームウェアバージョン0.2.0、よろしければお楽しみ下さいー。

この記事のタグ[This article is filed under]: 軸の秤[Mechanical Switch Force Curve Measuring Machine]


この記事はここで終わりです。
読んでいただきありがとうございました。
良かったらシェアしてね!

That's all for this article. Thank you for your reading.
Please share this if you like it!

Twitter | Reddit | Facebook | Pinterest | Pocket

前の記事[Prev Post]

前の記事のアイキャッチ画像

【軸の秤】 version 0.1.1 リリースノート

次の記事[Next Post]

次の記事のアイキャッチ画像

ESP32が落ちた(強制リセット)時にBacktraceから該当コードを調べる