Подключение MPU6050 к ESP32
Акселерометр и гироскоп
MPU6050 к ESP32 подключается по I2C: SDA на GPIO21, SCL на GPIO22, питание 3,3 В. Модуль GY-521 содержит стабилизатор, поэтому его можно питать и от 5 В, а сигналы на шине остаются 3,3-вольтовыми.
Схема подключения MPU6050 к ESP32
| MPU6050 (GY-521) | ESP32 |
|---|---|
| SCL | GPIO22 |
| SDA | GPIO21 |
| VCC | 3V3 |
| GND | GND |
Схема из примера «MPU6050: шесть чисел».
Выводы MPU6050 (GY-521)
| Вывод | Назначение |
|---|---|
| INT | выход прерывания «данные готовы» или «движение»; для простого чтения не нужен |
| SCL | тактовая линия I2C |
| SDA | линия данных I2C |
| VCC | питание |
| GND | общий провод |
Код для ESP32
#include <Adafruit_MPU6050.h>
Adafruit_MPU6050 mpu;
void setup() {
Serial.begin(115200);
delay(200);
// begin() не только проверяет датчик, но и будит его. Скетч,
// написанный без библиотеки и забывший про регистр питания,
// получит ровно нули — и на столе, и здесь.
if (!mpu.begin()) {
Serial.println("MPU6050 не отвечает: проверьте адрес и провода");
while (true) delay(1000);
}
mpu.setAccelerometerRange(MPU6050_RANGE_2_G);
mpu.setGyroRange(MPU6050_RANGE_250_DEG);
}
void loop() {
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
// Ускорение библиотека отдаёт в метрах на секунду в квадрате, а не в
// единицах силы тяжести: делите на 9,81, если привычнее в g.
Serial.printf("a %.2f %.2f %.2f м/с2 w %.2f %.2f %.2f рад/с %.1f C\n",
a.acceleration.x, a.acceleration.y, a.acceleration.z,
g.gyro.x, g.gyro.y, g.gyro.z, temp.temperature);
delay(500);
}
Скетч можно править и запускать в симуляторе без платы и установки среды.
Что учесть на ESP32
- Адрес 0x68; если вывод AD0 подтянут к питанию, то 0x69. Так на одну шину подключают два датчика.
- После включения микросхема спит. Библиотека Adafruit MPU6050 выводит её из сна сама, в собственном коде в регистр PWR_MGMT_1 пишут 0.
Частые ошибки при подключении к ESP32
- Принимать показания акселерометра за угол при движении: он измеряет ускорение, и для угла нужен фильтр вместе с гироскопом.
- Не калибровать нуль гироскопа: у неподвижного датчика скорость вращения не нулевая, а смещённая.
- Конфликт адресов с часами DS3231 (тоже 0x68) — оба модуля отвечают одновременно. Переключите MPU6050 на 0x69.
- Угол по гироскопу, проинтегрированный без коррекции, уплывает на градусы в минуту. Нужен фильтр.
- Нет калибровки: у каждого экземпляра свои смещения нуля. Снимите показания в покое и вычитайте.
- Датчик спит после включения — библиотека будит его в
begin(); при работе через Wire руками это надо сделать самому.
Ещё по теме
Другие детали для ESP32
HC-SR04DHT22 (AM2302)BME280DS3231SSD1306 OLED 0,96″LCD 1602 с I2CMAX7219TM1637Модуль релеWS2812B (NeoPixel)KY-040Клавиатура 4×4HX711ФоторезисторМодуль microSDRGB-светодиодСервопривод SG9074HC595ИК-приёмник (VS1838B)TFT ST7735 1,8″Шаговый двигательКнопкаПотенциометрПьезопищалкаСветодиодDS18B20Ползунковый переключательHC-SR501TTP223Датчик влажности почвыMQ-2LM35Джойстик KY-023DHT11HTU21DSN65HVD230