Найти в Дзене
RCRoboLab

ESP32 S3 zero, TwoWire и VL53L0X

Статья пишется больше как шпаргалка ученикам, но думаю будет полезна еще какому-то количеству человеков в этом мире. В начале не было ничего... а, да не про это сегодня! =)
Где то с год назад попалась мне на глаза данная плата, привлекла она меня своим названием, а точнее словом "ZERO", я почему то падок на это слово. Попалась она мне в магазине АмперКот, я там искал МК для робота Белая Рыба (сумо 10*10). Нам нужен был МАЛЕНЬКИЙ МК, с большим количеством пинов, и тут вот вам - ESP32 и еще и ZERO. Пинов в достатке, знакомый МК (мы на ESP много чего делали и будем делать) - в общем это судьба, взял. Вял и ничего не получилось, но об этом я расскажу в отдельной статье. И вот, спустя лето мы начали готовить робота к финалу РобоФиниста, и работа вновь закипела... Естественно я должен был сначала сам освоить все то что нужно ребятам, и вот своим опытом я тут немного поделюсь. У данного МК есть несколько особенностей, которые нивелируют все "танцы с бубном" при старте работы с ним. От болто
Оглавление
ESP32s3 zero. фото взято с https://www.waveshare.com/wiki/ESP32-S3-Zero
ESP32s3 zero. фото взято с https://www.waveshare.com/wiki/ESP32-S3-Zero
Статья пишется больше как шпаргалка ученикам, но думаю будет полезна еще какому-то количеству человеков в этом мире.

Начало!

В начале не было ничего... а, да не про это сегодня! =)
Где то с год назад попалась мне на глаза данная плата, привлекла она меня своим названием, а точнее словом "ZERO", я почему то падок на это слово. Попалась она мне в магазине
АмперКот, я там искал МК для робота Белая Рыба (сумо 10*10). Нам нужен был МАЛЕНЬКИЙ МК, с большим количеством пинов, и тут вот вам - ESP32 и еще и ZERO. Пинов в достатке, знакомый МК (мы на ESP много чего делали и будем делать) - в общем это судьба, взял. Вял и ничего не получилось, но об этом я расскажу в отдельной статье. И вот, спустя лето мы начали готовить робота к финалу РобоФиниста, и работа вновь закипела... Естественно я должен был сначала сам освоить все то что нужно ребятам, и вот своим опытом я тут немного поделюсь.

Особенности!

У данного МК есть несколько особенностей, которые нивелируют все "танцы с бубном" при старте работы с ним.

  1. Встроенный мультиплексор - любой пин пожет быть чем угодно... то есть SDA и SCL, RX и TX и ШИМ мы можем паять КУДА УГОДНО. Это вроде бы мелочь но так приятно, особенно когда тебе нужно разводить текстолит ;)
  2. Все пины могут быть AnalogRead, и в отличии от предыдущей версии ESP у S3 нет проблем с аналоговым чтением, данные приходят очень линейно.
  3. Самое важное в этой статье - сразу 2 линии i2c. да да это есть на всех ESP32... но нам то нужно было на маленькой плате, а я не помню плат такого размера в предыдущих версиях.

ПОЕХАЛИ!!!

От болтовни к делу.

1. Как нам сказать МК что мы хотим юзать (и) второй i2c? все просто... Все уже придумано до нас, в стандартной ардуиновской библиотеке Wier все есть. Просто создаем объект TwoWire и называем его к примеру Wire2.

TwoWire Wire2(1);

Делаем это естественно в самом начале, перед тем как мы начнем с ним (объектом) что-то делать.

2. Далее, поскольку пины у нас могут быть ЛЮБЫЕ - нам нужно их указать. Где? В аргументах функции Wire.begin(SCL, SDA);. Нам нужно сразу обе линии так что делаем вот так.

Wire.begin(11, 12);
Wire2.begin(14, 15);

Делаем это естественно в тот момент когда нам это нужно. Шина i2c нам нужна всегда и с самого начала, и как следствие данные строчки располагаем в void setup() где нибудь рядом с Serial.begin();

Выглядеть это все должно примерно так:

Скрин кода. Автор - автор.
Скрин кода. Автор - автор.

В общем и целом все очень просто.

Не все так просто, как то что просто.

Цель то унас подключить к МК сразу два VL53L0X на разные линии и заставить это все работать... проще всего это получилось на библиотеке VL53L0X.h от Pololu. Вот вам код.

Рабочий пример кода от автора. Автор - автор.
Рабочий пример кода от автора. Автор - автор.

Также у нас получилось запустить оба сенсора на библиотеке Adafruit_VL53L0X.h. Нам это нужно (было) для более легкого перехода. У нас сразу четыре сенсора vl53l0x, должны были быть по 2 на каждую линию и тогда бы нам пригодился алгоритм "dual_sens" из примеров библиотеки, но пока что мы решили сделать немного по другому... а как я вам не скажу =)

Итог

Вроде бы все просто но когда ты делаешь это первый раз... в общем если кому то поможет - буду рад.

Если есть что подправить - пишите в комментарии.
Другие статьи нашего клуба вы можете найти тут.