• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Обсуждение Как правильно загрузить скрипт на NomeMCU через COM порт?

Bobre

New member
После покупки данной платы я обнаружил что нету нормально работающего IDE для Linux и начал писать свой на подобии Arduino IDE. Все бы хорошо, но при попытке загрузить скрипт на плату постоянно выскакивают ошибки.
Дальше я буду приводить примеры в псевдо языке программирования, чтобы было понятно как работает загрузка:
Первым делом я попробовал загрузить весь текст кода одним разом через COM порт. В работе через монитор порта такое прокатывало, однако с длинным скриптом работать отказалось:

Код:
Serial.write("COM1", file.open("init.lua", "w") file.close() file.remove("init.lua") file.open("init.lua", "w+") file.writeline("foo bar") file.close()');
Когда данный способ не заработал, я сделал отправку скрипта построчно, как это делает luatool.py. Стало работать лучше, однако в 80% случаев короткий код не записывался на плату.

Код:
Serial.write("COM1", 'file.open("init.lua", "w")');
//Waiting answer ">" from NodeMCU board
Serial.write("COM1", 'file.close()');
//Waiting answer ">" from NodeMCU board
Serial.write("COM1", 'file.remove("init.lua")');
//Waiting answer ">" from NodeMCU board
Serial.write("COM1", 'file.open("init.lua", "w+")');
//Waiting answer ">" from NodeMCU board
Serial.write("COM1", 'file.writeline("foo bar")');
//Waiting answer ">" from NodeMCU board
Serial.write("COM1", 'file.close()');
Тогда я решил имитировать ввод этого скрипта вручную через консоль последовательного порта, так как введенный таким образом скрипт отлично отрабатывает:

Код:
Serial.write("COM1", 'file.open("init.lua", "w")');
//Waiting answer ">" from NodeMCU board
 delay(2000) // waiting 2 seconds
Serial.write("COM1", 'file.close()');
//Waiting answer ">" from NodeMCU board
delay(2000) // waiting 2 seconds
Serial.write("COM1", 'file.remove("init.lua")');
//Waiting answer ">" from NodeMCU board
delay(2000) // waiting 2 seconds
Serial.write("COM1", 'file.open("init.lua", "w+")');
//Waiting answer ">" from NodeMCU board
delay(2000) // waiting 2 seconds
Serial.write("COM1", 'file.writeline("foo bar")');
//Waiting answer ">" from NodeMCU board
delay(2000) // waiting 2 seconds
Serial.write("COM1", 'file.close()');
И чудо, скрипт отлично загрузился на плату. Однако, чтоб скрипт был загружен с 99% вероятностью, я должен ждать после каждой отправленной строчки 2 секунды + время пока получу от платы символ ">". Это слишком долго и кажется неправильным.

Скажите, есть ли способ более правильно загрузить скрипт на плату. И из-за чего нужны задержки при записи в файл? Неужели функция file.writeline("") выполняется асинхронно и мы не можем узнать когда строка добавлена и мы можем продолжать запись?
 

Victor

Administrator
Команда форума
Можете посмотреть исходники моего ESPlorer, чтобы разобраться
 
Сверху Снизу