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.
 | 
					├── 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.
 | 
					├── 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.
 | 
					├── 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-basic-starter-kit.pdf # PDF for tutorials in ESP32 starter kit.
 | 
				
			||||||
├── ESP32-dev-module.png
 | 
					├── ESP32-dev-module.png
 | 
				
			||||||
└── README.md
 | 
					└── README.md
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user