Подробный обзор Arduino совместимого контроллера WeMos D1 R2 на базе ESP8266.
На днях получил посылку из Китая с платой контроллера WeMos D1 R2 на базе ESP8266. На мой взгляд, этот девайс заслуживает особого внимания, так как такого функционала за смешную цену я больше нигде не встречал. Наконец-то появился бюджетный вариант со встроенным Wi-Fi.
Внешний вид WeMos D1 R2
Технические характеристики WeMos D1 R2 на ESP8266
- 11 цифровых входов / выходов. Все выводы поддерживают interrupt/pwm/I2C/one-wire (за исключением D0)
- 1 аналоговый вход (максимальное входное напряжение 3,3 В)
- Micro USB разъем
- Разъем питания (9-24 В)
- Поддержка Arduino IDE
- Микроконтроллер ESP-8266EX
- Частота микроконтроллера 80MHz/160MHz
- Flash память 4 Мб
- Программирование через Serial или OTA (беспроводная загрузка программного кода по Wi-Fi)
- Наличие WI-FI модуля
Назначение выводов WeMos D1 R2
Драйвера для WeMos D1 R2
Подключаем контроллер к USB порту компьютера micro USB кабелем.
Скачиваем архив с драйверами:
ch341ser_win.zip (178,9 KiB, 9 280 hits)
Добавлено: драйвера WeMos под Windows 10
wemos-driver-win10.zip (6,9 MiB, 5 189 hits)
После установки драйверов проверяем состояние в диспетчере устройств.
Настройка Arduino IDE для работы с WeMos D1 R2
Запускаем Arduino IDE 1.6.5 или выше (у меня 1.6.7).
Заходим в настройки
В строке “Дополнительная ссылка для Менеджера плат” вводим URL: http://arduino.esp8266.com/stable/package_esp8266com_index.json и жмем на кнопку в конце строки, чтобы убедиться, что адрес был добавлен.
Жмем кнопку OK в этом окне, а затем в окне настроек.
Заходим в Менеджер плат через меню Инструменты
Ищем наш контроллер
Жмем на кнопку Установить
Начнется загрузка необходимых модулей. Придется немного подождать.
После окончания загрузки жмем на кнопку Закрыть
Установка модулей завершена.
Теперь можем выбрать наш контроллер для работы.
Я пока без понятия, как работать с этим контроллером, поэтому решил добавить примеры исходных кодов.
D1_mini.zip (23,4 KiB, 6 403 hits)
Скачайте архив и распакуйте его содержимое в \arduino-1.6.7\examples\
Перезапустите Arduino IDE.
Теперь в примеры появились примеры использования:
Перед загрузкой скетчей через Serial не забудьте выбрать режимы работы контроллера:
Настройка WeMos D1 R2 на ESP8266
Загрузка скетчей:
Частота:
Размер памяти:
Скорость передачи данных 921600
Номер COM порта:
Проверка работы WeMos D1 R2
Для теста я залил скетч из примера сканирования Wi-Fi.
#include "ESP8266WiFi.h"
void setup() {
Serial.begin(115200);// Set WiFi to station mode and disconnect from an AP if it was previously connected
WiFi.mode(WIFI_STA);
WiFi.disconnect();
delay(100);Serial.println("Setup done");
}void loop() {
Serial.println("scan start");// WiFi.scanNetworks will return the number of networks found
int n = WiFi.scanNetworks();
Serial.println("scan done");
if (n == 0)
Serial.println("no networks found");
else
{
Serial.print(n);
Serial.println(" networks found");
for (int i = 0; i < n; ++i)
{
// Print SSID and RSSI for each network found
Serial.print(i + 1);
Serial.print(": ");
Serial.print(WiFi.SSID(i));
Serial.print(" (");
Serial.print(WiFi.RSSI(i));
Serial.print(")");
Serial.println((WiFi.encryptionType(i) == ENC_TYPE_NONE)?" ":"*");
delay(10);
}
}
Serial.println("");// Wait a bit before scanning again
delay(5000);
}
Результат работы скетча:
Возможные проблемы
Ошибка компиляции для платы WeMos D1 R2 & mini
При появлении сообщения Ошибка компиляции для платы WeMos D1 R2 & mini необходимо в Arduino IDE зайти в меню Файл - Настройки
Нажать на путь к папке размещения скаченных дополнений (отмечен на картинке)
В открывшемся проводнике заходим в папку packages
Удаляем из нее папку esp8266
После этого перезапускаем Arduino IDE и заново через меню Инструменты - Плата.... - Менеджер плат устанавливаем дополнение для работы с Wemos.
Справочная информация по WeMos
Спасибо, что прочитали :)
Заметь, что с China Post товары стали приходить к нам быстрее
Драйверы удалены или перемещены где искать гена
это версия R1, если что)
Визуально - у версии R2 к "D1" приставка "WeMos"
С кто-нибудь знает, чем отличаются версии R1 и R2?
изменена схема питания (несущественно) и поменяны местами (на плате) d5 с d4 (i2c) - существенно только при использовании готовых прошивок и шилдов
А что значит разъём питания 9-24В, куда я их могу подвести?
Могу ли я запитать данный модуль от 12В (размер 27А) ?
И можно ли с CR2025 3V?
У него есть нога с подписью 5V. Сколько я туда могу подать, сколько он стабилизирует?
9-24В - черный разъем на плате (штекер как питание в ноутбуке)
12В (размер 27А) - можете к этому же разъему
И можно ли с CR2025 3V? - нет.
нога с подписью 5V - это выход 5 вольт, а не вход. 3,3 тоже выход
Чем эта плата для ваших целей лучшее, заметно более дешевой платы NodeMCU v3 (LiLO Version)?
У lilo только 3.3В на плате, они идут под версией 1.0. Версия 0.9 обладает 5В выходов, что гораздо удобнее.
Да, у Lilo на плате 3.3В, но питать можно от 5В, так что при необходимости есть откуда взять.
Не понял на счет версий 1.0 и 0.9 - это версии чего?
У ESP8266 Lolin v1.0 только 3.3В выходы. У версии ESP8266 v0.9, есть также 5В выходы.
Ну или их ещё называют NodeMCU, для меня это одно и тоже. Посмотри в интернете v0.9 жёлтого цвета какие выводы и какие выводы у v1.0
Плата новая 80-160 МГц WI Fi это класс возникли мысли о применению.
1.Осциллограф.
2. Сигнал Генератор.
3.синтезатор речи.
А где у платы кварц тактового генераторы?
К сожалению, осциллограф не выходит, очень бестолковый ШИМ. В интернете натыкался на реализацию девайса на ардуино и задал вопрос автору про esp8266, он ответил ШИМ на esp фуфло. Я проверил. Реализовал датчик объёма, capacity sensor. Через два сопротивления замкнул на алюминевую пластину. На ардуино у меня получилось зарегистрировать сигнал через поднесение руки более 20см, на esp - ШИМ ловил только прикосновения. Итого: автор был прав.
Синтезатор речи наверно можно, видел и обладаю отдельным девайсом для ардуино, который через звуковые файлы на флешке, генерит звуки. Если сделаешь генератор звука напрямую, пиши, затестим))
Если не ошибаюсь, то мои замеры показали погрешность ШИМ на ESP 0.2 вольта. В документации наверно явно указано, не читал.
Осцилограф не получится. Плохой шим. Порядка 0.2В погрешность
Осциллограф проще купить изобретать вело не нужно. Паяльник для микросхемы:
Медный стержень в торце отверстие диаметр 0, 8 мм до глубины 10 мм зенкуем и включаем его до температуры плавки каплю олова в торец флюс на ножку мсх одеваем нвставляем ножку мсх в отверстие покачал и отличная пайка готова Подарок очумелам
осваиваю спасибо за материалы осцилл есть купил отличный из есп раутер получится?
esp это загрузка скетчей во время движения по вай фай.например летит ракета на цель ситуация изменилась и ракета командует загрузить следующую необходимую программу через впй фай на расстояние в тргц диапазоне. Круто?
ракета на WiFi это не круто, круто ракета на блютуз, сидишь на ней и управляешь...
что то таблица распиновки совсем не совпадает с тем, что написано на плате
епс с низким потреблением питания возможно перевод на батарейное питание и из спящего режима уникальная вещь
епс с низким потреблением питания возможно перевод на батарейное питание и из спящего режима уникальная вещь.
надо определить что из нее можно сделать и какие скотчи загружать это главное направление.сообщайте
Все загрузил и получил ошибку после компиляции. что делать мыслей нет пока
invalid library found in C:/ Program files(x86)/arduino/libraries/esp8266_Nonos_sdk_v1.5.1-16_01_08
Кстати для питания купил блок питания CPS-3205 0-32 v 0.5 и осциллограф размером с пачку казбека ds201 pro
В документации USB serial kable если бы была точная разводка концов я бы спаял а без него наверное можно на плате есть мини усб
Все загрузил и счетч загрузил, переустановил Иде ардуино и дает ошибку
espcomm_upload_mem faled
обращение к памяти неверное? где сотреть.
и второе как наладитьшрифты ( у меня 8 ка вин) в сериал монитор идед абракадабра.
нет полноценного руководства по эксплуаации платы.
Назначение
характеристики
результаты
пути получения.
Подключил, ошибки где искать?
Добрый день.
Если еще актуально espcomm_upload_mem faled:
Грузите на скорости 115200. У меня та же ошибка на рекомендуемой 921600.
я кажется споткнулся. я должен посадить вемос плату на ардуино этажеркой? там два гнезда питания два усб, зачем, наверное не нужно?
Вемос аналогичен ардуино...не надо ничего этажеркой
чтобы с ногами разобраться надо их раздвинуть и в поиске набрать "таблица pin arduino и esp8266 и разпечатать картинку
Ребят, плата, как на картинке, только надписи Вемос нет. Делал все по инструкции + попробовал изменять скорость порта. Пишет "ошибка компиляции для платы..." Среда Ардуино 1.6.12 подскажите, плиз че нить
Ребят, ну подскажите че нить. Неск дней уже сижу, дрова сносил - ставил, в настройках среды ардуино уже все, по иоему, менял. Даже саму среду сносил и заново ставил. Все одно не хотит, причем китайская унка (ардуино уно) прошивается, перепрошивается как угодно и с комфортом. А с этой что!?!?!?
Посмотри внимательно все пункты выбора платы в Инструментах
может кто подскажет. приобрёл тоже плату WeMos WiFi D1 R2 но не как на скриншотах, у меня черненькая. проблема в том что скетчем как в статье сеть сканирует, всё показывает, а пробую через другие готовые примеры подключиться, но подключение ни вкакую не идёт. в чем может быть проблема?,может быть в настройках самого роутера канал какой особенный над ставить или метод проверки подлинности?
Там примеры есть как на подключение к роутеру, так и на создание точки доступа самой платой. Слишком не предметно разговаривать о потенциальном что-то, который вы пытаетесь запустить. Попробуйте на роутере WPA2, если вами запущен скетч на подключение к роутеру
Arduino: 1.6.5 (Windows XP SP2 rus). При попытке прошить хотя бы БЛИНК на встроенный светодиод выдает следующую ошибку:
--------------------------------
xtensa-lx106-elf-g++: error: И: No such file or directory
xtensa-lx106-elf-g++: error: А\LOCALS~1\Temp\build4095159779535408461.tmp/core: No such file or directory
xtensa-lx106-elf-g++: error: И: No such file or directory
xtensa-lx106-elf-g++: error: А\LOCALS~1\Temp\build4095159779535408461.tmp\sketch_mar16a.cpp: No such file or directory
xtensa-lx106-elf-g++: error: И: No such file or directory
xtensa-lx106-elf-g++: error: А\LOCALS~1\Temp\build4095159779535408461.tmp\sketch_mar16a.cpp.o: No such file or directory
Ошибка компиляции.
--------------------------------
При этом на самом деле папка/файл
build4095159779535408461.tmp\sketch_mar16a.cpp
на диске есть,
build4095159779535408461.tmp\sketch_mar16a.cpp.o
на диске НЕТ.
Модули разные, источники модулей разные, проблема одна. Весь интернет перерыл, но ответа не нашел. Ставил и IDE 1.6.7, и делал портативную - одна хрень. Но при этом на ком-порте и как Wi-Fi устройство в сети и LoLin, и WeMos D1 mini видны без проблем. В чем может быть дело?
Сам спросил - сам отвечу (OS Win XP):
переопределите пути к файлам Tmp и Temp, чтобы в путях не было кириллицы и пробелов (я просто адресовал их на диск С:). Делается это в "ПУСК" -> НАСТРОЙКИ -> ПАНЕЛЬ УПРАВЛЕНИЯ -> СИСТЕМА -> ДОПОЛНИТЕЛЬНО -> ПЕРЕМЕННЫЕ СРЕДЫ.
Там и меняете.
Спасибо тем, кто мне помог.
Что-то не так. Arduino: 1.8.3 (Windows XP), Плата:"WeMos D1(Retired), 80 MHz, 921600, 4M (3M SPIFFS)"
In file included from c:\documents and settings\админ\local settings\application data\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\string:41:0,
from c:\documents and settings\админ\local settings\application data\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\stdexcept:39,
from c:\documents and settings\админ\local settings\application data\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\array:38,
from c:\documents and settings\админ\local settings\application data\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\tuple:39,
from c:\documents and settings\админ\local settings\application data\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\functional:55,
from C:\Documents and Settings\Админ\Local Settings\Application Data\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\ESP8266WiFi\src/ESP8266WiFiGeneric.h:27,
from C:\Documents and Settings\Админ\Local Settings\Application Data\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\ESP8266WiFi\src/ESP8266WiFiSTA.h:28,
from C:\Documents and Settings\Админ\Local Settings\Application Data\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\ESP8266WiFi\src/ESP8266WiFi.h:34,
from C:\Documents and Settings\РђРґРјРёРЅ\Local Settings\Application Data\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\ESP8266WiFi\examples\WiFiScan\WiFiScan.ino:6:
c:\documents and settings\админ\local settings\application data\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\bits\allocator.h:46:75: fatal error: bits/c++allocator.h: No such file or directory
#include // Define the base class to std::allocator.
^
compilation terminated.
exit status 1
Ошибка компиляции для платы WeMos D1(Retired).
Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"
Возможно ,программе не нравится кириллица в имени пути... Рекомендую использовать латиницу в качестве логина.
не могу понять почему выбивает ошибку компиляции /**
* The MIT License (MIT)
*
* Copyright (c) 2018 by ThingPulse, Daniel Eichhorn
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* ThingPulse invests considerable time and money to develop these open source libraries.
* Please support us by buying our products (and not the clones) from
* https://thingpulse.com
*
*/
#include
// Include the correct display library
// For a connection via I2C using Wire include
#include // Only needed for Arduino 1.6.5 and earlier
#include "SSD1306Wire.h" // legacy include: `#include "SSD1306.h"`
// or #include "SH1106Wire.h", legacy include: `#include "SH1106.h"`
// For a connection via I2C using brzo_i2c (must be installed) include
// #include // Only needed for Arduino 1.6.5 and earlier
// #include "SSD1306Brzo.h"
// #include "SH1106Brzo.h"
// For a connection via SPI include
// #include // Only needed for Arduino 1.6.5 and earlier
// #include "SSD1306Spi.h"
// #include "SH1106SPi.h"
// Include the UI lib
#include "OLEDDisplayUi.h"
// Include custom images
#include "images.h"
// Use the corresponding display class:
// Initialize the OLED display using SPI
// D5 -> CLK
// D7 -> MOSI (DOUT)
// D0 -> RES
// D2 -> DC
// D8 -> CS
// SSD1306Spi display(D0, D2, D8);
// or
// SH1106Spi display(D0, D2);
// Initialize the OLED display using brzo_i2c
// D3 -> SDA
// D5 -> SCL
// SSD1306Brzo display(0x3c, D3, D5);
// or
// SH1106Brzo display(0x3c, D3, D5);
// Initialize the OLED display using Wire library
SSD1306Wire display(0x3c, D3, D5);
// SH1106 display(0x3c, D3, D5);
OLEDDisplayUi ui ( &display );
int screenW = 128;
int screenH = 64;
int clockCenterX = screenW/2;
int clockCenterY = ((screenH-16)/2)+16; // top yellow part is 16 px height
int clockRadius = 23;
// utility function for digital clock display: prints leading 0
String twoDigits(int digits){
if(digits drawCircle(clockCenterX + x, clockCenterY + y, clockRadius);
display->drawCircle(clockCenterX + x, clockCenterY + y, 2);
//
//hour ticks
for( int z=0; z drawLine( x2 + x , y2 + y , x3 + x , y3 + y);
}
// display second hand
float angle = second() * 6 ;
angle = ( angle / 57.29577951 ) ; //Convert degrees to radians
int x3 = ( clockCenterX + ( sin(angle) * ( clockRadius - ( clockRadius / 5 ) ) ) );
int y3 = ( clockCenterY - ( cos(angle) * ( clockRadius - ( clockRadius / 5 ) ) ) );
display->drawLine( clockCenterX + x , clockCenterY + y , x3 + x , y3 + y);
//
// display minute hand
angle = minute() * 6 ;
angle = ( angle / 57.29577951 ) ; //Convert degrees to radians
x3 = ( clockCenterX + ( sin(angle) * ( clockRadius - ( clockRadius / 4 ) ) ) );
y3 = ( clockCenterY - ( cos(angle) * ( clockRadius - ( clockRadius / 4 ) ) ) );
display->drawLine( clockCenterX + x , clockCenterY + y , x3 + x , y3 + y);
//
// display hour hand
angle = hour() * 30 + int( ( minute() / 12 ) * 6 ) ;
angle = ( angle / 57.29577951 ) ; //Convert degrees to radians
x3 = ( clockCenterX + ( sin(angle) * ( clockRadius - ( clockRadius / 2 ) ) ) );
y3 = ( clockCenterY - ( cos(angle) * ( clockRadius - ( clockRadius / 2 ) ) ) );
display->drawLine( clockCenterX + x , clockCenterY + y , x3 + x , y3 + y);
}
void digitalClockFrame(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y) {
String timenow = String(hour())+":"+twoDigits(minute())+":"+twoDigits(second());
display->setTextAlignment(TEXT_ALIGN_CENTER);
display->setFont(ArialMT_Plain_24);
display->drawString(clockCenterX + x , clockCenterY + y, timenow );
}
// This array keeps function pointers to all frames
// frames are the single views that slide in
FrameCallback frames[] = { analogClockFrame, digitalClockFrame };
// how many frames are there?
int frameCount = 2;
// Overlays are statically drawn on top of a frame eg. a clock
OverlayCallback overlays[] = { clockOverlay };
int overlaysCount = 1;
void setup() {
Serial.begin(9600);
Serial.println();
// The ESP is capable of rendering 60fps in 80Mhz mode
// but that won't give you much time for anything else
// run it in 160Mhz mode or just set it to 30 fps
ui.setTargetFPS(60);
// Customize the active and inactive symbol
ui.setActiveSymbol(activeSymbol);
ui.setInactiveSymbol(inactiveSymbol);
// You can change this to
// TOP, LEFT, BOTTOM, RIGHT
ui.setIndicatorPosition(TOP);
// Defines where the first frame is located in the bar.
ui.setIndicatorDirection(LEFT_RIGHT);
// You can change the transition that is used
// SLIDE_LEFT, SLIDE_RIGHT, SLIDE_UP, SLIDE_DOWN
ui.setFrameAnimation(SLIDE_LEFT);
// Add frames
ui.setFrames(frames, frameCount);
// Add overlays
ui.setOverlays(overlays, overlaysCount);
// Initialising the UI will init the display too.
ui.init();
display.flipScreenVertically();
unsigned long secsSinceStart = millis();
// Unix time starts on Jan 1 1970. In seconds, that's 2208988800:
const unsigned long seventyYears = 2208988800UL;
// subtract seventy years:
unsigned long epoch = secsSinceStart - seventyYears * SECS_PER_HOUR;
setTime(epoch);
}
void loop() {
int remainingTimeBudget = ui.update();
if (remainingTimeBudget > 0) {
// You can do some work here
// Don't do stuff if you are below your
// time budget.
delay(remainingTimeBudget);
}
}
и кто мне - ардуиновскому новичку покажет скетч для WIFI осцилографа на базе 8266??? Заранееблагодарен!
Добрый день. Сканирование сетей Wi-Fi на скорости 115 200 не пошло: выдает абракадабру. Уменьшил до 38 400 - все ок!
Классная статья. Сразу получилось подключить WeMos на базе ESP-8266. Спасибо!
В этом контексте существенный интерес представляет, также, "связка" ESP-12F WeMos D1 WiFi и Arduino UNO.
См. примеры здесь:
https://roamer55.ru/main_programming/arduino/arduino_technosphere_000/arduino_technosphere_000_005/
TO: neon
А почему плата с ESP не может сама включать и выключать светодиоды? Почему нужна UNO?
Здравствуйте. Спасибо за интересную информацию!
А как ведут себя эти контроллеры при работе в ЧПУ устройствах (Лазерный выжигатель) Можно ли прошить в него GRBLUPLOAD?