Создание простого веб-сервера на esp8266 nodemcu в arduino ide

Режимы работы ESP8266

Одна из важнейших функций, которую обеспечивает ESP8266, заключается в том, что он может не только подключаться к существующей Wi-Fi сети и работать в качестве веб-сервера, но он также может устанавливать собственную сеть, позволяя другим устройствам подключаться непосредственно к нему и получать доступ к веб-страницам. Это возможно, потому что ESP8266 может работать в трех разных режимах: режим станции, режим точки доступа и оба первых режима одновременно. Это обеспечивает возможность построения ячеистых сетей.

Режим станции (STA)

ESP8266, который подключается к существующей сети W-iFi (созданной вашим беспроводным маршрутизатором), называется станцией (Station, STA).

Рисунок 2 – Демонстрация режима Station ESP8266 NodeMCU

В режиме STA ESP8266 получает IP адрес от беспроводного маршрутизатора, к которому подключен. С этим IP адресом он может настроить веб-сервер и выдавать веб-страницы на все подключенные к существующей Wi-Fi сети устройства.

Режим точки доступа (AP)

ESP8266, который создает свою собственную сеть Wi-Fi и действует как концентратор (точно так же как маршрутизатор Wi-Fi) для одной или нескольких станций, называется точкой доступа (Access Point, AP). В отличие от Wi-Fi роутера, он не имеет интерфейса к проводной сети. Такой режим работы называется Soft Access Point (soft-AP). Максимальное количество станций, которые могут к нему подключиться, ограничено пятью.

Рисунок 3 – Демонстрация режима Soft Access Point ESP8266 NodeMCU

В режиме AP ESP8266 создает новую сеть Wi-Fi и устанавливает для нее SSID (имя сети) и присваивает себе IP адрес. По запросу на этот IP адрес он может выдавать веб-страницы всем подключенным к этой сети устройствам.

Step 5: Designing Your Site

Here is where you have to start thinking about what you want your site to look like and do, so that you can choose how you want to store your site’s information.
If you want to have a very basic site, maybe only one page, or you want to be able to control some led’s or light switches or whatever your heart desires, you should go with a site saved in the Arduino’s ram.
If you want to have similar capabilities, but you want to have more than 1 page, you will want to consider using the code with PROGMEM.
If you want a regular site with pictures and videos and lots of pages, or whatever, you will want to look into using an SD card.
Limitations and features:
With the ram option, the site can be only like 1500 characters (of html codes, not of actual text) which is very limited, but it is good for a simple led (the led could be anything actually) controller.
With the PROGMEM option, you are much less limited.  With an atmega328, you can store up to 12,000-13,000 html characters!!!  This is suited for home automation or a multipage site w/o an SD card, but you cannot store pictures or files on it, and you are still limited to 12k characters.
The SD card is the best choice for a large site, with lots of scripting, pictures, pages, etc. But as of now, it cannot be used to control leds over the web, but I’m working on it though! I am also working on directories and using the SD library instead of the sdfatlib (but don’t expect it for a while because my main focus is on a led controller and directories, unless the ‘ibles community would like to help!)

CHOOSING IP ADDRESS:

I manually set a static IP to my ESP8266 module even though my mobile DHCP will assign IP when connecting with it. I am doing this to make sure I know the IP address of ESP device and I can connect to it without any problem. Without doing this DHCP in my mobile phone will assign IP address which is currently free and you will not know this while using this. But you should take care when choosing your IP address since local IP address differs from device to device. I have read in a documentation that Android phones are programmed to use 192.168.x.x to assign for the devices connecting with it locally. So I have used the IP 192.168.43.253 to assign for ESP module. So search in internet for the IP your devices will use and add it in the code.

Побочные технологии

В рамках проекта реализовано несколько интересных и уникальных технологий, например индикатор уровня загрузки «CPU» микроконтроллера. Это удобно тем, что сразу видно насколько загружен ваш контроллер и что он в данный момент делает. Не знаю насколько это уникально, но мне не удалось найти в сети ничего похожего, тем более в удобоваримом виде с красивой графикой и на веб-странице.

Создан электро-модуль, который мониторит сетевое напряжение и ещё 13 токовых каналов. Будучи установлен в электрощитке, позволяет прямо или косвенно отслеживать всю электроактивность в доме. Когда был включён и когда выключен тот или иной электроприбор, сколько он потребляет электричества и каков его вклад в размер счёта за электроэнергию. Также позволяет косвенным способом отслеживать наличие или отсутствие людей в доме.

Создан модуль визуализации и контроля формы сетевого напряжения и тока на любом из 13 каналов. Плюс добавлен сетевой осциллограф, когда Ардуино в реальном времени транслирует динамический сигнал (осциллограмму) на вашу веб-страничку. Что тоже не имеет аналогов, насколько мне известно.

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

Ещё реализованы такие вещи как измеритель частоты напряжения электросети, который может использоваться для предупреждения о возможных в ближайшем будущем сбоях и, например, многофункциональный 3D индикатор состояния системы на 216 объектов / подсистем / функций, который вращается в шапке сайта. Его смысл в том, что вы одним взглядом можете оценить состояние сложной системы.

И т. д. и т. п. Технологий больше, чем может уместиться на эту страничку. И всё это работает на 8-битном микроконтроллере с 8 килобайтами памяти, что просто невероятно.

Статус проекта

Статус проекта — альфа версия, всё работает, но всё нужно дорабатывать. Если у вас есть желание и соответствующая квалификация, то можете присоединиться к проекту и ускорить процесс разработки и получить ни с чем не сравнимый фан. А можете скачать исходный код и создать проект своей мечты.

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

Загрузить последнюю версию вы можете на официальном сайте проекта. Если у вас возникли вопросы, то вы можете задать их на форуме. На форуме есть также инструкции по установке и настройке AMS.

Друзья! Забыл упомянуть ещё об одной, едва ли не самой важной части проекта. Это обучающая функция

Если вы начнёте работать с проектом и изменять код под свои задачи, то вы очень быстро на практике освоите множество современных технологий это HTML, CSS, JavaScript, межбраузерное взаимодействие, отладка кода в браузере, программирование для Ардуино, Processing и множество других.

И последнее. Проект буквально нашпигован идеями и эксклюзивом. Вы можете просто брать нужные куски кода для ваших собственных проектов, дополнять и улучшать их.

Дополнение. Открыт канал на Youtube и вот промо ролик Arduino Mega Server, который демонстрирует работу с реальной системой.

источник

Что такое Node.js

Node или Node.js — это программная платформа, основанная на движке V8 (транслирующем JavaScript в машинный код), превращающая JavaScript из узкоспециализированного языка в язык общего назначения. Node.js добавляет возможность JavaScript взаимодействовать с устройствами ввода-вывода через свой API, который написан на C++, подключать другие внешние библиотеки, написанные на разных языках, обеспечивая вызовы к ним из JavaScript-кода. Node.js применяется преимущественно на сервере, выполняя роль веб-сервера, но есть возможность разрабатывать на Node.js и десктопные оконные приложения и даже программировать микроконтроллеры (википедия).

В этом проекте мы будем управлять яркостью свечения светодиода двумя способами:

  • при помощи JavaScript кода в платформе Node.js;
  • с помощью платформы Node.js и веб-интерфейса из любого браузера. В данном случае плата Arduino будет выступать в роли веб-сервера, а HTML страницы будут располагаться на вашем компьютере.

Bluetooth Controller 8 Lamp

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

Bluetooth Controller 8 Lamp создан для регулировки функций Ардуино 8 канальным контроллером. Работает при помощи модулей Bluetooth HC-05, HC-06 и HC-07. 8 кнопочный интерфейс соответствует каждой лампочке.

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

Ethernet configuration

To control the Ethernet shield, we have to use Ethernet.h library.

The shield must be assigned a MAC and IP address using the Ethernet.begin() function. For a particular device, a MAC address is a globally unique identifier. Validity of IP addresses depends on the configuration of one’s network. If DHCP is used, it may dynamically assign an IP to the shield.

IP ADDRESS

IP address (Internet Protocol address) is a numerical label assigned to each device participating in a computer network that uses the Internet Protocol for communication.

MAC ADDRESS

MAC address (media access control address) is a unique identifier assigned to each device participating in a physical network. Each piece of networking equipment has a unique serial number to identify itself over a network and this is normal hard-programmed into the equipment’s firmware. However, with Arduino, we can define the MAC address ourself.

Working

This module is designed to monitor the temperature and humidity of the environment where it is located by using DHT22 sensor and updates that to WebServer by using Ethernet Shield.

The DHT22 sensor monitors and measures the temperature and humidity. Heat Index can be calculated by using the measured temperature and humidity values.

We have to use the Ethernet shield to create a WebServer. The Ethernet shield communicates with the internet router to create a WebServer at an IP address and a port. Then the sensor sensed data will be send to WebServer and displayed it on WebServer using the HTML commands. This WebServer will be automatically refreshed after every 5 seconds. WebServer data can easily be accessible from anywhere on the internet.

Setting up a Global Server

Now that we’re done with the local server, we move forward by connecting the ESP-01 to the internet. In this section, we are going to create a global server that displays the date, time, temperature, and humidity on a web page you can access anywhere.

Using the parts listed below, build your Arduino and ESP8266 ESP-01 module as shown in the image below:

  • Arduino Uno
  • ESP8266 ESP-01 module
  • DHT22 temperature and humidity sensor
  • 2 x 10kΩ resistors
  • 1 x 1kΩ resistor
  • 1 x 2.2kΩ resistor
  • Breadboard
  • Jumper wires

Previously, we used the serial monitor to send AT commands to the ESP-01. This time we will do the actual programming.

Connecting your Components

Connect the RST (Reset) pin of the Arduino to GND (Ground). Setting the RST to GND disables the chip of the Arduino so that we can use the board as an ESP programmer. Next, we power up the ESP-01. Unlike before, we won’t use the 3.3V supply of the Arduino. We will be needing more current since we are now using a sensor. Fortunately, the 5V pin supplies enough current for both, but we need a voltage divider to change the voltage to 3.3V. Connect a 1kΩ and 2.2kΩ resistor in series, just like in the image above. Connect the end of the series to the ground. Finally, connect the other leg of the 1kΩ resistor to the positive rail of the breadboard. The power rail should already supply 3.3V.

Next, we power up the DHT22. The DHT22 module needs 3.3V – 5V to work. You can connect it to either supply. If you wish to use 5V, connect it to pin before the voltage divider. Then, use a 10k pull-up resistor along the data line that connects the DHT22 and the ESP-01.

Then, to initialize the ESP-01 module, connect the EN/CH-PD (Enable) pin to the 3.3V supply. Use a 10k pull-up resistor.

Finally. connect the ESP-01’s GPIO pin 0 to GND to start program mode.

Код

 1 /*
 2 Веб-сервер на базе Arduino
 3 
 4 Простой веб-сервер, который показывает значения от входных аналоговых контактов 
 5 при помощи Arduino Ethernet Shield на базе WizNet. 
 6 
 7 Цепь:
 8 * Ethernet Shield подключен к 10-ому, 11-ому, 12-ому и 13-ому контактам
 9 * Аналоговые устройства, подключенные к шести входным аналоговым контактам (с 0-ого по 5-ый)
10 
11 Создан 18 декабря 2009 Дэвидом А. Меллисом (David A. Mellis),
12 модифицирован 9 апреля 2012 Томом Иго (Tom Igoe).
13 */
14 
15 #include <SPI.h>
16 #include <Ethernet.h>
17 
18 // Ниже вводим MAC-адрес и IP-адрес контроллера.
19 // IP-адрес будет зависеть от вашей локальной сети:
20 byte mac[] = {
21   0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
22 };
23 IPAddress ip(192, 168, 1, 177);
24 
25 // Инициализируем библиотеку Ethernet Server
26 // с необходимыми вам IP-адресом и портом 
27 // (порт 80 используется для HTTP по умолчанию):
28 EthernetServer server(80);
29 
30 void setup() {
31   // Открываем последовательную передачу данных и ждем открытия порта:
32   Serial.begin(9600);
33   while (!Serial) {
34     ; // ждем подключения последовательного порта (нужно только для Leonardo)
35   }
36 
37   // Запускаем Ethernet-соединение и работу сервера:
38   Ethernet.begin(mac, ip);
39   server.begin();
40   Serial.print("server is at ");  //  "Сервер по адресу "
41   Serial.println(Ethernet.localIP());
42 }
43 
44 
45 void loop() {
46   // Слушаем подключающихся клиентов:
47   EthernetClient client = server.available();
48   if (client) {
49     Serial.println("new client");  //  "Новый клиент"
50     // HTTP-запрос заканчивается пустой линией:
51     boolean currentLineIsBlank = true;
52     while (client.connected()) {
53       if (client.available()) {
54         char c = client.read();
55         Serial.write(c);
56         // Если добрались до конца строки (т.е. получили символ новой строки),
57         // и эта строка – пустая, это значит, что это конец HTTP-запроса.
58         // То есть, можно приступать к отправке ответа:
59         if (c == '\n' && currentLineIsBlank) {
60           // Отсылаем стандартный заголовок для HTTP-ответа:
61           client.println("HTTP/1.1 200 OK");
62           client.println("Content-Type: text/html");
63           client.println("Connection: close");  // после выполнения ответа соединение будет разорвано
64           client.println("Refresh: 5");  // автоматически обновляем страницу каждые 5 секунд
65           client.println();
66           client.println("<!DOCTYPE HTML>");
67           client.println("<html>");
68           // Выводим значения ото всех входных аналоговых контактов:
69           for (int analogChannel = ; analogChannel < 6; analogChannel++) {
70             int sensorReading = analogRead(analogChannel);
71             client.print("analog input ");
72             client.print(analogChannel);
73             client.print(" is ");
74             client.print(sensorReading);
75             client.println("<br />");
76           }
77           client.println("</html>");
78           break;
79 }
80         if (c == '\n') {
81           // Начинаем новую строку:
82           currentLineIsBlank = true;
83         }
84         else if (c != '\r') {
85           // В текущей строке есть символ:
86           currentLineIsBlank = false;
87         }
88       }
89     }
90     // Даем браузеру время, чтобы получить данные:
91     delay(1);
92     // Закрываем соединение:
93     client.stop();
94     Serial.println("client disconnected");  //  "Клиент отключился"
95 
96   }
97 }

Шилды Ethernet Shield для Arduino Uno или Nano

Наиболее удобным способом работы с W5100 является использование готовых шилдов Ethernet Shield для Arduino Uno или Nano. На таких модулях уже выполнены все необходимые обвязки, шилд просто вставляется в соответствующие разъемы платы и вам остается только загрузить скетч. Естественно, что при желании к плате могут быть подключены и другие устройства.

Arduino Ethernet Shield

Подключение платы расширения происходит через соединение RJ-45. Плата обладает встроенным слотом SD/MicroSD , который используется для хранения файлов, используемых для подключения и передачи по локальной сети. Такой слот совместим со всеми платами Arduino/Genuino, т.е. работать с данными на карте можно с помощью стандартной библиотеки SD Library. На плате расширения также можно найти кнопку перезагрузки . питания. Ранние версии платы расширения не дружили с ардуино мега, там требовался ручной сброс после поступления питания.

Если плата оснащена POE модулем (питание подается по витой паре), то шилд будет соответствовать следующим спецификациям:

  • Совместим со стандартом IEEE3af.
  • Имеет низкие пульсации на выходе.
  • Защищает от явлений перегрузки и короткого замыкания.
  • Эффективно преобразует напряжение.
  • Имеет изоляцию 1500 вольт на точке между «вход-выход»

По умолчанию плата не комплектуется данным модулем, нужно находить соответствующую модель.

Назначение светодиодов Ethernet Shield:

  • PWR показывает наличие питания на плате.
  • LINK светится при наличии сети и мигает при передаче/приеме данных.
  • FULLD обозначает сетевое полнодуплексное соединение.
  • 100M обозначает сетевое соединение со скоростью 10мбит/сек.
  • RX мигает при приеме экраном данных.
  • TX мигает при отправке данных экраном.
  • COLL мигает при обнаружении сетевых конфликтов.

Кроме этих имеются еще пара светодиодов на гнезде rj 45, один из которых при подключенном шнуре светится, а другой мерцает при поступлении данных.

Ehternet для Arduino Nano

Отдельного упоминания заслуживает модуль Arduino Nano Ethernet. Он выполнен в формфакторе, облегчающим подключение к плате Nano v 3.0, но обладает практически такими же возможностями, что и “обычный” вариант для Uno. В основе шилда лежит микросхема ENC28J60.

Шилд Ethernet Arduino Nano Shield

Модуль точно так же имеет разъем RJ-45, слот для SD и в некоторых модификациях тоже оснащен PoE контроллером.

Introduction

Here’s a dead simple web server for the Arduino with Wiznet 5100 Ethernet shield. You can load this sketch and begin receiving requests immediately!

  • Implements IPV4. This example uses TCP/IP.
  • Listens on port 80, the standard TCP port for unencrypted HTTP traffic. The device responds at 
  • The default gateway is disabled by default. This means the device will only respond to requests from your local/private network.
  • If for some reason you want it to respond to Internet requests, you can map a port through your router and set the default gateway to 192.168.1.1. The device will then respond through the router. For more info, do a search for «port address translation.»
  • Client requests and response codes are written to the console with 115200 baud.
  • This web server is appropriate for text only, so any images must be hosted on a REAL web server (or use a more powerful Arduino).
  • Keep realistic expectations. If your project exceeds basic automation requirements, consider a full embedded system or server operating system.

by Mark Scammacca

SD Card Files

These sample files can be copied to the SD card to demonstrate use of the supported file types:

Download the files: SD_files.zip (101.3 kB)

The files have the following purpose:

  • index.htm – web server home page, demonstrates linking to another page, runs a simple JavaScript function.
  • pics.htm – second HTML page that links back to the home page.
  • favicon.ico – small icon requested by browser and displayed in browser next to page tab and bookmark.
  • styles.css – CSS styles are stored in this external file and used by both HTML pages.
  • script.js – external JavaScript file used by the home page to run a simple function.
  • arduino.jpg – JPEG image file displayed on the second HTML page.
  • websrvr.png – PNG image file displayed on the second HTML page.
  • p1.gif – animated GIF image file displayed on the second HTML page.
  • robots.txt – text file set to discourage robots from indexing the website.

Управление Arduino через интернет

В этой статье описан процесс “общения” с Arduino через интернет.

Команды посылаются при помощи ajax запросов, данные запросы принемает python скрипт которые передает их через последовательное соединение serial port в плату arduino.

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

И для этого нам понадобится:

http сервер;

интерпритатор python.

Код управления на Java Script//Порт к которому подключен Arduino var serialPort = ‘COM5’; //непосредственно управляющая функция var Arduino = function(command, callback){ $.get(‘c.py’,{ c:command, p:serialPort }, callback); }

К примеру елси мы вызвали нашу функций Aruduino() с параметрами “123” то создастся запрос вида “index.html?с=123&p=COM5” который примент python скрипт. Что он из себя представляет.#!/Python33/python.exe import serial import cgi print (“STATUS: 200 OK “) req = cgi.FieldStorage(); ser = serial.Serial(req.

value, 9600, timeout=1) ser.write(bytes(req.value,’latin’)) ser.close() print (“ok”) По сути он просто принемает параметр “с”, и передает его в serial port “p” и далее выводит “ок” Код под Arduino #include Servo myservo; void setup() { Serial.begin(9600); } String getParam(){ String re; while (Serial.

Шилд Arduino Ethernet Shield

Сначала подключите шилд к плате Arduino, а затем подсоедините его к сети при помощи кабеля RJ45. Ethernet-кабель, идущий от роутера к шилду Ethernet, должен быть подключен следующим образом:

Использование контактов

Когда шилд Ethernet подключен к плате Arduino, вы не можете использовать цифровые контакты 10, 11, 12 и 13, потому что они используются для коммуникации между платой и шилдом.

Реле-модуль

Реле – это переключатель с электрическим приводом. Это значит, что его можно включать и выключать, управляя тем, может ли проходить через него электрический ток. Как выглядит реле-модуль, показано на картинке ниже:

В частности, модуль на картинке выше состоит из двух реле (это синие кубы).

Что касается сетевого напряжения, то у каждого реле для работы с ним имеется три выходных контакта.

  • COM (от «common») – общий контакт.
  • NO (от «normally open») – нормально разомкнутый контакт. Общий контакт и нормально разомкнутый контакт между собой не соединены. Но когда вы включаете реле, эти контакты замыкаются и потребитель (в нашем случае – лампа) начинает получать питание.
  • NC (от «normally closed») – нормально замкнутый контакт. Общий контакт и нормально замкнутый контакт соединены друг с другом, даже если реле выключено. Но если включить реле, цепь размыкается и питание перестает идти потребителю.

Реле и плата Arduino подключаются друг к другу очень просто:

  • GND – к «земле»
  • IN1 – к цифровому контакту Arduino (используется для управления первым реле)
  • IN2 – к цифровому контакту Arduino (используется для управления вторым реле)
  • VCC – к 5 вольтам

Установка библиотеки Johnny-Five

После установки Node.js создайте на вашем компьютере отдельную папку (с именем, например, “LED_Control”) чтобы хранить все файлы рассматриваемого нами проекта в одном месте. Теперь скачайте в эту папку библиотеку Johnny-Five, выполнив следующую последовательность шагов.

Шаг 1. Откройте окно с командной строкой.

Шаг 2. Смените папку на “LED_Control” (или как она у вас названа) с помощью команды ‘cd’. Кто застал времена операционной системы MS DOS наверняка хорошо помнят эту команду.

Шаг 3. Выполните команду ‘npm install johnny-five’.

Шаг 4. В результате выполнения этой команды установятся все компоненты библиотеки Johnny-Five.

Шаг 5. Также для работы нашего проекта необходимо будет установить еще три библиотеки:

  • express: серверная оболочка HTTP;
  • socket.io: библиотека WebSockets;
  • serialport: оболочка последовательного порта.

Шаг 6. Введите в командной строке следующие команды одна за другой (не все сразу) чтобы установить эти библиотеки:

Рассмотрим последовательно две составляющих нашего проекта:

  • мигание светодиодом с помощью Arduino и Node.js;
  • управление яркостью свечения светодиода через веб-интерфейс с помощью Arduino и Node.js.

Power over Ethernet

The Wiznet 5100 shield is available with Power over Ethernet, but this requires an add-on board, purchased separately. Some models have the solder connections available to accept the POE add-on board, and some do not. Check carefully. I have seen them listed as «POE Ethernet Shields» but they mean «POE capable, sold separately.» The device can then be powered by a POE switch or a POE injector.

If you are more curious about POE and picking the right kind of switch, there are 3 main standards to be aware of:

1. IEEE 802.3af-2003

2. IEEE 802.3at-2009 (more power and should be backwards compatible with af devices)

3. Proprietary — usually cheapest, and sometimes incompatible with 802.3af or 802.3at devices, having smokey results. Sometimes includes a matching terminator.

Also look into POE splitters. These simplify connecting non-POE devices to POE switches because they provide a barrel plug output. The POE splitter takes the power off the line and supplies it via barrel plug to the device. They accept 48V POE power and reduce it to 5VDC, 12VDC, etc. I have had great luck with them.

Overview of How the Web Server Works

After a web browser has requested and loaded the web page from the Arduino web server, the JavaScript in the web page will send an Ajax request for data from the Arduino every second.

The web page that the Arduino web server hosts is shown here:

Web Page Hosted by the Arduino Web Server

The Arduino will respond to every Ajax request by sending an XML file back to the web browser. The XML file contains the values from the four analog inputs of the Arduino (A2 to A5), the state of three pins (switches on pins 2, 3 and 5) and the state of the four LEDs.

XML File Sent by Arduino

When an LED is switched on from the web page by checking a checkbox, the JavaScript will send the state of the checkbox (send an instruction to switch the LED on) with the next Ajax request. The same will occur if the LED is switched off or if one of the buttons is used to switch an LED on or off.

Arduino Mega Server

Да, это снова Ардуино, но не спешите закрывать страничку, на этот раз вас ждёт нечто действительно новое и интересное. В основном в этой статье речь пойдёт о микроконтроллерных платах Arduino Mega и плате сетевого интерфейса Ethernet Shield W5100 и о том чуде, которое можно с ними сотворить если позволить себе выйти за рамки стереотипов.

Итак, что собой представляет типовая плата Arduino? «Убогий» 8-битный микроконтроллер со смешным объёмом оперативной памяти (в случае Меги это 8 килобайт) и таким же смешным объёмом флеш-памяти (256 килобайт для Меги). Некую живость пейзажу добавляют платы расширения, в нашем случае это Ethernet Shield, но принципиально это ничего не меняет. Область применения подобных плат это маргинальные поделки и знаменитое моргание светодиодами.

Но так было до последнего момента. Теперь в природе существует Arduino Mega Server, который принципиально меняет положение вещей. Например, что бы вы сказали, если бы столкнулись с утверждением, что:

  • на Arduino можно организовать полноценный веб-сервер, не имеющий ограничений на размер и количество файлов?
  • динамически обновляющий контент без остановки сервера?
  • поддерживающий в полном объёме HTML5, CSS3, JavaScript, Ajax, Processig, THREE.js, сторонние библиотеки и т. д.?
  • Позволяющий «хостить» на микроконтроллере сотни полноценных сайтов (с известными ограничениями)?
  • Позволяющий держать у себя в кладовке на одном из контроллеров умного дома, например, полную работающую копию Хабра и ещё десятка подобных сайтов (в пределах 32 гигабайт)?

Вы бы сказали, что это попросту невозможно.

Однако это факт. И вы можете скачать дистрибутив к себе на компьютер и убедиться в этом сами (кроме Хабра, это гипотетический пример).

В чём же секрет? Всё очень просто. Плата сетевого интерфейса поддерживает подключение SD карт памяти объёмом до 32 гигабайт и ничто не мешает нам задействовать её для хранения файлов веб-сервера и собственно контента. Нужно просто решить задачу интеграции всего этого богатства в одну систему.

Чтобы всё это заработало нужно написать серверный движок для Ардуино и научить его выдавать содержимое флеш-карты памяти по запросам браузеров. Собственно, почти всё. Нужно ещё каким-то образом организовать обновление файлов сервера и контента «на лету», для того, чтобы вам не приходилось вставать с дивана, отключать питание Ардуино и вынимать карту памяти каждый раз, когда нужно изменить что-либо в конфигурации сервера или поменять что-либо в контенте. Эта тяжёлая, но благородная миссия возложена на Arduino Serial Commander, который управляет загрузкой файлов на работающий сервер, без остановки оного.

Если всё так просто, то почему это не было сделано раньше? Вот это действительно вопрос. Моя версия — стереотипность мышления. Вам же сказали, что это 8-битный контроллер, какой ещё THREE.js? Какой хостинг? О чём вы вообще говорите? Справедливости ради нужно сказать, что все части пазла уже существовали в природе, но существовали они в совершенно непотребном виде — либо в виде абстрактного сервера, полностью оторванного от реальности, либо в виде Ajax примеров, но опять же только с двумя абстрактными кнопками, с которыми непонятно, что вообще нужно делать.