From 3d9503d17bf604fa0c2e2c2ee12c81cfe3d41b2d Mon Sep 17 00:00:00 2001 From: Bot Date: Sun, 7 Jun 2026 11:27:54 +0530 Subject: [PATCH 1/2] Add I2C Environmental Sensor Module tutorial for #602 --- .../i2c-environmental-sensor-module.mdx | 151 ++++++++++++++++++ 1 file changed, 151 insertions(+) create mode 100644 docs/tutorials/i2c-environmental-sensor-module.mdx diff --git a/docs/tutorials/i2c-environmental-sensor-module.mdx b/docs/tutorials/i2c-environmental-sensor-module.mdx new file mode 100644 index 00000000..cbaef6ed --- /dev/null +++ b/docs/tutorials/i2c-environmental-sensor-module.mdx @@ -0,0 +1,151 @@ +--- +title: Building an I2C Environmental Sensor Module +description: Learn how to design a custom I2C Environmental Sensor Module with a BME280 sensor, optional OLED display, and a pin header using tscircuit. +--- + +## Overview + +In this tutorial, we will build a custom I2C environmental sensor module. This board will include: +- A **BME280** sensor for measuring temperature, humidity, and pressure. +- **I2C pull-up resistors** for proper communication. +- An **Optional OLED display** connection to visualize the sensor readings. +- A **Pin header** to expose the I2C pins (VCC, GND, SDA, SCL) for an external microcontroller. + +import TscircuitIframe from "@site/src/components/TscircuitIframe" + +## Step 1: Complete Circuit Design + +We will begin by capturing the schematic and layout in a single component. Our circuit needs the BME280 sensor, I2C pull-up resistors, a 4-pin header for external connections, and optionally, a generic 4-pin I2C OLED display footprint. + + { + return ( + + {/* 4-Pin Header for external connection */} + + {/* VCC, GND, SDA, SCL from Pin Header */} + + + + + + {/* BME280 Sensor Integration */} + + + {/* I2C Pull-up Resistors */} + + + + + + + + + + {/* Optional OLED Display Header */} + + + ) +} +`} /> + +## Step 2: BME280 Integration + +The BME280 is a popular 8-pin LGA environmental sensor. In our schematic: +- **VDD** and **VDDIO** are connected to \`net.VCC\`. +- **GND** is connected to \`net.GND\`. +- **CSB** is tied HIGH (\`net.VCC\`) to select the I2C interface. +- **SDO** is tied LOW (\`net.GND\`) to set the I2C address to \`0x76\` (tying it to VCC sets it to \`0x77\`). +- **SDI** and **SCK** are connected to the \`SDA\` and \`SCL\` lines respectively. + +## Step 3: PCB Layout Guidance + +For the layout: +- Keep the I2C traces (\`SDA\` and \`SCL\`) parallel and as short as possible. +- The \`4.7k\` pull-up resistors (\`R1\` and \`R2\`) should be placed relatively close to the sensor. +- The 4-pin header \`J1\` serves as our external interface, make sure it is easily accessible at the edge of the board. +- If you're using the optional OLED display, \`J2\` gives you a convenient header to plug a 0.96" SSD1306 OLED display directly into the board. + +## Step 4: Microcontroller Code Examples + +To test your sensor module, you can use any I2C-capable microcontroller, such as an Arduino. Wire your module to your Arduino (VCC to 3.3V, GND to GND, SDA to A4, SCL to A5) and use the [Adafruit BME280 Library](https://github.com/adafruit/Adafruit_BME280_Library). + +\`\`\`cpp +#include +#include +#include + +// BME280 I2C address is 0x76 based on our wiring (SDO to GND) +#define BME280_ADDRESS 0x76 + +Adafruit_BME280 bme; // I2C + +void setup() { + Serial.begin(9600); + while(!Serial); // wait for serial monitor + + unsigned status = bme.begin(BME280_ADDRESS); + if (!status) { + Serial.println("Could not find a valid BME280 sensor, check wiring!"); + while (1); + } +} + +void loop() { + Serial.print("Temperature = "); + Serial.print(bme.readTemperature()); + Serial.println(" *C"); + + Serial.print("Pressure = "); + Serial.print(bme.readPressure() / 100.0F); + Serial.println(" hPa"); + + Serial.print("Humidity = "); + Serial.print(bme.readHumidity()); + Serial.println(" %"); + + Serial.println(); + delay(2000); +} +\`\`\` + +This code snippet initializes the I2C interface and prints out temperature, pressure, and humidity readings to the Serial Monitor every 2 seconds. From 2adc4682daf93eba3ee016cbd538e94c83177e61 Mon Sep 17 00:00:00 2001 From: Bot Date: Mon, 8 Jun 2026 10:12:35 +0530 Subject: [PATCH 2/2] fix: unescape backticks in MDX code blocks --- .../i2c-environmental-sensor-module.mdx | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/docs/tutorials/i2c-environmental-sensor-module.mdx b/docs/tutorials/i2c-environmental-sensor-module.mdx index cbaef6ed..1aa37ef7 100644 --- a/docs/tutorials/i2c-environmental-sensor-module.mdx +++ b/docs/tutorials/i2c-environmental-sensor-module.mdx @@ -91,25 +91,25 @@ export default () => { ## Step 2: BME280 Integration The BME280 is a popular 8-pin LGA environmental sensor. In our schematic: -- **VDD** and **VDDIO** are connected to \`net.VCC\`. -- **GND** is connected to \`net.GND\`. -- **CSB** is tied HIGH (\`net.VCC\`) to select the I2C interface. -- **SDO** is tied LOW (\`net.GND\`) to set the I2C address to \`0x76\` (tying it to VCC sets it to \`0x77\`). -- **SDI** and **SCK** are connected to the \`SDA\` and \`SCL\` lines respectively. +- **VDD** and **VDDIO** are connected to `net.VCC`. +- **GND** is connected to `net.GND`. +- **CSB** is tied HIGH (`net.VCC`) to select the I2C interface. +- **SDO** is tied LOW (`net.GND`) to set the I2C address to `0x76` (tying it to VCC sets it to `0x77`). +- **SDI** and **SCK** are connected to the `SDA` and `SCL` lines respectively. ## Step 3: PCB Layout Guidance For the layout: -- Keep the I2C traces (\`SDA\` and \`SCL\`) parallel and as short as possible. -- The \`4.7k\` pull-up resistors (\`R1\` and \`R2\`) should be placed relatively close to the sensor. -- The 4-pin header \`J1\` serves as our external interface, make sure it is easily accessible at the edge of the board. -- If you're using the optional OLED display, \`J2\` gives you a convenient header to plug a 0.96" SSD1306 OLED display directly into the board. +- Keep the I2C traces (`SDA` and `SCL`) parallel and as short as possible. +- The `4.7k` pull-up resistors (`R1` and `R2`) should be placed relatively close to the sensor. +- The 4-pin header `J1` serves as our external interface, make sure it is easily accessible at the edge of the board. +- If you're using the optional OLED display, `J2` gives you a convenient header to plug a 0.96" SSD1306 OLED display directly into the board. ## Step 4: Microcontroller Code Examples To test your sensor module, you can use any I2C-capable microcontroller, such as an Arduino. Wire your module to your Arduino (VCC to 3.3V, GND to GND, SDA to A4, SCL to A5) and use the [Adafruit BME280 Library](https://github.com/adafruit/Adafruit_BME280_Library). -\`\`\`cpp +```cpp #include #include #include @@ -146,6 +146,7 @@ void loop() { Serial.println(); delay(2000); } -\`\`\` +``` This code snippet initializes the I2C interface and prints out temperature, pressure, and humidity readings to the Serial Monitor every 2 seconds. +