Add I2C scanner example.
This commit is contained in:
parent
043fa2fabb
commit
4063921340
4
esp/cpp/06_i2c-scanner/.gitignore
vendored
Normal file
4
esp/cpp/06_i2c-scanner/.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
build
|
||||
managed_components
|
||||
dependencies.lock
|
||||
sdkconfig.old
|
17
esp/cpp/06_i2c-scanner/CMakeLists.txt
Normal file
17
esp/cpp/06_i2c-scanner/CMakeLists.txt
Normal file
@ -0,0 +1,17 @@
|
||||
# For more information about build system see
|
||||
# https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/build-system.html
|
||||
# The following five lines of boilerplate have to be in your project's
|
||||
# CMakeLists in this exact order for cmake to work correctly
|
||||
cmake_minimum_required(VERSION 3.26)
|
||||
|
||||
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
|
||||
|
||||
project(
|
||||
#[[NAME]] i2c-scanner
|
||||
VERSION 0.1
|
||||
DESCRIPTION "Simple I2C device scanner"
|
||||
LANGUAGES CXX
|
||||
)
|
||||
# For writing pure cmake components, see the documentation
|
||||
# https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-guides/build-system.html#writing-pure-cmake-components
|
||||
idf_build_set_property(COMPILE_OPTIONS "-Wno-error" APPEND)
|
32
esp/cpp/06_i2c-scanner/README.md
Normal file
32
esp/cpp/06_i2c-scanner/README.md
Normal file
@ -0,0 +1,32 @@
|
||||
# 06_i2c-scanner
|
||||
|
||||

|
||||
|
||||
Simple I2C device scanner.
|
||||
|
||||
For this example I used this [SSD1306 OLED display](https://www.digikey.com/en/products/detail/winstar-display/WEA012864DWPP3N00003/20533255).
|
||||
|
||||
To build the example run the following commands.
|
||||
|
||||
```bash
|
||||
source ~/path/to/esp-idf/export.sh
|
||||
|
||||
mkdir build
|
||||
cd build
|
||||
cmake ..
|
||||
make -j $(nproc)
|
||||
|
||||
# Flash to ESP32
|
||||
make flash
|
||||
|
||||
# Open Serial Monitor, press CTRL+] to exit.
|
||||
make monitor
|
||||
```
|
||||
|
||||
Expected output in serial monitor at 115200 baud
|
||||
|
||||
```bash
|
||||
Scanning I2C devices...
|
||||
[0x3c]: Device found with clock rate 100000 and timeout 50
|
||||
Done.
|
||||
```
|
4
esp/cpp/06_i2c-scanner/main/CMakeLists.txt
Normal file
4
esp/cpp/06_i2c-scanner/main/CMakeLists.txt
Normal file
@ -0,0 +1,4 @@
|
||||
idf_component_register(
|
||||
SRCS "main.cpp"
|
||||
INCLUDE_DIRS "."
|
||||
)
|
17
esp/cpp/06_i2c-scanner/main/idf_component.yml
Normal file
17
esp/cpp/06_i2c-scanner/main/idf_component.yml
Normal file
@ -0,0 +1,17 @@
|
||||
## IDF Component Manager Manifest File
|
||||
dependencies:
|
||||
## Required IDF version
|
||||
idf:
|
||||
version: '>=4.1.0'
|
||||
# # Put list of dependencies here
|
||||
# # For components maintained by Espressif:
|
||||
# component: "~1.0.0"
|
||||
# # For 3rd party components:
|
||||
# username/component: ">=1.0.0,<2.0.0"
|
||||
# username2/component2:
|
||||
# version: "~1.0.0"
|
||||
# # For transient dependencies `public` flag can be set.
|
||||
# # `public` flag doesn't have an effect dependencies of the `main` component.
|
||||
# # All dependencies of `main` are public by default.
|
||||
# public: true
|
||||
espressif/arduino-esp32: ^3.1.1
|
35
esp/cpp/06_i2c-scanner/main/main.cpp
Normal file
35
esp/cpp/06_i2c-scanner/main/main.cpp
Normal file
@ -0,0 +1,35 @@
|
||||
#include "Arduino.h"
|
||||
#include "Wire.h"
|
||||
|
||||
[[maybe_unused]] static const char *TAG = "i2c-scanner";
|
||||
|
||||
void i2c_scan()
|
||||
{
|
||||
uint8_t device_num = 0;
|
||||
Serial.println("Scanning I2C devices...");
|
||||
for (byte address = 1; address < 127; address++) {
|
||||
Wire.beginTransmission(address);
|
||||
byte error = Wire.endTransmission();
|
||||
if (error == 0) {
|
||||
Serial.printf(
|
||||
"[0x%.2x]: Device found with clock rate %lu and timeout %u\n",
|
||||
address,
|
||||
Wire.getClock(), Wire.getTimeOut());
|
||||
device_num++;
|
||||
} else if (error == 4) {
|
||||
Serial.printf("[0x%.2x]: Unknown error.\n", address);
|
||||
}
|
||||
}
|
||||
Serial.println(device_num > 0 ? "Done.\n" : "No I2C devices found.\n");
|
||||
}
|
||||
|
||||
void setup()
|
||||
{
|
||||
Serial.begin(115200);
|
||||
Wire.begin();
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
i2c_scan();
|
||||
}
|
BIN
esp/cpp/06_i2c-scanner/schematic.png
Normal file
BIN
esp/cpp/06_i2c-scanner/schematic.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 227 KiB |
2405
esp/cpp/06_i2c-scanner/sdkconfig
Normal file
2405
esp/cpp/06_i2c-scanner/sdkconfig
Normal file
File diff suppressed because it is too large
Load Diff
@ -7,6 +7,7 @@ shaunrd0/klips/esp/
|
||||
├── 03_temp-humidity-web # Temperature and humidity sensor within a web browser.
|
||||
├── 04_esp-idf-arduino # CMake example instead of Arduino IDE for ESP development.
|
||||
├── 05_temp-humidity-web # Temperature and humidity sensor within a web browser.
|
||||
├── 06_i2c-scanner # Simple I2C device scanner.
|
||||
├── ESP32-basic-starter-kit.pdf # PDF for tutorials in ESP32 starter kit.
|
||||
├── ESP32-dev-module.png
|
||||
└── README.md
|
||||
|
Loading…
x
Reference in New Issue
Block a user