NodeMcu V3 4M Lua плата на базе модуля WIFI ESP8266-12E.

esp_layout-1024x512

NodeMCU — это полноценная платформа для создания устройств IoT (Интернет вещей) на основе модуля ESP8266, который умеет принимать и посылать данные в локальную сеть или интернет через Wi-Fi. Плата построена на основе одной из последних модификаций модулей ESP8266 – модуля ESP-12E

В платформу загружена прошивка NodeMCU. В неё встроен интерпретатор скриптового языка Lua. Интерпретатор этого языка распространяется свободно, с открытыми исходными текстами на языке Си.  С помощью интерпретатора можно создавать файлы, загружать их в флеш-память ESP8266 и выполнять их. Также имеется Autorun (init. lua) для выполнения скриптов при запуске платы.

 С помощью lua-команд можно:

подключаться к WiFi точке доступа;выступать в роли WiFi точки доступа;уходить в глубокий сон для снижения энергопотребления;привязать lua-функцию к кнопке на GPIO16;включать/выключать светодиод на GPIO16;создавать/записывать/читать/выполнять/искать/удалять/выводить списком файлы во флеш памяти;автоматически находить открытую WiFi сеть и подключаться к ней (режим startsmart);выводить свой MAC адрес;управлять пользовательским таймером;управлять таймером WatchDog ;управлять (запись/чтение/триггер) выводами GPIO1 — GPIO5, GPIO10, GPIO12-GPIO15;PWM (ШИМ) GPIO1 — GPIO5, GPIO10, GPIO12-GPIO15;TCP/IP сокеты;режим WEB сервера;I2C — адресация/запись/чтение;АЦП 10 бит на пине TOUT.

Полное описание команд можно посмотреть на github (nodemcu_api_ru).
Программировать плату можно в среде Arduino IDE (версия 1.6.5 и выше), а можно использовать комплект средств разработки (SDK) – ESPlorer, отличается от других программ для ESP8266 тем, что:
работает на множестве платформ;

НЕ нашли? Не то? Что вы ищете?

поддерживает нескольких открытых файлов;обеспечивает подсветку кода языков Lua и Python;имеет режимы Undo/Redo;поддерживает цветовые темы редакторов: dark, Eclipse, IDEA, Visual Studio;осуществляет автозавершение кода по нажатию комбинации клавиш +;обеспечивает «умную» отправку файлов с ожиданием ответа;поддерживает несколько прошивок одновременно.

Характеристики ESP8266 esp-12e на девборде NodeMCU v3:
- поддержка WiFi протоколов 802.11 b/g/n;
- Wi-Fi Direct (P2P), soft-AP;
- встроенный стек TCP/IP;
- встроенный TR переключатель, balun, LNA, усилитель мощности и соответствие сети;
- встроенный PLL, регуляторы, и система управления питанием;
- выходная мощность +20.5 дБм в режиме 802.11b;
- поддержка диверсити антенн;
- SDIO 2.0, SPI, UART;
- STBC, 1×1 MIMO, 2×1 MIMO;
- A-MPDU & A-MSDU aggregation & 0.4μs guard interval;
- 4 мегабайта Flash памяти;
- пробуждение и отправка пакетов за время до 22 мс.
Номинальное напряжение: 3,3 В
Входное напряжение: 3,7–20 В
Максимальный потребляемый ток: 220 мА

Модуль имеет 11 портов ввода-вывода общего назначения.
Некоторые из портов имеют дополнительные функции:
D9, D10 — UART
D1, D2 — I²C/TWI
D5–D8 — SPI
D1–D10 — выходы с ШИМ (PWM)
A0 — аналоговый вход с АЦП

Размеры платы 58х32мм.

Установка расширения для модулей семейства ESP8266 на Arduino IDE:

1.  В меню выбрать вкладку Файл – Настройки – В окно «Дополнительные ссылки для менеджера плат» вставить ссылку:

http://arduino. esp8266.com/stable/package_esp8266com_index. json

Нажать OK

2.  В меню выбрать вкладку Инструменты – Плата – Менеджер плат – В самом низу выбрать ESP8266

Нажать Установить

Копия заимствованного исходного скетча для Arduino IDE:

#include <ESP8266WiFi. h>

const char* ssid = "royal-kosmo";

const char* password = "0978558521";

const char* host = "smart-home. ";

void setup() {

WiFi. mode(WIFI_STA);

WiFi. begin(ssid, password);

while (WiFi. status() != WL_CONNECTED)

{

delay(500);

}

}

void loop()

{

WiFiClient client;

if (client. connect(host, 80))

{

client. print( "GET /get. php?");

client. print("test=privet");

client. println( " HTTP/1.1");

client. print( "Host:" );

client. println(host);

client. println( "Connection: close" );

client. println();

client. println();

delay(10000);

}

}

Копия заимствованного исходного файла типа getalarm. php:

<?php

if ( !empty( $_GET['test'] ))

{

$test1=$_GET['test'];

}else{

$test1=0;

}

$_GET=array();

$_POST=array();

if($test1==1){

$file = 'people. txt';

// Открываем файл для получения существующего содержимого

$current = file_get_contents($file);

// Добавляем в файл

$current.= "TEST1\n";

// Пишем содержимое обратно в файл

file_put_contents($file, $current);

// $to = '*****@***ru';

// $subject = 'alarm';

// $message = 'Hi. Problem in the house...';

// mail($to, $subject, $message);

}else if($test1==2){

$file = 'people. txt';

// Открываем файл для получения существующего содержимого

$current = file_get_contents($file);

// Добавляем в файл

$current.= "Aleks Sviridov\n";

// Пишем содержимое обратно в файл

file_put_contents($file, $current);

}else{

$file = 'people. txt';

// Открываем файл для получения существующего содержимого

$current = file_get_contents($file);

// Добавляем в файл

$current.= $test1;

// Пишем содержимое обратно в файл

file_put_contents($file, $current);

}

?>

Скетч для загрузки в NodeMCU:

#include <ESP8266WiFi. h>

const char* ssid = "Y123123";

const char* password = "Y43214321";

const char* host = "robot-craft. ru";

int ledPin=12;

void setup() {

// prepare GPIO12

pinMode(ledPin, OUTPUT);

digitalWrite(12,0);

WiFi. mode(WIFI_STA);

WiFi. begin(ssid, password);

while (WiFi. status() != WL_CONNECTED)

{

delay(500);

}

}

void loop()

{

WiFiClient client;

int sensorPin1 = digitalRead(14);

//int sensorPin2 = digitalRead(4);

//if (sensorPin1==HIGH or sensorPin2==HIGH)

if (sensorPin1==HIGH)

{

digitalWrite(ledPin, HIGH);

if (client. connect(host, 80))

{

client. print( "GET /getalarm. php?");

client. print("test=1");

client. println( " HTTP/1.1");

client. print( "Host:" );

client. println(host);

client. println( "Connection: close" );

client. println();

client. println();

delay(1000);

}

}

else

{

digitalWrite(ledPin, LOW);

}

}

Конечный файл getalarm. php:

<?php

if ( !empty( $_GET['test'] ))

{

$test1=$_GET['test'];

}

else{

$test1=0;

}

$_GET=array();

$_POST=array();

if($test1==1)

{

$host="h1234567.mysql";

$user="h1234567_mysql";

$pswd="123456789";

$db="h1234567_db";

$connection = mysql_connect($host,$user,$pswd);

if(!$connection)

{

exit (mysql_error());

}

///////////////Решение проблемы с кодировкой

mysql_query("SET character_set_client = 'cp1251'");

mysql_query("SET character_set_connection = 'cp1251'");

mysql_query("SET character_set_results = 'cp1251'");

mysql_query("SET NAMES 'cp1251'");

///////////////

$select_db=mysql_select_db($db,$connection);

if(!$select_db)

{

exit(mysql_error());

}

$dd=date("d F Y");

$tm=date("H:i:s");

mysql_query("insert into alarm (sensor, place, data, timer) value ('IR-Sensor', 'Big room',

'$dd', '$tm')");

//mysql_query("SELECT FROM 'alarm' LIMIT 0,10000000");

//mysql_query("ALTER TABLE 'alarm' ORDER BY 'id' DESC");

//mysql_close();

}

?>

Конечный файл getlook. php:

<?php

$host="h1234567.mysql";

$user="h1234567_mysql";

$pswd="123456789";

$db="h1234567_db";

$connection = mysql_connect($host,$user,$pswd);

if(!$connection)

{

exit (mysql_error());

}

////Sorting of table Alarm

mysql_query("ALTER TABLE 'alarm' ORDER BY 'id' DESC");

///////////////Решение проблемы с кодировкой

mysql_query("SET character_set_client = 'cp1251'");

mysql_query("SET character_set_connection = 'cp1251'");

mysql_query("SET character_set_results = 'cp1251'");

mysql_query("SET NAMES 'cp1251'");

///////////////

$select_db=mysql_select_db($db,$connection);

if(!$select_db)

{

exit(mysql_error());

}

$result = mysql_query("SELECT * FROM alarm", $connection);

?>

<?php

while($row=mysql_fetch_object($result)) //выборка из таблицы

{

$my_id=$row->id;

$my_sensor=$row->sensor;

$my_place=$row->place;

$my_data=$row->data;

$my_timer=$row->timer;

Print("<table class='no_border' border='2'><tr><td width='20'>".$my_id."</td><td width='100'>".$my_sensor."</td><td width='100' >".$my_place."</td><td width='150'>".$my_data."</td><td width='100' >".$my_timer."</td></tr></table>");

}

?>

</body>

</html>

<script>

document. getElementById('play').play();

</script>