Hoe I2C-scanner met Digispark te gebruiken om I2C-adres te vinden | Robojax
Deze tutorial laat zien hoe je een I2C-scanner gebruikt met een Digispark-ontwikkelbord om de I2C-adressen van aangesloten apparaten te identificeren. Het kennen van het I2C-adres is cruciaal voor communicatie met verschillende sensoren en modules via het I2C-protocol. Deze vaardigheid is essentieel voor een breed scala aan projecten. Je kunt deze techniek bijvoorbeeld gebruiken om:
- Meerdere I2C-sensoren te integreren in één project, zoals een milieubewakingsstation.
- I2C-communicatieproblemen op te lossen door het adres van een defect apparaat te verifiëren.
- Het I2C-adres van nieuw aangeschafte sensoren of modules snel te identificeren.
Deze methode is vooral nuttig voor apparaten waarvan het I2C-adres niet duidelijk is vermeld.
Hardware/Componenten
Om deze tutorial te volgen, heb je de volgende componenten nodig:
- Digispark-ontwikkelbord (USB- of Micro USB-versie)
- I2C-apparaten (sensoren, modules, enz.) waarvan je de adressen wilt identificeren
- Verbindingsdraden
Bekabelingshandleiding
Het bekabelingsproces omvat het verbinden van de SDA- en SCL-lijnen van je Digispark met de overeenkomstige pinnen op je I2C-apparaten (in video op 00:53). De SDA-pin van de Digispark is doorgaans digitale pin 0, en de SCL-pin is digitale pin 1 (in video op 01:05). Zorg ervoor dat de VCC- en GND-pinnen van je I2C-apparaten correct zijn verbonden met respectievelijk de 5V- en GND-pinnen van de Digispark (in video op 01:34). De bedrading is vergelijkbaar voor verschillende Digispark-modellen (in video op 01:44).
%%WIRING%%
Uitleg van de code
De meegeleverde Arduino-code gebruikt de Wire-bibliotheek om te scannen naar I2C-apparaten. De kernlogica bevindt zich in de functie loop() (in video op 02:38). De code doorloopt mogelijke I2C-adressen (1 tot 127) en probeert communicatie met elk adres via Wire.beginTransmission(address) en Wire.endTransmission(). Als de communicatie succesvol is (error == 0), print de code het adres naar de seriële monitor. Het configureerbare deel is voornamelijk de seriële baudrate, die is ingesteld op 9600 in de regel Serial.begin(9600). Je kunt deze waarde indien nodig wijzigen, maar zorg ervoor dat deze overeenkomt met de baudrate van je seriële monitor.
#include <Wire.h>
void setup() {
Wire.begin();
Serial.begin(9600); // Deze regel stelt de seriële baudrate in.
while (!Serial);
Serial.println("\nI2C Scanner");
}
void loop() {
// ... (rest van de code) ...
}
Live project/demonstratie
De video demonstreert het proces van het identificeren van I2C-adressen voor verschillende apparaten (in video op 03:46, 04:14, 05:17). De tutorial laat zien hoe je de code uploadt naar de Digispark, de I2C-apparaten aansluit en de adressen observeert die op de seriële monitor worden weergegeven (in video op 03:11). De video benadrukt dat de seriële uitvoer in elk actief venster verschijnt, zoals Kladblok of Microsoft Word (in video op 04:47). Het benadrukt het belang van het aansluiten van het apparaat nadat het uploadproces is begonnen, binnen een venster van 60 seconden (in video op 03:27, 04:22, 05:34).
Hoofdstukken
- [00:00] Introductie en projectoverzicht
- [00:24] Uitleg over I2C-adressen
- [00:53] Bekabelingsinstructies
- [01:48] Software-installatie en -configuratie
- [02:35] Code-uploadproces
- [03:11] Adresdetectie van het eerste apparaat
- [04:06] Adresdetectie van het tweede apparaat
- [05:15] Adresdetectie van het derde apparaat
- [05:58] Conclusie
// --------------------------------------
//http://playground.arduino.cc/Main/I2cScanner
// i2c_scanner
//
// Version 1
// This program (or code that looks like it)
// can be found in many places.
// For example on the Arduino.cc forum.
// The original author is not known.
// Version 2, June 2012, Using Arduino 1.0.1
// Adapted to be as simple as possible by Arduino.cc user Krodal
// Version 3, Feb 26, 2013
// V3 by louarnold
// Version 4, March 3, 2013, Using Arduino 1.0.3
// by Arduino.cc user Krodal.
// Changes by louarnold removed.
// Scanning addresses changed from 0...127 to 1...119,
// according to the i2c scanner by Nick Gammon
// http://www.gammon.com.au/forum/?id=10896
// Version 5, March 28, 2013
// As version 4, but address scans now to 127.
// A sensor seems to use address 120.
// Version 6, November 27, 2015.
// Added waiting for the Leonardo serial communication.
//
//
// This sketch tests the standard 7-bit addresses
// Devices with higher bit addresses might not be seen properly.
// Watch Video explaining I2C address: https://www.youtube.com/watch?v=bqMMIbmYJS0
//
#include <Wire.h>
void setup()
{
Wire.begin();
Serial.begin(9600);
while (!Serial); // Leonardo: wait for serial monitor
Serial.println("
I2C Scanner");
}
void loop()
{
byte error, address;
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for(address = 1; address < 127; address++ )
{
// The i2c_scanner uses the return value of
// the Write.endTransmisstion to see if
// a device did acknowledge to the address.
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
Serial.print("I2C device found at address 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");
nDevices++;
}
else if (error==4)
{
Serial.print("Unknown error at address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
if (nDevices == 0)
Serial.println("No I2C devices found
");
else
Serial.println("done
");
delay(5000); // wait 5 seconds for next scan
}
Dingen die je misschien nodig hebt
-
AliExpressPurchase Digispark Attiny85 from AliExpresss.click.aliexpress.com
Hulpmiddelen en referenties
-
Extern
Bestanden📁
Andere bestanden
-
Digistump DriversDriver package for Digistump boards, including the Digispark. Contains USB drivers required to program Digistump development boards from the Arduino IDE.
Digistump.Drivers.zip
