• Skip to main content
  • Skip to primary sidebar

RNTLab.com

The Ultimate Shortcut to Learn Electronics and Programming with Open Source Hardware and Software

  • Courses
  • Forum
    • Forum
    • Ask Question
  • Shop
  • Account
  • Blog
  • Login

Communicates with an ESP32 C6 mini and the coding for I2C pins.

Q&A Forum › Category: ESP32 › Communicates with an ESP32 C6 mini and the coding for I2C pins.
0 Vote Up Vote Down
David Fenner asked 1 month ago

Hi all,
Could someone help with the following:
I have a breakout board fitted with AHT20 and BMP280 sensors. This board communicates with an ESP32 C6 mini therefore I have selected pin 1 and pin 2 as my I2C pins.
My question is, how do I amend my code below, so both sensors can be controlled by I2C using my ESP32 C6 MINI board?
FYI, the addresses of the sensors are:0x38 and 0x77.
#include <WiFi.h>
#include <WebServer.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
#include <Adafruit_AHTX0.h>
 
#define I2C_SDA 1
#define I2C_SCL 2
 
 
Adafruit_BMP280 bmp;
Adafruit_AHTX0 aht;
 
// Replace with your network credentials
const char* ssid = “xxxx”;  // Enter SSID here
const char* password = “xxxxx”;  //Enter Password here
WebServer server(80);            
 
void setup() {
   Serial.begin(9600); // setting next to band rate; Needs to be set to New Line to display correct
  while (!Serial); // Wait for Serial Monitor to open
 
  // Initialize AHT20 sensor
  if (!aht.begin()) {
    Serial.println(“Failed to initialize AHT20 sensor!”);
    while (1);
  }
 Serial.println(“AHT20 sensor initialized.”);
 
  // Initialize BMP280 sensor
  if (!bmp.begin(0x77)) { // Default I²C address for BMP280 is 0x76
    Serial.println(“Failed to initialize BMP280 sensor!”);
    while (1);
  }
  Serial.println(“BPM280 sensor initialized.”);
 
  // We start by connecting to a WiFi network
 
  Serial.println();
  Serial.println();
  Serial.print(“Connecting to “);
  Serial.println(ssid);
 
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(“.”);
  }
  Serial.println(“”);
  Serial.println(“WiFi connected.”);
  Serial.println(“IP address: “);
  Serial.println(WiFi.localIP());
 
  server.on(“/”, handle_OnConnect);
  server.onNotFound(handle_NotFound);
 
 server.begin();
  Serial.println(“HTTP server started”);
 
}
void loop() {
 
 server.handleClient();
}
 
void handle_OnConnect() {
 // Read data from AHT20
  sensors_event_t humidity, temp;
  aht.getEvent(&humidity, &temp);
 
  // Read data from BMP280
  float pressure = bmp.readPressure() / 100.0F; // Convert to hPa
 
 float temperature = temp.temperature;
float humidity1 = humidity.relative_humidity; // shows an error
 
  //delay(1000); // Added by me so have delay beween reads
  server.send(200, “text/html”, SendHTML(temperature,humidity1,pressure));
}
 
void handle_NotFound(){
  server.send(404, “text/plain”, “Not found”);
}
 
String SendHTML(float temperature,float humidity1,float pressure){
  String ptr = “<!DOCTYPE html>”;
  ptr +=”<html>”;
  ptr +=”<head>”;
  ptr +=”<title>ESP32 Weather Station</title>”;
  ptr +=”<meta name=’viewport’ content=’width=device-width, initial-scale=1.0′>”;
  ptr +=”<link href=’https://fonts.googleapis.com/css?family=Open+Sans:300,400,600&#8242; rel=’stylesheet’>”;
  ptr +=”<style>”;
  ptr +=”html { font-family: ‘Open Sans’, sans-serif; display: block; margin: 0px auto; text-align: center;color: #444444;}”;
  ptr +=”body{margin: 0px;} “;
  ptr +=”h1 {margin: 50px auto 30px;} “;
  ptr +=”.side-by-side{display: table-cell;vertical-align: middle;position: relative;}”;
  ptr +=”.text{font-weight: 600;font-size: 19px;width: 200px;}”;
  ptr +=”.reading{font-weight: 300;font-size: 50px;padding-right: 25px;}”;
  ptr +=”.temperature .reading{color: #F29C1F;}”;
  ptr +=”.humidity .reading{color: #3B97D3;}”;
  ptr +=”.pressure .reading{color: #26B99A;}”;
 
  ptr +=”.superscript{font-size: 17px;font-weight: 600;position: absolute;top: 10px;}”;
  ptr +=”.data{padding: 10px;}”;
  ptr +=”.container{display: table;margin: 0 auto;}”;
  ptr +=”.icon{width:65px}”;
  ptr +=”</style>”;
  ptr +=”</head>”;
  ptr +=”<body>”;
  ptr +=”<h1>ESP32 Weather Station</h1>”;
 
  ptr +=”<div class=’container’>”;
  ptr +=”<div class=’data temperature’>”;
  ptr +=”<div class=’side-by-side icon’>”;
  ptr +=”<svg enable-background=’new 0 0 19.438 54.003’height=54.003px id=Layer_1 version=1.1 viewBox=’0 0 19.438 54.003’width=19.438px x=0px xml:space=preserve xmlns=http://www.w3.org/2000/svg xmlns:xlink=http://www.w3.org/1999/xlink y=0px><g><path d=’M11.976,8.82v-2h4.084V6.063C16.06,2.715,13.345,0,9.996,0H9.313C5.965,0,3.252,2.715,3.252,6.063v30.982″;
  ptr +=”C1.261,38.825,0,41.403,0,44.286c0,5.367,4.351,9.718,9.719,9.718c5.368,0,9.719-4.351,9.719-9.718″;
  ptr +=”c0-2.943-1.312-5.574-3.378-7.355V18.436h-3.914v-2h3.914v-2.808h-4.084v-2h4.084V8.82H11.976z M15.302,44.833″;
  ptr +=”c0,3.083-2.5,5.583-5.583,5.583s-5.583-2.5-5.583-5.583c0-2.279,1.368-4.236,3.326-5.104V24.257C7.462,23.01,8.472,22,9.719,22″;
  ptr +=”s2.257,1.01,2.257,2.257V39.73C13.934,40.597,15.302,42.554,15.302,44.833z’fill=#F29C21 /></g></svg>”;
  ptr +=”</div>”;
  ptr +=”<div class=’side-by-side text’>Temperature</div>”;
  ptr +=”<div class=’side-by-side reading’>”;
  ptr += temperature;
  ptr +=”<span class=’superscript’>&deg;C</span></div>”;
  ptr +=”</div>”;
  ptr +=”<div class=’data humidity’>”;
  ptr +=”<div class=’side-by-side icon’>”;
  ptr +=”<svg enable-background=’new 0 0 29.235 40.64’height=40.64px id=Layer_1 version=1.1 viewBox=’0 0 29.235 40.64’width=29.235px x=0px xml:space=preserve xmlns=http://www.w3.org/2000/svg xmlns:xlink=http://www.w3.org/1999/xlink y=0px><path d=’M14.618,0C14.618,0,0,17.95,0,26.022C0,34.096,6.544,40.64,14.618,40.64s14.617-6.544,14.617-14.617″;
  ptr +=”C29.235,17.95,14.618,0,14.618,0z M13.667,37.135c-5.604,0-10.162-4.56-10.162-10.162c0-0.787,0.638-1.426,1.426-1.426″;
  ptr +=”c0.787,0,1.425,0.639,1.425,1.426c0,4.031,3.28,7.312,7.311,7.312c0.787,0,1.425,0.638,1.425,1.425″;
  ptr +=”C15.093,36.497,14.455,37.135,13.667,37.135z’fill=#3C97D3 /></svg>”;
  ptr +=”</div>”;
  ptr +=”<div class=’side-by-side text’>Humidity</div>”;
  ptr +=”<div class=’side-by-side reading’>”;
  ptr +=(int)humidity1;
  ptr +=”<span class=’superscript’>%</span></div>”;
  ptr +=”</div>”;
  ptr +=”<div class=’data pressure’>”;
  ptr +=”<div class=’side-by-side icon’>”;
  ptr +=”<svg enable-background=’new 0 0 40.542 40.541’height=40.541px id=Layer_1 version=1.1 viewBox=’0 0 40.542 40.541’width=40.542px x=0px xml:space=preserve xmlns=http://www.w3.org/2000/svg xmlns:xlink=http://www.w3.org/1999/xlink y=0px><g><path d=’M34.313,20.271c0-0.552,0.447-1,1-1h5.178c-0.236-4.841-2.163-9.228-5.214-12.593l-3.425,3.424″;
  ptr +=”c-0.195,0.195-0.451,0.293-0.707,0.293s-0.512-0.098-0.707-0.293c-0.391-0.391-0.391-1.023,0-1.414l3.425-3.424″;
  ptr +=”c-3.375-3.059-7.776-4.987-12.634-5.215c0.015,0.067,0.041,0.13,0.041,0.202v4.687c0,0.552-0.447,1-1,1s-1-0.448-1-1V0.25″;
  ptr +=”c0-0.071,0.026-0.134,0.041-0.202C14.39,0.279,9.936,2.256,6.544,5.385l3.576,3.577c0.391,0.391,0.391,1.024,0,1.414″;
  ptr +=”c-0.195,0.195-0.451,0.293-0.707,0.293s-0.512-0.098-0.707-0.293L5.142,6.812c-2.98,3.348-4.858,7.682-5.092,12.459h4.804″;
  ptr +=”c0.552,0,1,0.448,1,1s-0.448,1-1,1H0.05c0.525,10.728,9.362,19.271,20.22,19.271c10.857,0,19.696-8.543,20.22-19.271h-5.178″;
  ptr +=”C34.76,21.271,34.313,20.823,34.313,20.271z M23.084,22.037c-0.559,1.561-2.274,2.372-3.833,1.814″;
  ptr +=”c-1.561-0.557-2.373-2.272-1.815-3.833c0.372-1.041,1.263-1.737,2.277-1.928L25.2,7.202L22.497,19.05″;
  ptr +=”C23.196,19.843,23.464,20.973,23.084,22.037z’fill=#26B999 /></g></svg>”;
  ptr +=”</div>”;
  ptr +=”<div class=’side-by-side text’>Pressure</div>”;
  ptr +=”<div class=’side-by-side reading’>”;
  ptr +=(int)pressure;
  ptr +=”<span class=’superscript’>hPa</span></div>”;
 
  ptr +=”</div>”;
  ptr +=”</div>”;
  ptr +=”</body>”;
  ptr +=”</html>”;
  return ptr;
 
}
 
 

6 Answers
0 Vote Up Vote Down
Sara Santos Staff answered 1 month ago

Hi.
Are both sensors connected to the same pins?
I recommend taking a look at this I2C tutorial to see how to use multiple peripherals on the same I2C bus: https://randomnerdtutorials.com/esp32-i2c-communication-arduino-ide/
 
Regards,
Sara

0 Vote Up Vote Down
David Fenner answered 4 weeks ago

Hi Sara,
Yes both sensors use the same IC2 Pins. I have used a Esp32 WROOM-32 using the default pins 21 / 22 and all works fine. I have used your information link  in the passed with the C6 mini when just using one sensor per board and all worked OK. However,  I can not get my head around amend my code for this new configuration, so any help would be most appreciated.
Best Regards 

0 Vote Up Vote Down
Sara Santos Staff answered 4 weeks ago

Hi.
 
The only thing I think you have missing is initializing the I2C on the custom pins.
Add the following line before initializing the sensors and after declaring the pins:

Wire.begin(I2C_SDA, I2C_SCL);

Let me know if this helps.

 
Regards,
Sara

0 Vote Up Vote Down
David Fenner answered 4 weeks ago

Hi Sara.
I have updated my code as you suggested and it works when the board is plugged into the laptop, the Arduino IDE 2.3.6 programme  monitor shows that all is connected, initialized a IP is shown for the web sever and it works on my phone. Now when you unplug from the laptop and power the board externally the programme stops working in the respect there is no web site response Ie “This site can’t be reached” Looking at my App “who’s on my wifi” the IP address disappears of the list at this point.
 
Updated Code:-
#define I2C_SDA 1
#define I2C_SCL 2
  
Adafruit_BMP280 bmp;
Adafruit_AHTX0 aht;
 
// Replace with your network credentials
const char* ssid = “xxxx”;  // Enter SSID here
const char* password = “xxxxx”;  //Enter Password here
WebServer server(80);            
 
void setup() {
   Serial.begin(9600); // setting next to band rate; Needs to be set to New Line to display correct
  while (!Serial); // Wait for Serial Monitor to open

Wire.begin(I2C_SDA, I2C_SCL);

  // Initialize AHT20 sensor
 
 

0 Vote Up Vote Down
Sara Santos Staff answered 4 weeks ago

Hi.
Does your board change IP address whenever it is restarted?
It may be related to that… It might get a new IP that you don’t know of… If that’s the case, you need to set a static IP address for your board.
 
Or, if the board is too far away from the router, it might not be able to get wi-fi signal to connect to your network.
 
Regards,
Sara

0 Vote Up Vote Down
William Lucid answered 3 weeks ago

Hi David,

Does the ESP32 C6 mini; power LED stay on when connected to your external power source?  Is your external power from a cell phone, power bank?  Power banks can shut down if not enough current is being used. 

William

Primary Sidebar

Login to Ask or Answer Questions

This Forum is private and it’s only available for members enrolled in our Courses.

Login »

Latest Course Updates

  • [eBook Updated] Smart Home with Raspberry Pi, ESP32, and ESP8266 Version 1.7 November 28, 2025
  • [eBook Updated] Smart Home with Raspberry Pi, ESP32, and ESP8266 V1.6 September 9, 2025

You must be logged in to view this content.

Contact Support - Refunds - Privacy - Terms - MakerAdvisor.com - Member Login

Copyright © 2013-2025 · RandomNerdTutorials.com · All Rights Reserved

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.