Как подключить nodemcu к arduino ide
Перейти к содержимому

Как подключить nodemcu к arduino ide

  • автор:

NodeMCU — быстрый старт для любителей Arduino

Аппаратная платформа Arduino отличная возможность начать программирование микроконтроллеров, не смотря на все её недостатки в виде упрощенного IDE и раздутого скомпилированного кода. Но рано или поздно возможностей ардуино перестает хватать для реализации своих идей и настает момент, когда надо двигаться дальше. Если вам не хватает поддержки беспроводных сетей, то у вас два выхода: подключить к ардуино модуль ESP-01 (на Али) и остаться со всеми остальными параметрами ардуино, либо использовать платы на основе ESP-12(E), например NodeMCU, WeMos (на Ali) и многие другие китайские поделки, и получить при этом все преимущества и недостатки контроллера esp8266 (да-да, по сравнению с ардуино у esp8266 все же есть некоторые недостатки, но о них ниже). В этой статье я буду рассматривать работу с NodeMCU с точки зрения пользователя ардуино, покажу быстрый способ перехода от ардуино к NodeMCU, проведу сравнение NodeMCU с ардуино, а так же покажу как получить доступ к устройству, построенному на NodeMCU, через интернет из любой точки мира (при условии что само устройство имеет доступ в интернет). Но в самом начале несколько слов о параметрах и возможностях NodeMCU. Но перед этим стоит уточнить, что сравнивать NodeMCU и Arduino довольно сложно, так как у них разная «весовая категория». При этом у каждой из плат есть свои преимущества и недостатки. Так NodeMCU имеет бОльшие вычислительные способности и частоту процессора, бОльший объем памяти и самое главное имеет встроенную поддержку Wi-Fi, но при этом уступает Arduino в количестве как цифровых, так и аналоговых выводов. Файлы печатной платы приведены на гитхабе https://github.com/nodemcu/nodemcu-devkit-v1.0 , там же и распиновка печатной платы А так же подробная принципиальная схема https://github.com/nodemcu/nodemcu-devkit-v1.0/blob/master/NODEMCU_DEVKIT_V1.0.PDF Обратите внимание на два зарезервированных вывода слева сверху. На плате, что досталась мне, сюда выведены дополнительные выводы питания прямо с usb гнезда (см. изображение ниже), при этом при питании через Vin на выводе VUSB отсутствует напряжение. Не знаю, сделали ли это сами разработчики NodeMCU или же постарались китайские изготовители плат. Модуль можно питать тремя различными способами с различным напряжением:

  • 5-18 вольт через вывод Vin (согласно параметрам стабилизатора AMS1117-3.3)
  • 5 вольт через вывод VUSB или USB-гнездо
  • 3.3 вольта непосредственно через вывозы 3V

На плате установлен ESP-12E, который имеет следующие параметры (взяты из даташита на ESP-12E):

  • протокол Wi-Fi 802.11 b/n/g
  • частота 2.4 — 2.5 GHz (2400-2483.5 MHz)
  • режим Wi-Fi: точка доступа, клиент
  • защита Wi-Fi: WPA, WPA2
  • шифрование Wi-Fi: WEP, TKIP, AES
  • сетевые протоколы: IPv4, TCP, UDP, HTTP, FTP
  • 80 MHz 32-bit процессор
  • 11 доступных портов ввода/вывода UART, HSPI, I2C, I2S, GPIO, PWM
  • рабочее напряжение 3.0 . 3.6 вольт
  • максимальная нагрузка на вывод не более 12 mA
  • максимальное потребление модуля 200 mA, среднее 80 mA (подробнее в 11 таблице даташита ESP-12E)
  • рабочая температура -40 . 125 С

В том же даташите приведены назначения выводов. Выводы нумеруются против часовой стрелки начиная слева сверху, при этом антенна ESP-12E должна находиться вверху, а сам модуль должен быть повернут лицевой стороной.

NO. Pin Name Function
1 RST Reset the module
2 ADC АЦП 10 бит, диапазон входящего напряжения 0-1 вольт
3 EN Chip enable pin.Active high
4 IO16 GPIO16; может использоваться для вывода модуля из сна
5 IO14 GPIO14; HSPI_CLK
6 IO12 GPIO12; HSPI_MISO
7 IO13 GPIO13; HSPI_MOSI; UART0_CTS
8 VCC 3.3V power supply (VDD)
9 CS0 Chip selection
10 MISO Salve output master input
11 IO9 GPIO9
12 IO10 GBIO10
13 MOSI Master output slave input
14 SCLK Clock
15 GND GND
16 IO15 GPIO15; MTDO; HSPICS; UART0_RTS
17 IO2 GPIO2; UART1_TXD
18 IO0 GPIO0
19 IO4 GPIO4
20 IO5 GPIO5
21 RXD UART0_RXD; GPIO3
22 TXD UART0_TXD; GPIO1

И еще одна наглядная картинка с распиновкой ESP-12

Так же даташит содержит таблицу описания интерфейсов.

В качестве преобразователя USB-UART используется микросхема CH340G.

NodeMCU и ArduinoIDE

Переход в программировании от ардуино к NodeMCU не является сложной задачей, так как не придется осваивать иной язык программирования или иную IDE. Программировать NodeMCU можно из старой доброй ArduinoIDE, только необходимо добавить в нее поддержку esp8266. Для этого необходимо:

  • запустить ArduinoIDE;
  • перейти в пункт «Файл – Настройки»;
  • в поле «Дополнительные ссылки для Менеджера плат» ввести адрес http://arduino.esp8266.com/stable/package_esp8266com_index.json и нажать кнопку «ОК» (на скриншоте устаревшая и уже не рабочая ссылка);

  • перейти в пункт меню «Инструменты – Плата:… — Менеджер плат», откроется окно Менеджера плат;

  • в самом низу списка появится новый пункт «esp8266…», нажать на него и затем на кнопку «Установка»;
  • дождаться завершения загрузки и установки необходимых файлов (будут загружены несколько пакетов объемом не менее 160 мегабайт) и перезапустить ArduinoIDE.

В итоге в пункте меню «Инструменты – Плата:…» появляется 21 новый пункт. Для работы с NodeMCU я выбираю из списка плату «NodeMCU 1.0 (ESP-12E Моdule)». На этом настройка ArduinoIDE завершена.

Обратите внимание на ссылки в менеджере плат. Ссылка More info приведет нас на страницу проекта на github, там в первую очередь стоит взглянуть на файл https://github.com/esp8266/Arduino/blob/master/variants/nodemcu/pins_arduino.h в котором описано, как обращаться к выводам из среды ArduinoIDE и их соответствие выводам GPIO.

#ifndef Pins_Arduino_h #define Pins_Arduino_h #include "../generic/common.h" #define PIN_WIRE_SDA (4) #define PIN_WIRE_SCL (5) static const uint8_t SDA = PIN_WIRE_SDA; static const uint8_t SCL = PIN_WIRE_SCL; static const uint8_t LED_BUILTIN = 16; static const uint8_t BUILTIN_LED = 16; static const uint8_t D0 = 16; static const uint8_t D1 = 5; static const uint8_t D2 = 4; static const uint8_t D3 = 0; static const uint8_t D4 = 2; static const uint8_t D5 = 14; static const uint8_t D6 = 12; static const uint8_t D7 = 13; static const uint8_t D8 = 15; static const uint8_t D9 = 3; static const uint8_t D10 = 1; #endif /* Pins_Arduino_h */

Так же назначения выводов описаны в файле https://github.com/esp8266/Arduino/blob/master/variants/generic/common.h

#define PIN_SPI_SS (15) #define PIN_SPI_MOSI (13) #define PIN_SPI_MISO (12) #define PIN_SPI_SCK (14) static const uint8_t SS = PIN_SPI_SS; static const uint8_t MOSI = PIN_SPI_MOSI; static const uint8_t MISO = PIN_SPI_MISO; static const uint8_t SCK = PIN_SPI_SCK; #define PIN_A0 (17) static const uint8_t A0 = PIN_A0;

Здесь видно, что SPI соответствует выводам D5-8.

Если нажать на ссылку Online help, то откроется страница http://esp8266.github.io/Arduino/versions/2.2.0/ что несколько странно, потому что установлена последняя версия 2.3.0 и страница http://esp8266.github.io/Arduino/versions/2.3.0/ так же существует и доступна. На этой странице можно найти много полезной информации на английском языке. Разберемся же что из того что там представлено будет полезно для нас.

Первым делом рассмотрим описание стандартных функций (приведены на странице http://esp8266.github.io/Arduino/versions/2.3.0/doc/reference.html). Здесь сказано что номера выводов в среде ArduinoIDE совпадают с нумерацией GPIO. То есть что бы установить единицу на выводе GPIO16 нужно использовать команду digitalWrite(16, HIGH) или digitalWrite(D0, HIGH). Все выводы (описанные в https://github.com/esp8266/Arduino/blob/master/variants/nodemcu/pins_arduino.h) могут работать с функциями pinMode, digitalRead, digitalWrite и analodWrite. Так же выводы, сконфигурированные на вход можно подтянуть к положительному выводу питания командой INPUT_PULLUP , вывод 16 можно притянуть к земле командой INPUT_PULLDOWN_16.

Прерывания доступны на всех GPIO, кроме GPIO16. Работа с прерываниями в NodeMCU ничем не отличается от работы с прерываниям в ардуино.

Аналоговый вход работает так же, как и на ардуино, analogRead(A0) считывает аналоговое значение с вывода GPIO17 (A0). Этот же АЦП может считывать напряжение VCC командой ESP.getVcc(), но перед этим в самом начале скетча (до функции setup) необходимо добавить строку ADC_MODE(ADC_VCC), а так же вывод А0 не должен быть никуда подключен.

Программный ШИМ работает на всех доступных GPIO, включается стандартной командой analogWrite(pin, value). Значение value лежит в диапазоне 0-1023 и может быть изменено функцией analogWriteRange(new_range). Стандартная частота ШИМ 1кГц, так же может быть изменена при помощи analogWriteFreq(new_frequency).

Порицаемая многими функция delay здесь играет особую роль. Дело в том, что кроме выполнения скетча, так же необходимо поддерживать связь по Wi-Fi. Это делается автоматически, после каждого выполнения loop или при вызове delay. Таким образом, если в функции loop есть фрагменты кода, которые выполняются более 50 микросекунд (например, выполняется какой-то большой цикл), то рекомендуют вызвать delay для нормальной работы Wi-Fi. Так же есть функция yield(), которая аналогична delay(0).

Последовательный порт Serial работает на GPIO1(TX) и GPIO3(RX). Последовательный порт Serial можно переназначить на GPIO15 (TX) и GPIO13 (RX) , для этого после вызова функции Serial.begin необходимо вызвать Serial.swap(). Для отмены переназначения выводов необходимо снова вызвать Serial.swap(). В Serial1 доступен только TX (GPIO2).

Так же в составе пакета для работы с esp8266 идут измененные библиотеки, работа с которыми отличается от стандартных библиотек.

EEPROM — перед началом работы с eeprom необходимо вызвать функцию EEPROM.begin(size), где необходимо указать, какой объем памяти eeprom необходимо использовать (от 4 до 4096 байт), функция EEPROM.write не записывает данные сразу,для записи данных надо использовать функцию EEPROM.commit, функция EEPROM.end так же записывает данные и завершает работу с eeprom.

I2C — перед началом работы с I2C необходимо вызвать функцию Wire.begin(int sda, int scl) , по умолчанию 4 (SDA) и 5 (SCL).

  • функция ESP.deepSleep(microseconds, mode) переводит модуль в сон (mode — WAKE_RF_DEFAULT, WAKE_RFCAL, WAKE_NO_RFCAL, WAKE_RF_DISABLED). Чтобы вывести модуль из режима сна необходимо соединить GPIO16 и RST
  • ESP.restart() перезапускает процессор
  • сторожевой таймер (watchdog) реализован функциями ESP.wdtEnable(), ESP.wdtDisable(), и ESP.wdtFeed()

ESP8266 WiFi очень похожа на библиотеку WiFi Shield (https://www.arduino.cc/en/Reference/WiFi), и на странице http://esp8266.github.io/Arduino/versions/2.3.0/doc/libraries.html#wifi-esp8266wifi-library указаны только различия между этими библиотеками. Рассматривать только различия между библиотеками в отрыве от основной библиотеки WiFi Shield не имеет смысла, поэтому здесь делать я этого не буду.

Перейдем к практике.

Аналогом скетча «блинк» является нижеприведённый скетч, который создает локальную сеть и позволяет управлять выводами NodeMCU через адресную строку браузера.

/* * This sketch demonstrates how to set up a simple HTTP-like server. * The server will set a GPIO pin depending on the request * http://server_ip/gpio/0 will set the GPIO2 low, * http://server_ip/gpio/1 will set the GPIO2 high * server_ip is the IP address of the ESP8266 module, will be * printed to Serial when the module is connected. */ #include const char* ssid = "your-ssid"; const char* password = "your-password"; // Create an instance of the server // specify the port to listen on as an argument WiFiServer server(80); void setup() < Serial.begin(115200); delay(10); // prepare GPIO2 pinMode(2, OUTPUT); digitalWrite(2, 0); // Connect to WiFi network Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) < delay(500); Serial.print("."); >Serial.println(""); Serial.println("WiFi connected"); // Start the server server.begin(); Serial.println("Server started"); // Print the IP address Serial.println(WiFi.localIP()); > void loop() < // Check if a client has connected WiFiClient client = server.available(); if (!client) < return; >// Wait until the client sends some data Serial.println("new client"); while(!client.available()) < delay(1); >// Read the first line of the request String req = client.readStringUntil('\r'); Serial.println(req); client.flush(); // Match the request int val; if (req.indexOf("/gpio/0") != -1) val = 0; else if (req.indexOf("/gpio/1") != -1) val = 1; else < Serial.println("invalid request"); client.stop(); return; >// Set GPIO2 according to the request digitalWrite(2, val); client.flush(); // Prepare the response String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n\r\n\r\nGPIO is now "; s += (val)?"high":"low"; s += "\n"; // Send the response to the client client.print(s); delay(1); Serial.println("Client disonnected"); // The client will actually be disconnected // when the function returns and 'client' object is detroyed >

Но если уж NodeMCU дает возможность управлять собой через интернет, то намного интереснее/удобнее/рациональнее создать устройство, управлять которым можно будет отовсюду, с любой точки планеты, а не только из локальной сети. Что бы реализовать такое соединение, необходимо использовать DNS серверы и настраивать модем, или использовать специальные сервисы, такие как Blynk или RemoteXY, например. Таких сервисов появляется всё больше и больше, выбор не ограничивается приведенными двумя примерами. Тем не менее, я покажу, как организовать доступ к NodeMCU из любой точки планеты именно при помощи сервиса RemoteXY.

В одной из своих предыдущих статей я рассказывал о способах подключения различных модулей связи к ардуино и работы с ними в сервисе RemoteXY, так же было рассмотрено подключение NodeMCU к локальной Wi-Fi сети (статья расположена по ссылке http://cxem.net/arduino/arduino213.php). Облачный способ подключения был создан уже послу публикации той статьи, и я в постскриптуме обещал рассмотреть этот способ связи в одной из следующих статей. Итак, поморгаем светодиодом через интернет.

Первым делом необходимо произвести конфигурацию подключения (смотрим скриншот).

Выбираем соединение «Cloud server — beta test», устройство NodeMCU, встроенный модуль связи и ArduinoIDE в качестве среды программирования. Далее необходимо настроить конфигурацию подключения модуля.

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

Жмем «Создать новый токен», появляется окошко, в котором необходимо ввести имя устройства, при нажатии кнопки «создать» токен будет сгенерирован автоматически и появится в списке токенов.

В дальнейшем можно изменить имя устройства, нажав ссылку «изменить» в крайнем правом столбце таблицы. Переходим обратно в редактор и продолжаем работу над проектом.

На рабочем поле редактора я поместил элемент «кнопка», который по умолчанию привязан к выводу со светодиодом.

Здесь больше ничего делать не надо, жмем кнопку «Получть исходный код», копируем его в ArduinoIDE, в менеджере плат выбираем NodeMCU 1.0 (ESP-12E Module), выбираем COM-порт, остальные настройки оставляем без изменений и жмем «Загрузка».

Далее переходим к смартфону и запускаем программу RemoteXY. на стартовом экране сверху справа жмем на «+» что бы добавить новое подключение,

В списке выбираем «Облачный сервер»

Жмем на поле «Токен устройства» и появившемся окне вводим токен

Жмем «Ок» и «Подключиться»

И сразу же мы получаем доступ к устройству (если оно конечно имеет связь с сервером).

Обратите внимание, на странице списка токенов можно отслеживать состояние каждого устройство. Так надпись «connected» означает, что устройство подключено к серверу, а надпись «used» — что установлена связь между смартфоном и устройством.

А теперь создадим что-то полезное — кодовый замок-головоломку «Железный Феликс».

Идея этой «головоломки» принадлежит не мне, я лишь её адаптировал. В конце 90-х годов на телеканале «РТР» (нынешний первый канал) выходила передача «Довгань-шоу», маленький аналог «Форт-Боярда» с испытаниями и одним участником. В самом начале игры при помощи лототрона определялось 9-значное число, игроку в течение 9 небольших испытаний необходимо было найти эти числа (испытания были не сложными и короткими по продолжительности — 60-90-120 секунд). В конце игры, добытые в испытаниях числа, игроку необходимо было ввести в огромную копию арифмометра «Феликс», а недостающие числа подобрать. На подбор комбинации отводилось 120 секунд. Если комбинация была подобрана правильно, то рычаг, находящийся с правой стороны устройства, поддавался, дверь открывалась, и игрок мог выйти из комнаты (естественно в роли победителя).

Итак, воспроизведем этот «аттракцион» при помощи NodeMCU и смартфона. Для чего это нужно? Например, для организации квестов (по аналогии с той самой передачей, игроку необходимо будет добывать части пароля, а недостающие подобрать). Контроллер, при правильно подобранном пароле, может открыть дверь, или вывести на экран пароль, от кодового замка, точки доступа Wi-Fi (которая в свою очередь может открыть доступ к следующему квестовому устройству) или bluetooth. На худой конец такое устройство можно использовать просто как кодовый замок для двери, который трудно будет взломать перебором значений (еще бы, устройство предполагает 1 000 000 000 комбинаций пароля).

Интерфейс состоит из десяти переключателей по десять положений в каждом (при необходимости можно изменить количество), кнопки «Ок» и текстовой строки. Текстовая строка оповестит о правильно набранном пароле (или даст пароль от другого устройства). Подтверждать пароль следует нажатием кнопки «Ок». Принципиальную схему я приводить не буду.

Дальнейшие пояснения в комментариях.

////////////////////////////////////////////// // RemoteXY include library // ////////////////////////////////////////////// // определение режима соединения и подключение библиотеки RemoteXY #define REMOTEXY_MODE__ESP8266WIFI_LIB_POINT #include #include // настройки соединения #define REMOTEXY_WIFI_SSID "FeliX" //создаем точку доступа с названием FeliX #define REMOTEXY_WIFI_PASSWORD "" //точка доступа не защищена паролем #define REMOTEXY_SERVER_PORT 6377 // конфигурация интерфейса #pragma pack(push, 1) uint8_t RemoteXY_CONF[] = < 255,11,0,17,0,117,0,6,8,0, 3,10,8,10,6,51,2,3,10,14, 10,6,51,2,3,10,20,10,6,51, 2,3,10,26,10,6,51,2,3,10, 32,10,6,51,2,3,10,38,10,6, 51,2,3,10,44,10,6,51,2,3, 10,50,10,6,51,2,3,10,56,10, 6,51,2,3,10,2,10,6,51,2, 1,1,64,10,34,11,6,79,75,0, 67,1,65,33,31,8,6,17,129,0, 6,1,21,9,14,70,101,108,105,88, 0,129,0,5,0,21,9,0,70,101, 108,105,88,0 >; // структура определяет все переменные вашего интерфейса управления struct < // input variable uint8_t select_1; // Используем 10 переключателей для ввода пароля uint8_t select_2; // uint8_t select_3; // uint8_t select_4; // uint8_t select_5; // uint8_t select_6; // uint8_t select_7; // uint8_t select_8; // uint8_t select_9; // uint8_t select_0; // uint8_t ok; // кнопка подтверждения пароля. // output variable char answer[17]; //в этой строки отображается ответ контроллера. // other variable uint8_t connect_flag; // =1 if wire connected, else =0 >RemoteXY; #pragma pack(pop) ///////////////////////////////////////////// // END RemoteXY include // ///////////////////////////////////////////// #define PIN_OK D4//вывод D4 будет использоваться для визуального подтверждения правильно набранного пароля, так же к нему можно подключить исполнительные механизмы (например, электрозамок). int password[10]=< 5, 9, 0, 1, 6, 6, 9, 2, 3, 1>;//в этом массиве хранится пароль. boolean open=false;//булева переменная, true когда введен верный пароль. void setup() < RemoteXY_Init (); pinMode (PIN_OK, OUTPUT); >void loop() < RemoteXY_Handler (); int enterPassword[10]=< RemoteXY.select_0, RemoteXY.select_1, RemoteXY.select_2, RemoteXY.select_3, RemoteXY.select_4, RemoteXY.select_5, RemoteXY.select_6, RemoteXY.select_7, RemoteXY.select_8, RemoteXY.select_9>; //переносим значения переключателей в массив. for (int i=0; i else < open=true;//иначе поднимаем флаг, считаем пароль верным >> if ((open)&&(RemoteXY.ok==1)) else >

Что дальше? Программировать ESP8266 можно не только в ArduinoIDE, для ESP8266 создано уже много разных прошивок с различными языками программирования (basic, родной для NodeMCU lua, python, smart.js). Но ArduinoIDE уже обладает большим количеством библиотек на все случаи жизни и замечательно подходит для быстрого старта с NodeMCU, но есть одно НО — задерживаться на ArduinoIDE надолго не стоит.

P.S. Выражаю благодарность сервису «ЖелеZona» за предоставленную для написания статьи плату NodeMCU.

Прикрепленные файлы:
  • felix.rar (2 Кб)

Урок ESP8266. Подключение DS3231 к NodeMCU.

Цель этого урока — объяснить, как подключить часы реального времени DS3231 к ESP8266 (Node MCU). В статье рассмотрим, как создать простую программу для настройки времени и даты RTC и выведем данные в монитор порта.

Для урока подключения DS3231 к NodeMCU понадобится.

  • NodeMCU
  • Модуль реального времени DS3231
  • Макетная плата
  • Соединительные провода.

Модуль реального времени DS3231 бывает нескольких твипов. Самый распространённый приведён на картинке ниже.

часы реального времени DS3231 к ESP8266 (Node MCU)

У меня не было в наличии данного модуля, и я использовал вот такой.

У меня не было в наличии данного модуля, и я использовал вот такой.

Также есть версия DS3231 mini.

версия DS3231 mini

Распиновка DS3231 mini.

Распиновка DS3231 mini

Которую я уже использовал в своих Arduino проектах. Не зависимо от вида модуля подключаются и работают они одинаково.

В уроке будем использовать библиотеки ESP8266 для Arduino IDE. Вы можете посмотреть здесь, как настроить Arduino IDE для поддержки ESP8266.

Схема подключения DS3231 к NodeMCU.

Аппаратная схема подключения платы DS3231 к ESP8266 очень проста и показана на рисунке ниже.

Схема подключения DS3231 к NodeMCU.

Как видно на схеме, DS3231 использует интерфейс I2C для взаимодействия с микроконтроллерами. Поскольку мы используем IDE Arduino, у нас есть библиотека Wire для обработки протокола I2C, которую позже будем использовать при создании программы для взаимодействия с RTC.

Как описано в документации библиотек ESP8266 для Arduino IDE, контакты по умолчанию I2C в библиотеке Wire — это контакты 4 (SDA) и 5 (SCL). Если вы используете плату NodeMCU, примите во внимание, что контакты платы не соответствуют контактам ESP8266. Подключать нужно к контактам D2 (SDA) и D1 (SCL).

Вот краткий обзор распиновки ESP-12E NodeMCU

Библиотека для работы с DS3231.

Среда Arduino предоставляет широкий спектр библиотек для взаимодействия с различными устройствами, и DS3231 не является исключением. Итак, мы используем библиотеку, показанную на рисунке ниже, которая, как указано в описании, протестирована на ESP8266.

Библиотека для работы с DS3231.

Её можно установить с помощью менеджера библиотек Arduino IDE.

менеджера библиотек Arduino IDE

Эта библиотека предоставляет простые в использовании функции для взаимодействия с RTC, при этом программисту не нужно беспокоиться о низкоуровневых деталях протокола I2C. Кроме того, в ней есть несколько примеров кода, которые помогут начать работу с DS3231.

Скетч вывода даты и время с DS3231 в монитор порта.

Как было сказано ранее, создадим простую программу для настройки времени и даты часов реального времени, а затем считаем данные и выведем в монитор порта.

Скетч вывода даты и время с DS3231 в монитор порта.

Во-первых, нам нужно подключить недавно установленную библиотеку, которая позволяет взаимодействовать с DS3231, а также библиотеку Arduino, которая реализует связь с устройствами I2C.

#include //I2C библиотека #include //RTC библиотека

Функции для взаимодействия с RTC предоставляются, как методы класса RtcDS3231:

RtcDS3231 rtcObject(Wire); //библиотека rtc

Библиотека RTC использует класс RtcDateTime, который позволяет нам создавать объекты для хранения информации о дате и времени.

Итак, объявляем объект этого класса и передаем в конструктор данных от года до секунд. Наконец, мы вызываем метод setDateTime для объекта RtcDS3231 и передаем ему объект RtcDateTime, содержащий информацию о дате и времени.

Затем считываем текущую дату и время из RTC в функции основного цикла. В этом простом примере мы будем опрашивать RTC каждые 5 секунд.

void setup() < Serial.begin(115200); //Запуск последовательного подключения rtcObject.Begin(); //Запуск I2C /* Установка времени */ RtcDateTime currentTime = RtcDateTime(21, 07, 18, 10, 20, 0); //2021/7/18 10:20:0 rtcObject.SetDateTime(currentTime); //Сохраняем время >

Чтобы получить текущее время и дату, вызываем метод GetDateTime для нашего ранее определенного объекта RtcDS3231 (который мы назвали «rtcObject»). Этот метод вернет объект RtcDateTime, как использовали ранее в функции настройки.

Класс RtcDateTime имеет метод для получения каждого из параметров даты и времени. Мы будем использовать эти методы, чтобы получить их в виде строки (с помощью функции sprintf ).

Когда у нас есть вся информация о дате и времени в строке, отправляем ее в последовательный порт.

void loop() < RtcDateTime currentTime = rtcObject.GetDateTime(); //получите время от RTC char str[20]; //объявите строку как массив символов sprintf(str, "%d/%d/%d %d:%d:%d", //%d позволяет вывести целое число в строку currentTime.Year(), //год currentTime.Month(), //месяц currentTime.Day(), //день currentTime.Hour(), //час currentTime.Minute(), //минуты currentTime.Second() //секунды ); Serial.println(str); //выводим строку в последовательный порт delay(5000); // ждем 5 сек. >

В конце основного цикла ставим задержку в 5 секунд.

Примечание. Хотя в этом примере используется массив символов, мы также можем использовать строковый объект для вывода параметров времени и даты. Тем не менее, важно знать, что мы можем использовать массивы символов как строки, что более эффективно. Кроме того, в чистом C нет объектов, поэтому строки всегда являются массивами символов.

Полный Скетч вывода даты и время с DS3231 в монитор порта, располагается ниже. Также скетч вы можете скачать внизу статьи в разделе «Файлы для скачивания»

#include //I2C библиотека #include //RTC библиотека RtcDS3231 rtcObject(Wire); //библиотека rtc void setup() < Serial.begin(115200); //Запуск последовательного подключения rtcObject.Begin(); //Запуск I2C /* Установка времени */ RtcDateTime currentTime = RtcDateTime(21, 07, 18, 10, 20, 0); //2021/7/18 10:20:0 rtcObject.SetDateTime(currentTime); //Сохраняем время >void loop() < RtcDateTime currentTime = rtcObject.GetDateTime(); //получите время от RTC char str[20]; //объявите строку как массив символов sprintf(str, "%d/%d/%d %d:%d:%d", //%d позволяет вывести целое число в строку currentTime.Year(), //год currentTime.Month(), //месяц currentTime.Day(), //день currentTime.Hour(), //час currentTime.Minute(), //минуты currentTime.Second() //секунды ); Serial.println(str); //выводим строку в последовательный порт delay(5000); // ждем 5 сек. >

Тестирование Подключения DS3231 к NodeMCU.

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

Тестирование Подключения DS3231 к NodeMCU.

Заключение.

Это был простой пример по базовым возможностям DS3231.

Это был простой пример по базовым возможностям DS3231. Тем не менее, у этого RTC модуля есть еще несколько функций, которые будем изучать в следующих уроках.

Понравился Урок Подключение DS3231 к NodeMCU? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

Программирование NodeMCU ESP8266 «по воздуху» (Over-the-Air, OTA)

Беспроводное программирование по технологии OTA (Over the Air – «по воздуху») – это процесс, позволяющий устройствам обновить свою прошивку или программное обеспечение беспроводным способом, без физического подключения к чему-либо. Для этого можно использовать такие технологии как Wi-Fi, Bluetooth, GPRS или 4G/3G вместо использования последовательной связи по проводам. Технология OTA используется для перепрограммирования различных устройств – микроконтроллеров, сотовых телефонов, компьютеров и т.п. В связи с широким распространением технологий интернета вещей технология OTA в настоящее время использует преимущественно частотные диапазоны с низкими скоростями передачи данных (868 MHz, 900 MHz, 2400 MHz).

Внешний вид проекта беспроводного программирования NodeMCU ESP8266 с помощью Arduino IDE

В данной статье мы рассмотрим беспроводное («по воздуху») программирование платы ESP8266 NodeMCU с помощью Arduino IDE.

ESP8266 NodeMCU

Внешний вид платы NodeMCU ESP8266

NodeMCU – это платформа IoT (интернета вещей) с открытым исходным кодом. Она включает в себя прошивку (firmware), которая работает на дешевом Wi-Fi чипе (SoC) ESP8266 от компании Espressif Systems, и аппаратном обеспечении (hardware), основанном на модуле ESP-12. Она содержит контакты GPIO, SPI, I2C, ADC, PWM, UART и может программироваться с помощью среды Arduino IDE. Плата NodeMCU содержит в своем составе микросхему CP2102, которая обеспечивает преобразование интерфейса USB в логику TTL. Благодаря этому NodeMCU можно подключать напрямую к USB порту компьютера, в то время как обычный модуль ESP8266 можно подключать к USB порту компьютера только при помощи платы (модуля) FTDI.

Необходимые компоненты

  1. NodeMCU ESP8266 (купить на AliExpress).
  2. Кабель micro USB.
  3. Arduino IDE.

Подготовка NodeMCU для беспроводного программирования (OTA)

Подключите NodeMCU ESP8266 к компьютеру с помощью кабеля USB cable. Далее, чтобы нам загрузить прошивку в плату с помощью технологии OTA, нам сначала необходимо по кабелю загрузить скетч в NodeMCU ESP8266, который будет генерировать IP адрес – этот скетч в дальнейшем поможет нам осуществить беспроводное программирование платы. Для этого выберите последовательный порт, по которому плата подключена к компьютеру, в пункте меню Tools -> Port.

В среде Arduino IDE есть библиотеки и примеры для работы с модулями ESP8266. В Arduino IDE откройте пример BasicOTA как показано на следующем рисунке.

Открытие примера BasicOTA в Arduino IDE

Внесите изменения в код этого примера, заменив в нем значения параметров “your-ssid” и “your-password” на идентификатор сети и пароль для своей сети Wi-Fi. После этого можете загружать скетч в модуль.

Загрузка примера BasicOTA в плату NodeMCU ESP8266 с помощью Arduino IDE

После успешной загрузки скетча в модуль откройте окно монитора последовательной связи (serial monitor). В окне монитора последовательной связи установите скорость передачи (Baud Rate) равную 115200 и нажмите кнопку сброса (Reset button) на NodeMCU ESP8266. Подключение NodeMCU ESP8266 к сети Wi-Fi займет некоторое время поскольку при этом проверяются идентификатор сети и пароль на вход в нее. После успешного подключения модуля к сети Wi-Fi его IP адрес отобразится в окне монитора последовательной связи.

Отображение IP адреса платы NodeMCU ESP8266 в окне монитора последовательной связи

Объяснение программы для модуля ESP8266

Полный код программы для мигания светодиодом при помощи технологии OTA приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

Первым делом в программе подключим используемые библиотеки. Библиотека ESP8266WiFi.h содержит функции (операции) для работы с Wi-Fi, которые потребуются ему для соединения с сетью. Также она содержит методы и свойства для работы модуля ESP8266 в режиме станции или в режиме точки доступа. Библиотека ESP8266mDNS.h позволяет скетчу отвечать на широковещательные DNS запросы.

NodeMCU (ESP8266) как подключить и прошивка

NodeMCU — это платформа на основе модуля ESP8266. П лата предназначена для удобного управления различными схемами на расстоянии посредством передачи сигнала в локальную сеть или интернет через Wi-Fi. Возможности применения этой платы ограничивается лишь вашей фантазией. К примеру, на базе Node MCU можно создать «умный дом», настроив управление светом или вентиляцией через телефон, регистрацию показаний датчиков и многое другое.
Купить NodeMCU (ESP8266) у проверенного продовца

1 шаг. Прошивка

В некоторых случаях приходит нам просто болванка. И появляется надобность прошивки NodeMCU (ESP8266). Да и без того вам придется его прошивать на различные проекты. Так как NodeMCU (ESP8266) имеет кучу прошивок.

Для прошивки надо скачать программу

Для ESP8266 есть такая программа как NodeMCU Flasher, которая изначально предназначена для прошивки загрузчика NodeMCU. Но как оказалось, она отлично прошивает и другие прошивки.

Я прикреплю к статье архив с данной программой и прошивкой для удобства, но тут всегда можно скачать новую версию NodeMCU Flasher.

В папке «nodemcu-flasher-master» есть 2 папки Win64 и Win32 и в зависимости от того какая разрядность у вашей ОС выбираем нужную. Дальше в папке Release запускаем «ESP8266Flasher.exe» и видим интерфейс программы:

Выбираем нужный COM порт и идём во вкладку «Config», убираем хрестик около «INTERNAL://NODEMCU» и ставим его на один пункт ниже, как на скрине:

(Если захотите прошить загрузчик NodeMCU — убираете хрестик там где его не было, и ставите — где он был, то есть около «INTERNAL://NODEMCU»).

Потом жмём по шестеренке и выбираем где лежит наша прошивка, прошивка как правило в формате *.bin(в прикреплённом архиве это «v0.9.5.2 AT Firmware.bin» которая лежит в основной папке), и так же выбираем «0x00000» как и выше.

Дальше идём во вкладку «Advanced» и меняем там скорость на 115200, именно эта скорость будет основная и модуль будет отзываться по ней на AT-команды в случае соответствующей прошивки.

Возвращаемся опять на вкладку «Operation» переводим модуль в режим программирования и жмём «Flash»:

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

Подключение NodeMCU

Подключаем плату NodeMCU к компьютеру с помощью USB кабеля:

  • cначала необходимо установить драйвер CP2102, затем открываем Arduino IDE,
  • заходим в раздел «Файл» -> «Настройки» и найдем строчку «дополнительные ссылки для менеджера плат» и вставляем туда следующую ссылку http://arduino.esp8266.com/versions/2.3.0/package_esp8266com_index.json,

  • заходим в раздел «инструменты» -> «плата» -> «менеджер плат», где выбираем «esp8266» и скачиваем последнюю версию,

  • заходим в раздел «инструменты» -> «плата» и находим Node MCU,

  • необходимо в том же разделе зайти в раздел «порт» и выбрать тот, в который подключена плата,

  • установить в разделе инструменты: Upload speed (115200 bouad).

NodeMCU: мигающий светодиод

Рассмотрим простейшую схему — мигание светодиодом. В скетче можно задать частоту мигания светодиода.

#define ledpin 1 // GPIO1/TXD01
void setup() pinMode(ledpin, OUTPUT);
>
void loop() digitalWrite(ledpin, HIGH);
delay(1000);
digitalWrite(ledpin, LOW);
delay(1000);
>

Если все у вас заработало поздравляю вы осилили этот модуль.

4,999 просмотров всего, 26 просмотров сегодня

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *