Embedded Systems & IoT

SkillAI & models

Embedded systems firmware, microcontrollers (ESP32, STM32, Arduino, Raspberry Pi), RTOS (FreeRTOS, Zephyr), IoT protocols (MQTT, CoAP, BLE), bare-metal C/C++, and hardware peripheral interfaces (I2C, SPI, UART, GPIO). Use when developing firmware, working with microcontrollers, or building IoT devices.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Embedded Systems & IoT skill

What this skill tells your AI

The instructions your AI receives, as published by travisjneuman/.claude in skills/embedded-iot/SKILL.md and read by ahel’s review.

Microcontroller Platforms

PlatformBest ForLanguageIDE
ESP32WiFi/BLE IoT devicesC/C++, MicroPythonPlatformIO, Arduino IDE
STM32Industrial, real-timeC/C++STM32CubeIDE, PlatformIO
ArduinoPrototyping, learningC++ (Arduino)Arduino IDE, PlatformIO
Raspberry Pi PicoRP2040, dual-coreC/C++, MicroPythonThonny, VS Code
nRF52BLE-focused IoTC, ZephyrnRF Connect SDK

Firmware Patterns

GPIO & Peripherals

// 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 Communication

// 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 Protocols

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);

Key IoT Protocols

ProtocolTransportUse Case
MQTTTCP/TLSPub/sub messaging, telemetry
CoAPUDP/DTLSConstrained devices, REST-like
BLERadioShort-range, low power
LoRaWANRadioLong-range, low data rate
MatterIPSmart home interoperability

Best Practices

  • Power management: Deep sleep modes, wake-on-interrupt, duty cycling
  • Watchdog timers: Always enable, reset periodically, catch firmware hangs
  • OTA updates: Dual partition scheme, rollback on boot failure, signature verification
  • Memory: Static allocation preferred, avoid heap fragmentation, use memory pools
  • Testing: Hardware-in-the-loop (HIL), mock hardware interfaces for unit tests

Signals

GitHub stars
97
Forks
22
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
embedded-iot
Source
github.com/travisjneuman/.claude