Автор Тема: Arduino IDE и ESP-wroom-32  (Прочитано 6081 раз)

Оффлайн woronin

  • Завсегдатай
  • *
  • Сообщений: 381
    • Email
Arduino IDE и ESP-wroom-32
« : 20.08.2019 16:30:24 »
Работаю и уже давно с ардуинкой в среде 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'


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

Оффлайн P.S.

  • Начинающий
  • *
  • Сообщений: 3
Re: Arduino IDE и ESP-wroom-32
« Ответ #1 : 17.09.2022 12:57:36 »
Приобрёл плату 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
Что делать?...

Оффлайн N0rbert

  • Давно тут
  • **
  • Сообщений: 106
Re: Arduino IDE и ESP-wroom-32
« Ответ #2 : 17.09.2022 15:15:12 »
Обе версии 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 »

Оффлайн Александр Ерещенко

  • Завсегдатай
  • *
  • Сообщений: 961
Re: Arduino IDE и ESP-wroom-32
« Ответ #3 : 17.09.2022 16:00:26 »
Тут на днях уже вышла Arduino IDE 2.0, где кардинально её переработали
https://www.opennet.ru/opennews/art.shtml?num=57784

Оффлайн P.S.

  • Начинающий
  • *
  • Сообщений: 3
Re: Arduino IDE и ESP-wroom-32
« Ответ #4 : 17.09.2022 19:44:20 »
У меня промежуточный успех:
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. »

Оффлайн P.S.

  • Начинающий
  • *
  • Сообщений: 3
Re: Arduino IDE и ESP-wroom-32
« Ответ #5 : 17.09.2022 23:15:23 »
Окончательный успех!
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. »