Mongoose-IOT vs Espruino

topersober

New member
Уважаемые разработчики, помогите определиться с выбором прошивки для ESP8266 (купил несколько модулей Wemos D1 Mini - 4МБ).
Одна ESP-шка будет выполнять роль "сервера умного дома" со следующими функциями:
1) Web-сервер - страничка с показаниями различных датчиков в доме.
2) Опрос датчиков и управление электроприборами через http-запросы - к другим ESP-шкам

Языков программирования ESP8266 куча - C++, Arduino-Wiring, LUA, Python, Javascript.
Но так как планирую изучать web-программирование, поэтому остановился на Javascript - чтобы писать на едином языке на сервере и на клиенте.

Сначала остановился на Espruino - так как информации по ней больше, Амперка её поддерживает (написала кучу готовых скриптов для различных датчиков).
Схема первоначальной прошивки, конечно, мутная - нужно поставить кучу доп.программ(Git, Python 2.7, EspTool), но потом все просто, как в ардуине - написал скрипт, залил и при старте он запустился. Но после обнаружился жирный минус - файловой системы нет , поэтому страничку нужно либо генерировать на лету, либо через какие-то приблуды писать непосредственно в память ESP по определенным адресам. Есть поддержка SD-карт, но это лишнее для моих пары страничек.

На Espruino потратил пару дней, а потом попробовал Mongoose-IOT и "утонул" на две недели.
Подкупило то, что прошивка через "Mongoose Flashing Tool.exe" заняла 2 минуты.
Но потом ступор - куда лить свои скрипты, чтобы они автоматом запускались? Можно ли отказаться от штатного Web-сервера и заменить на свой?
В документации Mongoose IoT Есть пример Call RESTful server - но он на С++. Но прошивка Mongoose - это же интерпретатор Javascript, правильно? Так где же размещать свои скрипты?

С виду Mongoose-IOT - то,что мне нужно, но разобраться никак не могу...
 
Последнее редактирование:

topersober

New member
Вот, кстати, рабочий скрипт для Espruino/ Хотелось бы аналогичное реализовать в Mongoose:
upload_2016-11-26_1-27-55.png
 

lsm

Разработчик Smart.js
Команда форума
Свои скрипты ложить в директорию fs/, они автоматом положатся на файловую систему. Автоматом запускается только app.js . Изнутри app.js можно подгружать другие скрипты через File.eval('my_file.js').
От штатного сервера отказаться можно, "miot config-get", смотрим настройку http, и "miot config-set".

Прошивка Mongoose - позволяет писать как на C/С++, так и JavaScript. Или на том и другом одновременно.
 

topersober

New member
Спасибо большое, продвинулся дальше, но не надолго...

Итак, прошил через "Mongoose Flashing Tool.exe". Все ОК.
Единственное, я закрываю окно на этом этапе, так как далее выдаст ошибку при точке "New ID", а данные ID+PSK для учетки Cesanta Cloud у меня нет, а мой логин+пароль от Mongoose Cloud выдаст ошибку.
upload_2016-11-26_18-19-49.pngupload_2016-11-26_18-20-59.png

Далее, захожу в браузере на IP esp-шки и успешно заливаю текстовый файл SAMPLE.TXT с содержимым "test"


Далее, запускаю через батник: "Mongoose Flashing Tool" --advanced и успешно читаю и перезаписываю этот файл командами:
var x= File.read('sample.txt'); File.write('sample.txt', x+'1');
upload_2016-11-26_18-32-5.png

Затем через браузер заливаю файл APP.JS с тем же кодом:
upload_2016-11-26_18-35-29.png

Перезапускаю ESP8266 кнопкой RESET на плате и пипец... ESP8266 молчит, страница не открывается, IP не пингуется...
 

Вложения

lsm

Разработчик Smart.js
Команда форума
Скажите, где вы взяли ссылку на Mongoose Flashing Tool.
Нам нужно ее затереть, потому что все что связано с Mongoose Flashing Tool - устарело!

Используйте утилиту miot, вот туториал: Mongoose IoT

Работа с файлами - "miot get" / "miot put" / "miot ls"
 

topersober

New member
Ковыряю дальше...
Запускаю через батник: "Mongoose Flashing Tool" --advanced
Оказывается - при старте ESP не коннектится к WiFi, соединяю насильно, страница грузится - видим, что скрипт отработал нормально... но почему не коннектится к WiFi ?

upload_2016-11-26_18-43-7.png
 

topersober

New member
Скажите, где вы взяли ссылку на Mongoose Flashing Tool.
Нам нужно ее затереть, потому что все что связано с Mongoose Flashing Tool - устарело!

Используйте утилиту miot, вот туториал: Mongoose IoT

Работа с файлами - "miot get" / "miot put" / "miot ls"
Блин, точно... вроде с сайта Mongoose IoT качал, а теперь не найду.
Жалко, что убрали... как теперь отлаживать скрипты-то?

Update: Вот отсюда можно версию 1.0.5 скачать:
Releases · cesanta/mongoose-flashing-tool · GitHub
 

lsm

Разработчик Smart.js
Команда форума
Жалко, что убрали... как теперь отлаживать скрипты-то?
Не нужно MFT использовать. Мы его скоро убъем. miot гораздо лучше.

miot put myfile.txt && miot console
и ребутать железку.
можно плагин к редактору написать который при сохранении файла будет писать его на модуль, подрубать к консоли и перегружать. Тогда будет все по максимуму автоматизировано.
 

topersober

New member
miot гораздо лучше
Ребята, это трэш какой-то... Прошивка через программу "Mongoose Flashing Tool.exe" занимала меньше минуты.
Прошивка же через MIOT.exe заняла у меня 3 часа...
В документации на Mongoose-IOT куча неработающих примеров. Вот пара цитат со страницы Mongoose IoT :
miot flash -port /dev/ttyUSB0 -fw build/fw.zip
miot dev flash --fw build/fw.zip --port /dev/ttyUSB0
Если попытаться прошивать с этими ключами, будут вываливаться ошибки! Количество черточек, которое должно быть, приведу ниже.

Ниже инструкция для тех, кто будет прошивать через MIOT на Windows (Я использовал Windows 7 SP1 x64):

1) Зарегистрируйтесь на Mongoose Cloud и запомните логин и пароль.
2) Скачайте с Mongoose IoT программу MIOT.EXE для Windows. Обратите внимание - ваша версия Windows должны быть 64-х разрядная!
На всякий случай не используйте в названии папок кириллицу (у меня программа Mongoose Flashing Tool.exe при скачивании прошивки выдавала ошибку на компе с учетной записью "Папа")
В папке, где лежит программа MIOT.exe необходимо создать пустую папку, например "firmware". Обязательно пустую!

2) Запустите Командную строку (CMD.EXE) и введите последовательно следующие команды, заменив выделенные жирым пути,логины,пароли и порт на свои.
CD /d F:\_ESP8266\_Mongoose-IOT\firmware
F:\_ESP8266\_Mongoose-IOT\
miot init --arch esp8266
F:\_ESP8266\_Mongoose-IOT\miot build --user Username_Cloud --pass Password_Cloud
F:\_ESP8266\_Mongoose-IOT\
miot flash --port COM6 fw build/fw.zip
F:\_ESP8266\_Mongoose-IOT\miot config-set --port COM6 wifi.ap.enable=false wifi.sta.enable=true wifi.sta.ssid="Wifi_SSID" wifi.sta.pass="Wifi_Password"

где:
F:\_ESP8266\_Mongoose-IOT\firmware - Директория для загрузки прошивки
F:\_ESP8266\_Mongoose-IOT\ - Директория с программой Miot.exe
Username_Cloud - имя пользователя для облака Mongoose Cloud
Password_Cloud - пароль пользователя для облака Mongoose Cloud
COM6 - COM-порт, к которому у вас подключена ESP8266
Wifi_SSID - имя точки доступа WiFi
Wifi_Password - пароль точки доступа WiFi

Команды удобно копировать и вставлять в командую строку через щелчок правой кнопки мыши --> Вставить. Так вы сможете избежать ошибок.
Оранжевым цветом выделил правильное написание ключей:
"--port" нужно писать с двумя черточками,а "fw" вообще без черточек, иначе будет ошибка. Также имя сети и пароль от Wifi нужно писать в двойным кавычках.
Напишете в одинарных - ошибки не выдаст, но и работать не будет - ESPшка уйдет в бесконечный ребут из-за того,что не сможет найти сеть Wifi по имени.

Во вложении - скриншот процесса прошивки. Рад, если кому-то помог.
 

Вложения

topersober

New member
Вдогонку, правильный синтаксис команд MIOT.exe, подобранный методом тыка (к сожалению, описание внутри самой miot.exe крайне скудное):
miot ls --port COM6 : Получить список файлов для ESP, подключенной к порту COM6
miot get test.txt --port COM6 : вывести содержимое файла test.txt для ESP, подключенной к порту COM6
miot put F:\_ESP8266\_Mongoose-IOT\sample.txt sample222.txt --port COM6 : файл sample.txt из директории F:\_ESP8266\_Mongoose-IOT\ на локальном компьютере скопировать в ESP, подключенной к порту COM6 и назвать его sample222.txt
 

topersober

New member
Прошивка Mongoose - позволяет писать как на C/С++, так и JavaScript
Сергей, можно еще задать вам несколько вопросов?

1) подскажите по поводу API на JavaScript.
Я нашел единственный источник: mongoose-iot/docs/javascript-api at master · cesanta/mongoose-iot · GitHub
Но там описано очень мало функций, может дополнительно нужно искать в описании к движку v7 на странице v7/docs at master · cesanta/v7 · GitHub ?
Например, функцию File.eval('my_file.js'), которую вы советовали применять для подгрузке дополнительных скриптов я не нашел в javascript-api, но она есть в описании V7:
v7/file-eval.md at master · cesanta/v7 · GitHub
Или, к примеру, мне нужно получить текущую дату. Есть функция Sys.time() , но она возвращает результат в странном формате "floating point number in seconds" - как его в "человеческий" конвертировать?

У той же Espruino есть отдельная страница с описанием всех API функций: Espruino - Reference
Конечно, там свои неудобства - они поддерживают большое количество плат, и для некоторых функций в описании указывается "использовать только для плат ХХХ".
То есть, если отфильтровать для ESP8266 - немного-то и получится.

В общем случае, вопрос такой - где мне искать описание нужной мне функции JavaScript для серверной части Mongoose-IOT на ESP8266?

2) Заковырялся с консолью на MIOT.exe
Вызываю так: miot console --port COM6 и перезагружаю ESP кнопкой - в командную строку выводятся сервисные сообщения, но потом на мои команды ESP не отвечает...
upload_2016-11-27_0-28-53.png
 

lsm

Разработчик Smart.js
Команда форума
Спасибо!

Да, на windows miot.exe работает, но почти никем не тестируется - все разработчики либо на linux сидят, либо на mac. Спасибо за репорт!

По поводу доки на JS - берите пока отсюда: mongoose-iot/docs/javascript-api at master · cesanta/mongoose-iot · GitHub

По поводу консоли: она цепляется к UART, но команды также используют UART поэтому "miot console" будет съедать часть символов которые отсылают miot команды, и модуль их не поймет! В общем, запускайте или miot команды, или miot console. Вместе они не работают. Похоже надо сделать так чтобы каждая из них захватывала порт и если порт захвачен кем-то, отваливалась с ошибкой.
 

lsm

Разработчик Smart.js
Команда форума
По поводу описания команд miot:

miot help
miot help <command>

Даст документацию. Метод тыка не нужен.
 
Сверху Снизу