Skip to content

ESP32 I2C LIDARLite issue #3747

@SkeeterOG

Description

@SkeeterOG

Description:

I've been attempting to run my LIDARLite v3 with my ESP32 via I2C connections (Arduino IDE). So far I've been completely unsuccessful. I've had this Lidar running on multiple other boardsvia I2C (Arduino Uno, Nano, Adafruit Feather M0), and so far the ESP32 is the only one I can't work with. I use the standard example given with the Lidar (below), and modify from there typically. I attempted to follow the guidance on issue #2949 but was not able to make it work. I also followed the guidance here
https://www.youtube.com/watch?v=qoc7N6Yg5jk (3 mins)
Both of these solutions touched on the same issue: the Wire.begin() function causes some problems with ESP32. I attempted to comment out the Wire.begin() in the LIDARLite.cpp file and add my own into the main arduino code but this didn't work. Other solutions I tried were adding Wire.begin(21,22,XxX) where XxX is the I2C bus speed, changing it from either 100K or 400K; nothing. The LIDARLite v3 has internal pull-up resistors, but I also added 3K pull-up resistors at one point thinking that this might help (it did not). The output is typically a number representing the lidar's distance measurement, but so far the only output I get is "> nack" which represents a problem with the lidar (not specific, I know), which is fairly common when editing code or switching lidar wires around. I've also tried switching out the ESP32 boards, and doing basic examples with them to make sure that they're working (they are).
Help me Obi-Wan Kenobi, you're my only hope! (Although I suspect @stickbreaker will be helpful as well)

Hardware:

Board: DOIT ESP32 DEVKIT V1
Core Installation version: 1.0.2
IDE name: Arduino IDE 1.8.9
Flash Frequency: 80 MHz
PSRAM enabled: NO
Upload Speed: 115200
Computer OS: Windows 10

Sketch:

/*------------------------------------------------------------------------------

LIDARLite Arduino Library
v3/GetDistanceI2c

This example shows how to initialize, configure, and read distance from a
LIDAR-Lite connected over the I2C interface.

Connections:
LIDAR-Lite 5 Vdc (red) to Arduino 5v
LIDAR-Lite I2C SCL (green) to Arduino SCL
LIDAR-Lite I2C SDA (blue) to Arduino SDA
LIDAR-Lite Ground (black) to Arduino GND

(Capacitor recommended to mitigate inrush current when device is enabled)
680uF capacitor (+) to Arduino 5v
680uF capacitor (-) to Arduino GND

See the Operation Manual for wiring diagrams
and more information:
http://static.garmin.com/pumac/LIDAR_Lite_v3_Operation_Manual_and_Technical_Specifications.pdf

------------------------------------------------------------------------------*/

#include <Wire.h>
#include <LIDARLite.h>

LIDARLite myLidarLite;

void setup()
{
Serial.begin(115200); // Initialize serial connection to display distance readings

/*
begin(int configuration, bool fasti2c, char lidarliteAddress)

Starts the sensor and I2C.

Parameters
----------------------------------------------------------------------------
configuration: Default 0. Selects one of several preset configurations.
fasti2c: Default 100 kHz. I2C base frequency.
  If true I2C frequency is set to 400kHz.
lidarliteAddress: Default 0x62. Fill in new address here if changed. See
  operating manual for instructions.

*/
myLidarLite.begin(0, true); // Set configuration to default and I2C to 400 kHz

/*
configure(int configuration, char lidarliteAddress)

Selects one of several preset configurations.

Parameters
----------------------------------------------------------------------------
configuration:  Default 0.
  0: Default mode, balanced performance.
  1: Short range, high speed. Uses 0x1d maximum acquisition count.
  2: Default range, higher speed short range. Turns on quick termination
      detection for faster measurements at short range (with decreased
      accuracy)
  3: Maximum range. Uses 0xff maximum acquisition count.
  4: High sensitivity detection. Overrides default valid measurement detection
      algorithm, and uses a threshold value for high sensitivity and noise.
  5: Low sensitivity detection. Overrides default valid measurement detection
      algorithm, and uses a threshold value for low sensitivity and noise.
lidarliteAddress: Default 0x62. Fill in new address here if changed. See
  operating manual for instructions.

*/
myLidarLite.configure(0); // Change this number to try out alternate configurations
}

void loop()
{
/*
distance(bool biasCorrection, char lidarliteAddress)

Take a distance measurement and read the result.

Parameters
----------------------------------------------------------------------------
biasCorrection: Default true. Take aquisition with receiver bias
  correction. If set to false measurements will be faster. Receiver bias
  correction must be performed periodically. (e.g. 1 out of every 100
  readings).
lidarliteAddress: Default 0x62. Fill in new address here if changed. See
  operating manual for instructions.

*/

// Take a measurement with receiver bias correction and print to serial terminal
Serial.println(myLidarLite.distance());

// Take 99 measurements without receiver bias correction and print to serial terminal
for(int i = 0; i < 99; i++)
{
Serial.println(myLidarLite.distance(false));
}
}

Debug Messages:

> nack
> nack
> nack
> nack

ESP32 LIDAR

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions