mcpField
E
embedded-iot

embedded-iot

github.com/travisjneuman開発106195 回インストール1 日前に更新
リポジトリ

embedded-iot について

組み込みシステムや IoT のファームウェア開発者向けのリファレンススキルです。主要なマイコンプラットフォームに加え、ファームウェアのパターンや通信プロトコル、実践的な開発指針をまとめています。

主な機能

  1. 01マイコンプラットフォームの概要
  2. 02GPIO と I2C のパターン
  3. 03FreeRTOS タスクの例
  4. 04IoT プロトコルの比較
  5. 05ファームウェアの信頼性対策

活用シーン

  1. 01IoT デバイスのプラットフォーム選定
  2. 02センサーや周辺機器のコード参照
  3. 03MQTT や BLE 通信の計画
  4. 04ファームウェアのテストと更新方法の確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/travisjneuman/.claude --skill embedded-iot

インストール後、Claude Code で/embedded-iotを入力して読み込まれたか確認します。

詳細

組み込みシステムとIoT

マイクロコントローラープラットフォーム

プラットフォーム最適な用途言語IDE
ESP32WiFi/BLE IoT デバイスC/C++, MicroPythonPlatformIO, Arduino IDE
STM32産業用途、リアルタイム処理C/C++STM32CubeIDE, PlatformIO
Arduinoプロトタイピング、学習C++ (Arduino)Arduino IDE, PlatformIO
Raspberry Pi PicoRP2040、デュアルコアC/C++, MicroPythonThonny, VS Code
nRF52BLE に特化した IoTC, ZephyrnRF 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 プロトコル
プロトコルトランスポート用途
MQTTTCP/TLSPub/sub メッセージング、テレメトリー
CoAPUDP/DTLS制約のあるデバイス、REST に似た通信
BLE無線短距離、低消費電力
LoRaWAN無線長距離、低データレート
MatterIPスマートホームの相互運用性

ベストプラクティス

  • 電力管理: ディープスリープモード、割り込みによる起動、デューティサイクル制御
  • ウォッチドッグタイマー: 常に有効にし、定期的にリセットして、ファームウェアのハングを検出します
  • OTA アップデート: デュアルパーティション方式、起動失敗時のロールバック、署名の検証
  • メモリ: 静的割り当てを優先し、ヒープの断片化を避け、メモリプールを使用します
  • テスト: ハードウェア・イン・ザ・ループ(HIL)、単体テスト用のハードウェアインターフェースのモック

コメント