{"name": "Microcontroller Project Library", "version": "1.0.0", "canonical_url": "https://teachthecompany.com/projects/", "publication_rule": "Only published records appear. Verification states remain separate.", "projects": [{"id": "TTC-MCU-001", "slug": "esp32-bme280-planning-starter", "title": "ESP32 + BME280 planning starter", "outcome": "Turn an exact ESP32 board and BME280 breakout into a confirmed pin-and-power plan before generating firmware.", "summary": "A reference-reviewed teaching example for an I2C environmental sensor. The wiring has not been physically tested by Teach the Company, so the prompt first makes the learner identify and confirm their actual board, module, pins, toolchain and electrical limits.", "publication_status": "published", "published_on": "2026-10-04", "updated_on": "2026-10-04", "author": "Finn Andre Hotvedt", "language": "en", "board": "Espressif ESP32-DevKitC V4 example family", "board_revision": "The actual board revision and module marking must be confirmed by the learner.", "toolchain": "Arduino-ESP32 example; exact IDE/CLI and core versions must be confirmed before code is generated.", "logic_level": "3.3 V board logic; confirm the exact breakout and supply before connection.", "power_requirement": "USB-powered development board; sensor current and complete power budget must be checked for the exact parts.", "hardware": [{"quantity": "1", "item": "Development board", "model": "Espressif ESP32-DevKitC V4 example family", "revision": "Confirm the printed board and ESP32 module revision", "purpose": "Runs the firmware and provides the example I2C bus."}, {"quantity": "1", "item": "Environmental sensor breakout", "model": "Adafruit BME280 I2C or SPI breakout", "revision": "Confirm the exact product/revision and pin labels", "purpose": "Measures temperature, humidity and pressure in the teaching example."}, {"quantity": "4", "item": "Jumper wire", "model": "Female-to-female", "revision": "Inspect before use", "purpose": "Carries 3.3 V, ground, SDA and SCL."}, {"quantity": "1", "item": "USB data cable", "model": "Suitable for the exact development board", "revision": "Known data-capable cable", "purpose": "Powers and uploads to the board."}], "wiring": [{"board_pin": "3V3", "module_pin": "VIN", "signal": "Power", "electrical_note": "Example uses 3.3 V so power and logic share the same level; confirm the exact breakout."}, {"board_pin": "GND", "module_pin": "GND", "signal": "Common ground", "electrical_note": "Connect ground before interpreting signal behavior."}, {"board_pin": "GPIO21", "module_pin": "SDI", "signal": "I2C SDA", "electrical_note": "Arduino-ESP32 documentation lists GPIO21 as the generic ESP32 default SDA pin."}, {"board_pin": "GPIO22", "module_pin": "SCK", "signal": "I2C SCL", "electrical_note": "Arduino-ESP32 documentation lists GPIO22 as the generic ESP32 default SCL pin."}], "wiring_diagram_alt": "Reference diagram: ESP32 3V3 to BME280 VIN, GND to GND, GPIO21 to SDI/SDA and GPIO22 to SCK/SCL. Every endpoint must be checked against the labels on the actual boards before connection.", "wiring_note": "Reference-reviewed against the linked Espressif Arduino I2C and Adafruit BME280 pinout documentation. Not physically tested by Teach the Company. Some clones, revisions and other BME280 breakouts differ.", "prompt_version": "1.0.0", "prompt_sha256": "2cb2843c797776af514e06393ea58fc3ce1d6fc11b32dcd090ec30eb8afc910b", "finished_prompt": "You are a careful microcontroller integration assistant. Help me produce a board-specific, testable implementation without guessing my hardware or wiring.\n\nBefore you provide final wiring, firmware, build commands, upload commands or pin-dependent advice, ask me for all of the following:\n1. Exact development board manufacturer, product name, board revision and the marking on the microcontroller/module.\n2. Exact sensor, actuator or breakout manufacturer, model and revision; ask for a clear pin-label photo or official pinout link if the identity is uncertain.\n3. Toolchain and exact version: Arduino IDE/CLI, PlatformIO, ESP-IDF or another named environment, including the selected board package and target.\n4. My actual proposed connection for every wire: board pin, module pin and signal name. Do not replace this with a typical pinout.\n5. Power source, supply voltage, logic voltage, expected current and whether grounds are already common. Ask about external drivers, pull-ups or level shifting where the hardware can require them.\n6. Intended behavior, timing, communication protocol, expected output and what should happen when the sensor is missing or returns an error.\n7. Existing source files, libraries and upload/debug port, if any.\n\nThen normalize my answers into two short tables:\n- Pin and power map: board pin | module pin | signal | voltage/current note.\n- Build map: board target | framework/toolchain version | libraries | upload/debug method.\n\nCheck the proposed map against the exact board and module documentation. Call out boot/strapping, reserved, input-only, ADC, pull-up, current, voltage and common-ground constraints that apply. Never infer that a similarly named clone has the same pinout. Stop if mains voltage, high current, batteries without suitable protection, unclear grounds or incompatible logic levels are involved.\n\nAsk: \u201cIs this exact pin, power and build map correct? Reply YES, or reply NO with corrections.\u201d Accept short YES/NO quick replies. Do not continue until I confirm YES.\n\nAfter confirmation, provide only what is supported by the confirmed map:\n1. Final BOM with exact models/revisions and required support parts.\n2. Final wiring table plus a concise text diagram.\n3. Complete minimal source code with explicit pin constants and error handling.\n4. Reproducible build and upload steps for the confirmed toolchain.\n5. Expected serial/output evidence and a bounded troubleshooting checklist.\n6. A verification record that separately labels: reference review, build result, upload observation and physical hardware result.\n\nNever report a build, upload or physical test as successful unless I provide the corresponding real result or you actually performed that exact check with an authorized connected tool. Preserve uncertainty and cite the exact documentation used.", "usage_steps": ["Copy or download the finished prompt.", "Paste it into the agent you use for the project.", "Answer with the exact markings, toolchain, real wiring proposal, power information and intended behavior.", "Check the normalized pin/power and build maps; reply YES only when every row matches the physical hardware.", "Generate and build the minimal firmware, then record build, upload and physical results separately."], "observed_results": ["The public prompt and project record passed automated content, route and consistency tests in the Teach the Company source tree.", "No firmware build was run for this adaptable example.", "No upload was observed and no physical ESP32/BME280 assembly was tested by Teach the Company."], "limitations": ["This is a planning and teaching foundation, not a claim that one exact hardware assembly was completed.", "Board clones and BME280 breakouts can use different labels, regulators, pull-ups, addresses and pin arrangements.", "The example covers low-voltage I2C only; it does not authorize mains, high-current or safety-critical work.", "A successful compile does not prove that upload, wiring or sensor behavior works on physical hardware."], "related_lesson_ids": ["TTC-101", "TTC-104", "TTC-114", "TTC-115", "TTC-117"], "references": [{"label": "Teach the Company source on GitHub", "url": "https://github.com/finnandrehotvedt/teach-the-company", "scope": "Open-source application and Docker framework that publishes this project library; not firmware or physical-test evidence."}, {"label": "Teach the Company source on GitLab", "url": "https://gitlab.finnandre.no/finnandrehotvedt/teach-the-company", "scope": "Open-source application and Docker framework mirror with version history; not firmware or physical-test evidence."}, {"label": "Espressif Arduino-ESP32 I2C API", "url": "https://docs.espressif.com/projects/arduino-esp32/en/latest/api/i2c.html", "scope": "Official generic ESP32 Arduino I2C defaults and API behavior."}, {"label": "Espressif ESP32-DevKitC V4 guide", "url": "https://docs.espressif.com/projects/esp-idf/en/latest/esp32/hw-reference/esp32/get-started-devkitc.html", "scope": "Official board overview, header and power guidance; the actual board revision still must be identified."}, {"label": "Adafruit BME280 pinouts", "url": "https://learn.adafruit.com/adafruit-bme280-humidity-barometric-pressure-temperature-sensor-breakout/pinouts", "scope": "Official pin labels, logic/power guidance and I2C address notes for the named breakout."}], "verification": {"prompt_review": "editorially-reviewed", "build": "not-tested", "upload": "not-tested", "wiring": "reference-reviewed", "physical_test": "not-hardware-verified"}, "verification_labels": {"prompt_review": "Editorially reviewed", "build": "Not tested", "upload": "Not observed", "wiring": "Reference-reviewed; not hardware-verified", "physical_test": "Not hardware-verified"}, "video": null, "canonical_url": "https://teachthecompany.com/projects/esp32-bme280-planning-starter/", "markdown_url": "https://teachthecompany.com/projects/esp32-bme280-planning-starter.md", "json_url": "https://teachthecompany.com/projects/esp32-bme280-planning-starter.json", "prompt_download_url": "https://teachthecompany.com/projects/esp32-bme280-planning-starter/prompt.txt"}]}