コンテンツにスキップ

プログラム可能なセンサー

プログラム可能なセンサー とは、シミュレーションの実行中にスライダーから読み値を操作できる、通常のカスタムチップです。アラームしきい値をテストするためにppm値をスイープするCO2センサー。ファームウェアの動作を確認するために85°Cを超えて押し上げる温度プローブ。手で暗くする光センサー。

チップ自体は何も変わりません。はじめにで説明されているのと同じWebAssemblyコンポーネントです。このページで追加されるのは、再コンパイルや再起動をせずに、スライダー値を実行中のチップに運ぶ配線です。

すべてのプログラム可能なセンサーは、これら3つの部品で構成され、それ以外はありません。

1. 属性 が調整可能な値を保持します。

S.ppm = vx_attr_register("ppm", 1000);

2. chip.json の controls エントリ が画面上にスライダーを配置します。これは 同じIDで 属性を指定します:

"controls": [
{ "id": "ppm", "label": "CO2 (ppm)", "type": "range",
"min": 400, "max": 5000, "step": 10, "unit": "ppm" }
]

3. コードが属性を再読み取りする たびに、値が必要になります:

double ppm = vx_attr_read(S.ppm); /* 現在のスライダーの値 */

Run を押し、チップをクリックすると、次のように表示されます:

実行中のCO2センサーチップのライブコントロールパネル: 400〜5000 ppmのスライダーが1つ

この3番目のポイントが、人々がつまずく点です。chip_setup() で属性を一度読み取って変数にキャッシュすると、スライダーは表示され、動いても、まったく何も起こりません。vx_attr_read は安価です。タイマーコールバック、I2C読み取りハンドラー、値が実際に必要な場所ならどこでも呼び出してください。

2つのシミュレーションエンジンは異なる経路をたどり、障害モードも異なるため、理解する価値があります。

ステップ 何が起こるか
スライダーをドラッグする パネルが、このチップインスタンスをキーとしてセンサー更新レジストリに書き込みます
ブラウザエンジン (AVR、RP2040、ブラウザ内ESP32) 値は、実行中のWebAssemblyが vx_attr_read のたびに読み取る属性マップに直接書き込まれます。メッセージパッシングも再起動もありません
QEMU 上の ESP32 チップはワーカー内にあるため、値は属性更新としてそこに転送され、そこで適用されます
250 ms の静寂ごと 最後の値がコンポーネントの保存済みプロパティにミラーリングされるため、スライダー位置は保存と再読み込み後も維持されます

知っておくべき2つの結果:

  • 「適用」ステップはありません。 次の vx_attr_read は新しい値を返します。チップが属性を1秒に1回しか読み取らない場合、スライダーが目に見えて何かを行うまでにそのくらいの時間がかかります。
  • パネルはインスタンスごとです。 1つのキャンバス上の同じチップのコピーが2つある場合、コントロールは各インスタンスの独自のマニフェストから合成されるため、スライダーは独立しています。

設計時のデフォルトとライブ値

Section titled “設計時のデフォルトとライブ値”

これらは異なる画面であり、人々はこれらを混同します:

  • 停止中: チップを右クリックして部品インスペクターを開きます。そこで設定したものは、属性の保存済みデフォルト、つまりチップが起動するときの値です。
  • 実行中: チップをクリックします。スライダーパネルが開きます。そこで設定したものは、即座に適用されるライブ値です。

すべてのパターンには、ギャラリーに実行可能な回路があります。Run を押して、チップをクリックしてください:

例 何を学ぶか
CO2センサー (ライブスライダー) アナログのレシピ: スライダーから電圧へ、analogRead へ
I2C環境センサー (ライブスライダー) 0x44 のレジスタマップの背後にある2つのスライダー
モーションセンサー (シミュレートボタン) button コントロール: 瞬間トリガーとホールドスライダー
ナイトライト (対数ルクススライダー) scale: "log": 1つのスライダーで5桁のルクス、ランプは50 lx未満でトリップ
SPI温度計 (ライブスライダー) SPIスレーブタイミング: CSの立ち下がりエッジでラッチ
UART空気センサー (ライブスライダー) SoftwareSerialへのプッシュ型シリアルセンサー