Код Mega не компилируется на плате Wemos Mega

Привет, у меня есть код, который я пытаюсь перенести с Mega 2560 R3 на Wemos Mega.

#include "SoftPWM.h"
#include ESP8266WiFi.h

// Выходы на ШИМ & H направление моста
// ШИМ:
// DC_pwm, left_pwm, right_pwm = 3, 4, 5
int pwm_out[] = {3, 4, 5};
const int num_pwm = sizeof(pwm_out) / sizeof(pwm_out[0]);

// Управление направлением моста H:
// dc_1, dc_2, left_1, left_2, right_1, right_2 = 6, 7, 8, 9, 10, 11
int dir_pins[] = {6, 7, 8, 9, 10, 11};
const int num_dir_pins = sizeof(dir_pins) / sizeof(dir_pins[0]);

// Переменная для чтения входных контактов
int from_r_pi_pwm = 0;
int from_r_pi_dir = 0;

void setup() {

  // Входные данные от Raspberry Pi
  Serial.begin(38400);

  // Настраиваем контакты ШИМ
  SoftPWMBegin();
  for (int i = 0; i < num_pwm; i++)
  {
    SoftPWMSet(pwm_out[i], 0);
  }

  // Устанавливаем контакты направления моста H
  for (int i = 0; i < num_dir_pins; i++)
  {
    pinMode(dir_pins[i], OUTPUT);
    digitalWrite(dir_pins[i], LOW);
  }
}

void loop() {

  // Проверка ввода от R Pi & отправь его на H-бриджи
  while (Serial.available() < 2){}

  if (Serial.available()) {
      // читаем входящие байты:
      from_r_pi_dir = Serial.read();
      from_r_pi_pwm = Serial.read();
      Serial.print("Serial in: directions - ");
      Serial.print(from_r_pi_dir);
      Serial.print(" PWM - ");
      Serial.print(from_r_pi_pwm);
      Serial.println();
  }

  // Устанавливаем направления на H мостах
  for (int i = 0; i < num_dir_pins; i++)
  {
    digitalWrite(dir_pins[i], bitRead(from_r_pi_dir, i));
    Serial.print("pin ");
    Serial.print(dir_pins[i]);
    Serial.print(" : ");
    Serial.print(digitalRead(dir_pins[i]));
    Serial.println();
  }

  // ШИМ для двигателей
  for (int i = 0; i < num_pwm; i++)
  {
    analogWrite(pwm_out[i], from_r_pi_pwm);
    Serial.print("pin ");
    Serial.print(pwm_out[i]);
    Serial.print(" : ");
    Serial.print(digitalRead(pwm_out[i]));
    Serial.println();
  }
}

Это компилируется и отлично работает на Mega & это мой код для настройки PWM & h мосты.

Итак, когда я играл с Wi-Fi, я выбрал плату Wemos R1 из программатора & все работало нормально, но если я попробую это с этим кодом, то получу:

#include <avr/io.h>
                    ^ 
compilation terminated.

exit status 1 Error compiling for board WeMos D1 R1.

Итак, после небольшого поиска я обнаружил, что мне следует выбрать Arduino/Genuino Mega 2560, но теперь время загрузки продолжает истекать,

avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_getsync(): timeout communicating with programmer
An error occurred while uploading the sketch

Кто-нибудь сталкивался с этим раньше?

Обновление №1: Согласно комментарию ниже, я попытался установить DIP-переключатели 1 и amp; 2 ВКЛ, а все остальное ВЫКЛ (я также пробовал 1, 2, 3 и 4 ВКЛ, а остальные ВЫКЛ), но все равно та же ошибка компиляции, если я выбираю плату Wemos.

Если я выберу Mega 2560, я получу ESP8266WiFi.h: Нет такого файла или каталога, что является новой ошибкой!

, 👍0

Обсуждение

Вы не можете просто скомпилировать код для Mega и для WeMos. Это совершенно другое оборудование. В Arduino Mega используется чип Atmega, а в WeMos — ESP. Вам придется пройти весь код, поменять пины, проверить, доступно ли необходимое оборудование в этом чипе и проверить, совместимы ли используемые библиотеки с ESP. Портирование, по большей части, непростая задача., @chrisl

Доска Wemos — это Mega и EPS на одной доске. См. [здесь](https://www.instructables.com/id/Arduino-MEGA-2560-With-WiFi-Built-in-ESP8266/), @DrBwts

Включите DIP-переключатели 1 и 2, все остальные ВЫКЛЮЧИТЕ., @Juraj

@Юрай попробовал это, но ошибка компиляции все та же, если я выберу плату Wemos и если я выберу Mega 2560, я получу _ESP8266WiFi.h: Нет такого файла или каталога_, @DrBwts


1 ответ


Лучший ответ:

1

Плата Wemos/Mega и настройка IDE сложны и не для слабонервных. Вот таблица настроек DIP-переключателя:

1=ON  2=ON  3=OFF 4=OFF 5=OFF 6=OFF 7=OFF 8=OFF (ATmega2560<->ESP8266)
1=OFF 2=OFF 3=ON  4=ON  5=OFF 6=OFF 7=OFF 8=OFF (USB <->ATmega2560)
1=OFF 2=OFF 3=OFF 4=OFF 5=ON  6=ON  7=ON  8=OFF (USB<->ESP8266 (Update firmware or sketch))
1=OFF 2=OFF 3=OFF 4=OFF 5=ON  6=ON  7=OFF 8=OFF (USB<->ESP8266 (communication))
1=OFF 2=OFF 3=OFF 4=OFF 5=OFF 6=OFF 7=OFF 8=OFF (All independent)

Настольный DIP-переключатель, специальное решение:

1=ON 2=ON 3=ON 4=ON 5=OFF 6=OFF 7=OFF 8=OFF (USB <-> ATmega2560<-> ESP8266)
USB converter CH340G connect to RX0/TX0 of ATmega2560
ESP8266 connect to RX3/TX3 of ATmega25

https://arduino-esp8266.readthedocs.io/en/latest/index.html для документации ESP8266.

Установите URL-адрес дополнительных плат: http://arduino.esp8266.com/stable/package_esp8266com_index.json в настройках

В разделе «Инструменты» выберите «Плата», затем «Диспетчер плат», затем установите esp8266 от сообщества ESP8266

Настройка Arduino IDE требует понимания того, какие настройки платы и настройки связи следует использовать для создания и загрузки скетча.

В разделе «Инструменты» выберите «Плата», затем выберите «Arduino/Genuino Mega или Mega 2560»

Установите DIP-переключатели на плате в положение 1=ВЫКЛ. 2=ВЫКЛ. 3=ВКЛ. 4=ВКЛ. 5=ВЫКЛ. 6=ВЫКЛ. 7=ВЫКЛ. 8=ВЫКЛ (USB <->ATmega2560)

Это была настройка DIP-переключателя и USB.

Ссылка. https://forum.arduino.cc/index.php?topic=578430.0

Ошибка ESP8266WiFi.h: нет такого файла или каталога проста. Имя файла должно представлять собой строку: #include «ESP8266WiFi.h».

,