# 実例 1 — 温室の温度制御を Python で書いて C に翻訳する

第 09 章「組み込みを作る ── Pythonで考え、Claudeに翻訳させる」の主張を裏付ける。

## 章のどの主張に対応するか

> ESP32 で温度センサ判定の開発:
> - C++ で書き始める従来法: **2 週間**
> - Python で検証してから MicroPython に転送する新法: **2 日**
> - **7 倍速い**

> 実機焼き直しサイクル:
> - C++ + 書き込み: **約 2 分**
> - MicroPython 転送: **約 5 秒**
> - Python シミュレーション: **約 0.1 秒**

(章本文「実例: 数字で見る」より)

実測 ── 4 時間ぶん(240 分)のシミュレーションが **0.3 ms**(0.0003 秒)。
実機焼き直し 2 分と比べて **約 400,000 倍速い**。

## やること

温室のヒーター制御 ── ESP32 + 温度センサ + リレー出力 ── を、
**実機を触る前に Python で完全に検証する**。

1. **ロジックを Python で書く**: `sensor_logic.py` (HeaterController)
2. **シミュレーションする**: `simulate.py` で 4 時間ぶんの温度推移を生成
   - 仕様: 目標 22℃ ±1.5℃ ヒステリシス、連続 30 分稼働で強制 5 分休憩、
     センサ 5 分無応答でフェイルセーフ
3. **ユニットテストする**: ヒステリシス境界 / アラーム発火 / 状態維持
4. **C に翻訳する**: `sensor_logic.c` (Claude が Python を読んで翻訳)
5. **ビルドして確認する**: gcc で C コードがコンパイル通ることを確認

実機 (ESP32 + ESP-IDF) に焼くのは、ロジックが完全に動いてから。
**実機での試行錯誤がほぼゼロ**になる。

## 構成

```
example-1/
├── README.md
├── sensor_logic.py    ── 温度制御ロジック(HeaterController クラス)
├── sensor_logic.c     ── 同じロジックの C 実装(ESP32 移植イメージ)
├── simulate.py        ── 熱モデル + 4 時間シミュレーション
├── Makefile
├── results.md
└── out/
    ├── summary.json    ── シミュレーション集計
    ├── trace.csv       ── 1 分ごとの温度・ヒーター状態
    └── ascii-chart.txt ── 温度推移の ASCII プロット
```

## 実行

```bash
make clean && make all          # シミュレーション + ユニットテスト
make compile-c                  # C コードがコンパイル通ることを確認
```

## なぜこれが「実例」になるのか

組み込み開発が遅い理由は、**実機ループの遅さ**にある:

```
コード書く → コンパイル → ESP32 に書き込み → 起動待ち → 動作確認 → デバッグ
   ↑__________________________________________ 1 サイクル 2 分 _______________|
```

これを 1 日 50 回繰り返したら、**コンパイルと書き込みだけで 100 分**。

Python に置き換えると:

```
コード書く → python3 simulate.py → 結果を見る
   ↑__________ 1 サイクル 0.3 ms _______|
```

400,000 倍速い。**バグの大半は実機を触る前に潰せる**。

ロジックが完全に動いたら、Claude に「これを ESP-IDF で動く C に翻訳して」
と頼む。返ってきた C をコンパイルして、実機に書き込む。
**移植時のバグ混入はほぼゼロ**(同じ判定式、同じ状態遷移を辿るため)。

これが章で言う「**Python で考えて、Claude に C に翻訳させる**」の
最小実演。
