Меню

Произошла ошибка при загрузке скетча esp32

Руководство по поиску и устранению проблем ESP32

У ESP32 есть несколько распространенных проблем, особенно когда вы пытаетесь загрузить новые скетчи или установить плату ESP32 в Arduino IDE. Это руководство посвящено неполадкам ESP32 при программировании ее в среде Arduino. Здесь мы приведём список наиболее распространенных проблем с ESP32, а также расскажем, как исправить их.

Важно: убедитесь, что у вас установлена ​​последняя версия Arduino IDE. Использование другой версии Arduino IDE может вызвать непредвиденные проблемы и ошибки.

troubleshootingguide

Как мне установить пакет ESP32 для Arduino IDE?

Существует пакет ESP32 для среды Arduino, который позволяет вам программировать плату в Arduino IDE.  Итак, по порядку:

  • В среде Arduino переходим Файл > Настройки;
  • В графе дополнительные ссылки для менеджера плат указываем эту ссылку: https://dl.espressif.com/dl/package_esp32_index.json

settings

  • Затем переходим в Инструменты > Плата “Arduino UNO” > Менеджер плат, вбиваем в поиске esp32 и устанавливаем пакет для платы.

boardsearching

Не отображается плата ESP32 в меню инструментов Arduino

Если плата не отображается в Arduino IDE, убедитесь, что вы щелкнули по маленькой стрелке (выделенной на рисунке ниже), чтобы найти свою плату:

arrowdown

Если и в этот раз вы не можете найти название своей платы ESP32,  рекомендуем повторить процесс установки с нуля.

C:/Users/User/Documents/Arduino/hardware/espressif/esp32/ tools/xtensa-esp32-elf/bin/xtensa-esp32-elf-g ++ »: файл не существует

Если Arduino IDE не может скомпилировать код для платы ESP32 и выдает данную ошибку, рекомендуем переустановить ESP32.

Примечание. На ПК с Windows часто установлено несколько версий Arduino IDE (portable и устанавливаемая). Убедитесь, что вы используете то приложение Arduino, в которое вы установили ESP32.

Не удалось подключиться к ESP32: время ожидания истекло… Подключение…»

В данном случае при попытке загрузить скетч на плату приложение не может подключиться к ней. Это значит, что ESP32 не находится в режиме прошивки / загрузки.

Выполните следующие действия:

  • Удерживайте кнопку «BOOT » на плате ESP32.

boot

  • Нажмите кнопку «Загрузка» в Arduino IDE, чтобы загрузить новый скетч:
  • После того, как вы увидите «Connecting…. » в Arduino IDE, уберите палец с кнопки «BOOT» :

uploading

  • После этого, вы должны увидеть сообщение о завершении загрузки

Вот и все. На ESP32 должен быть загружен новый скетч. После загрузки нового скетча нажмите кнопку «ENABLE», чтобы перезапустить ESP32 и запустить загруженный скетч.

Ошибка при компиляции скетча WiFiScan

Если вы попытаетесь загрузить скетч ESP32 WiFiScan.ino, который есть в примерах

Wifiscan-

И он не может скомпилироваться с подобным сообщением об ошибке:

In function void setup():

ScanNetworks:52: error: class WiFiClass has no member named firmwareVersion

String fv = WiFi.firmwareVersion();

То вероятнее всего, среда Arduino компилирует библиотеку WiFi для платы Arduino (вместо использования библиотеки ESP32 WiFi).

Примечание: Вы, вероятно, никогда не будете использовать WiFi-экран с платой Arduino, так ведь? Если вы его не используете, вы можете удалить эту папку (ну или переместить ее на рабочий стол, например).

Библиотека WiFi находится по аналогичному пути:

C:UsersruisantosDownloadsarduino-1.8.7-windowsarduino-1.8.7librariesWiFi

И /или в:

C:UsersruisantosDocumentsArduinolibrarieslibrariesWiFi

После удаления всей папки библиотеки WiFi из одного или обоих мест перезапустите Arduino IDE и попробуйте снова скомпилировать код.

COM-порт не найден / недоступен

Если вы подключаете плату ESP32 к компьютеру, но не можете выбрать порт ESP32, доступный в вашей Arduino IDE (он неактивен):

cannotfindcomport

Это может быть одна из следующих двух проблем:

  • Отсутствуют драйверы USB;
  • Кабель USB не имеет проводов для передачи данных.

Если вы не видите доступный COM-порт вашего ESP, это может означать, что у вас не установлены драйверы USB. Присмотритесь к микросхеме рядом с регулятором напряжения на плате и проверьте ее название.

Плата ESP32 DEVKIT V1 DOIT, например, использует чип CP2102.

CP2102

Зайдите в поисковик и найдите свой чип, установите драйверы для него.

DriverDownload

Вы можете скачать драйверы CP2102 на сайте Silicon Labs.

SiliconLabs

После их установки перезапустите Arduino IDE, и вы должны увидеть COM-порт в меню «Инструменты».

Если у вас установлены драйверы, но вы не видите свое устройство, еще раз проверьте, что вы используете USB-кабель с проводами для передачи данных.

USB-кабели от внешних аккумуляторов часто не имеют проводов для передачи данных (они только заряжают). То есть, ваш компьютер не сможет установить последовательную связь с ESP32. Используйте другой USB-кабель.

Монитор порта в Arduino IDE «не работает»

Если ESP32 выводит только странный текст или бессвязные сообщения в мониторе порта среды Arduino, убедитесь, что у вас выбран правильный COM-порт, и установите правильную скорость передачи. В большинстве примеров используется скорость 115200 бод.

115200baud

Ошибка: «Brownout detector was triggered»

Когда вы открываете монитор порта и появляется повторяющееся сообщение об ошибке «Brownout detector was triggered», скорее всего это значит, что есть какая-то проблема с оборудованием.

Это часто связано с одной из следующих проблем:

USB-кабель плохого качества;

Слишком длинный USB-кабель;

Дефект в плате (плохо припаянные соединения);

Неисправный USB-порт на ПК;

Через USB-порт на ПК идет недостаточно питания.

Решение: попробуйте другой более короткий USB-кабель, попробуйте другой USB-порт компьютера или используйте USB-концентратор с внешним источником питания.

Плата ESP32 не работает с Arduino IDE

Если вы следовали всем советам по устранению неполадок, а ESP32 не работает с Arduino IDE, мы рекомендуем попробовать редакторы Atom и PlatformIO.

Заключение

Мы надеемся, что руководство оказалось полезным. Если у вас возникнут другие проблемы, опубликуйте их в комментариях ниже, и мы постараемся помочь вам решить вашу проблему.

Данный материал был переведен с сайта RandomNerdTutorials.com. Авторские права принадлежат ее автору — Rui Santos. Автор продает очень полезные и толковые курсы по ESP8266 / ESP32 (на английском языке), ознакомиться с которыми можно по ссылке.
Вопросы по прошивке и работе с кодом лучше писать напрямую автору в комментариях к статье (на англ. языке)

  • #41

Ну это помогло бы для древних DOS-овских программ… Стоит все по умолчанию.

Я, в общем-то, писал не просто так. Я внимательно посмотрел инструкцию по ссылке, которую Вы приводили. И внимательно проверил разницу в пути из примера из инструкции и приведённому Вами. Так разница в том, что в примере из инструкции пробелов нету.

А впрочем, как знаете. Дело, как говорится, хозяйское…

pvvx

pvvx

Активный участник сообщества


  • #42

Сейчас опять напасть — переустановил все согласно этой инструкции.

WiFiScan из Arduino IDE вроде компилируется, но писаться в ESP32 не хочет:

Код:

Произошла ошибка при загрузке скетча

Что сейчас-то ему надо?

На оф. сайте написано, что ошибка в схеме модуля. Руками держите кнопку программирования.
Исправленных модулей я ещё не видел. Возможно они есть, но на али вроде всё такие — не всегда стартуют в режим программирования в Arduino…

Последнее редактирование: 24 Окт 2017

pvvx

pvvx

Активный участник сообщества


  • #43

Да мало ли что там в дескрипторе прописано. На заборе тоже написано кой-чего, а на самом деле там дрова. Может, вы думаете, что комп как-то ограничивает ток, выдаваемый в USB порт, исходя из описания?

Если у вас дешевая мамка, то не ограничивает ни как. Если на копейку больше, то дает до 0.5A. Если нормальный, то умолчанию дает 0.5A, а при указании по профилю устройсва от 0.1 до 3.0A. Если старый ноут, то варианта тоже два — 0.1 и 0.5A. :p
Перезапись в USB-UART микрухе значения на максимум (200..250 мА) утилитой для данной миркухи дает возможность хотя-бы залить в ESP-32S что. Иначе — только с внешним питанием. И такое Г. продают, а Arduin-щики хавают :)

На оф.сайте есть прошивки для теста модуля и так-же прошивки используемые при их проверке на сертификацию излучений от модуля — запустите и измерьте потребляемый в них ток. Тогда может поймете, что… Писатели IDF давно разбавляют ПО модуля всякими уловками для обхода пиков тока, типа вставок idle в виде задержек после команд/функций с большим потреблением (в расчете, что хватит заряда емкости питания :) и тем самым ограничить провалы), а вам то всё равно… Другие только и пишут им, что при провале питания, из-за неисправности BOR слетают установки в WiFi части чипа… В итоге одни разговоры о новых ревизиях чипа и как определить его версию, чтобы не нарваться на бракованные, выкинутые на али …

PS: вы уже не раз доказывали, что вам пофиг на всё, а главное поспорить о том, что не знаете и не имеете :p
Если не прописать увеличенное значение тока в микруху, то на всех моих компах модуль работает мигалкой :) Включается, комп считывает профиль, ограничивает ток и отключается. И по кругу :p
Я понимаю, что спецификацию USB сделали не для вас и спорить с вами бесполезно — вы уже объявляли, что вы великий инженер… :)

Последнее редактирование: 24 Окт 2017

A_D

Active member


  • #44

«Ты, Зин, на грубость нарываешься» (с) Чего вы влезли со своим дескриптором? Невежественное свое нещечко защищать своими такими же невежественными высерами, какими он загадил весь форум? Он со своими 100 мА ни к селу ни к городу влез, и вы туда же.

Это форум, где люди общаются и не Ваша личная переписка, даже топик не вами создан.
А «влез» (на форум то…) я потому, что на вполне программную вещь (конкретное предположение) начали приводить схему (в опровержение), какой там LDO стоит… это никак не относится к дескриптору.

Я вам русским языком объясняю, что дескриптор здесь совсем не в кассу и не может служить аргументом в пользу гипотезы «недостаточности питания», с которой выпилился юродивый. Питания достаточно, от USB десктопа не менее 0.9 А, и никакой дескриптор на это не влияет, от слова «вообще».

Тем не менее, даже на простое высказывание про дескриптор, вы привели совершенно бредовый аргумент против с приведением схемы, что вполне показывает, что с разработкой USB устройств опыта нет (ибо на высказывание с очевидным упоминанием дескриптора можно было просто сказать, что оно не всегда влияет, а так писать начали только после того, как я об этом написал и привёл дескриптор).

И не от USB3.0 эти 0.9А взялись, как вам по пригрезилось, а из уровня срабатывания защиты USB свичей, работающих под управлением USB хабов и выдающих питание в USB порты. Ибо все производители ставят самые дешевые свичи, для которых исторически уровень срабатывания защиты определен плохо. По спецификации USB должно быть не менее 0.5А, однако точное значение задавать было дорого, поэтому поставили с запасом, так и прижилось. Откройте даташит на обычный USB свич, которым уже сто лет в обед, и развейте свои заблуждения, чем молоть ерунду про USB 3.0, который тут вообще не пришей-пристебай.

Читать умеете ? По ссылке привёл вполне конкретные значения, откуда 0,9А (как раз вы привели эту цифру первым, отсюда и взял USB 3.0, на который и заявлен данный ток) взялись и ничего вроде не пригрезилось. А вы даже даташит не можете привести.

  • #45

На оф. сайте написано, что ошибка в схеме модуля. Руками держите кнопку программирования.
Исправленных модулей я ещё не видел. Возможно они есть, но на али вроде всё такие — не всегда стартуют в режим программирования в Arduino…

Из VS все прекрасно работает. Схема модуля ведь не меняется.

pvvx

pvvx

Активный участник сообщества


  • #46

Из VS все прекрасно работает. Схема модуля ведь не меняется.

Меняется задержка импульсов RESET и удержания ноги программирования включенные к RTS/CTS DTR/DSR по схеме от «всё для овечек» от NodeMCU.
Пытались это исправить программно, но в Arduinio не очень вышло…

….
и чем закончилась трансляция одного из них — не лезет в плату, не хочет, хотя опции загрузки вроде правильные…
Сейчас буду забивать сапогом… :)

Утрамбовал. Беда оказалась от умельцев в Espressif. При программировании надо тапком держать кнопку BOOT. Автомат не работает — покупайте новую глюк версию платы :)

A fatal error occurred: Failed to connect to ESP32: Invalid head of packet (‘p’) — ESP32 Forum

Если у вас потеряны файлы при линковке в Arduino — то этот вопрос к модулю отношения не имеет. По данной теме много нюансов для Arduino с разными осями и вариантами установок пользователем…
Найдите какое видео с вашими условиями (win7,8,10…) и тупо повторяйте, без своих введений. Это же концепт Arduino.

Последнее редактирование: 24 Окт 2017

  • #47

Меняется задержка импульсов RESET и удержания ноги программирования включенные к RTS/CTS DTR/DSR по схеме от «всё для овечек» от NodeMCU.
Пытались это исправить программно, но в Arduinio не очень вышло…

Вроде не из той серии. У меня все же ругается на отсутствие файла…

Ну ладно если так — может потом поправят — Arduino IDE я для разработки не использую — чисто иногда для контроля. В VS и проект компилируется заодно заметно быстрее, что тоже приятно, не говоря уж о прочих плюшках.

  • #48

Если у вас потеряны файлы при линковке в Arduino — то этот вопрос к модулю отношения не имеет. По данной теме много нюансов для Arduino с разными осями и вариантами установок пользователем…
Найдите какое видео с вашими условиями (win7,8,10…) и тупо повторяйте, без своих введений. Это же концепт Arduino.

Дык я как раз сегодня подобным и занимался. Надоело уже! Кроме того файл вроде на месте.

  • #49

А впрочем, как знаете. Дело, как говорится, хозяйское…

А у меня вы где пробелы в пути углядели?

pvvx

pvvx

Активный участник сообщества


  • #50

Вроде не из той серии. У меня все же ругается на отсутствие файла…

V1 :)

Ну ладно если так — может потом поправят — Arduino IDE я для разработки не использую — чисто иногда для контроля. В VS и проект компилируется заодно заметно быстрее, что тоже приятно, не говоря уж о прочих плюшках.

Ну и правильно.

  • #51

А у меня вы где пробелы в пути углядели?

У Вас:
Documents and Settings
В инструкции, что-то типа:
Documents

  • #52

Ну что сказать — повторил все с рабочего компа на домашнем.

Arduino IDE как и на рабочем не заливает прошивку.

А вот VS выдает в порт

Код:

rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:812
load:0x40078000,len:0
load:0x40078000,len:10212
entry 0x40078a00

Brownout detector was triggered

и крутит это дело по циклу.

Подключение электролита 3300мкф (просто такие валяются) по питанию спасает — все начинает работать как надо. Тут pvvx прав — без конденсатора происходит кратковременный провал напряжения питания из-за резко возросшего тока при включении WiFi. На рабочем компе этого нет, но там могут быть или провода USB-кабеля потолще или источник в компе помощней…

  • #53

V1 :)

Это все же версия модуля, а не чипа. Модуль другого производителя работает аналогично.

Последнее редактирование: 24 Окт 2017

pvvx

pvvx

Активный участник сообщества


  • #54

Это все же версия модуля, а не чипа. Модуль другого производителя работает аналогично.

Это схема авто-сброса от USB-UART на плате, сам чип и модуль тут уже не при чем.
ESP-32S пока не готова для «новичков». Слишком много ошибок и недоделок, да очень много старых версий ESP-32S чипов и старых кривых плат на али. Через пару лет распродадут этот брак, да допилят Arduino, тогда «новички» меньше будут нарываться на непонятности.

  • #55

Тем не менее, даже на простое высказывание про дескриптор, вы привели совершенно бредовый аргумент против с приведением схемы

Поначалу я подумал, что речь идет о встроенном в CP2102 регуляторе, у которого выходной ток 100 мА. Но потом оказалось, что в том посте содержалась еще большая глупость — ссылка на дескриптор, который вообще никакой роли не играет.

А вы даже даташит не можете привести.

Вас в гугле забанили?
TPS2052C, STMPS2242, и т.д. и т.п, несть им числа.

  • #56

Если у вас дешевая мамка, то не ограничивает ни как. Если на копейку больше, то дает до 0.5A. Если нормальный, то умолчанию дает 0.5A, а при указании по профилю устройсва от 0.1 до 3.0A. Если старый ноут, то варианта тоже два — 0.1 и 0.5A.

Ламерский бред. Мамок без ограничения тока вообще не существует в природе. Интел рекомендует в мамках ограничивать ток на уровне в 2.5…3 раза больше, чем макс. ток порта, то есть ближе к 1.5A для порта с номинальным током 0.5А.

Выход корневого хаба у десктопа согласно спецификации USB, обязан выдавать не менее 0.5А номинального тока:

Root port hubs: Are directly attached to the USB Host Controller. Hub power is derived from the same
source as the Host Controller. Systems that obtain operating power externally, either AC or DC, must
supply at least five unit loads to each port.

Так что гуляйте со своей детской верой в дескрипторы и профили. :D

pvvx

pvvx

Активный участник сообщества


  • #57

Ламерский бред. Мамок без ограничения тока вообще не существует в природе. Интел рекомендует в мамках ограничивать ток на уровне в 2.5…3 раза больше, чем макс. ток порта, то есть ближе к 1.5A для порта с номинальным током 0.5А.

Выход корневого хаба у десктопа согласно спецификации USB, обязан выдавать не менее 0.5А номинального тока:

Root port hubs: Are directly attached to the USB Host Controller. Hub power is derived from the same
source as the Host Controller. Systems that obtain operating power externally, either AC or DC, must
supply at least five unit loads to each port.

Так что гуляйте со своей детской верой в дескрипторы и профили. :D

Ну вот вы и подтвердили — 0.5A, а не 0,9A.
Теперь пишите в Интел и просите старые доки на USB2.0 для переносных и мобильных устройств, в чью кучу входят и ноуты и недоноуты :p
У нас хорошая детская вера всё проверять и всё пробовать, а не ваша старческая болезненная, с дешевыми китай-компом на малую пенсию заслуженного инженера Arduino :) :p

Но больше бы хотелось бы узнать, что за такая ваша рекомендация на хаб с коммутируемыми питаниями на каждую линию (обычно 4-ре) и при этом всего туда «ток на уровне в 2.5…3 раза больше»? :)
Вот не знаю — беру мамку и вижу специальные стабилизаторы и ограничители на выходы хотя-бы USB DAC-UP с адаптивной схемой регулировки напряжения питания. Это по этому они не Интел? :)

Последнее редактирование: 25 Окт 2017

  • #58

Ну вот вы и подтвердили — 0.5A, а не 0,9A.

Хе-хе, как истинный ламер вы не понимаете разницу между номинальным током и уровнем ограничения тока. Номинальный ток в порту, как я уже писал ранее, может быть 0.5А (five unit loads — это как раз 0.5А). Но при этом защита по току сработает на уровне 0.8..1.0А, а если мамка спроектирована в соответствии с рекомендациями Интела — то на уровне 1.5А.

pvvx

pvvx

Активный участник сообщества


  • #59

Хе-хе, как истинный ламер вы не понимаете разницу между номинальным током и уровнем ограничения тока. Номинальный ток в порту, как я уже писал ранее, может быть 0.5А (five unit loads — это как раз 0.5А). Но при этом защита по току сработает на уровне 0.8..1.0А, а если мамка спроектирована в соответствии с рекомендациями Интела — то на уровне 1.5А.

Хе-хе — вы о импульсном токе? Там фильтр стоит и кратковременные броски в 2 раза пропускает, а ограничивает по [inline]максимальному току из профиля[/inline].
Вы в первый раз узнаете, что у устройства при включении должны зарядиться кондеры? Или у вас одно г. из преисподней без максимально допустимых емкостей по питанию?
В общем усё ясно – тяжелая служба была у =AK=, компы не обновляют десятками лет, а если берут новый, то самый дешевый… Да и от куда знания, если всё должно быть со сколково :) Большие провода и много току… :)
———
Даже видео нашлось:

Последнее редактирование: 25 Окт 2017

  • #60

Там фильтр стоит и кратковременные броски в 2 раза пропускает, а ограничивает по [inline]максимальному току из профиля[/inline].

Где «там»?

Вы в первый раз узнаете, что у устройства при включении должны зарядиться кондеры? Или у вас одно г. из преисподней без максимально допустимых емкостей по питанию?

Тоже мне, открыли америку. Cпецификация USB накладывает ограничения на величину емкости в питании, о чем вы, как ламер, не знаете. Интел этот вопрос рассматривает отдельно, рекомендуя, чтобы броски тока до 5А нe вызывали срабатывания зашиты. А изготовители USB свичей специально вводят замедление в срабатывание защиты. Я выше ссылки дал на такие свичи, изучайте, займитесь самообразованием. Причем это маломощные, для простых хабов, а не для корневых.

Последнее редактирование: 25 Окт 2017

Справочник языка Arduino
Конструкции языка
  • setup()‎ • loop()
Управляющие операторы
  • if • if…else • for • switch case • while • do… while • break • continue • return • goto
Синтаксис
  • ; (точка с запятой) • () (фигурные скобки) • // (однострочный комментарий) • /* */ (многострочный комментарий) • #define • #include
Арифметические операторы
  • = (оператор присваивания) • + (оператор сложения) • — (оператор вычитания) • * (оператор умножения) • / (оператор деления) • % (оператор деления по модулю)
Операторы сравнения
  • == (оператор равенства) • != (оператор неравенства) • < (оператор меньше) • > (оператор больше) • <= (оператор меньше или равно) • >= (оператор больше или равно)
Логические операторы
  • && (И) • ИЛИ • ! (Отрицание)
Указатели
  • * (оператор разыменования) • & (оператор ссылки)
Побитовые операторы
  • Побитовый оператор AND (&) • Побитовый оператор OR • Побитовый оператор XOR (^) • Побитовый оператор NOT (~) • Побитовый оператор сдвига влево (<<) • Побитовый оператор сдвига вправо (>>)
Унарные операторы
  • ++ (инкремент) • — (декремент) • += (сложение с присваиванием) • -= (вычитание с присваиванием) • *= (умножение с присваиванием) • /= (деление с присваиванием) • &= (побитовый оператор AND, совмещенный с присваиванием) • |= (побитовый оператор OR, совмещенный с присваиванием)
Данные
Константы
  • Константы • HIGH • LOW • INPUT • OUTPUT • INPUT_PULLUP • LED_BUILTIN • true • false • Целочисленные константы • Константы с плавающей запятой
Типы данных
  • boolean • char • byte • int • unsigned int • word • long • unsigned long • float • double • string • String • array • void
Преобразование типов данных
  • char() • byte() • int() • word() • long() • float()
Область видимости переменных и квалификаторы
  • Область видимости • static • volatile • const
Utilities
  • sizeof() • PROGMEM
Функции
Цифровой ввод/вывод
  • pinMode() • digitalWrite() • digitalRead()
Аналоговый ввод/вывод
  • analogRead() • analogReference() • analogWrite()
Due & Zero
  • analogReadResolution() • analogWriteResolution()
Дополнительные функции ввода/вывода
  • tone() • noTone() • shiftOut() • shiftIn() • pulseIn()
Работа со временем
  • millis() • micros() • delay() • delayMicroseconds()
Математические функции
  • min() • max() • abs() • constrain() • map() • pow() • sq() • sqrt()
Тригонометрические функции
  • sin() • cos() • tan()
Функции для символьного анализа
  • isAlphaNumeric() • isAlpha() • isAscii() • isWhitespace() • isControl() • isDigit() • isGraph() • isLowerCase() • isPrintable() • isPunct() • isSpace() • isUpperCase() • isHexadecimalDigit()
Генераторы случайных значений
  • randomSeed() • random()
Работа с битами и байтами
  • lowByte() • highByte() • bitRead() • bitWrite() • bitSet() • bitClear() • bit()
Внешние прерывания
  • attachInterrupt() • detachInterrupt()
Прерывания
  • interrupts() • noInterrupts()
Функции передачи данных
  • Serial: if (Serial) • available() • availableForWrite() • begin() • end() • find() • findUntil() • flush() • parseFloat() • parseInt() • peek() • print() • println() • read() • readBytes() • readBytesUntil() • readString() • readStringUntil() • setTimeout() • write() • serialEvent()
  • Stream: available() • read() • flush() • find() • findUntil() • peek() • readBytes() • readBytesUntil() • readString() • readStringUntil() • parseInt() • parsefloat() • setTimeout()
USB (Leonardo based boards and Due only)
  • Keyboard • Mouse
Библиотеки Arduino
Стандартные библиотеки
EEPROM
  • read() • write() • update() • get() • put() • EEPROM[]
Ethernet
  • Класс Ethernet: begin() • localIP() • maintain()
  • Класс IPAddress: IPAddress()
  • Класс Server: Класс Server • EthernetServer() • begin() • available() • write() • print() • println()
  • Класс Client: Класс Client • EthernetClient() • if (EthernetClient) • connected() • connect() • write() • print() • println() • available() • read() • flush() • stop()
  • Класс EthernetUDP: begin() • read() • write() • beginPacket() • endPacket() • parsePacket() • available() • stop() • remoteIP() • remotePort()
Firmata
GSM
  • Класс GSM: Класс GSM • begin() • shutdown()
  • Класс GSMVoiceCall: Класс GSMVoiceCall • getVoiceCallStatus() • ready() • voiceCall() • answerCall() • hangCall() • retrieveCallingNumber()
  • Класс GSM SMS: Класс GSM_SMS • beginSMS() • ready() • endSMS() • available() • remoteNumber() • read() • write() • print() • peek() • flush()
  • Класс GPRS: Класс GPRS • attachGPRS()
  • Класс GSMClient:Класс GSMClient • ready() • connect() • beginWrite() • write() • endWrite() • connected() • read() • available() • peek() • flush() • stop()
  • Класс GSMServer: Класс GSMServer • ready() • beginWrite() • write() • endWrite() • read() • available() • stop()
  • Класс GSMModem: Класс GSMModem • begin() • getIMEI()
  • Класс GSMScanner: Класс GSMScanner • begin() • getCurrentCarrier() • getSignalStrength() • readNetworks()
  • Класс GSMPIN: Класс GSMPIN • begin() • isPIN() • checkPIN() • checkPUK() • changePIN() • switchPIN() • checkReg() • getPINUsed() • setPINUsed()
  • Класс GSMBand: Класс GSMBand • begin() • getBand() • setBand()
LiquidCrystal
  • LiquidCrystal() • begin() • clear() • home() • setCursor() • write() • print() • cursor() • noCursor() • blink() • noBlink() • display() • noDisplay() • scrollDisplayLeft() • scrollDisplayRight() • autoscroll() • noAutoscroll() • leftToRight() • rightToLeft() • createChar()
SD
  • Класс SD: begin() • exists() • mkdir() • open() • remove() • rmdir()
  • Класс File: available() • close() • flush() • peek() • position() • print() • println() • seek() • size() • read() • write() • isDirectory() • openNextFile() • rewindDirectory()
Servo
  • attach() • write() • writeMicroseconds() • read() • attached() • detach()
SPI
  • Класс SPISettings • begin() • end() • beginTransaction() • endTransaction() • setBitOrder() • setClockDivider() • setDataMode() • transfer() • usingInterrupt() • Расширенное использование шины SPI на Due
SoftwareSerial
  • Класс SoftwareSerial • available() • begin() • isListening() • overflow() • peek() • read() • print() • println() • listen() • write()
Stepper
  • Stepper(steps, pin1, pin2) • Stepper(steps, pin1, pin2, pin3, pin4) • setSpeed(rpm) • step(steps)
TFT
  • Класс TFT • Класс EsploraTFT • begin() • background() • stroke() • noStroke() • fill() • noFill() • text() • setTextSize() • point() • line() • rect() • width() • height() • circle() • image() • loadImage() • Класс PImage • PImage.height() • PImage.width() • PImage.isValid()
WiFi
  • Класс WiFi: • begin() • disconnect() • config() • setDNS() • SSID() • BSSID() • RSSI() • encryptionType() • scanNetworks() • status() • getSocket() • macAddress()
  • Класс IPAddress: • localIP() • subnetMask() • gatewayIP()
  • Класс WiFiServer: • Класс WiFiServer • WiFiServer() • begin() • available() • write() • print() • println()
  • Класс WiFiClient: • Класс WiFiClient • WiFiClient() • connected() • connect() • write() • print() • println() • available() • read() • flush() • stop()
  • Класс UDP: • Класс WiFiUDP • begin() • available() • beginPacket() • endPacket() • write() • parsePacket() • peek() • read() • flush() • stop() • remoteIP() • remotePort()
Wire
  • begin() • requestFrom() • beginTransmission() • endTransmission() • write() • available() • read() • onReceive() • onRequest()
Только для Arduino 101
CurieBLE
  • BLEPeripheral: • Класс BLEPeripheral • begin() • poll() • end() • setAdvertisedServiceUuid() • setLocalName() • setDeviceName() • setAppearance() • setEventHandler() • addAttribute() • disconnect() • central() • connected()
  • BLEDescriptor: • Класс BLEDescriptor
  • BLECentral: • Класс BLECentral • connected() • address() • disconnect() • poll()
  • BLECharacteristic: • Класс BLECharacteristic
  • BLEService: • Класс BLEService
CurieIMU
  • begin() • getGyroRate() • setGyroRate() • getAccelerometerRate() • setAccelerometerRate() • getGyroRange() • setGyroRange() • getAccelerometerRange() • setAccelerometerRange() • autoCalibrateGyroOffset() • autoCalibrateAccelerometerOffset() • noGyroOffset() • noAccelerometerOffset() • gyroOffsetEnabled() • accelerometerOffsetEnabled() • getGyroOffset() • getAccelerometerOffset() • setGyroOffset() • setAccelerometerOffset() • getDetectionThreshold() • setDetectionThreshold() • getDetectionDuration() • setDetectionDuration() • interrupts() • noInterrupts() • interruptEnabled() • getInterruptStatus() • getStepDetectionMode() • setStepDetectionMode() • readMotionSensor() • readAccelerometer() • readGyro() • readTemperature() • shockDetected() • motionDetected() • tapDetected() • stepsDetected() • attachInterrupt() • detachInterrupt()
CurieTimerOne
  • start() • restart() • kill() • attachInterrupt() • detachInterrupt() • readTickCount() • rdRstTickCount() • pause() • resume() • pwmStart() • pwmStop()
Только для Arduino Due
Audio
  • begin() • prepare() • write()
Scheduler
  • startLoop() • yield()
Только для Arduino Due, Zero и MKR1000
USBHost
  • Класс MouseController:Класс MouseController • mouseMoved() • mouseDragged() • mousePressed() • mouseReleased() • getXChange() • getYChange() • getButton()
  • Класс KeyboardController:Класс KeyboardController • keyPressed() • keyReleased() • getModifiers() • getKey() • getOemKey()
Только для Arduino Zero и MKR1000
Audio Frequency Meter Library
  • begin() • end() • setClippingPin() • checkClipping() • setAmplitudeThreshold() • setTimerTolerance() • setSlopeTolerance() • setBandwidth() • getFrequency()
AudioZero
  • begin() • play() • end()
RTC
  • begin() • setHours() • setMinutes() • setSeconds() • setTime() • setYear() • setMonth() • setDay() • setDate() • getHours() • getMinutes() • getSeconds() • getYear() • getMonth() • getDay() • setAlarmHours() • setAlarmMinutes() • setAlarmSeconds() • setAlarmTime() • setAlarmYear() • setAlarmMonth() • setAlarmDay() • setAlarmDate() • enableAlarm() • disableAlarm() • attachInterrupt() • detachInterrupt() • standbyMode()
Только для WiFi 101 и MKR1000
WiFi101
  • Класс WiFi: • begin() • disconnect() • config() • setDNS() • SSID() • BSSID() • RSSI() • encryptionType() • scanNetworks() • status() • macAddress()
  • Класс IPAddress: • localIP() • subnetMask() • gatewayIP()
  • Класс WiFiServer: • Класс WiFiServer • WiFiServer() • begin() • available() • write() • print() • println()
  • Класс WiFiClient: • Класс WiFiClient • WiFiClient() • Класс WiFiSSLClient • connected() • connect() • connectSSL() • write() • print() • println() • available() • read() • flush() • stop()
  • Класс WiFiUDP: • Класс WiFiUDP • begin() • available() • beginPacket() • endPacket() • write() • parsePacket() • peek() • read() • flush() • stop() • remoteIP() • remotePort()
Только для Arduino Robot
Robot
  • RobotControl: • Класс Robot • begin() • setMode() • pauseMode() • isActionDone() • lineFollowConfig() • digitalRead() • digitalWrite() • analogRead() • analogWrite() • updateIR() • knobRead() • compassRead() • keyboardRead() • waitContinue() • motorsWrite() • motorsStop() • turn() • pointTo() • beginSpeaker() • playMelody() • beep() • playFile() • tuneWrite() • tempoWrite() • beginTFT() • text() • drawBMP() • debugPrint() • clearScreen() • displayLogos() • drawCompass() • beginSD() • userNameRead() • userNameWrite() • robotNameRead() • robotNameWrite() • cityNameRead() • cityNameWrite() • countryNameRead() • countryNameWrite()
  • RobotMotor: • Класс RobotMotor • begin() • process() • parseCommand() • motorsWrite() • IRread()
Только для Arduino Yun
Bridge
  • Класс Bridge: begin() • put() • get() • transfer()
  • Класс Process: begin() • addParameter() • run() • runAsynchronously() • running() • exitValue() • close() • runShellCommand() • runShellCommandAsynchronously() • available() • read() • write() • peek() • flush()
  • Класс Console: begin() • end() • buffer() • noBuffer() • connected() • available() • read() • write() • peek() • flush()
  • Класс FileIO:
    • Класс FileSystem: begin() • open() • exists() • mkdir() • rmdir() • remove() • Класс File • close() • rewindDirectory() • openNextFile() • seek() • position() • size() • available() • read() • write() • peek() • flush()
  • Класс Mailbox: begin() • end() • readMessage() • writeMessage() • writeJSON() • messageAvailable()
  • Класс HttpClient: get() • getAsynchronously() • ready() • getResult()
  • Класс BridgeClient: stop() • connect() • connected() • available() • read() • write() • peek() • flush()
  • Класс BridgeSSLClient: stop() • connect() • connected() • available() • read() • write() • peek() • flush()
  • Класс BridgeServer: begin() • listenOnLocalhost() • noListenOnLocalhost() • write()
  • Deprecated classes:
    • Класс YunClient: stop() • connect() • connected() • available() • read() • write() • peek() • flush()
    • Класс YunServer: begin() • listenOnLocalhost() • noListenOnLocoalhost() • write()
USB-библиотеки (Leonardo, Micro, Due, Zero и Esplora)
Keyboard
  • begin() • end() • press() • print() • println() • release() • releaseAll() • write()
Mouse
  • begin() • click() • end() • move() • press() • release() • isPressed()
Коммуникация (сети и протоколы)
CmdMessenger
NewSoftSerial
OneWire
PS2Keyboard
SimpleMessageSystem
SSerial2Mobile
Webduino
X10
XBee
SerialControl
Датчики
CapacitiveSensing
Bounce
Дисплеи и светодиоды
Adafruit GFX
GLCD
LedControl
LedDisplay
Matrix
PCD8544
Sprite
ST7735
Примеры Arduino
Стандартные функции
Основы
  • BareMinimum — Допустимый минимум кода для начала работы.
  • Blink — Включаем и отключаем светодиод.
  • DigitalReadSerial — Считывание последовательной передачи данных через цифровой контакт.
  • AnalogReadSerial — Считывание последовательной передачи данных через аналоговый контакт.
  • Fade — Затухание-загорание светодиода с помощью Arduino.
  • ReadAnalogVoltage — Считывание напряжения, проходящего через аналоговый контакт.
Цифровой сигнал
  • BlinkWithoutDelay — Мигание без команды Delay
  • Button — Управление светодиодом при помощи кнопки
  • Debounce — Антидребезг
  • Debounce2 — Антидребезг2
  • ButtonStateChange — Определение изменения состояния кнопки
  • InputPullupSerial — Отслеживание состояния кнопки с помощью встроенного подтягивающего резистора
  • Tone — Проигрывание мелодии с помощью функции Tone
  • Pitch follower — Звук, реагирующий на изменяющуюся информацию
  • Simple keyboard — Простая клавиатура при помощи функции Tone
  • Tone4 — Проигрывание нот на разных динамиках с помощью функции Tone
Аналоговый сигнал
  • AnalogInPotSerial — Чтение данных от потенциометра и вывод через последовательный порт
  • AnalogInOutSerial — «Сырые» данные на входе, преобразованные на выходе, вывод результата на Serial Monitor
  • AnalogInput — Управление миганием светодиода при помощи потенциометра.
  • AnalogWriteMega — Затухание/загорание (один за одним) 12 светодиодов. Используется плата Arduino Mega.
  • Calibration — Определение максимума и минимума для данных от аналогового датчика.
  • Fading — Использование выходного аналогового контакта (ШИМ) для затухания/загорания светодиода.
  • Smoothing — Сглаживание серии данных, считанных с входного аналогового контакта.
Связь
  • ReadASCIIString — Анализ строки, состоящей из разделенных запятыми int-значений, и их последующее использование для управления RGB-светодиодом.
  • ASCII Table — Демонстрирует продвинутые способы вывода данных на Serial Monitor.
  • Dimmer — Изменение яркости светодиода при помощи движения мышкой.
  • Graph — Отправка данных на компьютер и их графическое отображение в скетче Processing.
  • Physical Pixel — Включение/выключение светодиода путем отправки данных со скетча Processing (или Max/MSP) на Arduino.
  • Virtual Color Mixer — Отправка с Arduino на компьютер сразу нескольких значений, а затем их считывание при помощи скетча для Processing или Max/MSP.
  • Serial Call Response — Многобайтная передача данных при помощи метода вызова и ответа (метода «рукопожатия»).
  • Serial Call Response ASCII — Многобайтная передача данных при помощи метода вызова и ответа (метода «рукопожатия»). До передачи данные зашифровываются в ASCII.
  • SerialEvent — Демонстрирует использование SerialEvent().
  • Serial input (Switch (case) Statement) — Как совершать различные действия, беря за основу символы, присланные через последовательный порт.
  • MIDI — Передача через последовательный порт сообщений с MIDI-нотами.
  • MultiSerialMega — Использование двух последовательных портов на Arduino Mega.
Управляющие структуры
  • If Statement — Как использовать оператор «if» для создания условий, опирающихся на входные аналоговые данные, при которых светодиод будет либо включаться, либо оставаться выключенным.
  • For Loop — Управление несколькими светодиодами, чтобы они мигали, как LED-полоска у автомобиля Китт из сериала «Рыцарь дорог».
  • Array — Вариация примера «For Loop», но с использованием массива.
  • While Loop — Использование цикла while() для калибровки датчика. Калибровка включается при нажатии на кнопку.
  • Switch Case — Как совершать какие-либо действия в зависимости от значений, полученных от датчика. Эквивалент примера «If Statement», но если бы условий было не два, а четыре. Этот пример демонстрирует, как дробить диапазон данных от датчика на четыре «суб-диапазона», а затем в зависимости от полученных результатов совершать одно из четырех действий.
  • Switch Case 2 — Второй пример, демонстрирующий использование оператора switch. Показывает, как совершать различные действия в зависимости от определенных символов, полученных через последовательный порт.
Датчики
  • ADXL3xx — Считывание данных с акселерометра ADXL3xx.
  • Knock — Определение стука при помощи пьезоэлемента.
  • Memsic2125 — Считывание данных с 2-осевого акселерометра Memsic2125.
  • Ping — Определение объектов при помощи ультразвукового дальномера.
Дисплей

Примеры, объясняющие основы управления дисплеем:

  • LED Bar Graph — Как сделать светодиодную шкалу.
  • Row Column Scanning — Как управлять матрицей светодиодов 8×8.
Строки
  • StringAdditionOperator — Добавление строк друг к другу различными способами
  • StringAppendOperator — Прибавление данных к строкам.
  • StringCaseChanges — Смена регистра в строках.
  • StringCharacters — Как задать/сосчитать значение определенного символа в строке.
  • StringComparisonOperators — Алфавитное сравнение строк.
  • StringConstructors — Как инициализировать строковые объекты.
  • StringIndexOf — Поиск символов в строке по принципу «столько-то позиций от начала» или «столько-то позиций от конца»
  • StringLength & StringLengthTrim — Как определить длину строки и обрезать ее.
  • StringReplace — Замена отдельных символов в строке.
  • StringStartsWithEndsWith — Как проверить, какими символами/подстроками начинается или заканчивается строка.
  • StringSubstring — Поиск в строке определенных «фраз».
USB (для Leonardo, Micro и Due плат)

В этой секции имеют место примеры, которые демонстрируют использование библиотек, уникальных для плат Leonardo, Micro и Due.

  • KeyboardAndMouseControl — Демонстрирует использование библиотек Mouse и Keyboard в одной программе.
Клавиатура
  • KeyboardMessage — Отправка текстовой строки при нажатии на кнопку.
  • KeyboardLogout — Выход из текущей пользовательской сессии при помощи клавиатурных комманд.
  • KeyboardSerial — Считывает байт, присланный через последовательный порт, а в ответ отсылает другой байт.
  • KeyboardReprogram — Открывает новое окно в среде разработки Arduino, а затем перешивает Leonardo скетчем «Моргание».
Мышь
  • ButtonMouseControl — Управление экранным курсором при помощи пяти кнопок.
  • JoystickMouseControl — Управление экранным курсором при помощи джойстика (условие – нажатая кнопка).
Разное
Arduino продукты
Начальный уровень Arduino Uno • Arduino Leonardo • Arduino 101 • Arduino Robot • Arduino Esplora • Arduino Micro • Arduino Nano • Arduino Mini • Arduino Starter Kit • Arduino Basic Kit • MKR2UNO • TFT-дисплей Arduino
Продвинутые функции Arduino Mega 2560 • Arduino Zero • Arduino Due • Arduino Mega ADK • Arduino Pro • Arduino Motor Shield • Arduino USB Host Shield • Arduino Proto Shield • MKR Proto Shield • MKR Proto Large Shield • Arduino ISP • Arduino USB 2 Serial Micro • Arduino Mini USB Serial Adapter
Интернет вещей Arduino Yun • Arduino Ethernet • Arduino MKR1000 • Arduino WiFi 101 Shield • Arduino GSM Shield V2 • Arduino WiFi Shield • Arduino Wireless SD Shield • Arduino Wireless Proto Shield • Arduino Ethernet Shield V2 • Arduino Yun Shield • Arduino MKR1000 Bundle
Носимые устройства Arduino Gemma • Lilypad Arduino Simple • Lilypad Arduino Main Board • Lilypad Arduino USB • LilyPad Arduino SimpleSnap
3D-печать Arduino Materia 101
Устаревшие устройства

NB: I introduced same issue report at espressif/esptool, because I don’t know actually where the problem could be: espressif/esptool#198

Hello ESP32 lovers,
I am facing a problem with a WEMS ESP32 dev board which I bough on Aliexpress very recently:
https://fr.aliexpress.com/item/ESP32-Development-Board-WiFi-Bluetooth-Ultra-Low-Power-Consumption-Dual-Cores-ESP-32-ESP-32S-Board/32801337284.html

I am able to flash it using Eclipse/esp-idf/xtensa-esp32-elf triplet. The /dev/tty.SLAB_USBtoUART device configured by «make menuconfig» makes the flashing process a success. Further on, my user application (one of the examples of esp-idf) starts and does what expected.

But, with Arduino IDE, this is not the same story. I have installed the toolchain as written at ESP32-Arduino github page, then selected «ESP32 dev module» as the board in Arduino IDE, and also selected /dev/tty.SLAB_USBtoUART as the flashing device.
Like I did for the Eclipse case, I reset dev board with RST and BOOT buttons. I verified to get the «DOWNLOAD» invite on the terminal, then closed the terminal pushed on flash button of Arduino IDE. All I get in Arduino logs is the following:

Sketch uses 118,890 bytes (11%) of program storage space. Maximum is 1,044,464 bytes.
Global variables use 9,492 bytes (3%) of dynamic memory, leaving 285,420 bytes for local variables. Maximum is 294,912 bytes.
/Users/lmc/Dropbox/arduino/hardware/espressif/esp32/tools/esptool --chip esp32 --port /dev/cu.SLAB_USBtoUART --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_freq 80m --flash_mode dio --flash_size 4MB 0x1000 /Users/lmc/Dropbox/arduino/hardware/espressif/esp32/tools/sdk/bin/bootloader.bin 0x8000 /var/folders/zx/4rs36y2j0315wny99n1j7fj80000gn/T/arduino_build_538507/Blink.ino.partitions.bin 0xe000 /Users/lmc/Dropbox/arduino/hardware/espressif/esp32/tools/partitions/boot_app0.bin 0x10000 /var/folders/zx/4rs36y2j0315wny99n1j7fj80000gn/T/arduino_build_538507/Blink.ino.bin 

esptool.py v2.0-beta
Connecting........_____....._____....._____....._____....._____....._____....._____....._____....._____....._____
 
A fatal error occurred: Failed to connect to ESP32: Timed out waiting for packet header
A fatal error occurred: Failed to connect to ESP32: Timed out waiting for packet header

The programming does not detect the dev board in download mode, and the flashing does not start.
As a workaround, I hooked up an external FTDI adapter cable directly to the ESP32, and then Arduino IDE is able to start the flashing. But after, the Arduino sketch does not seems to run. My simple Blink sketch is not running (it toggles a GPIO and prints some text on Serial console).

Issue 1: I saw a post about the problem of the FreeRTOS scheduler not started on Core1, or not enabled Core1, which could resolve the Arduino sketch not running (but I don’t know how to configure it within ESP32-Arduino libraries/board from inside Arduino IDE. Could it be a efuse which should be reset to enable Core1 to start?

Issue 2: Concerning my flashing issue, I don’t understand why my dev module can be successfully programmed by using the Makefile from within Eclipse/esp-idf, while it ends-up with a timeout from within ArduinoIDE/ESP32-Arduino toolchain.

Anyone could help me about my two issues?
Thank you so much.

Работаю и уже давно с ардуинкой в среде Arduino IDE 1.8.9
Тут  решил попробовать запрограммировать модуль  ESP-wroom-32.
Прописал, как положено в настройках >>  Дополнительные ссылки менеджера плат
https://dl.espressif.com/dl/package_esp32_index.json

В Инструментах через Менеджера плат сконфигурил плату. ESP32DEV Module
Порт нормально распознался /dev/ttyUSB0

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


Скетч использует 194488 байт (14%) памяти устройства. Всего доступно 1310720 байт.
Глобальные переменные используют 13340 байт (4%) динамической памяти, оставляя 314340 байт для локальных переменных. Максимум: 327680 байт.
esptool.py v2.6
Serial port /dev/ttyUSB0
Traceback (most recent call last):
  File "/home/user/.arduino15/packages/esp32/tools/esptool_py/2.6.1/esptool.py", line 2959, in <module>
Connecting...
Произошла ошибка при загрузке скетча
    _main()
  File "/home/user/.arduino15/packages/esp32/tools/esptool_py/2.6.1/esptool.py", line 2952, in _main
    main()
  File "/home/user/.arduino15/packages/esp32/tools/esptool_py/2.6.1/esptool.py", line 2653, in main
    esp.connect(args.before)
  File "/home/user/.arduino15/packages/esp32/tools/esptool_py/2.6.1/esptool.py", line 460, in connect
    last_error = self._connect_attempt(mode=mode, esp32r0_delay=False)
  File "/home/user/.arduino15/packages/esp32/tools/esptool_py/2.6.1/esptool.py", line 419, in _connect_attempt
    self._setRTS(True)   # EN=LOW, chip in reset
  File "/home/user/.arduino15/packages/esp32/tools/esptool_py/2.6.1/esptool.py", line 391, in _setRTS
    self._port.setDTR(self._port.dtr)
AttributeError: 'Serial' object has no attribute 'dtr'

Кто знает — что может быть? И как с этим бороться?


Записан


Приобрёл плату ESP32-WROOM-32 (ESP32 DevKit V1)
Установил ArduinoIDE 1.8.5, в менеджере плат установил библиотеки ESP32 (по приведённой выше ссылке скачивание не удалось, использовал
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
как указано на сайте разработчкика:
https://docs.espressif.com/projects/arduino-esp32/en/latest/installing.html

При компиляции  под плату ESP32 DevBoard простого кода, содержащего только пробное обращение к Wire.h:

#include <Wire.h>
void setup() {Serial.begin(115200);  Serial.println(«SetUp Done»);}
void loop() {Serial.println(«It’s work»); delay(1000);}

вылетает куча ошибок — в точности как тут:
https://github.com/espressif/arduino-esp32/issues/5825
Полное удаление arduino, удаление ~/.arduino15 и ~/Arduino, чистовая установка — не помогли. После полной переустановки:

Ремаркирую #include <Wire.h> — обычные функции обмена по последовательному порту типа Serial.writeln() — работают, простеникий код компилируется и работает!

Добавляю в код функцию библиотеки Wire.h:
Wire.begin();
Компилирую. Получаю ошибку:
error: ‘Wire’ was not declared in this scope
   Wire.begin();
   ^~~~
‘Wire’ was not declared in this scope

Снимаю ремарку с //#include <Wire.h> — получаю снова кучу ошибок.

Я так понимаю, что в библиотеках платы уже есть часть функций wire.h и они конфликтуют с ардуиновской библиотекой Wire.h
Что делать?…


Записан


Обе версии Arduino 1.8.5 и 1.8.9 устаревшие. Датируется 2017 и 2019 годом, см. https://www.arduino.cc/en/software/ReleaseNotes .
Версия Arduino из репозитория сломана из-за https://bugzilla.altlinux.org/42586 .

Поэтому устанавливать нужно последнию стабильную версию 1.8.19 с официального сайта примерно так

su -c "apt-get install python3-module-serial"
su -c "usermod -a -G dialout user" # замените user на реальное имя пользователя
su -c "usermod -a -G uucp user" # замените user на реальное имя пользователя

cd ~/Downloads
wget -c https://downloads.arduino.cc/arduino-1.8.19-linux64.tar.xz
tar -xf arduino-1.8.19-linux64.tar.xz
cd arduino-1.8.19
su -c ./install.sh


Далее запускаете Arduino IDE и делаете все по официальной инструкции, используя при этом в менеджере плат ссылку https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
. Протестировал этот метод перед публикацией на чистом свежем StarterKit p10 MATE — все работает.

Затем можете открыть, скомпилировать и дальше модифицировать пример WireScan: File → Examples → Examples for ESP32 Dev Module → Wire → WireScan. И все дальнейшую разработку можете вести в опоре на официальные актуальные примеры, установленные вместе с BSP от Espressif, а не на рандомные примеры блоггеров.

« Последнее редактирование: 17.09.2022 15:48:56 от N0rbert »


Записан



Записан


У меня промежуточный успех:
1) установил из репозитория пакеты pip, python-module-pip и python3-module-pip
2) снёс Arduino полностью со всеми модулями arduino*, подчистил ~/.arduino15, ~/Arduino и даже ./root/Arduino
3) установил arduino штатным путём — получил 1.8.5
4) воспользовался инструкцией https://randomnerdtutorials.com/installing-the-esp32-board-in-arduino-ide-windows-instructions/
прописал путь https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
5) отличие от предыдущих опытов — установил ESP32 версии 1.0.6
6) открываю скетчи из примеров — компилируется, собирается, прошивается, работает без ошибок и предупреждений (чего на ESP32 v2.0.x не получалось)
wire.h пока не пробовал.
P.S.: Как я понял слова моего знакомого, что у этой платы провод для связи с консолью один и одновременно по Serial и i2c по нему общаться не получится — потому Serial и Wire будут конфликтовать. Я мог не правильно понять. Возможно, для параллельной работы требуется просто другая библиотека (типа TwoWire)

« Последнее редактирование: 18.09.2022 00:26:51 от P.S. »


Записан


Окончательный успех!
1) всё работает со старой версией библиотек ESP32 (версия 1.0.6) — кстати, они сильно меньше занимают места на диске (245Мб), чем версия 2.0.х (2,5Гб)
2) нужно явно указывать тип константы размера считываемых регистров при обращении к Wire.requestFrom — то есть либо все передаваемые аргументы определить как int, либо как uint16_t, uint8_t и bool.
Я сделал определение их в начале программы:

// Board: ESP32 Dev Module + MPU6050
//pinout:
// GY-521_VCC - ESP32_3V3
// GY-521_GND - ESP32_GND
// GY-521_SCL - ESP32_D22
// GY-521_SDA - ESP32_D21

 #include <Wire.h>
const uint16_t MPU_addr=0x68;  // MPU-6050 I2C-address
const uint8_t MPU_size=14;
int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ;
void setup(){
 Serial.begin(115200);
 Serial.println("Serial connection established.");
 Wire.begin();
 Wire.beginTransmission(MPU_addr);
 Wire.write(0x6B);  // PWR_MGMT_1
 Wire.write(0);     // set to 0 to wakeup MPU-6050
 Wire.endTransmission(true);
 Serial.println("Wrote to IMU");
}
void loop(){
 mpu_read();
}
void mpu_read(){
 Wire.beginTransmission(MPU_addr);
 Wire.write(0x3B);  // starting from 0x3B (ACCEL_XOUT_H)
 Wire.endTransmission(false);
 Wire.requestFrom(MPU_addr,MPU_size,true);  // request all of 14 register (as defined)
 AcX=Wire.read()<<8|Wire.read();  // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)
 AcY=Wire.read()<<8|Wire.read();  // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
 AcZ=Wire.read()<<8|Wire.read();  // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
 Tmp=Wire.read()<<8|Wire.read();  // 0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L)
 GyX=Wire.read()<<8|Wire.read();  // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)
 GyY=Wire.read()<<8|Wire.read();  // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L)
 GyZ=Wire.read()<<8|Wire.read();  // 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L)
 Serial.print("Accelerometer Values: ");
 Serial.print("AcX: "); Serial.print(AcX); Serial.print(" AcY: "); Serial.print(AcY); Serial.print(" AcZ: "); Serial.print(AcZ);   
 Serial.print("   Gyroscope Values: ");
 Serial.print("GyX: "); Serial.print(GyX); Serial.print(" GyY: "); Serial.print(GyY); Serial.print(" GyZ: "); Serial.print(GyZ);
 Serial.print("  Temperature: " );  Serial.print(Tmp);
 Serial.print("n");
 delay(300);
 }

Всё скомпилировалось без ошибок и предупреждений, плата работает, вопрос решён.

« Последнее редактирование: 18.09.2022 00:21:32 от P.S. »


Записан


Проблемы с прошивкой flash-памяти обычно непросто устранить. Ниже приедены несколько советов по решению распространенных проблем.

[Загрузчик не отвечает]

Если в serial-консоли появляются ошибки наподобие «Failed to connect», то возможно чип не может правильно запустить загрузчик:

• Проверьте, что в командной строке утилиты монитора (обычно это скрипт idf.py) правильно указано имя последовательного порта.
• Проверьте, что у Вас есть разрешения на доступ к последовательному порту, и что какое-то другое программное обеспечение (такое как modem-manager на Linux) не пытается взаимодействовать с нужным последовательным портом. Часто бывает, что в другом окне уже открыто забытое соединение с используемым портом, и второе подключение создать не удается.
• Проверьте, что на чипе присутствует питание 3.3V от стабилизированного источника (см. далее «Плохое питание»).
• Проверьте, что все выводы чипа подключены так, как описано в документации по выбору режима загрузки [2]. Проверьте напряжения на каждом выводе мультиметром или осциллографом, ножки с лог. 1 должны иметь напряжение, близкое к 3.3V, и ножки с лог. 0 близкое к 0V.
• Если к выводам GPIO чипа подключены другие устройства, попробуйте их отключить, и проверьте, заработает ли соединение с загрузчиком.
• Попробуйте уменьшить скорость соединения. Скорость 9600 самая маленькая допустимая скорость для соединения с загрузчиком, обычно используемая для отладки проблем скорости serial-соединения (настройте baud rate опцией -b 9600 скрипта idf.py).

[Случайные ошибки в процессе записи flash]

Если при записи происходят сбои, попробуйте уменьшить скорость подключения к последовательному порту. Также причиной случайных сбоев могут быть проблемы с питанием (см. «Плохое питание»).

[Запись произошла успешно, но приложение не запускается]

Если esptool может прошить Ваш модуль командой write_flash, но программа не запускается, то проверьте следующее:

Неправильно выбранный режим SPI flash. Некоторые устройства поддерживают только режим прошивки dio. Запись во flash в режиме qio происходит успешно, но чип не может обратно прочитать flash, чтобы запустить программу — так что загрузка приложения не происходит. Попробуйте передать опцию -fm dio в команду write_flash.

См. документацию [3] для получения полного описания режимов flash, и как определить, какие из них поддерживает Ваше устройство.

Плохое питание. Чип ESP может потреблять от 3.3V достаточно большой ток (до 70 мА непрерывно, 200 .. 300 мА в пике, или даже больше). На шине питания должен присутствовать конденсатор достаточной емкости, чтобы сгладить спады по питанию в пиках потребления тока.

Если Вы используете предварительно собранную отладочную плату или модуль, то установленный на плате регулятор напряжения может предоставлять недостаточную мощность, чтобы обеспечить стабильную работу системы. На модулях от Espressif и других известных поставщиков обычно такой проблемы нет. Однако в некоторых случаях модули, наподобие ESP-WROOM02 и ESP-WROOM32, могут потребовать подключения снаружи дополнительного блокирующего конденсатора.

Выход 3.3V адаптеров USB-UART (например FTDI FT232R), или плат Arduino часто не предоставляет достаточной мощности по питанию.

[Отсутствует загрузчик]

ESP-IDF использует загрузчик второй стадии, работающий после заводского аппаратного, который находится в постоянной памяти чипа (boot ROM). На ESP32 образ загрузчика должен быть прошит со смещением 0x1000 относительно начала памяти flash. Среда разработки ESP-IDF делает это автоматически после выполнения соответствующих команд компиляции и прошивки (idf.py build flash). См. документацию ESP-IDF для получения информации, какие двоичные файлы нужно прошить, и по какому смещению (также см. [4]).

[Проблемы с сигналами SPI]

В сравнении с ROM bootloader, утилита esptool и работающий код загрузчика второй стадии использует намного больше внешних выводов, чтобы обмениваться данными с SPI flash.

Если используется режим «Quad I/O» (-fm qio, что esptool использует по умолчанию), то для доступа к SPI flash используются выводы GPIO7, GPIO8, GPIO9 и GPIO10, и они не должны использоваться для других целей. Если установлен режим «Dual I/O» (-fm dio), то используются GPIO7 и GPIO8, и они не должны использоваться для других целей.

Попробуйте отключить все постороннее от этих выводов. Попробуйте поменять режим «Dual I/O», если использовался «Quad I/O», или наоборот. Проверьте целостность сигналов подключений к памяти SPI flash, отсутствие замыканий между ними и на другие цепи. Имейте в виду, что если GPIO9 и GPIO10 также подключены к входным выводам чипа SPI flash, их все еще нельзя использовать как порты ввода/вывода общего назначения.

В дополнение к этим выводам, ножки GPIO6 и GPIO11 также используются для доступа к SPI flash (во всех режимах). Если эти выводы подключены неправильно, то прошивка обычно не работает.

[Сбой на ранней стадии загрузки]

Используйте программу последовательного терминала, чтобы просмотреть сообщения лога загрузчика (ESP32 использует скорость 115200 bps). Это позволит увидеть сообщения об ошибке и понять причину сбоя загрузки или запуска программы.

Существует множество программ терминала, которые можно использовать для отладки и взаимодействия с приложением через последовательный порт UART. Модуль pyserial (который требуется для утилиты esptool) включает в себя одну из таких программ терминала, запускаемых в командной строке — miniterm.py. Для дополнительной информации см. документацию pyserial [5], или запустите подсказку командой miniterm -h.

ROM serial bootloader в чипах Espressif использует соединение UART с уровнями 3.3V. На большинстве отладочных плат разработчика такое соединение организовано через схему преобразователя USB-UART.

Однако если Вы используете чип ESP32 на своей плате, и сами подключили отдельный адаптер USB/Serial для соединения с хостом отладки, то необходимо выполнить следующие соединения:

Ножка чипа ESP Сигнал адаптера USB-UART
TX (передача) RX (прием)
RX (прием) TX (передача)
GND GND

Обратите внимание, что TX (передача) чипа ESP соединяется с RX (прием) адаптера последовательного порта, и наоборот. Внимание: не подключайте чип последовательным адаптерами с уровнями 5V TTL, особенно к «стандартным» адаптером RS-232! Используйте только уровни сигналов 3.3V!

[Настройки последовательного порта]

При соединении с ESP32 ROM serial bootloader, рекомендуются следующие настройки последовательного порта:

Baud rate 115200
Data bits 8
Stop bits GND
Parity None
Flow control None

[Трассировка взаимодействий esptool]

Запуск esptool.py —trace будет выводить дамп всех последовательных интерактивных взаимодействий в стандартный вывод (данных будет выводиться довольно много). Это полезно для отладки проблем с последовательным соединением, или когда предоставляете информацию для техподдержки в виде bug-репорта.

Для дополнительной информации см. секцию «Tracing Esptool Serial Communications» документации по последовательному протоколу [7].

[Часто встречающиеся ошибки]

Ниже приведен не исчерпывающий список самых частых ошибок esptool с объяснением возможных причин и способов устранения. Перед тем, как предпринять какие-либо действия по исправлению, выполните все ранее перечисленные указания.

No serial data received. Утилита esptool не принимает никакие байты данных, или не может успешно принять пакет SLIP [7]. Эта ошибка обычно означает какую-то аппаратную проблему (перепутаны ножки RX/TX, или не подключены). Проверьте уровни сигналов и их наличие осциллографом, а также нет ли проблем со сбросом и выбором режима загрузки после сброса [2].

Wrong boot mode detected (0xXX)! The chip needs to be in download mode. В этом случае обмен с чипом работает (виден лог ROM boot), но чип автоматически не сбрасывается в режим загрузки.

Для решения проблемы проверьте схему автосброса (если на Вашей плате она есть), или попробуйте вручную выполнить сброс в режим загрузки. Как это делать, см. секцию «Manual Bootloader» документации [2].

Download mode successfully detected, but getting no sync reply: The serial TX path seems to be down. Чип успешно сбрасывается в режим загрузки и посылает данные компьютеру хоста, но не получает ничего в ответ от утилиты esptool. Это означает наличие проблемы с сигналом передачи от хоста к устройству ESP (RX ESP32 и TX адаптера USB-UART). Еще раз проверьте вашу плату и сигналы последовательного порта.

Invalid head of packet (0xXX): Possible serial noise or corruption. Причины этой ошибки могут быть следующие:

• Некачественный кабель USB.
• Иногда на плате макетирования могут замыкать ножки SPI flash, создавая подобную проблему. Попробуйте извлечь плату разработки из платы макетирования.
• На чипе во время прошивки может сработать аппаратный детектор пониженного напряжения (brown out). Часто это бывает при подаче питания от 3.3V регулятора чипов FTDI, или наличие других проблем питания (см. выше секцию «Плохое питание»).

Что можно сделать:

• Попробуйте выполнить синхронизацию и обмен на пониженной скорости, например esptool.py —baud 9600 …
• Попробуйте вывести дамп трассировки запуском esptool.py —trace …, и посмотрите, принимается ли что-нибудь обратно.
• Попробуйте пропустить стадию автодетекта чипа путем явного указания используемого кристалла. Например, запустите esptool.py —chip ESP32 …

Если ничего не помогает, то откройте тикет в службе техподдержки (open a new issue на GitHub).

[Ссылки]

1. ESP32 Troubleshooting site:docs.espressif.com.
2. Boot Mode Selection site:docs.espressif.com.
3. SPI Flash Modes site:docs.espressif.com.
4. ESP32: процесс запуска приложения.
5. serial.tools.miniterm site:pyserial.readthedocs.io.
6. Serial Connection site:docs.espressif.com.
7. Serial Protocol site:docs.espressif.com.
8. ESP32: как реализовать автозагрузку прошивки.

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Произошла ошибка при загрузке скетча avrdude stk500 recv programmer is not responding
  • Произошла ошибка при загрузке скетча arduino uno