TFMini - Micro LiDAR Module (Qwiic) Hookup Guide
Example Code
Note: This example assumes you are using the latest version of the Arduino IDE on your desktop. If this is your first time using Arduino, please review our tutorial on installing the Arduino IDE.
Grab a micro-B USB cable and connect the Arduino to your computer. Copy, paste, and upload the code below. Make sure to use the correct COM port and board selection.
/* LidarTest.ino Written in collaboration by Nate Seidle and Benewake Example sketch for the Qwiic Enabled TFMini (https://www.sparkfun.com/products/14786) */ uint16_t distance = 0; //distance uint16_t strength = 0; // signal strength uint8_t rangeType = 0; //range scale /*Value range: 00 (short distance) 03 (intermediate distance) 07 (long distance) */ boolean valid_data = false; //ignore invalid ranging data const byte sensor1 = 0x10; //TFMini I2C Address void setup() { Wire.begin(); Serial.begin(115200); Serial.println("TFMini I2C Test"); } void loop() { if (readDistance(sensor1) == true) { if (valid_data == true) { Serial.print("\tDist["); Serial.print(distance); Serial.print("]\tstrength["); Serial.print(strength); Serial.print("]\tmode["); Serial.print(rangeType); Serial.print("]"); Serial.println(); } else { //don't print invalid data } } else { Serial.println("Read fail"); } delay(50); //Delay small amount between readings } //Write two bytes to a spot boolean readDistance(uint8_t deviceAddress) { Wire.beginTransmission(deviceAddress); Wire.write(0x01); //MSB Wire.write(0x02); //LSB Wire.write(7); //Data length: 7 bytes for distance data if (Wire.endTransmission(false) != 0) { return (false); //Sensor did not ACK } Wire.requestFrom(deviceAddress, (uint8_t)7); //Ask for 7 bytes if (Wire.available()) { for (uint8_t x = 0 ; x < 7 ; x++) { uint8_t incoming = Wire.read(); if (x == 0) { //Trigger done if (incoming == 0x00) { //Serial.print("Data not valid: ");//for debugging valid_data = false; //return(false); } else if (incoming == 0x01) { Serial.print("Data valid: "); valid_data = true; } } else if (x == 2) distance = incoming; //LSB of the distance value "Dist_L" else if (x == 3) distance |= incoming << 8; //MSB of the distance value "Dist_H" else if (x == 4) strength = incoming; //LSB of signal strength value else if (x == 5) strength |= incoming << 8; //MSB of signal strength value else if (x == 6) rangeType = incoming; //range scale } } else { Serial.println("No wire data avail"); return (false); } return (true); }
Once uploaded, try moving an object in front of the sensor to test. In the example below, a third hand was used to hold the TFMini when detecting an object at a certain distance away from the sensor. Since the sensor is not able to detect an object when less than 11.8 inches (or 30cm = 0.3m) away, the object under test was placed at 20 inches and 30 inches.
![]() |
![]() |
Qwiic Enabled TFMini Reading an Object at 20 Inches | Qwiic Enabled TFMini Reading an Object at 30 Inches |
Opening the serial monitor at 115200, you may see an output similar to the values printed below. Using a yard stick, the values responded as expected when moving an object between 30 inches and 20 inches. The Qwiic enabled TFMini indicated that the object was at an "intermediate distance".
TFMini I2C Test Data valid: Dist[72] strength[274] mode[3] Data valid: Dist[72] strength[275] mode[3] Data valid: Dist[73] strength[267] mode[3] Data valid: Dist[72] strength[265] mode[3] Data valid: Dist[71] strength[275] mode[3] Data valid: Dist[70] strength[284] mode[3] Data valid: Dist[68] strength[305] mode[3] Data valid: Dist[67] strength[311] mode[3] Data valid: Dist[65] strength[329] mode[3] Data valid: Dist[65] strength[335] mode[3] Data valid: Dist[65] strength[341] mode[3] Data valid: Dist[65] strength[361] mode[3] Data valid: Dist[64] strength[367] mode[3] Data valid: Dist[64] strength[383] mode[3] Data valid: Dist[64] strength[387] mode[3] Data valid: Dist[64] strength[386] mode[3] Data valid: Dist[64] strength[385] mode[3] Data valid: Dist[64] strength[384] mode[3] Data valid: Dist[64] strength[386] mode[3] Data valid: Dist[64] strength[394] mode[3] Data valid: Dist[64] strength[398] mode[3] Data valid: Dist[64] strength[400] mode[3] Data valid: Dist[64] strength[402] mode[3]