Оглавление:

Начало работы с интерфейсом датчика I2C ?? - Интерфейс вашего MMA8451 с использованием ESP32: 8 шагов
Начало работы с интерфейсом датчика I2C ?? - Интерфейс вашего MMA8451 с использованием ESP32: 8 шагов

Видео: Начало работы с интерфейсом датчика I2C ?? - Интерфейс вашего MMA8451 с использованием ESP32: 8 шагов

Видео: Начало работы с интерфейсом датчика I2C ?? - Интерфейс вашего MMA8451 с использованием ESP32: 8 шагов
Видео: Устройство и работа модели датчика SHT1x. Получение данных по интерфейсу I2C. 2024, Сентябрь
Anonim
Начало работы с интерфейсом датчика I2C ?? - Интерфейс вашего MMA8451 с помощью ESP32s
Начало работы с интерфейсом датчика I2C ?? - Интерфейс вашего MMA8451 с помощью ESP32s

В этом руководстве вы узнаете все о том, как запустить, подключить и настроить устройство I2C (акселерометр), работающее с контроллером (Arduino, ESP32, ESP8266, ESP12 NodeMCU).

Шаг 1: Как начать работу с I2C - великолепный мир межсетевой связи

Arduino, ESP Series, PIC, Rasberry PI и т. Д. - все невероятно. Но что с ним делать, когда он у вас есть?

Лучше всего добавить датчики и тому подобное. Сегодня многие современные технологии используют протокол I2C, позволяющий компьютеру, телефонам, планшетам или микроконтроллерам обмениваться данными с датчиками. Смартфоны были бы менее умными, если бы они не могли разговаривать с датчиком акселерометра, чтобы узнать, в какую сторону смотрит ваш телефон.

Шаг 2. Обзор I2C

I2C - это последовательный, синхронный, полудуплексный протокол связи, который позволяет сосуществовать нескольким ведущим и ведомым устройствам на одной шине. Шина I2C состоит из двух линий: линии последовательных данных (SDA) и последовательных часов (SCL). Обе линии требуют подтягивающих резисторов.

SDA (последовательные данные) - линия для ведущего и ведомого устройства для отправки и получения данных. SCL (Serial Clock) - линия, по которой передается тактовый сигнал. Благодаря таким преимуществам, как простота и низкая стоимость изготовления, I2C в основном используется для связи низкоскоростных периферийных устройств на короткие расстояния (в пределах одного фута).

Хотите узнать больше о I2C? ……

Шаг 3. Как настроить датчики I²C

Прежде чем приступить к проекту, вам необходимо понять некоторые основы работы с датчиком. Так что налейте себе чашку кофе перед тем, как нырнуть:)? …

Большая сила I2C в том, что вы можете подключить так много датчиков к одним и тем же четырем проводам. Но для устройств с несколькими подключенными готовыми модулями вам, возможно, придется удалить несколько резисторов smd из разъемов, в противном случае подтягивание шины может стать слишком агрессивным.

Какую информацию мы хотим получить от Datasheet?

  1. Функциональность датчика
  2. Распиновка и функциональность контактов
  3. Описание интерфейса (не пропустите «Таблицу выбора адреса I2c»)
  4. Регистры !!

Все нормально найдешь легко, но регистры ?? РЕГИСТРЫ - это просто ячейки памяти внутри устройства I²C. Сводка того, сколько регистров имеется в данном датчике, и что они контролируют или содержат, называется картой регистров. Большая часть информации в техническом описании датчика связана с объяснением того, как работает каждый регистр, и они могут быть довольно утомительными для чтения, потому что информация редко представляется в прямой форме.

Чтобы вы поняли, что я имею в виду: существует много типов регистров, но для этого введения я собираюсь сгруппировать их в два общих типа: регистры управления и регистры данных.

1) Регистры управления

Большинство датчиков меняют способ своей работы в зависимости от значений, хранящихся в регистрах управления. Подумайте о регистрах управления как о банках переключателей включения / выключения, которые вы включаете, устанавливая бит на 1, и выключаете, устанавливая этот бит на 0. Датчики на базе микросхем I²C часто имеют дюжину или более рабочих настроек для таких вещей, как бит Режимы, прерывания, управление чтением-записью, глубина, скорость выборки, шумоподавление и т. Д., Поэтому вам обычно необходимо установить биты в нескольких различных регистрах управления, прежде чем вы сможете фактически выполнить чтение.

2) Регистры данных В отличие от группы переключателей регистров управления, я думаю о регистрах вывода данных как о контейнерах, содержащих числа, которые просто хранятся в двоичной форме. Итак, вы хотите знать данные, всегда читайте регистры данных, например, кто я регистрирую для идентификации устройства, регистр состояния и т. Д.

Итак, инициализация датчика I²C - это многоэтапный процесс, и правильный порядок операций часто объясняется в обратном направлении, а не в техническом паспорте. в списке никогда не говорится: «Чтобы получить показания с этого датчика, выполните (1), (2), (3), (4) и т. д.», но вы найдете описания битов регистра управления, говорящие «прежде, чем вы установите бит x в этом register, вы должны установить бит y в этом другом регистре управления ».

Тем не менее, я всегда считаю, что таблица данных более интерактивна, чем текст. если вы будете ссылаться на него для конкретной части или частей информации, и он предоставит вам все детали, связи и ссылки. Просто сядьте и прочитайте, чтобы получить все ваши ссылки.:)

Шаг 4: Начните с движения - акселерометр

Современные акселерометры представляют собой устройства микроэлектромеханических систем (МЭМС), что означает, что они могут поместиться на небольшом чипе внутри самых маленьких гаджетов. Один из методов измерения ускорения, используемый акселерометрами MEMS, заключается в использовании крошечной проводящей массы, подвешенной на пружинах. Ускорение устройства заставляет пружины растягиваться или сжиматься, а отклонение проводящей массы можно измерить по изменению емкости соседних неподвижных пластин.

Акселерометры отличаются следующими характеристиками:

  1. Количество осей, от одной до трех осей, обозначенных X, Y и Z на диаграммах спецификаций. Обратите внимание, что некоторые акселерометры называются 6-осевыми или 9-осевыми, но это просто означает, что они связаны с другими устройствами MEMS, такими как гироскопы и / или магнитометры. Каждое из этих устройств также имеет три оси, поэтому существуют 3, 6 или 9-осевые инерциальные измерительные блоки (IMU).
  2. Тип выхода: аналоговый или цифровой. Цифровой акселерометр заботится о форматировании данных ускорения в цифровое представление, которое может быть считано через I2C или SPI.
  3. Диапазон ускорения, измеряемый в g, где 1g - это ускорение силы тяжести Земли.
  4. Сопроцессоры, которые могут разгрузить некоторые вычисления, необходимые для анализа необработанных данных из MCU. Большинство акселерометров имеют возможность простого прерывания для определения порога ускорения (толчка) и состояния 0-g (свободного падения). Другие могут выполнять расширенную обработку необработанных данных, чтобы предлагать MCU более значимые данные.

Шаг 5: интерфейс с контроллером

Поскольку мы знаем тенденции микроконтроллеров ESP, мы будем использовать ESP32 для нашего примера. Итак, сначала вам понадобится Nodemcu-32s.

Не беспокойтесь, если у вас есть другие платы ESP или даже Arduino !!! Вам просто нужно настроить IDE Arduino и конфигурацию в соответствии с вашими платами разработки для Arduino, ESP NodeMCU, ESP32s и т. Д. Вам также понадобятся какие-то части I2C, обычно на коммутационной плате. В этом руководстве я собираюсь использовать MMA8451 Цифровая коммутационная плата акселерометра.

И несколько перемычек….

Шаг 6: Подключения

Подключения
Подключения

А вот макет.

Я использовал следующее соединение из модуля выше с моим модулем Nodemcu-32s.

ESP32s - Модуль

3 на 3 - Вин

Земля - Земля

ПДД 21 - ПДД

SCL 22 - SCL

«Помните, что в большинстве случаев не все платы разработки (в основном в ESP) имеют хорошую четкую распиновку, чтобы помочь определить, какие контакты используются !! Поэтому перед подключением определите правильные контакты вашей платы, которые будут использоваться для SDA и SCL."

Шаг 7: Код

Для этого требуется библиотека Adafruit.

из

Загрузите, разархивируйте, и вы найдете папку с примерами, в папке просто откройте MMA8451demo в своей Arduino IDE, и вперед….

вы увидите следующий код для интерфейса датчика MMA8451 с контроллером.

#включают

#include #include Adafruit_MMA8451 mma = Adafruit_MMA8451 (); установка void (void) {Serial.begin (9600); Wire.begin (4, 5); / * присоединяемся к шине i2c с SDA = D1 и SCL = D2 из NodeMCU * / Serial.println («Тест Adafruit MMA8451!»); если (! mma.begin ()) {Serial.println ("Не удалось запустить"); в то время как (1); } Serial.println («MMA8451 найден!»); mma.setRange (MMA8451_RANGE_2_G); Serial.print ("Диапазон ="); Serial.print (2 << mma.getRange ()); Serial.println ("G"); } void loop () {// Считываем «сырые» данные в 14-битных счетчиках mma.read (); Serial.print ("X: / t"); Серийный.печать (mma.x); Serial.print ("\ tY: / t"); Серийный.печать (mma.y); Serial.print ("\ tZ: / t"); Serial.print (mma.z); Serial.println (); / * Получить новое событие датчика * / Sensor_event_t event; mma.getEvent (& событие); / * Отображение результатов (ускорение измеряется в м / с ^ 2) * / Serial.print ("X: / t"); Serial.print (event.acceleration.x); Serial.print ("\ t"); Serial.print ("Y: / t"); Serial.print (event.acceleration.y); Serial.print ("\ t"); Serial.print ("Z: / t"); Serial.print (event.acceleration.z); Serial.print ("\ t"); Serial.println ("м / с ^ 2"); / * Получить ориентацию сенсора * / uint8_t o = mma.getOrientation (); переключатель (o) {case MMA8451_PL_PUF: Serial.println ("Вертикальная ориентация вверх"); перерыв; case MMA8451_PL_PUB: Serial.println ("Вертикальная ориентация вверху"); перерыв; case MMA8451_PL_PDF: Serial.println («Книжная ориентация вниз»); перерыв; case MMA8451_PL_PDB: Serial.println («Вертикальная ориентация вниз»); перерыв; case MMA8451_PL_LRF: Serial.println ("Альбомная правая передняя сторона"); перерыв; case MMA8451_PL_LRB: Serial.println («Альбомная правая задняя сторона»); перерыв; case MMA8451_PL_LLF: Serial.println («Альбомный левый передний»); перерыв; case MMA8451_PL_LLB: Serial.println («Пейзаж слева»); перерыв; } Serial.println (); задержка (1000); }

Сохранить, проверить и загрузить ……

Откройте последовательный монитор, и вы увидите что-то вроде этого, я перемещал датчик, поэтому различные показания

X: -2166 Y: 1872 Z: 2186

X: -2166 Y: 1872 Z: 2186X: -4,92 Y: 5,99 Z: 4,87 м / с ^ 2

Пейзаж слева спереди

X: -224 Y: -2020 Z: 3188

X: -5,10 Y: -3,19 Z: 7,00 м / с ^ 2

Портрет вверх спереди

Что ж, если все прошло как надо, то теперь у вас есть основы I2C и способы подключения вашего устройства.

Но устройство не работает ??

Просто переходите к следующему шагу ……

Шаг 8. Заставьте ваше устройство I2C заработать

Основные шаги для работы устройства I2C

Давайте расследуем….

  • Электропроводка правильная.. (проверьте еще раз)
  • Программа верная.. (Да, это тестовый пример..)

Начните с этапов, которые нужно решить…..

Этап 1: Запустите программу сканера устройств I2C, чтобы проверить адрес устройства, и сначала ваше устройство I2C в порядке

Вы можете скачать эскиз и проверить результат.

Результат - Устройство работает, а адрес датчика правильный

Сканер I2C. Сканирование…

Найден адрес: 28 (0x1C) Готово. Найдено 1 устройство (а).

Этап 2: Проверить библиотеку датчиков

Откройте файл Adafruit_MMA8451.h и найдите адрес устройства.

Результат - Адрес отличается от моего устройства ??

/ * ================================================ ========================= АДРЕС / БИТЫ I2C --------------------- -------------------------------------------------- * / #define MMA8451_DEFAULT_ADDRESS (0x1D) //! <Адрес I2C MMA8451 по умолчанию, если A - GND, его 0x1C / * ======================= ================================================== * /

Сделать - Редактировать файл из блокнота (изменить адрес) + Сохранить + Перезапустить IDE

Это работает. Вы можете получить свои показания.

Порог нет….. ???

Этап 3: Проверить, что Wire.begin перезаписан?

Откройте файл Adafruit_MMA8451.c и найдите Wire.begin.

Результат - этот оператор перезаписан

/ *********************************************** ************************ // *! @brief Настраивает HW (считывает значения коэффициентов и т. д.) * / / ********************************* *************************************** / bool Adafruit_MMA8451:: begin (uint8_t i2caddr) {Wire.begin (); _i2caddr = i2caddr;

Сделать - Редактировать файл из блокнота (комментарий) + Сохранить + Перезапустить IDE

И, наконец, устройство заработало…

Я почти перегружаю этот учебник, потому что его основная цель заключалась в том, чтобы объяснить, как начать, получить данные из таблицы, подключить и заставить устройство I2C работать на очень простом примере. Надеюсь, все пойдет как надо, и будет полезно запустить датчик.

Рекомендуемые: