• Система автоматизации с открытым исходным кодом на базе 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, чтобы разобраться
 
Сверху Снизу