Spisu treści:
- Krok 1: Jak zacząć korzystać z I2C - Magnificent World of Inter IC Communication
- Krok 2: Przegląd I2C
- Krok 3: Jak skonfigurować czujniki I²C
- Krok 4: Zacznij od ruchu – akcelerometr
- Krok 5: Interfejs z kontrolerem
- Krok 6: Połączenia
- Krok 7: Kod
- Krok 8: Spraw, aby Twoje urządzenie I2C działało…
Wideo: Pierwsze kroki z interfejsem czujnika I2C? - Interfejs MMA8451 za pomocą ESP32: 8 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:27
W tym samouczku dowiesz się wszystkiego o tym, jak uruchomić, podłączyć i uzyskać urządzenie I2C (akcelerometr) współpracujące z kontrolerem (Arduino, ESP32, ESP8266, ESP12 NodeMCU)
Krok 1: Jak zacząć korzystać z I2C - Magnificent World of Inter IC Communication
Arduino, seria ESP, PIC, Rasberry PI itp. są niesamowite. Ale co z nim zrobić, gdy już go masz?
Najlepiej dodać czujniki i takie tam. Obecnie wiele nowych, gorących technologii wykorzystuje protokół I2C, aby umożliwić komputerowi, telefonom, tabletom lub mikrokontrolerom komunikację z czujnikami. Smartfony byłyby mniej inteligentne, gdyby nie mogły rozmawiać z czujnikiem akcelerometru, aby wiedzieć, w którą stronę jest skierowany telefon.
Krok 2: Przegląd I2C
I2C to szeregowy, synchroniczny, półdupleksowy protokół komunikacyjny, który umożliwia współistnienie wielu urządzeń nadrzędnych i podrzędnych na tej samej magistrali. Magistrala I2C składa się z dwóch linii: szeregowej linii danych (SDA) i szeregowego zegara (SCL). Obie linie wymagają rezystorów podciągających.
SDA (Serial Data) – Linia dla urządzenia nadrzędnego i podrzędnego do wysyłania i odbierania danych. SCL (zegar szeregowy) - linia, która przenosi sygnał zegarowy. Dzięki takim zaletom, jak prostota i niski koszt produkcji, I2C jest najczęściej używany do komunikacji urządzeń peryferyjnych o niskiej prędkości na krótkich dystansach (do jednej stopy).
Chcesz dowiedzieć się więcej o I2C?……
Krok 3: Jak skonfigurować czujniki I²C
Zanim przystąpisz do projektu, musisz zrozumieć kilka podstaw swojego Sensora. Więc nalej sobie filiżankę kawy przed nurkowaniem:)? …
Ogromną siłą I2C jest to, że można umieścić tak wiele czujników na tych samych czterech przewodach. Ale w przypadku jednostek z kilkoma podłączonymi gotowymi modułami może być konieczne usunięcie kilku rezystorów smd z końcówek, w przeciwnym razie podciąganie na magistrali może stać się zbyt agresywne.
Jakie informacje chcemy z arkusza danych??
- Funkcjonalność czujnika
- Funkcjonalność pinów i pinów
- Opis interfejsu (nie przegap „Tabeli wyboru adresów I2c”)
- Rejestry!!
Wszystko jest w porządku, znajdziesz to łatwo, ale Rejestry?? REJESTRY to po prostu lokalizacje pamięci wewnątrz urządzenia I²C. Zestawienie tego, ile rejestrów znajduje się w danym czujniku i co one kontrolują lub zawierają, nazywa się mapą rejestrów. Większość informacji w arkuszu danych czujnika dotyczy wyjaśnienia, jak działa każdy rejestr, i mogą być dość trudne do przeczytania, ponieważ informacje rzadko są prezentowane w sposób bezpośredni.
Aby pokazać, co przez to rozumiem: Istnieje wiele rodzajów rejestrów, ale na potrzeby tego wprowadzenia pogrupuję je w dwa ogólne typy: rejestry kontrolne i rejestry danych.
1) Rejestry kontrolne
Większość czujników zmienia sposób działania na podstawie wartości przechowywanych w rejestrach kontrolnych. Pomyśl o rejestrach kontrolnych jako o bankach przełączników On/Off, które włączasz, ustawiając bit na 1 i wyłączasz, ustawiając ten bit na 0. Czujniki oparte na chipie I²C często mają kilkanaście lub więcej ustawień operacyjnych dla takich rzeczy jak bit- Tryby, przerwania, kontrola odczytu i zapisu, głębokość, szybkość próbkowania, redukcja szumów itp., więc zazwyczaj musisz ustawić bity w kilku różnych rejestrach kontrolnych, zanim będziesz mógł faktycznie dokonać odczytu.
2) Rejestry danych W przeciwieństwie do rejestrów kontrolnych banków przełączników, myślę o rejestrach wyjściowych danych jako pojemnikach zawierających liczby, które akurat są przechowywane w formie binarnej. Więc chcesz znać dane, zawsze czytaj rejestry danych, takie jak rejestracja urządzenia, rejestr statusu itp.
Tak więc inicjalizacja czujnika I²C jest procesem wieloetapowym, a prawidłowa kolejność operacji jest często wyjaśniana w odwrotnym kierunku, zamiast w prosty sposób w arkuszu danych. lista nigdy nie mówiąca „Aby uzyskać odczyt z tego czujnika, wykonaj (1), (2), (3), (4), itd”, ale znajdziesz opisy bitów rejestru kontrolnego mówiące „zanim ustawisz bit x w tym rejestru musisz ustawić bit y w tym innym rejestrze kontrolnym”.
Mimo to zawsze uważam, że arkusz danych jest bardziej interaktywny niż większość tekstu. jeśli odniesiesz się do niego dla konkretnego fragmentu lub fragmentów informacji i poda ci wszystkie szczegóły, połączenia i referencje. Po prostu usiądź i przeczytaj, aby uzyskać wszystkie swoje referencje:)
Krok 4: Zacznij od ruchu – akcelerometr
Nowoczesne akcelerometry to urządzenia typu Micro Electro-Mechanical Systems (MEMS), co oznacza, że są w stanie zmieścić się na małym chipie wewnątrz najmniejszych gadżetów. Jedną z metod pomiaru przyspieszenia stosowaną przez akcelerometry MEMS jest wykorzystanie niewielkiej masy przewodzącej zawieszonej na sprężynach. Przyspieszenie urządzenia powoduje rozciąganie lub kurczenie się sprężyn, a ugięcie masy przewodzącej można zmierzyć poprzez zmianę pojemności na sąsiednie, nieruchome płytki.
Akcelerometry charakteryzują się następującymi cechami:
- Liczba osi, od jednej do trzech osi, oznaczona X, Y i Z na diagramach specyfikacji. Zwróć uwagę, że niektóre akcelerometry nazywane są 6-osiowymi lub 9-osiowymi, ale oznacza to po prostu, że są one powiązane z innymi urządzeniami MEMS, takimi jak żyroskopy i/lub magnetometry. Każde z tych urządzeń ma również trzy osie, dlatego istnieją 3, 6 lub 9-osiowe bezwładnościowe jednostki pomiarowe (IMU).
- Typ wyjścia, analogowe lub cyfrowe. Cyfrowy akcelerometr zajmuje się formatowaniem danych przyspieszenia na cyfrową reprezentację, którą można odczytać przez I2C lub SPI.
- Zakres przyspieszenia mierzonego w g, gdzie 1g to przyspieszenie ziemskie.
- Koprocesory, które mogą odciążyć niektóre obliczenia potrzebne do analizy nieprzetworzonych danych z MCU. Większość akcelerometrów ma możliwość prostego przerwania, aby wykryć próg przyspieszenia (wstrząs) i stan 0-g (spadek swobodny). Inni mogą wykonać zaawansowane przetwarzanie nieprzetworzonych danych, aby zaoferować MCU bardziej znaczące dane.
Krok 5: Interfejs z kontrolerem
Ponieważ znamy trendy w mikrokontrolerach ESP, użyjemy ESP32 dla naszego przykładu. Więc najpierw potrzebujesz Nodemcu-32s.
Nie martw się, jeśli masz inne płytki ESP, a nawet Arduino!!! Musisz tylko skonfigurować Arduino IDE i konfigurację zgodnie z płytami programistycznymi, dla Arduino, ESP NodeMCU, ESP32 itp. Potrzebne będą również jakieś części I2C, zwykle na płytce typu breakout. W tym samouczku zamierzam użyć MMA8451 tablica zaciskowa cyfrowego akcelerometru.
I kilka zworek….
Krok 6: Połączenia
A oto układ.
Użyłem następującego połączenia z modułu powyżej do mojego modułu Nodemcu-32s.
ESP32s-moduł
3v3 -- Vin
Gnd -- Gnd
SDA 21 -- SDA
SCL 22 -- SCL
„Pamiętaj, że przez większość czasu nie wszystkie płyty rozwojowe (głównie w ESP) mają dobre, wyraźne piny, które pomagają określić, które piny są używane !! Tak więc przed podłączeniem zidentyfikuj prawidłowe piny twojej płyty, które mają być używane dla SDA i SCL."
Krok 7: Kod
Wymaga to biblioteki Adafruit
z
Pobierz, rozpakuj, a znajdziesz folder z przykładami, w folderze po prostu otwórz demo MMA8451 w swoim Arduino IDE i gotowe….
zobaczysz następujący kod interfejsu czujnika MMA8451 z kontrolerem
#włączać
#include #include Adafruit_MMA8451 mma = Adafruit_MMA8451(); void setup(void) { Serial.begin(9600); Drut.początek(4, 5); /* dołączanie do magistrali i2c z SDA=D1 i SCL=D2 NodeMCU */ Serial.println("Adafruit MMA8451 test!"); if (! mma.begin()) { Serial.println("Nie można uruchomić"); natomiast (1); } Serial.println("Znaleziono MMA8451!"); mma.setRange(MMA8451_RANGE_2_G); Serial.print("Zakres = "); Serial.print(2 << mma.getRange()); Serial.println("G"); } void loop() { // Odczyt 'surowych' danych w 14-bitowych liczbach mma.read(); Serial.print("X:\t"); druk.seryjny(mma.x); Serial.print("\tT:\t"); druk.seryjny(mma.r); Serial.print("\tZ:\t"); Serial.print(mma.z); Serial.println(); /* Pobierz nowe zdarzenie czujnika */ sensor_event_t zdarzenie; mma.getEvent(&zdarzenie); /* Wyświetl wyniki (przyspieszenie jest mierzone wm/s^2) */ Serial.print("X: \t"); Serial.print(przyspieszenie.zdarzenia.x); Serial.print("\t"); Serial.print("T: \t"); Serial.print(przyspieszenie.zdarzenia.y); Serial.print("\t"); Serial.print("Z: \t"); Serial.print(przyspieszenie.zdarzenia.z); Serial.print("\t"); Serial.println("m/s^2"); /* Pobierz orientację czujnika */ uint8_t o = mma.getOrientation(); przełącznik (o) { case MMA8451_PL_PUF: Serial.println("Portret z przodu"); przerwa; sprawa MMA8451_PL_PUB: Serial.println("Portret do tyłu"); przerwa; sprawa MMA8451_PL_PDF: Serial.println("Pionowy przód"); przerwa; sprawa MMA8451_PL_PDB: Serial.println("Portret w dół"); przerwa; sprawa MMA8451_PL_LRF: Serial.println("Pejzaż prawy przód"); przerwa; sprawa MMA8451_PL_LRB: Serial.println("Pejzaż prawy tył"); przerwa; sprawa MMA8451_PL_LLF: Serial.println("Pejzaż lewy przód"); przerwa; sprawa MMA8451_PL_LLB: Serial.println("Pejzaż lewy tył"); przerwa; } Serial.println(); opóźnienie (1000); }
Zapisz, zweryfikuj i prześlij……
Otwórz monitor szeregowy i zobaczysz coś takiego, poruszałem czujnikiem stąd różne odczyty
X: -2166 Y: 1872 Z: 2186
X: -2166 Y: 1872 Z: 2186X: -4,92 Y: 5,99 Z: 4,87 m/s^2
Krajobraz Lewy Przód
X: -224 Y: -2020 Z: 3188
X: -5,10 Y: -3,19 Z: 7,00 m/s^2
Pionowo z przodu
Cóż, jeśli wszystko poszło tak, jak powinno, to masz teraz podstawy I2C i Jak podłączyć urządzenie..
Ale urządzenie nie działa??
Po prostu przejdź do następnego kroku……
Krok 8: Spraw, aby Twoje urządzenie I2C działało…
Podstawowe kroki do uruchomienia urządzenia I2C
Zbadajmy….
- Okablowanie jest prawidłowe.. (sprawdź ponownie)
- Program jest poprawny..(Tak, to przykład testowy..)
Zacznij od etapów do rozwiązania…..
Etap 1: Uruchom program skanera urządzeń I2C, aby sprawdzić adres urządzenia i najpierw urządzenie I2C jest w porządku
Możesz pobrać szkic i sprawdzić dane wyjściowe.
Wynik - Urządzenie działa, a adres czujnika jest prawidłowy
Skaner I2C. Skanowanie…
Znalezione adres: 28 (0x1C) Gotowe. Znaleziono 1 urządzenie(a).
Etap 2: Sprawdź bibliotekę czujników
Otwórz plik Adafruit_MMA8451.h i znajdź adres urządzenia
Wynik - adres różni się od mojego urządzenia??
/*======================================================== ========================= ADRES/BITY I2C --------------------- -------------------------------------------------- */ #define MMA8451_DEFAULT_ADDRESS (0x1D) //!< Domyślny adres MMA8451 I2C, jeśli A to GND, jego 0x1C /*======================= =========================================================== */
Wykonaj - Edytuj plik z notatnika (zmień adres) + Zapisz + Uruchom ponownie IDE
To działa. Możesz uzyskać swoje odczyty.
Czyż nie…..???
Etap 3: Sprawdź, czy Wire.begin jest nadpisany?
Otwórz plik Adafruit_MMA8451.c i znajdź Wire.begin.
Wynik - to oświadczenie zostało nadpisane
/************************************************** *************************//*! @brief Ustawia sprzęt (odczytuje wartości współczynników itp.) */ /*********************************** ****************************************/ bool Adafruit_MMA8451::begin(uint8_t i2caddr) { Drut.rozpocznij(); _i2kaddr = i2kaddr;
Wykonaj - Edytuj plik z notatnika (komentarz) + Zapisz + Uruchom ponownie IDE
I wreszcie Urządzenie zaczyna działać☺…
Prawie przeciążyłem ten samouczek, ponieważ jego głównym celem było wyjaśnienie, jak zacząć, pobrać dane z arkusza danych, podłączyć i uruchomić urządzenie I2C działające na bardzo prostym przykładzie. Mam nadzieję, że wszystko pójdzie tak, jak powinno i przyda się uruchomienie czujnika.
Zalecana:
Cyfrowy pomiar odległości DIY z interfejsem czujnika ultradźwiękowego: 5 kroków
Cyfrowy pomiar odległości zrób to sam z interfejsem czujnika ultradźwiękowego: Celem tego Instruktażu jest zaprojektowanie cyfrowego czujnika odległości za pomocą GreenPAK SLG46537. System został zaprojektowany przy użyciu ASM i innych komponentów GreenPAK do interakcji z czujnikiem ultradźwiękowym. System został zaprojektowany tak, aby
Pierwsze kroki z ESP32 CAM - Przesyłanie strumieniowe wideo za pomocą ESP CAM przez Wifi - Projekt kamery bezpieczeństwa ESP32: 8 kroków
Pierwsze kroki z ESP32 CAM | Przesyłanie strumieniowe wideo za pomocą ESP CAM przez Wifi | Projekt kamery bezpieczeństwa ESP32: Dzisiaj dowiemy się, jak korzystać z tej nowej płyty ESP32 CAM i jak możemy ją zakodować i użyć jako kamery bezpieczeństwa i uzyskać strumieniowe wideo przez Wi-Fi
Pierwsze kroki z ESP32 - Instalowanie płytek ESP32 w Arduino IDE - Kod migania ESP32: 3 kroki
Pierwsze kroki z ESP32 | Instalowanie płytek ESP32 w Arduino IDE | ESP32 Blink Code: W tej instrukcji zobaczymy, jak rozpocząć pracę z esp32 i jak zainstalować płyty esp32 w Arduino IDE, a także zaprogramujemy esp 32 do uruchamiania kodu błyskowego za pomocą arduino ide
Pierwsze kroki z graficznym interfejsem użytkownika Raspberry Pi: 8 kroków
Rozpocznij pracę z graficznym interfejsem użytkownika Raspberry Pi: Masz więc Raspberry Pi i fajny pomysł, ale jak sprawić, by interakcja z nim była tak prosta jak smartfon? Tworzenie graficznego interfejsu użytkownika (GUI) jest w rzeczywistości dość łatwe i z odrobiną cierpliwości możesz tworzyć niesamowite projekty
Metody wykrywania poziomu wody Arduino za pomocą czujnika ultradźwiękowego i czujnika wody Funduino: 4 kroki
Metody wykrywania poziomu wody Arduino za pomocą czujnika ultradźwiękowego i czujnika wody Funduino: W tym projekcie pokażę, jak stworzyć niedrogi wykrywacz wody za pomocą dwóch metod:1. Czujnik ultradźwiękowy (HC-SR04).2. Czujnik wody Funduino