ひとりの女性ハードウェア企業の技術スタック
(blog.thea.codes)-
オープンソースのシンセサイザー企業 Winterbloom を運営するエンジニアが、現在使っている技術とツールを紹介
-
最先端を追いかけるのではなく、よく理解しているツールと技術を使って目標を達成
"Lateral thinking with withered technology"
→ (新しい技術ではなく)枯れた技術を活用して楽しさに集中すれば、まったく新しいものを生み出せるという水平思考
→ 現代の Nintendo の技術開発哲学を作り上げた「横井軍平」の言葉:Nintendo の携帯型ゲーム機(ゲームボーイ)や VR ゲームを生み出した人物
- マイクロコントローラー:注力する製品を 2〜3 個選定
→ Microchip SAM D21, D51, D11
→ 3 種類とも USB、柔軟な SERCOM、マルチチャネル 12-bit ADC、高度なタイマーなどをサポート
→ 追加で RP2040(アナログ I/O が不要なとき)、STM32H7(ファームウェア内で音を生成する必要があるとき)も検討中
- ハードウェア設計:オープンソースの電子設計自動化ツール KiCAD を使用
→ 使用中の部品に関する共通シンボル、Footprint、3D モデルの KiCad 用ライブラリを GitHub で共有中
→ 好みの主要部品リストは Notion ページで公開(説明、部品番号、データシート、メーカー、購入リンク、用途)
-
ファームウェア:言語、ライブラリ、ビルドシステム、テストフレームワークなど(以下で項目ごとに紹介)
-
C 言語、GCC、CMSIS
→ 古いが慣れている C 言語を使用
→ Keil/IAR のような有償コンパイラーもあるが、オープンソースの GCC ARM Embedded Toolchain を使用
→ Microchip が提供する HAL は扱いが難しすぎるため、CMSIS ライブラリを直接使い、その上に小さな抽象化を実装
CMSIS は ARM が提供するベンダー非依存のハードウェア抽象化レイヤー
- ファームウェアライブラリ
→ TinyUSB:優れた小型 USB ライブラリ
→ Marco Paland's Printf:マイクロコントローラー向けに最適化された printf 実装
→ libfixmath:固定小数点演算用の小さなライブラリ(固定小数点ユニットのないマイクロコントローラーで有用)
→ µnit:とても小さく便利なテストフレームワーク
- ビルドシステム
→ Python と Ninja でビルド
→ Makefile から始めたが、次第に書きにくくなって変更
- Python ベースのツール群
→ wintertools という repo で一元管理
→ ファームウェア/ハードウェア関連のビルド/テストを支援するスクリプト集
- CircuitPython
→ 一部の製品ではカスタムファームウェアを使わず、マイクロコントローラー教育向けに使われる CircuitPython を利用
→ 顧客がカスタマイズしやすい
→ ファームウェア/ソフトウェア開発をより簡単にしてくれる
→ Adafruit が運営する素晴らしいコミュニティがある
- ドキュメント & ユーザーガイド
→ Markdown で作成。MkDocs で静的 Web ページにビルドし、GitHub Pages でホスティング
→ Bulma CSS フレームワークを利用
→ シンプルにするため Sass/LESS などは使わない
- JavaScript
→ 複雑すぎる Node.js エコシステムは意図的に避けた
→ 普通の JavaScript とモジュール、クラス、アロー関数、Canvas、WebMIDI、TypedArray などを使用
→ 将来的には Deno に期待
2件のコメント
すごい……一人であれをやるなんて……
上の記事とタイトルは似ていますが、ハードウェアスタートアップであるぶん話がまったく違っていて、面白く読みました。