logo
+7 (951) 999-89-94
428003, г. Чебоксары, ул. Федора Гладкова, д.9, оф.319

WeMos XI — Программирование

Программирование контроллера WeMos XI практически не отличается от программирования привычных вам плат Arduino, в этой статье мы подробно разберём весь процесс работы и написания скетчей для WeMos XI.

Сборка WeMos XI

Для начала работы с платой WeMos XI нужно подсоединить к ней USB-UART переходник. В качестве такого переходника можно использовать любой USB-UART мост, например, на популярном чипе FTDI. Подсоединять переходник нужно к этому разъёму:

В данном случае не имеет значения какое напряжение 3,3 или 5 В выставлено на вашем переходнике — контроллер WeMos XI отлично работает с любым из этих напряжений.

Схема подключения USB-UART переходника к контроллеру WeMos XI:

Переходник – Контроллер

DTR – DTR

RX – TX

TX – RX

VCC – VCC

GND – GND

Если на вашем USB-UART переходнике отсутствует контакт DTR, то вам нужно будет вручную нажимать кнопку RESET на контроллере WeMos XI во время загрузки скетча. Это не очень удобно, поэтому рекомендуется выбирать переходник с выводом DTR.

Arduino IDE

Программировать плату WeMos XI можно в любой удобной вам среде разработки, но в этом руководстве мы будем говорить о работе в Arduino IDE, как наиболее популярной и простой среде программирования микроконтроллеров.

Примечание: все действия, упомянутые в статье, проводились в операционной системе Windows 7 64-bit, если у вас другая операционная система, то действия и внешний вид интерфейса могут немного отличаться.

Версия Arduino IDE для работы с WeMos XI должна быть 1.8.0 или выше, мы в своих примерах будем использовать версию 1.8.5, как хорошо себя зарекомендовавшую.

Перед тем, как начать создавать скетчи для контроллера WeMos XI в среде Arduino IDE, нам нужно установить пакет поддержки этой платы. Для этого сначала нужно скачать его с официальной страницы WeMos на Гитхаб.

github.com/wemos/Arduino_XI

Затем вам нужно в директории hardware вашей среды разработки Arduino IDE создать папку

Wemos

а в ней — подпапку

XI

и уже в эту папку (XI) переместить содержимое архива Arduino_XI-master.zip, начиная с директорий «bootloaders» и т. д., вместе со всем прочим содержимым.

Далее вам останется только перезапустить среду разработки Arduino IDE и в Менеджере плат появится нужная нам плата «WeMos XI (Retired)»

Выбираем плату и порт, к которому она подключена, и можем начинать программировать контроллер WeMos XI — на этом процесс инсталляции завершён.

Программирование WeMos XI

Вместе с пакетом поддержки платы WeMos XI в Arduino IDE идёт большое количество примеров работы со специфическими функциями этого контроллера, давайте подробно разберём несколько примеров и познакомимся с процессом программирования WeMos XI.

Примечание. Здесь предполагается, что вы достаточно опытный пользователь, знакомы с работой в Arduino IDE и умеете создавать скетчи и загружать их в микроконтроллер.

Работа с 12-битными АЦП платы WeMos XI

Одним из основных достоинств и конкурентных преимуществ платы WeMos XI является наличие 8-и 12-битных аналого-цифровых преобразователей (АЦП). Ближайший конкурент платы WeMos XI, контроллер Arduino Pro Mini, имеет только 10-битные АЦП. В некоторых случаях, когда требуется повышенная точность оцифровки сигналов, 10-битных АЦП оказывается недостаточно и тут плата WeMos XI может оказаться очень кстати.

В этом примере мы попробуем на практике поработать с 12-битными аналоговыми входами контроллера WeMos XI.

Для справки . Как известно, при измерении напряжения 10-битным АЦП результат изменяется от 0 до 1023, в случае 12-битного АЦП точность возрастает и результат изменяется между 0 и 4095.

Цель эксперимента

В этом эксперименте мы будем подавать на вход АЦП контроллера WeMos XI калиброванное напряжение 2,00 вольт с цифрового лабораторного источника питания. Точность подаваемого напряжения составляет 2 знака после запятой и контролируется как встроенным в источник питания измерителем, так и подключённым внешним вольтметром.

Мы создадим скетч, который будет измерять поданное напряжение и выводить результаты в Serial для визуального контроля. Скетч также будет вычислять погрешность и дивиацию измеряемого сигнала от эталонного значения.

Для начала приведём полный текст скетча WeMos 12-bit ADC example:

/*
  WeMos 12-bit ADC example
  (based on standard example)
  (c)2020 Electromicro
  License: GNU GPL 2.1
 */

#define ANALOG_PIN A0
#define REAL_VCC 5.04
#define DAC_12BIT 4096.0
#define REFERENCE_VOLTAGE 2.0

void setup() {
  Serial.begin(115200);
  Serial.println(F("WeMos 12-bit ADC example start..."));
}

void loop() {
  int value = analogRead(ANALOG_PIN);
  
  float k = REAL_VCC/DAC_12BIT;
  float real = value * k;
  float delta = real - REFERENCE_VOLTAGE;
  float percent = REFERENCE_VOLTAGE / 100.0;
  
  Serial.print(F(" value:"));   Serial.print(value);
  Serial.print(F(" voltage:")); Serial.print(real);
  Serial.print(F(" delta:"));   Serial.print(delta);
  Serial.print(F(" percent:")); Serial.print(delta / percent, 1);
  Serial.println();

  delay(1000);
}

А теперь подробно разберём его работу. Вначале мы задаём аналоговый вход WeMos XI с которым будем работать, в нашем случае это A0.

#define ANALOG_PIN A0

Затем задаём реальное напряжение питания контроллера WeMos XI. Это напряжение измерено мультиметром и немного отличается от «теоретических» 5-и вольт и составляет 5,04 вольта. Уточнять значение реального напряжения питания нужно для повышения точности измерений в эксперименте.

#define REAL_VCC 5.04

Далее указываем разрешение 12-битных измерений:

#define DAC_12BIT 4096.0

И, поскольку оно заранее известно по условиям эксперимента, указываем эталонное напряжение, которое будем измерять.

#define REFERENCE_VOLTAGE 2.0

Затем в скетче идёт функция setup(), в которой инициализируется вывод в Serial и выводится приветственное сообщение о старте нашего скетча.

void setup() {
  Serial.begin(115200);
  Serial.println(F("WeMos 12-bit ADC example start..."));
}

Теперь переходим к функции loop().

void loop() {
  int value = analogRead(ANALOG_PIN);
  
  float k = REAL_VCC/DAC_12BIT;
  float real = value * k;
  float delta = real - REFERENCE_VOLTAGE;
  float percent = REFERENCE_VOLTAGE / 100.0;
  
  Serial.print(F(" value:"));   Serial.print(value);
  Serial.print(F(" voltage:")); Serial.print(real);
  Serial.print(F(" delta:"));   Serial.print(delta);
  Serial.print(F(" percent:")); Serial.print(delta / percent, 1);
  Serial.println();

  delay(1000);
}

В функции loop() мы сначала получаем данные с АЦП нулевого канала A0 контроллера WeMos XI в переменную value.

  int value = analogRead(ANALOG_PIN);

Затем вычисляем коэффициент веса каждой единицы при реально измеренном напряжении питания (которое является опорным) и 12-битном АЦП WeMos XI.

  float k = REAL_VCC/DAC_12BIT;

И после этого вычисляем напряжение, которое мы измерили при помощи контроллера WeMos XI и нашего скетча.

  float real = value * k;

Теперь вычисляем отклонение вычисленного напряжения от реально поданного на вход АЦП канала A0 контроллера WeMos XI.

float delta = real — REFERENCE_VOLTAGE;

И значение одного процента напряжения для будущего вычисления ошибки измерения в процентах.

float percent = REFERENCE_VOLTAGE / 100.0;

Далее выводим все вычисленные значения в одну строку.

  Serial.print(F(" value:"));   Serial.print(value);
  Serial.print(F(" voltage:")); Serial.print(real);
  Serial.print(F(" delta:"));   Serial.print(delta);
  Serial.print(F(" percent:")); Serial.print(delta / percent, 1);
  Serial.println();

И делаем паузу в одну секунду.

  delay(1000);

Вот результат работы нашего скетча:

Видны сырые данные с АЦП нулевого канала, величина измеренного напряжения, абсолютное отклонение измеренной величины от рефренсного напряжения 2.00 вольт и оценка погрешности измерения в процентах.

Получение GUID идентификатора

В предыдущем примере мы познакомились с работой с 12-битными АЦП контроллера WeMos XI, теперь давайте поработаем с ещё одной интересной и уникальной (она отсутствует в популярном контроллере Arduino Pro Mini) функцией GUID идентификатора.

GUID идентификатор — это уникальный идентификационный номер, зашитый в каждом микроконтроллере LGT8F328D (который является основой WeMos XI). Этот номер можно использовать для идентификации контроллера в системах умного дома, для шифрования проводных и беспроводных соединений и т. п. функций. В общем, можно сказать, что это очень полезная особенность контроллера WeMos XI.

Как же получить этот номер?

Очень просто, давайте создадим скетч для получения GUID идентификатора вашего контроллера WeMos XI.

Вот полный листинг скетча WeMos XI GUID example:

/*
  WeMos XI GUID example
  (based on standard example)
  (c)2020 Electromicro
  License: GNU GPL 2.1
  
  A simple example of get GUID.
*/

void setup() {
  Serial.begin(115200);
  Serial.println(F("WeMos XI GUID example started..."));

  uint32_t guid = *(uint32_t*)&GUID0;
  Serial.print("GUID: "); Serial.println(guid, HEX);
}

void loop() {

}

Теперь подробно разберём его работу и посмотрим на результат. Все действия в этом скетче происходят в функции setup(), функция loop() остаётся пустой и не производит никаких действий.

Вначале мы инициализируем вывод в Serial и выводим приветственное сообщение о старте нашего скетча.

  Serial.begin(115200);
  Serial.println(F("WeMos XI GUID example started..."));

Затем получаем уникальное значение GUID идентификатора вашего контроллера WeMos XI в 32-битную беззнаковую пременную guid.

uint32_t guid = *(uint32_t*)&GUID0;

И выводим её в Serial в шестнадцатеричном (HEX) формате.

  Serial.print("GUID: "); Serial.println(guid, HEX);

Вот результат работы нашего скетча:

Заключение

В этом руководстве мы рассмотрели начало работы и основные приёмы программирования контроллера WeMos XI в среде разработки Arduino IDE. Как вы могли убедиться, работа с платой WeMos XI не представляет каких-то трудностей и практически не отличается от работы с привычными вам платами Arduino, зато WeMos XI представляет вам множество интересных функций, которые отсутствуют у её конкурента — платы Arduino Pro Mini.

Ссылки по теме

Обзор контроллера WeMos XI

Спецификации и подключение WeMos XI

Пример работы с WeMos XI

Где купить?

WeMos XI в магазине «Electromicro»

Техническая поддержка

Мы внимательно относимся к потребностям наших клиентов и осуществляем техническую поддержку всей выпускаемой продукции. Вы можете написать нам письмо с вашим вопросом или позвонить по телефону и специалист нашей компании проконсультирует вас и поможет решить вашу проблему.

  • Емейл для вопросов по нашей продукции: electromicro@bk.ru
  • Наш телефон: +7 (495) 997-37-74

Аналогичные товары