С продукцией компании WeMos в нашей стране знакомы очень хорошо. Компания сделала себе настоящее имя на своих esp8266-совместимых контроллерах. Богатый набор функций, наличие встроенного Wi-Fi, совместимость с экосистемой Arduino и категорически низкая стоимость сделали свое дело. На волне успеха WeMos выпустила свой убойный Lolin32, а попутно и самый дешевый контроллер в своей линейке — D1 Mini Lite. Как подключать к системе и программировать контроллеры WeMos под Arduino я писал тут (для D1, D1 mini) и тут (для Lolin32). А вот контроллер Mini Lite как-то обошел стороной.
С потребительской точки зрения — D1 Mini Lite есть все тот же D1 Mini только всего с 1 мегабайтом ОЗУ на борту. Данный контроллер можно использовать точно так же, как и другие версии D1 Mini, мощности там хватит на большинство проектов энтузиастов IoT. Тем не менее, я столкнулся с тем, что несмотря на то, что контроллер распознается системой, запрограммировать нормально я его не могу. Максимум, что удавалось — залить стандартный Blink для мигания светодиодом. И ничего сложнее. Пришлось немного покопаться и выяснить почему так.
Оказывается, WeMos создал отдельную ветку фреймворка Arduino для своих контроллеров. И скачивать нужно его уже не командой git clone https://github.com/esp8266/Arduino.git esp8266, а командой git clone https://github.com/wemos/Arduino_D1.git esp8266 (подробно как устанавливать WeMos D1 в системе я писал тут). И по сути, подключение другого репозитория — единственное различие между установками.
Что делать, если в системе уже установлен репозиторий https://github.com/esp8266/Arduino.git? Я не нашел лучшего способа, как удалить руками каталог esp8266 в папке esp8266com и скачать уже ветку для D1. Возможно, что можно было бы сделать объединение репозиториев, но с ходу провернуть данную операцию не удалось. А умельцы добавляют описание контроллера Lite руками в файл boards.txt:
d1_mini_lite.name=WEMOS D1 mini Lite d1_mini_lite.upload.tool=esptool d1_mini_lite.upload.speed=921600 d1_mini_lite.upload.resetmethod=nodemcu d1_mini_lite.upload.maximum_size=434160 d1_mini_lite.upload.maximum_data_size=81920 d1_mini_lite.upload.wait_for_upload_port=true d1_mini_lite.serial.disableDTR=true d1_mini_lite.serial.disableRTS=true d1_mini_lite.build.mcu=esp8266 d1_mini_lite.build.f_cpu=80000000L d1_mini_lite.build.board=ESP8266_WEMOS_D1MINI d1_mini_lite.build.core=esp8266 d1_mini_lite.build.variant=d1_mini d1_mini_lite.build.flash_mode=dout d1_mini_lite.build.flash_freq=40 d1_mini_lite.build.spiffs_pagesize=256 d1_mini_lite.build.debug_port= d1_mini_lite.build.debug_level= d1_mini_lite.menu.CpuFrequency.80=80 MHz d1_mini_lite.menu.CpuFrequency.80.build.f_cpu=80000000L d1_mini_lite.menu.CpuFrequency.160=160 MHz d1_mini_lite.menu.CpuFrequency.160.build.f_cpu=160000000L d1_mini_lite.menu.UploadSpeed.921600=921600 d1_mini_lite.menu.UploadSpeed.921600.upload.speed=921600 d1_mini_lite.menu.UploadSpeed.115200=115200 d1_mini_lite.menu.UploadSpeed.115200.upload.speed=115200 d1_mini_lite.menu.UploadSpeed.9600=9600 d1_mini_lite.menu.UploadSpeed.9600.upload.speed=9600 d1_mini_lite.menu.UploadSpeed.57600=57600 d1_mini_lite.menu.UploadSpeed.57600.upload.speed=57600 d1_mini_lite.menu.UploadSpeed.256000.windows=256000 d1_mini_lite.menu.UploadSpeed.256000.upload.speed=256000 d1_mini_lite.menu.UploadSpeed.230400.linux=230400 d1_mini_lite.menu.UploadSpeed.230400.macosx=230400 d1_mini_lite.menu.UploadSpeed.230400.upload.speed=230400 d1_mini_lite.menu.UploadSpeed.460800.linux=460800 d1_mini_lite.menu.UploadSpeed.460800.macosx=460800 d1_mini_lite.menu.UploadSpeed.460800.upload.speed=460800 d1_mini_lite.menu.UploadSpeed.512000.windows=512000 d1_mini_lite.menu.UploadSpeed.512000.upload.speed=512000 d1_mini_lite.menu.FlashSize.1M512=1M (512K SPIFFS) d1_mini_lite.menu.FlashSize.1M512.build.flash_size=1M d1_mini_lite.menu.FlashSize.1M512.build.flash_ld=eagle.flash.1m512.ld d1_mini_lite.menu.FlashSize.1M512.build.spiffs_start=0x7B000 d1_mini_lite.menu.FlashSize.1M512.build.spiffs_end=0xFB000 d1_mini_lite.menu.FlashSize.1M512.build.spiffs_blocksize=8192 d1_mini_lite.menu.FlashSize.1M512.upload.maximum_size=499696 d1_mini_lite.menu.FlashSize.1M256=1M (256K SPIFFS) d1_mini_lite.menu.FlashSize.1M256.build.flash_size=1M d1_mini_lite.menu.FlashSize.1M256.build.flash_ld=eagle.flash.1m256.ld d1_mini_lite.menu.FlashSize.1M256.build.spiffs_start=0xBB000 d1_mini_lite.menu.FlashSize.1M256.build.spiffs_end=0xFB000 d1_mini_lite.menu.FlashSize.1M256.build.spiffs_blocksize=4096 d1_mini_lite.menu.FlashSize.1M256.upload.maximum_size=761840 d1_mini_lite.menu.FlashSize.1M192=1M (192K SPIFFS) d1_mini_lite.menu.FlashSize.1M192.build.flash_size=1M d1_mini_lite.menu.FlashSize.1M192.build.flash_ld=eagle.flash.1m192.ld d1_mini_lite.menu.FlashSize.1M192.build.spiffs_start=0xCB000 d1_mini_lite.menu.FlashSize.1M192.build.spiffs_end=0xFB000 d1_mini_lite.menu.FlashSize.1M192.build.spiffs_blocksize=4096 d1_mini_lite.menu.FlashSize.1M192.upload.maximum_size=827376 d1_mini_lite.menu.FlashSize.1M160=1M (160K SPIFFS) d1_mini_lite.menu.FlashSize.1M160.build.flash_size=1M d1_mini_lite.menu.FlashSize.1M160.build.flash_ld=eagle.flash.1m160.ld d1_mini_lite.menu.FlashSize.1M160.build.spiffs_start=0xD3000 d1_mini_lite.menu.FlashSize.1M160.build.spiffs_end=0xFB000 d1_mini_lite.menu.FlashSize.1M160.build.spiffs_blocksize=4096 d1_mini_lite.menu.FlashSize.1M160.upload.maximum_size=860144 d1_mini_lite.menu.FlashSize.1M144=1M (144K SPIFFS) d1_mini_lite.menu.FlashSize.1M144.build.flash_size=1M d1_mini_lite.menu.FlashSize.1M144.build.flash_ld=eagle.flash.1m144.ld d1_mini_lite.menu.FlashSize.1M144.build.spiffs_start=0xD7000 d1_mini_lite.menu.FlashSize.1M144.build.spiffs_end=0xFB000 d1_mini_lite.menu.FlashSize.1M144.build.spiffs_blocksize=4096 d1_mini_lite.menu.FlashSize.1M144.upload.maximum_size=876528 d1_mini_lite.menu.FlashSize.1M128=1M (128K SPIFFS) d1_mini_lite.menu.FlashSize.1M128.build.flash_size=1M d1_mini_lite.menu.FlashSize.1M128.build.flash_ld=eagle.flash.1m128.ld d1_mini_lite.menu.FlashSize.1M128.build.spiffs_start=0xDB000 d1_mini_lite.menu.FlashSize.1M128.build.spiffs_end=0xFB000 d1_mini_lite.menu.FlashSize.1M128.build.spiffs_blocksize=4096 d1_mini_lite.menu.FlashSize.1M128.upload.maximum_size=892912 d1_mini_lite.menu.FlashSize.1M64=1M (64K SPIFFS) d1_mini_lite.menu.FlashSize.1M64.build.flash_size=1M d1_mini_lite.menu.FlashSize.1M64.build.flash_ld=eagle.flash.1m64.ld d1_mini_lite.menu.FlashSize.1M64.build.spiffs_start=0xEB000 d1_mini_lite.menu.FlashSize.1M64.build.spiffs_end=0xFB000 d1_mini_lite.menu.FlashSize.1M64.build.spiffs_blocksize=4096 d1_mini_lite.menu.FlashSize.1M64.upload.maximum_size=958448
При ручном процессе компилирования необходимо учитывать, что для D1 Mini Lite нужно указывать для esptool.py параметр --flash_mode dout.
PS. Кстати, наконец-то выяснилось, зачем нужен драйвер, при установке плат WeMos D1 в систему. Драйвер CH340G применяется для контроллеров D1, Mini, Mini Lite, а драйвер CP2104 для плат Mini Pro. Оба драйвера используются для эмуляции UART на USB-порту. При помощи этого драйвера программное обеспечение компьютера может обращаться с платами WeMos как с устройствами на последовательном (COM) порту. Хотя, похоже на то, что драйвер нужен только для старых систем, новые же подтягивают его самостоятельно.
Update. Все течет, все изменяется. WeMos переименовался в Lolin, старые платы Lolin 32 отправили в утиль, вместо них появились новые платы Lolin D32 (на ESP32) и Lolin D1 (собственно это они и есть наши любимые D1 Mini на ESP8266). А для добавления обновленных библиотек для Arduino следует использовать вот этот адрес, для регистрации в Boards Manager Arduino IDE: http://arduino.esp8266.com/stable/package_esp8266com_index.json
Таким образом в IDE подключается последняя стабильная версия от комьюнити по поддержке продукции ESP в рамках экосистемы Arduino. Само же сообщество обитает в основном на GitHub по этому адресу: https://github.com/esp8266/Arduino