embedded-iot について
組み込みシステムや IoT のファームウェア開発者向けのリファレンススキルです。主要なマイコンプラットフォームに加え、ファームウェアのパターンや通信プロトコル、実践的な開発指針をまとめています。
主な機能
- 01マイコンプラットフォームの概要
- 02GPIO と I2C のパターン
- 03FreeRTOS タスクの例
- 04IoT プロトコルの比較
- 05ファームウェアの信頼性対策
活用シーン
- 01IoT デバイスのプラットフォーム選定
- 02センサーや周辺機器のコード参照
- 03MQTT や BLE 通信の計画
- 04ファームウェアのテストと更新方法の確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ travisjneuman/ .claude --skill embedded-iotインストール後、Claude Code で/embedded-iotを入力して読み込まれたか確認します。
詳細
組み込みシステムとIoT
マイクロコントローラープラットフォーム
| プラットフォーム | 最適な用途 | 言語 | IDE |
|---|---|---|---|
| ESP32 | WiFi/BLE IoT デバイス | C/C++, MicroPython | PlatformIO, Arduino IDE |
| STM32 | 産業用途、リアルタイム処理 | C/C++ | STM32CubeIDE, PlatformIO |
| Arduino | プロトタイピング、学習 | C++ (Arduino) | Arduino IDE, PlatformIO |
| Raspberry Pi Pico | RP2040、デュアルコア | C/C++, MicroPython | Thonny, VS Code |
| nRF52 | BLE に特化した IoT | C, Zephyr | nRF Connect SDK |
ファームウェアのパターン
GPIO と周辺機器
// ESP-IDF GPIO example
gpio_config_t io_conf = {
.pin_bit_mask = (1ULL << GPIO_NUM_2),
.mode = GPIO_MODE_OUTPUT,
.pull_up_en = GPIO_PULLUP_DISABLE,
.pull_down_en = GPIO_PULLDOWN_DISABLE,
.intr_type = GPIO_INTR_DISABLE,
};
gpio_config(&io_conf);
gpio_set_level(GPIO_NUM_2, 1);
I2C 通信
// Read sensor via I2C
i2c_cmd_handle_t cmd = i2c_cmd_link_create();
i2c_master_start(cmd);
i2c_master_write_byte(cmd, (SENSOR_ADDR << 1) | I2C_MASTER_WRITE, true);
i2c_master_write_byte(cmd, REG_TEMP, true);
i2c_master_start(cmd);
i2c_master_write_byte(cmd, (SENSOR_ADDR << 1) | I2C_MASTER_READ, true);
i2c_master_read(cmd, data, 2, I2C_MASTER_LAST_NACK);
i2c_master_stop(cmd);
i2c_master_cmd_begin(I2C_NUM_0, cmd, pdMS_TO_TICKS(1000));
i2c_cmd_link_delete(cmd);
RTOS(FreeRTOS)
// Task creation
void sensor_task(void *pvParameters) {
while (1) {
float temp = read_temperature();
xQueueSend(data_queue, &temp, portMAX_DELAY);
vTaskDelay(pdMS_TO_TICKS(1000));
}
}
xTaskCreate(sensor_task, "sensor", 4096, NULL, 5, NULL);
// Mutex for shared resources
SemaphoreHandle_t spi_mutex = xSemaphoreCreateMutex();
if (xSemaphoreTake(spi_mutex, pdMS_TO_TICKS(100)) == pdTRUE) {
spi_transfer(data);
xSemaphoreGive(spi_mutex);
}
IoT プロトコル
MQTT
// ESP-IDF MQTT client
esp_mqtt_client_config_t mqtt_cfg = {
.broker.address.uri = "mqtt://broker.hivemq.com",
};
esp_mqtt_client_handle_t client = esp_mqtt_client_init(&mqtt_cfg);
esp_mqtt_client_start(client);
esp_mqtt_client_publish(client, "/sensors/temp", "23.5", 0, 1, 0);
主な IoT プロトコル
| プロトコル | トランスポート | 用途 |
|---|---|---|
| MQTT | TCP/TLS | Pub/sub メッセージング、テレメトリー |
| CoAP | UDP/DTLS | 制約のあるデバイス、REST に似た通信 |
| BLE | 無線 | 短距離、低消費電力 |
| LoRaWAN | 無線 | 長距離、低データレート |
| Matter | IP | スマートホームの相互運用性 |
ベストプラクティス
- 電力管理: ディープスリープモード、割り込みによる起動、デューティサイクル制御
- ウォッチドッグタイマー: 常に有効にし、定期的にリセットして、ファームウェアのハングを検出します
- OTA アップデート: デュアルパーティション方式、起動失敗時のロールバック、署名の検証
- メモリ: 静的割り当てを優先し、ヒープの断片化を避け、メモリプールを使用します
- テスト: ハードウェア・イン・ザ・ループ(HIL)、単体テスト用のハードウェアインターフェースのモック
コメント
Markdown 対応