# Error en conexión SPI entre ADXL345 y NodeMCU ESP8266

**URL:** <https://forum.arduino.cc/t/error-en-conexion-spi-entre-adxl345-y-nodemcu-esp8266/1314106>\
**Category:** Español\
**Created:** [October 22, 2024, 3:46pm UTC](https://forum.arduino.cc/t/error-en-conexion-spi-entre-adxl345-y-nodemcu-esp8266/1314106 "2024-10-22T15:46:41Z")\
**Posts on this page:** 14\
**Page:** 1

<div class="post-metadata">

**Author:** ![emanueljimenez](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/emanueljimenez/32/1114075_2.png) [@emanueljimenez](https://forum.arduino.cc/u/emanueljimenez)\
**Post date:** [October 22, 2024, 3:46pm UTC](https://forum.arduino.cc/t/error-en-conexion-spi-entre-adxl345-y-nodemcu-esp8266/1314106/1 "2024-10-22T15:46:42Z")

</div>

Intente conectar mediante protocolo spi un adxl345 al esp8266 pero no logro obtener resultados.  
El esquema de conexión que uso es:

```arduino
esp8266 ADXL345
3V3 ----------------> VCC
GND ----------------> GND
D8 (GPIO15) -----------> CS
D7 (GPIO13) -----------> SDA (MOSI)
D5 (GPIO14) -----------> SCL (SCK)
D6 (GPIO12) -----------> SDO (MISO)

```

Cuando subo el programa debo desconectar el pin D8 porque de otra forma no carga el programa.  
Al desconectar D8 y volver a conectarlo despues de subido el programa tengo el siquiente msj de error:

```arduino
--------------- CUT HERE FOR EXCEPTION DECODER ---------------

Soft WDT reset

Exception (4):
epc1=0x40201104 epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000000 depc=0x00000000

>>>stack>>>

ctx: cont
sp: 3ffffe50 end: 3fffffd0 offset: 0160
3fffffb0: 3fffdad0 00000000 3ffee738 40202fd4  
3fffffc0: feefeffe feefeffe 3fffdab0 40101001  
<<<stack<<<

```

Utilicé la siguiente extension de Exception decoder para buscar el error y obtengo este resultado:  
Extension: [GitHub - dankeboy36/esp-exception-decoder: ESP8266/ESP32 Exception Decoder Extension for the Arduino IDE](https://github.com/dankeboy36/esp-exception-decoder)

```arduino
Exception 4: Level1Interrupt: Level-1 interrupt as indicated by set level-1 bits in the INTERRUPT register
PC: 0x40201104: setup() at C:\Users\Usuario\Documents\Arduino\SPISPISPI\SPISPISPI.ino:48
EXCVADDR: 0x00000000

Decoding stack results
0x40202fd4: loop_wrapper() at C:\Users\Usuario\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\cores\esp8266\core_esp8266_main.cpp:255

```

Si alguien con mayor conocimiento me podría ayudar se lo agradecería jaja  
Este es el código:

```arduino
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_ADXL345_U.h>
 
 #define CS_PIN 2 //GPIO2 es D4

/* Assign a unique ID to this sensor at the same time */
Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified(SCK, MISO, MOSI, SS, 12345);
 
 
void displayDataRate(void)
{
  Serial.print ("Data Rate: "); 
   
  switch(accel.getDataRate())
  {
    case ADXL345_DATARATE_3200_HZ:
      Serial.print ("3200 "); 
      break;
  }  
  Serial.println(" Hz");  
}
 
void displayRange(void)
{
  Serial.print ("Range: +/- "); 
   
  switch(accel.getRange())
  {
    case ADXL345_RANGE_16_G:
      Serial.print ("16 "); 
      break;
  }  
  Serial.println(" g");  
}
 
void setup(void) 
{
#ifndef ESP8266
  while (!Serial); // for Leonardo/Micro/Zero
#endif
  Serial.begin(9600);
  Serial.println("Accelerometer Test"); Serial.println("");
   
  /* Initialise the sensor */
  if(!accel.begin())
  {
    /* There was a problem detecting the ADXL345 ... check your connections */
    Serial.println("Ooops, no ADXL345 detected ... Check your wiring!");
    while(1);
  }
 
  /* Set the range to whatever is appropriate for your project */
  accel.setRange(ADXL345_RANGE_16_G);
  // accel.setRange(ADXL345_RANGE_8_G);
  // accel.setRange(ADXL345_RANGE_4_G);
  // accel.setRange(ADXL345_RANGE_2_G);
   
     
  /* Display additional settings (outside the scope of sensor_t) */
  displayDataRate();
  displayRange();
  Serial.println("");
}
 
void loop(void) 
{
  /* Get a new sensor event */
  sensors_event_t event; 
  accel.getEvent(&event);
  
  /* Display the results (acceleration is measured in m/s^2) */
  Serial.print("X: "); Serial.print(event.acceleration.x); Serial.print(" ");
  Serial.print("Y: "); Serial.print(event.acceleration.y); Serial.print(" ");
  Serial.print("Z: "); Serial.print(event.acceleration.z); Serial.print(" ");Serial.println("m/s^2 ");
  delay(500);
}

```

---

<div class="post-metadata">

**Author:** ![emanueljimenez](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/emanueljimenez/32/1114075_2.png) [@emanueljimenez](https://forum.arduino.cc/u/emanueljimenez)\
**Post date:** [October 22, 2024, 3:47pm UTC](https://forum.arduino.cc/t/error-en-conexion-spi-entre-adxl345-y-nodemcu-esp8266/1314106/2 "2024-10-22T15:47:42Z")

</div>

Se me olvido aclarar que uso la biblioteca de adafruit, basicamente segui los pasos de esta pagina

> **[GY-291 ADXL345 i2c spi accelerometer with interrupt for esp32, esp8266, stm32...](https://mischianti.org/gy-291-adxl345-i2c-spi-accelerometer-with-interrupt-for-esp32-esp8266-stm32-and-arduino/)**
>
> The ADXL345 is a small, thin, ultralow power, 3-axis accelerometer with high resolution (13-bit) measurement at up to ±16 g. This device works with i2c and SPI protocol and Is suitable with Arduino, esp8266, stm32, and esp32.

---

<div class="post-metadata">

**Author:** ![MaximoEsfuerzo](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/maximoesfuerzo/32/923798_2.png) [@MaximoEsfuerzo](https://forum.arduino.cc/u/MaximoEsfuerzo)\
**Post date:** [October 22, 2024, 4:03pm UTC](https://forum.arduino.cc/t/error-en-conexion-spi-entre-adxl345-y-nodemcu-esp8266/1314106/3 "2024-10-22T16:03:24Z")

</div>

Adjunta el código que estás utilizando (revisa las [Normas del Foro en Español](https://forum.arduino.cc/t/normas-del-foro-en-espanol/300112/4), punto **7** ) porque sino es difícil ayudarte.

Seguramente hay un lazo `while()` o algún `delay()` que provoca el reinicio por WDT, pero sin ver el codigo...

---

<div class="post-metadata">

**Author:** ![Surbyte](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/surbyte/32/217404_2.png) [@Surbyte](https://forum.arduino.cc/u/Surbyte)\
**Post date:** [October 22, 2024, 7:24pm UTC](https://forum.arduino.cc/t/error-en-conexion-spi-entre-adxl345-y-nodemcu-esp8266/1314106/4 "2024-10-22T19:24:06Z")

</div>

Busca otro CS e indicalo en el código. Como vas a estar desconectando y conectando algo? No tiene mucho sentido.

---

<div class="post-metadata">

**Author:** ![emanueljimenez](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/emanueljimenez/32/1114075_2.png) [@emanueljimenez](https://forum.arduino.cc/u/emanueljimenez)\
**Post date:** [October 22, 2024, 9:01pm UTC](https://forum.arduino.cc/t/error-en-conexion-spi-entre-adxl345-y-nodemcu-esp8266/1314106/5 "2024-10-22T21:01:41Z")

</div>

Hola, gracias por responder. Soy nuevo, este es el código:

```arduino
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_ADXL345_U.h>
 
/* Assign a unique ID to this sensor at the same time */
Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified(SCK, MISO, MOSI, SS, 12345);
 
 
void displayDataRate(void)
{
  Serial.print ("Data Rate: "); 
   
  switch(accel.getDataRate())
  {
    case ADXL345_DATARATE_3200_HZ:
      Serial.print ("3200 "); 
      break;
  }  
  Serial.println(" Hz");  
}
 
void displayRange(void)
{
  Serial.print ("Range: +/- "); 
   
  switch(accel.getRange())
  {
    case ADXL345_RANGE_16_G:
      Serial.print ("16 "); 
      break;
  }  
  Serial.println(" g");  
}
 
void setup(void) 
{
#ifndef ESP8266
  while (!Serial); // for Leonardo/Micro/Zero
#endif
  Serial.begin(9600);
  Serial.println("Accelerometer Test"); Serial.println("");
   
  /* Initialise the sensor */
  if(!accel.begin())
  {
    /* There was a problem detecting the ADXL345 ... check your connections */
    Serial.println("Ooops, no ADXL345 detected ... Check your wiring!");
    while(1);
  }
 
  /* Set the range to whatever is appropriate for your project */
  accel.setRange(ADXL345_RANGE_16_G);
  // accel.setRange(ADXL345_RANGE_8_G);
  // accel.setRange(ADXL345_RANGE_4_G);
  // accel.setRange(ADXL345_RANGE_2_G);
   
     
  /* Display additional settings (outside the scope of sensor_t) */
  displayDataRate();
  displayRange();
  Serial.println("");
}
 
void loop(void) 
{
  /* Get a new sensor event */
  sensors_event_t event; 
  accel.getEvent(&event);
  
  /* Display the results (acceleration is measured in m/s^2) */
  Serial.print("X: "); Serial.print(event.acceleration.x); Serial.print(" ");
  Serial.print("Y: "); Serial.print(event.acceleration.y); Serial.print(" ");
  Serial.print("Z: "); Serial.print(event.acceleration.z); Serial.print(" ");Serial.println("m/s^2 ");
  delay(500);
}

```

---

<div class="post-metadata">

**Author:** ![emanueljimenez](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/emanueljimenez/32/1114075_2.png) [@emanueljimenez](https://forum.arduino.cc/u/emanueljimenez)\
**Post date:** [October 22, 2024, 9:03pm UTC](https://forum.arduino.cc/t/error-en-conexion-spi-entre-adxl345-y-nodemcu-esp8266/1314106/6 "2024-10-22T21:03:32Z")

</div>

Hola, intenté con D2 y D4 pero obtengo los mismos resultados.

---

<div class="post-metadata">

**Author:** ![MaximoEsfuerzo](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/maximoesfuerzo/32/923798_2.png) [@MaximoEsfuerzo](https://forum.arduino.cc/u/MaximoEsfuerzo)\
**Post date:** [October 22, 2024, 10:50pm UTC](https://forum.arduino.cc/t/error-en-conexion-spi-entre-adxl345-y-nodemcu-esp8266/1314106/7 "2024-10-22T22:50:06Z")

</div>

Probá comentando (con // delante) la línea

```arduino
while();

```

que está en `setup()`.

---

<div class="post-metadata">

**Author:** ![emanueljimenez](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/emanueljimenez/32/1114075_2.png) [@emanueljimenez](https://forum.arduino.cc/u/emanueljimenez)\
**Post date:** [October 22, 2024, 11:13pm UTC](https://forum.arduino.cc/t/error-en-conexion-spi-entre-adxl345-y-nodemcu-esp8266/1314106/8 "2024-10-22T23:13:55Z")

</div>

Lo acabo de hacer, ahora no aparece ningún error pero la aceleración en los 3 ejes me da cero todo el tiempo

```arduino
X: 0.00 Y: 0.00 Z: 0.00 m/s^2 
X: 0.00 Y: 0.00 Z: 0.00 m/s^2 
X: 0.00 Y: 0.00 Z: 0.00 m/s^2 
X: 0.00 Y: 0.00 Z: 0.00 m/s^2 

```

---

<div class="post-metadata">

**Author:** ![MaximoEsfuerzo](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/maximoesfuerzo/32/923798_2.png) [@MaximoEsfuerzo](https://forum.arduino.cc/u/MaximoEsfuerzo)\
**Post date:** [October 22, 2024, 11:41pm UTC](https://forum.arduino.cc/t/error-en-conexion-spi-entre-adxl345-y-nodemcu-esp8266/1314106/9 "2024-10-22T23:41:24Z")

</div>

¿No sale "Oops..." en la terminal?

Porque el WDT salta por ese bucle y ese buche se ejecuta cuando no encuentra la placa.

Para mí hay algo mal en la asignación de los pines. ¿Te fijaste que estás usando los mismos que están definidos en MISO, MOSI, etc?

---

<div class="post-metadata">

**Author:** ![emanueljimenez](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/emanueljimenez/32/1114075_2.png) [@emanueljimenez](https://forum.arduino.cc/u/emanueljimenez)\
**Post date:** [October 23, 2024, 11:02am UTC](https://forum.arduino.cc/t/error-en-conexion-spi-entre-adxl345-y-nodemcu-esp8266/1314106/10 "2024-10-23T11:02:42Z")

</div>

no, ya no hay ningún mensaje de error. Pero el sensor no mide aceleración en ningún eje, voy a ver si cambiando los pines logro alguna medición

---

<div class="post-metadata">

**Author:** ![emanueljimenez](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/emanueljimenez/32/1114075_2.png) [@emanueljimenez](https://forum.arduino.cc/u/emanueljimenez)\
**Post date:** [October 23, 2024, 2:07pm UTC](https://forum.arduino.cc/t/error-en-conexion-spi-entre-adxl345-y-nodemcu-esp8266/1314106/11 "2024-10-23T14:07:08Z")

</div>

Me equivoqué, al presionar rst en el esp8266 hay errores de todas formas y el código se detiene.

```arduino
11:02:31.079 -> �HPȸ����E�xG�d�2DO��h˃�H���

```

Probé cambiando el pin d8 y de nuevo error:

```arduino
11:03:42.723 -> X: 0.00 Y: 0.00 Z: 0.00 m/s^2 
11:03:43.253 -> X: 0.00 Y: 0.00 Z: 0.00 m/s^2 
11:03:43.749 -> Ȥl�kh�$n,4�C��Etx�fJ�E�xG�d�

```

---

<div class="post-metadata">

**Author:** ![emanueljimenez](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/emanueljimenez/32/1114075_2.png) [@emanueljimenez](https://forum.arduino.cc/u/emanueljimenez)\
**Post date:** [October 23, 2024, 2:19pm UTC](https://forum.arduino.cc/t/error-en-conexion-spi-entre-adxl345-y-nodemcu-esp8266/1314106/12 "2024-10-23T14:19:32Z")

</div>

estos son los nuevos pines

```arduino
#define SCKpin 14
#define MISOpin 12
#define MOSIpin 13
#define SSpin 4//GPIO 4 D2 CHip Select

/* Assign a unique ID to this sensor at the same time */
Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified(SCK, MISO, MOSI, SS, 12345);

```

el error se lo puede ver en el monitor serie a 74880 baudios

```arduino
 ets Jan 8 2013,rst cause:2, boot mode:(3,6)

load 0x4010f000, len 3424, room 16 
tail 0
chksum 0x2e
load 0x3fff20b8, len 40, room 8 
tail 0
chksum 0x2b
csum 0x2b
v000445c0
~ld
rf cal sector: 1020
freq trace enable 0

```

---

<div class="post-metadata">

**Author:** ![emanueljimenez](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/emanueljimenez/32/1114075_2.png) [@emanueljimenez](https://forum.arduino.cc/u/emanueljimenez)\
**Post date:** [November 1, 2024, 1:37pm UTC](https://forum.arduino.cc/t/error-en-conexion-spi-entre-adxl345-y-nodemcu-esp8266/1314106/13 "2024-11-01T13:37:48Z")

</div>

sin solución hasta el momento

---

<div class="post-metadata">

**Author:** ![system](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/system/32/1140315_2.png) [@system](https://forum.arduino.cc/u/system)\
**Post date:** [April 30, 2025, 1:38pm UTC](https://forum.arduino.cc/t/error-en-conexion-spi-entre-adxl345-y-nodemcu-esp8266/1314106/14 "2025-04-30T13:38:43Z")

</div>

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.
