Spisu treści:

Pierwsze kroki z interfejsem czujnika I2C? - Interfejs MMA8451 za pomocą ESP32: 8 kroków
Pierwsze kroki z interfejsem czujnika I2C? - Interfejs MMA8451 za pomocą ESP32: 8 kroków

Wideo: Pierwsze kroki z interfejsem czujnika I2C? - Interfejs MMA8451 za pomocą ESP32: 8 kroków

Wideo: Pierwsze kroki z interfejsem czujnika I2C? - Interfejs MMA8451 za pomocą ESP32: 8 kroków
Wideo: Kurs STM32 #7 Interfejs I2C 2024, Lipiec
Anonim
Pierwsze kroki z interfejsem czujnika I2C? - Interfejs MMA8451 za pomocą ESP32s
Pierwsze kroki z interfejsem czujnika I2C? - Interfejs MMA8451 za pomocą ESP32s

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??

  1. Funkcjonalność czujnika
  2. Funkcjonalność pinów i pinów
  3. Opis interfejsu (nie przegap „Tabeli wyboru adresów I2c”)
  4. 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:

  1. 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).
  2. 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.
  3. Zakres przyspieszenia mierzonego w g, gdzie 1g to przyspieszenie ziemskie.
  4. 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

Połączenia
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: