Общие вопросы по Arduino IDE для ESP8266

Slacky

Member
А вот еще глупый вопрос. Как в среде передаются параметры в функциях? Точнее, как написать я знаю, но что происходит с памятью? Например такой код приводит к циклической отработке wdt и перегрузке.

Код:
bool existsFile(String path) {
  if (DEBUG) {
    Serial.print("Begin func existsFile(");
    Serial.print(path);
    Serial.println(")");
  }
    return SD.exists(path);
}
А вот такой отрабатывает нормально

Код:
bool existsFile(char *path) {
  if (DEBUG) {
    Serial.print("Begin func existsFile(");
    Serial.print(path);
    Serial.println(")");
  }

  return SD.exists(path);
}
 

Slacky

Member
Разобрался. Нельзя строку передавать в SD. А как привести к char[] не сразу сообразил. Подглядел в одном месте, по поиску нашел. Вот кусочек, вдруг кому пригодится.

Код:
void rmDirR(String dir) {
      String localPath;
      localPath = dir + '\0';
      char charBuf[localPath.length()];
      localPath.toCharArray(charBuf, localPath.length() );
      SD.rmdir(charBuf);
}
 

Slacky

Member
в char можно без ручного выделения памяти - localPath.c_str()
Применительно к SD нельзя. Я это первым дело проверил.

Код:
Exception (3):
epc1=0x401003d2 epc2=0x00000000 epc3=0x00000000 excvaddr=0x40100542 depc=0x00000000

ctx: sys
sp: 3ffee550 end: 3fffffb0 offset: 01a0

>>>stack>>>
3ffee6f0:  00000000 00000000 00000000 00000000 
3ffee700:  00000000 00000000 00000000 3ffee71c 
3ffee710:  00000020 3ffee7a0 00000000 4010053d
 

DenisBelkaShel

New member
помогите, пожалуйста, не понимаю что делать.
Вчера в Ардуино Иде все работало, спокойно перепрошивалась плата ESP, но сегодня при входе в менеджер плат, пытается загрузить пакеты и выдает такую ошибку
Возникла ошибка при загрузке http://arduino.esp8266.com/package_esp8266com_index.json
Возникла ошибка при загрузке http://arduino.esp8266.com/staging/package_esp8266com_index.json
пробовал 2 ссылке и по очереди и так и сяк, на 2-ух разных компьютерах, через разную интернет сеть подгружать, не работает.
 

Slacky

Member
Наваял маленький проектик. Задумался про зависания. Начал рыть про wdt. С ходу вот такой код не заработал.

Код:
#include <ESP.h>

void setup() {
  wdt_disable(); // бесполезная строка до которой не доходит выполнение при bootloop
  Serial.begin(115200);
  Serial.println("\n\nSetup..");
 
  Serial.println("Wait 5 sec..");
  delay(5000); // Задержка, чтобы было время перепрошить устройство в случае bootloop
  wdt_enable (WDTO_8S); // Для тестов не рекомендуется устанавливать значение менее 8 сек.
  Serial.println("Watchdog enabled.");
}

int timer = 0;

void loop(){
  if(!(millis()%1000)){
    timer++;
    Serial.println(timer);
    delay(1);
  }
//  wdt_reset();
}
Т.е. продолжает считать до бесконечности. google курил. Не сильно понял, но нашел какие-то "недокументированные" функции ets_wdt_*(). Но так и не понял, как их использовать.

Может ткнете мордой в нужном направлении? :))

Спасибо!
 

krepton85

New member
А зачем вы вот здесь https://esp8266.ru/arduino-ide-esp8266/#setup заводите народ в заблуждение по поводу библиотеки Wire,
Перед использованием шины I2C, нужно выбрать пины SDA и SCL путем вызова функции Wire.pins(int sda, int scl), например Wire.pins(0, 2) для модуля ESP-01. Для других модулей пины по умолчанию 4(SDA) и 5(SCL).
Ведь не правильно это Wire.pins(int sda, int scl) так не работает, правильно нужно Wire.begin(int sda, int scl).
 

Lucky13

New member
Здравствуйте! Нужна помощь! Из менеджера плат пропали все esp8266 платы. Как мне кажется, произошло это после установки питона, но его удаление не помогло. Пробовал разные ссылки на пакет, но в поиске по esp8266 вообще ничего нет.
 

VicSpectator

New member
Здравствуйте! Нужна помощь! Из менеджера плат пропали все esp8266 платы. Как мне кажется, произошло это после установки питона, но его удаление не помогло. Пробовал разные ссылки на пакет, но в поиске по esp8266 вообще ничего нет.
ESP8266 прошивка, программирование в Arduino IDE
По этой статье тоже не получается?
 

CodeNameHawk

Moderator
Команда форума
Эту самую длину я получаю из Serial.available(); в главном цикле, т.к. в справке четко сказано, что оно должно рассказать, сколько данных пришло.
Так вам и сказали, что уже пришел один символ(остальные еще в пути), читайте столько символов, сколько вернула функция.
Дальше вам остается собрать все символы в строку. Откуда она будет знать длину вашего пакета?

Код:
void loop() {
    if (Serial.available() > 0) {  //если есть доступные данные
        // считываем байт
        incomingByte = Serial.read();
        // отсылаем то, что получили
        Serial.print("I received: ");
        Serial.println(incomingByte, DEC);
    }
}
Serial.available() | Аппаратная платформа Arduino
 
Последнее редактирование:
Сверху Снизу