ESP32 I2C mapping

Durassel
Posts: 4
Joined: Thu Dec 21, 2017 1:12 pm

ESP32 I2C mapping

Postby Durassel » Thu Dec 21, 2017 1:28 pm

Hello guys,

I'm a beginner in Arduino environment.

I have a question on ESP32 thing from Sparkfun : https://learn.sparkfun.com/tutorials/es ... okup-guide
I want to use 2 sensors at the same time on this microcontroller. This board has 2 I2C buses but only one SCL and one SDA pin, I know it's possible to remap the pin of the board but I don't know how.
I use the Arduino IDE to upload codes in the ESP32.
How can I remap the pins ? Can I keep using the Arduino IDE after the remapping ?

Thanks !

Durassel
Posts: 4
Joined: Thu Dec 21, 2017 1:12 pm

Re: ESP32 I2C mapping

Postby Durassel » Wed Dec 27, 2017 9:49 am

Hi guys,

Does anyone have a solution to my problem ?
I tried to install esp-idf, not using Arduino IDE, and launched the I2C example (from here : https://github.com/espressif/esp-idf/tr ... herals/i2c), but it failed. The two new ports didn't be recognized.

Thanks,

User avatar
ESP_krzychb
Posts: 400
Joined: Sat Oct 01, 2016 9:05 am
Contact:

Re: ESP32 I2C mapping

Postby ESP_krzychb » Wed Dec 27, 2017 11:18 am

Hi Durassel,
Durassel wrote:I know it's possible to remap the pin of the board but I don't know how.
To remap the I2C pins to other than default GPIO22/21, enter the pin numbers when calling sensor.begin()

I do not know what sensor you are using, but maybe you can change the I2C address of one of them and use both on the same I2C bus.

Durassel
Posts: 4
Joined: Thu Dec 21, 2017 1:12 pm

Re: ESP32 I2C mapping

Postby Durassel » Wed Dec 27, 2017 2:50 pm

Hi krzychb,

Thank you for your response.

I use a temperature sensor : https://www.sparkfun.com/products/13314 and an accelerometer : https://www.sparkfun.com/products/12756.

I want to connect these 2 sensors, in the same time, to the microcontroller : https://www.sparkfun.com/products/13907.

Is it possible to use only one I2C bus with 2 sensors ? If yes, how to distinguish the data received on the same port ?

ESP_Sprite
Posts: 9723
Joined: Thu Nov 26, 2015 4:08 am

Re: ESP32 I2C mapping

Postby ESP_Sprite » Thu Dec 28, 2017 6:00 am

Can I suggest you first read up on I2C to get a grasp on what you're playing with? Not to try to demean you or anything, but I feel that if you're going to use this, reading up on the basics first will answer this question, plus give you the background information to solve a lot of issues you may run into in the future. Since you seem to like Sparkfun, why not look at their page on I2C?

Duhjoker
Posts: 85
Joined: Mon Mar 20, 2017 8:09 am

Re: ESP32 I2C mapping

Postby Duhjoker » Sat Dec 30, 2017 10:42 pm

Im having the same problem. I want to use two featherwing joys with a huzzah32. I read up on the hardware part so i know what its doing there.

I cant find the programming part or where the pins are named. I also dont see any thing called sensor.begin in the wire.h library.

Im new to I2c and need a working example to work with or something
Fear is the mind killer.......

GameR the DIY iot gaming device that does more......
https://github.com/Duhjoker/GameR-Iot_ESP

WiFive
Posts: 3529
Joined: Tue Dec 01, 2015 7:35 am

Re: ESP32 I2C mapping

Postby WiFive » Sun Dec 31, 2017 3:13 am


Duhjoker
Posts: 85
Joined: Mon Mar 20, 2017 8:09 am

Re: ESP32 I2C mapping

Postby Duhjoker » Sun Dec 31, 2017 6:56 am

ok heres the example that adafruit put out for the feather wing joy.

Code: Select all

#include "Adafruit_seesaw.h"
Adafruit_seesaw ss;
#define BUTTON_RIGHT 6
#define BUTTON_DOWN  7
#define BUTTON_LEFT  9
#define BUTTON_UP    10
#define BUTTON_SEL   14
uint32_t button_mask = (1 << BUTTON_RIGHT) | (1 << BUTTON_DOWN) | 
                (1 << BUTTON_LEFT) | (1 << BUTTON_UP) | (1 << BUTTON_SEL);
#if defined(ESP8266)
  #define IRQ_PIN   2
#elif defined(ESP32)
  #define IRQ_PIN   14
#elif defined(NRF52)
  #define IRQ_PIN   27
#elif defined(TEENSYDUINO)
  #define IRQ_PIN   8
#elif defined(ARDUINO_ARCH_WICED)
  #define IRQ_PIN   PC5
#else
  #define IRQ_PIN   5
#endif
void setup() {
  Serial.begin(115200);
  while(!Serial);
  
  if(!ss.begin(0x49)){
    Serial.println("ERROR!");
    while(1);
  }
  else{
    Serial.println("seesaw started");
    Serial.print("version: ");
    Serial.println(ss.getVersion(), HEX);
  }
  ss.pinModeBulk(button_mask, INPUT_PULLUP);
  ss.setGPIOInterrupts(button_mask, 1);
  pinMode(IRQ_PIN, INPUT);
}
int last_x = 0, last_y = 0;
void loop() {
  int x = ss.analogRead(2);
  int y = ss.analogRead(3);
  
  if ( (abs(x - last_x) > 3)  ||  (abs(y - last_y) > 3)) {
    Serial.print(x); Serial.print(", "); Serial.println(y);
    last_x = x;
    last_y = y;
  }
  
  if(!digitalRead(IRQ_PIN)){
    uint32_t buttons = ss.digitalReadBulk(button_mask);
    //Serial.println(buttons, BIN);
    if (! (buttons & (1 << BUTTON_RIGHT))) {
      Serial.println("Button A pressed");
    }
    if (! (buttons & (1 << BUTTON_DOWN))) {
      Serial.println("Button B pressed");
    }
    if (! (buttons & (1 << BUTTON_LEFT))) {
      Serial.println("Button Y pressed");
    }
    if (! (buttons & (1 << BUTTON_UP))) {
      Serial.println("Button x pressed");
    }
    if (! (buttons & (1 << BUTTON_SEL))) {
      Serial.println("Button SEL pressed");
    }
  }
  delay(10);
}
the seesaw library can be found here....
https://github.com/adafruit/Adafruit_Seesaw

and my board can be found here......
https://www.adafruit.com/product/3405

the example above is only for one featherwing joy but I will be using two. but two on the same bus can take up time, so I want to use two sets of i2c pins on my huzzah. SDA and SCL are set on 22 and 23. Where would these pin defines be found in the Arduino esp library.

the programs begin asks for the device address and not the pin and frequency so I need to know where to define the second set of pins and would I do a double .begin to use both i2c devices?





The huzzah32 has its sda and scl set to this.....

Code: Select all

static const uint8_t TX = 17;
static const uint8_t RX = 16;

static const uint8_t SDA = 23;
static const uint8_t SCL = 22;

static const uint8_t SS    = 2;
static const uint8_t MOSI  = 18;
static const uint8_t MISO  = 19;
static const uint8_t SCK   = 5;

so if I want to use a second set of i2c do simply say...

static const uint8_t SDA2 = pin;
static const uint8_t SCL2 = pin;
Fear is the mind killer.......

GameR the DIY iot gaming device that does more......
https://github.com/Duhjoker/GameR-Iot_ESP

WiFive
Posts: 3529
Joined: Tue Dec 01, 2015 7:35 am

Re: ESP32 I2C mapping

Postby WiFive » Sun Dec 31, 2017 7:31 am

The adafruit driver does not support multiple i2c buses so i guess you would have to keep separate scope and override global Wire variable with local for each bus.

Duhjoker
Posts: 85
Joined: Mon Mar 20, 2017 8:09 am

Re: ESP32 I2C mapping

Postby Duhjoker » Sun Dec 31, 2017 7:43 am

it says on this page that it has 2 i2c and that only one is configured by default....

https://learn.adafruit.com/adafruit-huz ... r/overview

its in the features list

both i2c devices have resistors pre installed

the pinouts page describes the gpio capabilities if that will help

https://learn.adafruit.com/adafruit-huz ... er/pinouts
Fear is the mind killer.......

GameR the DIY iot gaming device that does more......
https://github.com/Duhjoker/GameR-Iot_ESP

Who is online

Users browsing this forum: Google [Bot], Majestic-12 [Bot] and 59 guests