OpenBlinkが公開されました

# 要約
- [以前の記事](https://qiita.com/uist1idrju3i/items/6b8c4be1c6e7b2f10be6)で作っていたものがオープンソースプロジェクト[OpenBlink](https://github.com/OpenBlink/)として公開されました

***
**以下の内容は、あくまで私見であり、所属先の立場や意見とは一切関係ございません。**
***

# OpenBlinkの概要
- 組み込みソフトウェアの一部分を無線接続かつ短時間でマイコンリセットなしに書き換える
- ウェブブラウザ上で動作する開発環境(WebIDE)
- NordicSemiconductor社製 nRF54L15-DK, nRF52840-DK対応のリファレンス実装
- M5Stack社製 M5StampS3(Espressif ESP32-S3FN8)対応のデモンストレーション実装
- Raytac社製 MDBT50Q-DB-40対応のデモンストレーション実装

## OpenBlink WebIDE概要
- ウェブブラウザ上で動作する開発環境
```mermaid
flowchart LR
  WebIDE -. BluetoothLE .-> マイコン
  subgraph パソコン
    WebIDE
  end
  subgraph 組込機器
    マイコン
  end
```

## OpenBlinkのリファレンス実装
- タスクの部分をBluetoothLE経由で書き換えることが出来る
```mermaid
flowchart TB
  subgraph マイコン
  direction TB
    A <--> D
    B <--> D
    C <--> E
    D <--> E <--> G
    A["タスク１(Ruby)"]
    B["タスク２(Ruby)"]
    C["クリティカル処理(C言語)"]
    D["mruby/c VM"]
    E["リアルタイムOS"]
    G["ハードウェア"]
  end
```

## OpenBlinkのオープンソース化で実現したいこと(個人的な想い)
* あらゆる組み込み機器への搭載により**プログラミング可能な世界**を実現したい
* 多くの方に組み込みプログラミングの楽しさを感じてほしい
  * 優れた開発体験を実現したい
  * 学習・ホビー・製品まで使える開発環境(エコシステム)を実現したい
* 組み込み開発の速度を加速させて、もっといいモノづくりを行うエンジニアの助けとなりたい

## OpenBlinkの開発目標
1. 思いついたら直ぐに・気軽に・実機で試せる「思考速度のプロトタイピング」
    * Rubyのコードを編集・保存すると直ちに実機の動作が変わる仕組み
    * 文字通り瞬く間に世界を変えるために0.1秒以内の書き換え速度が目標
    * マイコンの再起動を伴わない (書換対象以外の処理は継続実行される、例えばBluetoothLE通信は維持されるため無線接続デバッグコンソールの接続も維持される)
1. 誰もが実用的な組み込みプログラミングを行える
    * 専門知識を持ったソフトウェアエンジニアだけでなく、システム設計者やメカ設計者も実製品の挙動を書き換えながら製品の作り込みができるようにしたい
    * 例えば、出荷検査プログラムを作成して生産性や品質向上に役立てる等も考えられる（製品ソフト内に検査用ロジックを組み込む必要も無くなる）
1. エンドユーザ自身が、作成したプログラムを保有するデバイス上で動作させられる「DIYできる価値」を提供可能にする
    * 許可レベルに応じて使用可能なAPI(メソッド)に制限を設けることで安定性と高速性を両立する
    * 自分専用に使いやすくカスタマイズすることが出来るだけでなく、アイデア次第で様々な使い方が出来るようになる（必ずしも機器の全機能へのアクセスを提供するのではなく一定の秩序は必要）


## OpenBlinkの略歴
- 2024年03月〜06月：個人のプロジェクトとして開発を進める
- 2024年〜2025年：勤務先企業の製品に組み込まれて _ViXion Blink_ と命名される
- 2025年03月06日：オープンソースプロジェクト _OpenBlink_ として公開される （福岡県未来ITイニシアティブ合同表彰式にて発表）

```mermaid
flowchart LR
  p1 --> p2
  subgraph 個人開発
    初めて使う開発環境/SoCなので自習しよう --> p1[mruby/cをnRF52832へポーティング]
  end
  subgraph 勤務先企業での開発
    p2[ViXion Blink] --> p3[OpenBlink]
  end
```

## 今後の開発目標
- OpenBlink通信仕様の策定
- ドキュメント類の整備
- バイトコードをLZSS圧縮する
- 非特権レベルでmruby/c VMを実行する
- 「[mruby, mruby/c Common I/O API Guidelines and Community-developed Libraries](https://github.com/mruby/microcontroller-peripheral-interface-guide)」への準拠
- リファレンス実装を整理して既存プロジェクトへの組み込みや他プラットフォームへの移植を行いやすくする
- GitHubの機能を使いこなす(CI/CDなど)

# WebIDE（ウェブブラウザ上で動作するビルド＆転送ツール）
### 作った理由
- ビルド＆転送ツールが一部のPC環境で動作しない環境依存が生じていた
- 開発環境の構築は手間が掛かるので、すべての人に利用してもらうためにはどうすると良いか？→インストール不要で動作するツールを作成しよう
- 学習・ホビー・プロダクション(社会実装)まで通して使える開発ツールが欲しい
- 似たような理由で学生の頃にブラウザベースの組み込み開発環境を作ろうとしていたのでアイデアはあった

### どんな技術を用いて実現したのか？
- ビルド：mrubyコンパイラのmrbcを、EmscriptenでWebAssemblyにする
- 転送：WebBluetoothとJavaScriptを使用する

```mermaid
flowchart LR
  バイトコード -. WebBluetooth .-> マイコン
  subgraph ブラウザ
    Ruby -- mrbc(WebAssembly) --> バイトコード
  end
```

### 次に取り組みたいこと
- ヴィジュアルプログラミング環境(例えば[SmT](https://github.com/gfd-dennou-club/smt-gui/wiki/SmT-developer)など)を利用できるようにしたい
- 生成AIとの連携 (テキストや音声で会話してプログラミングできる等)
- モデルベース開発との連携

# M5 Stamp-S3対応(仮)
### 作った理由
- 学習・ホビー用途にNordicSemiconductor社製のSoCを勧めるのが難しい（価格・入手性・技適・デバッガ(J-Link)など）
- ESP32マイコンの人気が高く、特にM5Stack社の製品は情報量・入手性・技適・周辺機器などのエコシステムを含めても良さそう
- mruby/cにはESP32対応のHALが含まれており、生成AI(ChatGPT o3-mini-high)の補助を借りながら対応した → [この記事](https://qiita.com/uist1idrju3i/items/1c8782c02f00dd317cc4)