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

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>


