Arduino UNO + ESP8266 через облачный сервер
На этой странице вы найдете пошаговую инструкцию как запустить графический интерфейс RemoteXY через облачный сервер используя Arduino UNO и модуль ESP8266, подключенный к аппаратному последовательному порту. ESP8266 будет сконфигурирован для подключения к вашей домашней WiFi сети с доступом в интернет. Инструкция так же может быть использована для контроллеров Arduino Nano, Arduino Mini и совместимых с внешним модулем ESP8266.
Примечание. Подключение через облачный сервер позволяет подключаться к вашему устройству из любой точки мира.
Шаг 1. Создайте графический интерфейс
Войдите в редактор RemoteXY. Найдите на левой панели инструментов элемент Кнопка, и переместите его в поле телефона. Выделите кнопку в поле телефона, что бы вокруг нее отобразилась рамка. Когда кнопка выделена, в правой панели свойств разверните вкладку Элемент. В свойстве элемента Привязать к выводу установите значение 13(LED).
Примечание. Редактор позволяет указать вывод контроллера для некоторых элементов, которые могут однозначно определить состояние вывода, например Включен или Отключен. Однако лучшим решением будет написание собственного кода управления выводами контроллера.
Шаг 2. Настройте конфигурацию
Разверните вкладку Конфигурация на правой панели свойств. Кликните в любой элемент списка, откроется окно выбора конфигурации. Настройка конфигурации позволяет указать параметры вашей схемы. Выберите следующие параметры и нажмите кнопку Применить:
- Соединение: Cloud server
- Контроллер: Arduino UNO
- Модуль: ESP8266 WiFi module
- Среда: Arduino IDE
Вкладка Конфигурация должна выглядеть как на рисунке:
Разверните вкладку Подключение модуля и установите следующие значения настроек:
- Интерфейс подключения: Hardware Serial
- Порт Serial: Serial, pins 0(RX) and 1(TX)
- Скорость обмена: 115200
- Имя (SSID): имя вашей домашней сети WiFi
- Пароль: пароль вашей домашней сети WiFi
Настройки указывают, что ESP8266 подключается к Arduino через аппаратный Serial (контакты 0 и 1) на скорости 115200.
Примечание. Модуль ESP8266 по умолчанию настроен на скорость подключения 115200. Именно по этой причине для связи необходимо использовать аппаратный Serial. Программный Serial не может работать на такой скорости.
Шаг 3. Создайте токен облачного сервера
В той же вкладке Подключение модуля нажмите кнопку Мои токены, вы перейдете на соответствующую страницу, на которой отображаются зарегистрированные токены.
Примечание. Что бы создать токен устройства на облачном сервере вам необходимо зарегистрироваться на сайте RemoteXY.
Нажмите кнопку Создать новый токен. В открывшемся окне введите любое имя токена и нажмите кнопку Создать.
Новый токен должен появиться в списке токенов.
Примечание: На каждое ваше устройство которое работает через облачный сервер необходимо создать отдельный токен. В списке токенов устройств в личном кабинете вы можете контролировать состояние вашего устройства — колонка Состояние устройства. Состояние может быть одно из трех:
- disconnected – устройство не подключено к облачному серверу;
- connected – устройство подключилось к облачному серверу и ожидает подключения с мобильного приложения;
- used — к устройству подключились с мобильного приложения.
Вернитесь в редактор, откройте ту же вкладку Подключение модуля и в поле Токен выберите только что созданный токен. Данные токена заполнятся в соответствующих полях ниже.
Шаг 4. Сформируйте скетч для Arduino
Нажмите кнопку Получить исходный код.
На открывшейся странице кликните ссылку Загрузить код и загрузите архив скетча. Распакуйте архив. В архиве размещен файл project.ino
, откройте его в Arduino IDE.
Для компиляции скетча в среду Arduino IDE необходимо добавить библиотеку RemoteXY. Пройдите по ссылке загрузки библиотеки и следуйте инструкциям по ее установке.
В среде разработки выберите плату Arduino UNO и попробуйте скомпилировать скетч. Если вы все сделали правильно, скетч должен компилироваться без ошибок.
Шаг 5. Подключите ESP8266 к Arduino Uno
Подключите ESP8266 к Arduino Uno по схеме приведенной ниже. Обратите внимание, что контакт 0 платы Arduino выбранный как RX соединяется с контактом TX модуля ESP8266 , а контакт 1 платы Arduino выбранный как TX с контактом RX модуля ESP8266 .
Так как уровни сигналов модуля ESP8266 составляют 3.3В а плата Arduino работает на 5В, необходимо использовать резистивный делитель напряжения для преобразования уровня выходного сигнала TX.
Примечание. Некоторые модули ESP8266 толерантны к уровню сигнала TX и вы можете не использовать конвертер напряжения если ваш модуль оказался таким.
Шаг 6. Загрузите скетч в Arduino.
Так как к основному Serial порту Arduino подключен модуль ESP8266, это будет мешать загрузке скетча. Перед загрузкой скетча необходимо отсоединить ESP8266 от контактов 0 и 1 платы Arduino. После отсоединения ESP8266 загрузите скетч в контроллер обычным способом. Подсоедините контроллер Arduino UNO к компьютеру, выберите COM порт к которому подключилась плата и нажмите кнопку загрузки. После загрузки скетча снова подсоедините контакты ESP8266.
Внимание. Отключение и подключение ESP8266 производите только при отсутствии питания на контроллере.
Если вы все сделали правильно, вы увидите мерцание голубого светодиода на модуле ESP8266 в течении около половины секунды сразу после старта Arduino . Если это произошло, то скорее всего обмен данными между Arduino и ESP8266 установлен. В течении этого времени RemoteXY производит настройку ESP8266 для подключения к сети WiFi, и при обмене данными светодиод мерцает.
Шаг 7. Подключитесь с мобильного приложения.
Установите мобильное приложение RemoteXY на ваш телефон.
Запустите приложение и нажмите кнопку + (Плюс) на верхней панели справа. В открывшемся окне выберите подключение Облачный сервер.
В открывшемся окне в поле Токен устройства введите ваш токен, который вы создали на шаге 3. Обратите внимание, что ввести необходимо не имя устройства, а буквенно-цифровое обозначение токена.
Нажмите кнопку Подключиться. Если вы все сделали правильно, то далее должен открыться графический интерфейс.
Если не подключается…
Если подключение не удалось, проверьте себя по списку ниже. Это поможет вам найти ошибку.
Проверьте, подключилась ли Arduino к облачному серверу. Для этого в своем аккаунте на сайте RemoteXY зайдите в раздел Мои токены. Посмотрите что указано в колонке Состояние устройства на против используемого токена. Если устройство подключилось к облачному серверу, значение должно быть Connected. Попробуйте обновить страницу. Имейте ввиду, что время между стартом устройства и подключением к облачному серверу может составлять до одной минуты.
Вы видите токен Connected
Устройство успешно подключилось к облачному серверу. Если мобильное приложение не подключается, возможны следующие ситуации:
- не верно введен токен в мобильном приложении. В этом случае вы увидите ошибку о том что токен не зарегистрирован на облачном сервере. Проверьте что вы ввели буквенно-цифровое обозначение токена, а не его имя. Проверьте каждую букву.
- ваш телефон не имеет доступа в интернет;
- по каким то причинам нет доступа к cloud.remotexy.com, вы увидите ошибку об ошибочном HOST.
- проверьте что вы не изменили порт подключения к облачному серверу в приложении, порт должен быть 6375.
Вы видите токен Disconnected
Если устройство не подключено к облачному серверу, ошибку необходимо искать в самом устройстве.
Модуль ESP8266 управляется при помощи AT команд, которые посылает ему Arduino под управлением библиотеки RemoteXY. Вы можете увидеть посылаемые команды открыв Serial Monitor в среде разработки Arduino IDE. Это возможно потому, что ESP8266 и Serial Monitor подключены к одному порту. Вы сможете увидеть только отправляемые AT команды, однако ответы от ESP8266 вы не сможете видеть. Но и этого достаточно что бы провести диагностику системы.
Запустите Serial Monitor, установите скорость 115200. Если необходимо нажмите кнопку сброса на контроллере.
Serial Monitor ничего не показывает
Если Serial Monitor не выводит никаких сообщений, это скорее всего означает, что Arduino не выполнят вашу программу или вы не верно настроили способ связи на шаге 2. Даже если у вас не подключен ESP8266, правильно сконфигурированная библиотека RemoteXY все равно отправляет запросы к модулю, пытаясь его обнаружить, и вы бы увидели это в Serial Monitor. Если Serial Monitor не выводит никаких сообщений, то возможны следующие неисправности:
- Не верно сконфигурирована схема подключения и способ связи на шаге 2.
- Внесены недопустимые изменения в код, например откорректирована структура RemoteXY или массив RemoteXY_CONF, удалены вызовы функций RemoteXY_Init() или RemoteXY_Handler(). Для проверки используйте только автоматически сформированный код, без каких либо изменений.
- Serial Monitor не подключился к Arduino. Возможно вы не выбрали скорость 115200 после того как запустили Serial Monitor.
- Нужный скетч не был загружен в Arduino.
- Ваша Arduino не включена или неисправна.
Serial Monitor выводит запросы AT команд
Если Serial Monitor выводит некоторые команды, то анализируя эти команды можно проверить следующие ошибки.
ESP8266 не отвечает
Если вы видите только команды AT и больше ничего:
AT
AT
AT
AT
Это означает, что модуль ESP8266 не отвечает на команды. Проблема может быть или в неверном подключении модуля или в нем самом. Возможны следующие причины:
- Контакты RX и TX подключены не верно, перепутаны контакты, или подключены не к тем контактам, или не подключены совсем.
- Скорость передачи данных не совпадает, ESP8266 по умолчанию использует скорость 115200. Возможно ESP8266 был вручную сконфигурирован для работы на другой скорости.
- Нет питания на ESP8266, при подаче питания на ESP8266 должен светиться красный светодиод;
- Не хватает мощности источника питания 3.3 В для ESP8266. На разных платах совместимых с Arduino могут быть установлены разные 3.3 В DC-DC преобразователи с разным максимальным выходным током.
- Модуль ESP8266 имеет прошивку в которой нет поддержки AT команд.
- Модуль ESP8266 неисправен.
Не все AT команды обрабатываются
Если после команды AT следует последовательность других команд, то модуль ESP8266 на связи с Arduino. Ниже приведена правильная последовательность команд.
AT
AT+RST
ATE0
AT+CWMODE=1
AT+CWQAP
AT+CWDHCP=1,1
AT+CWJAP="MySSID","MyPassword"
AT+CIPMODE=0
AT+CIPMUX=1
AT+CIPSTART=0,"TCP","cloud.remotexy. com",6376
AT+CIPSEND=0,44
UxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxAT+CIPSEND=0,6
Uxxxxxx
Но на какой то команде связь может обрываться. Это поможет найти ошибку.
Если последней командой которую вы видите является AT+CWJAP="MySSID","MyPassword"
, это означает что модуль ESP8266 не может подключиться к домашней сети WiFi с указанным именем и паролем. Проверьте что точка доступа работает и ее имя и пароль указаны верно.
Если последней командой является AT+CIPSTART=0,"TCP","cloud.remotexy.com",6376
и далее она может повторяться с некоторой периодичностью, это означает что нет доступа облачному серверу cloud.remotexy.com. Проверьте что у вашей точки доступа есть интернет.
Если вы видите команду AT+CIPSEND=0,44
и далее через какое то время снова повторяется команда AT+CIPSTART=0,"TCP","cloud.remotexy.com",6376
это означает, что сервер доступен, но токен был отклонен сервером, как незарегистрированный.
Если обрыв происходит на любой другой строчке, скорее всего не хватает мощности источника питания 3.3 В для ESP8266.
Все AT команды обрабатываются но не подключается
Если выводится вся последовательность AT команд из предыдущего пункта, но при подключении приложение выводит ошибку, то возможны следующие варианты.
- Не хватает мощности источника питания 3.3 В для ESP8266.
- ESP8266 имеет устаревшую прошивку.
- Размер памяти ESP8266 составляет 4 Mbit и меньше, и актуальная прошивка не может быть прошита.
Примечание. В приложении Android имеется возможность проанализировать лог подключения, это так же может помочь идентифицировать ошибку.
Домашний веб сервер на Аrduino. Температура и Реле [Проверенно] — Автоматизация и проектирование
Был модуль WI-FI. Было реле. В доме установлен роутер со статическим IP. Захотелось отображать температуру дома на экране телефона и в добавок включать и выключать подсветку в квартире (Удаленно управлять приборами).
В итоге получилось следующее: Захожу с телефона на свой IP адрес, на экране отображается температура и влажность в квартире + несколько кнопок для управления реле.
Датчик температуры все тот же DHT-11. Реле собрано на печатной плате с транзисторным ключем (c945) (Для скачивания оставьте комментарий) и управляется напряжением 5В. Коммутирует 270В — 6А.
В моем случае реле коммутировало дополнительное освещение в доме которое изображено на фото ниже.
По плинтусу с кабель каналом протянуты провода и выведено по квартире для ночного освещения. Питание от блока питания 9В, что бы ночью глаза не резало и видно было.
На рисунке ниже изображен весь используемый комплект.
Модуль WI-FI ESP8266 не нуждается в дополнительном обвесе. Единый минус в том что необходимо питание 3.
3В и потребление модуля 250 милиампер. Стандартный стабилизатор на ардуине 3.3В не смог обеспечить стабильное питание WI-FI модулю. В прочем моя Arduina китайская. Поэтому пришлось использовать отдельный стабилизатор напряжения 78033.Я не писатель поэтому если какая то информация не раскрыта, но она необходима — спрашивайте в комментариях.
Про свой WI-FI модуль могу сказать так же что он китайский и в нем очень плохая прошивка. Которую можно заменить подключив модуль к преходнику USB-TTL и заменить. В китайской прошивке нет метода для программной перезагрузки модуля. Т.е если мой модуль зависает приходится передергивать для него питание. Это огромнейший минус в постройке веб сервера.
перейдем к коду программы для ардуины для построения Веб сервера с задуманными плюшками. Код взять с разных сайтов, более менее изменен под свои нужды и проверен. Добавлены комментарии для того что бы не описывать все словами и большим текстом в статье.
Wi-FI модуль ESP8266 общается при помощи 2х линий Rx Tx.
Ниже полный код веб сервера в который советуется вникнуть.
[Часть 1] Домашний веб сервер на Ардуино [Рабочий код]
[Часть 2] Домашний веб сервер на Ардуино [Рабочий код]
Cкачать код программы:
4870_1injner_web_server_arduino.ino
Пояснения: Для отладки расскоментируйте все строки // monitor.print. Посмотреть работу сервера можно в терминале IDE Arduino.
Как работает код выше вкратце:
Происходит включение ардуины, ардуина инициализирует интерфейсы Serial для компьютера и Serial1 для модуля wi-fi. Далее Ардуина отправляет в модуль данные для коннекта с нужным SSID в воздухе, и подключается к нему получая в ответ IP адрес. Для любопытства в таблице DHCP роутера обнаружится новое устройство без имени (Имя модулю так же можно задать). Как только IP выделен, ардуина начинает ждать данные от Wi-Fi модуля и распознавать, выполняя нужные действия.
Если подключения не произошло, то ардуина повторно без остановки пытается подключится к WI-FI.
Как выглядит веб сервер визуально с компьютера можно увидеть ниже на рисунке.
С телефона тоже работает.
Впрочем, все написано на скорую руку и не изменялось долгое время, и все что возможно выполнить в html и Js можно воплотить на странице сервера для своих нужд. Цвет, авто обновление, красивые кнопки и многое другое. Полный полет фантазии.
Опрос датчика температуры происходит при каждом обновлении страницы. Для датчика нужна библиотека которая находится в соседнем посту про DHT-11.
Реле включается одним пином переводя его в HIGHT или LOW.
В заключение скажу то что сервер в данном виде каким он есть работал у меня больше 3х недель без ресетов. Минусами является то что если часто обновлять страницу то сервер можно положить, а вернее модуль wi-fi, но с хорошим модулем ESP8266 это не проблема, программный автоматический сброс и все пройдет.
В скором времени напишу как сделать систему контролируемую напрямую через WiFi модуль ESP8266 для управления объектами и контроля данных.
Дополнение:
Для доступа через интернет, не забывайте прописать статический IP для MAC ESP8266 в роутере. И настроить пере направление трафика для порта 80 на данный IP.
Вопросы оставляйте в комментарии
Другие статьи по разделу:
ЖКИ дисплей WH0802 подключение к Ардуино [Много проводов]
Управление шаговым биполярным двигателем A4988ET [Рабочий код ino]
Базовый веб-сервер Arduino — Pi My Life Up
В этом руководстве рассматриваются шаги по созданию собственного веб-сервера Arduino.
Настройка веб-сервера на Arduino — это простой процесс, охватывающий процесс его запуска и запуска. Я также расскажу о некоторых основных концепциях, таких как использование Ajax для обновления, а не обновление страницы снова и снова.
Вам необходимо знать основы HTML, которые невероятно легко понять. Если вы никогда не занимались HTML, я рекомендую посетить w3schools для начального ознакомления.
Этот сервер не сможет делать ничего особенного, но он невероятно полезен для всех, кто хочет отображать данные с устройств, подключенных к контактам, или хотел бы взаимодействовать со схемой с веб-страницы. Более мощный веб-сервер Raspberry Pi может вас заинтересовать, если он на самом деле не охватывает то, что вам нужно.
Все примеры кода можно найти на моем Github и их легко скачать (они также прокомментированы). Если вы заметили какие-либо ошибки, пожалуйста, сообщите мне об этом в разделе комментариев внизу этой страницы.
Оборудование
Оборудование, которое вам понадобится для этого руководства по веб-серверу Arduino, указано ниже.
Рекомендуется
** Карта SD должна быть отформатирована в FAT16 или FAT32.
Основы кода
Если вы новичок в кодировании или заинтересованы в объяснении некоторых основ, читайте дальше, в противном случае вы можете пропустить этот раздел и перейти к настройке веб-сервера с разделом SD-карты или без нее.
Инициализация
Для начала вам необходимо инициализировать веб-сервер, определив несколько переменных и вызвав функцию.
Во-первых, вам нужно определить MAC-адрес, указанный ниже подойдет для большинства домашних сетей. Если вы точно знаете, что вам нужно, не стесняйтесь изменить это.
Во-вторых, вам нужно будет определить IP-адрес, это делается простым вызовом класса IPAddress
с выбранным вами IP-адресом. Убедитесь, что вы обновили его до IP-адреса, который не будет конфликтовать в вашей сети.
В-третьих, вам нужно будет установить номер порта, который вы хотите, чтобы сервер прослушивал. По умолчанию простой HTTP работает через порт 80. Если вы измените это, вам нужно будет определить порт, когда вы переходите к доступу к веб-странице в своем браузере. Например, если ваш порт был 14213 , то адрес будет выглядеть так: 192.168.1.177:14213
Наконец, в функции настройки вам нужно будет инициализировать Ethernet-устройство. Как только это будет инициализировано, просто позвоните в server.begin()
, как только это будет сделано, вы сможете прослушивать соединения и отвечать данными, когда это необходимо.
Обнаружение нового соединения
В функции цикла нам нужно проверять наличие нового соединения каждый раз, когда оно проходит по циклу. Если обнаружено новое соединение, то мы вводим код логики нашей веб-страницы.
Следующий код определяет, когда новый клиент пытается подключиться к серверу.
Как только будет определено, что клиент доступен, мы переходим к выводу HTML с веб-сервера Arduino.
Чтобы браузер правильно отображал веб-страницу, нам сначала нужно ответить с заголовком ответа HTML. Это не должно быть чем-то сложным, приведенного ниже примера более чем достаточно, чтобы все работало правильно.
Если вам нужна дополнительная информация о полях заголовков, то эта невероятно удобная вики-страница довольно хорошо все объясняет.
Вывод HTML
Вывод HTML можно просто выполнить, вызвав client. println()
или client.print()
с текстом/HTML, переданным в качестве параметра. Это просто, но, как вы можете видеть в примерах ниже на этой странице, это действительно раздувает код.
Ниже приведен базовый пример вывода HTML.
Другой вариант — хранить HTML-файлы на SD-карте, к которой вы можете получить доступ и загрузить ее. Затем вы можете выполнять запросы AJAX для обновления элементов на веб-странице, чтобы они отображали правильные данные.
Вы также можете сделать это, чтобы заставить Arduino выполнять такие действия, как включение и выключение светодиода.
Закрытие соединения
После того, как вы закончите обработку веб-страницы, вы должны немного подождать, чтобы клиент получил данные. Через секунду или около того просто закройте соединение с клиентом.
Веб-сервер Arduino без SD-карты
Если вы не используете SD-карту, настроить и запустить веб-сервер невероятно просто.
Важно отметить, что если у вас вставлена SD-карта, но она не используется, это может вызвать проблемы при обмене данными скетча с Arduino. Чтобы этого не произошло, добавьте следующие две строки в функцию настройки.
После добавления SD-карту можно снова вставить в устройство.
Чтобы быстро настроить и запустить веб-сервер Arduino, просто откройте скетч, скопируйте и вставьте приведенный ниже код. Его также можно найти на моей странице Github вместе с полным кодом для всех примеров в этом руководстве.
После того, как вы загрузили этот код в Arduino, у вас должен быть запущен и работает очень простой веб-сервер.
Он будет обновляться каждые 5 секунд, обновляя значения аналоговых контактов Arduino (это будут просто случайные значения, если к ним не подключено реальное устройство или датчик).
Вы также можете отслеживать в мониторе последовательного порта любые строки отладки, расположенные по всему коду.
Веб-сервер Arduino с SD-картой
Если вы решите использовать SD-карту для веб-сервера Arduino, то HTML-файлы должны быть созданы на вашем компьютере, а затем скопированы на SD-карту, прежде чем она будет вставлена в Ардуино.
Преимущество загрузки веб-страницы с SD-карты заключается в том, что вы можете иметь более сложные/тяжелые страницы без необходимости писать сотни client.write строк. Это также помогает предотвратить любые ситуации с нехваткой памяти, которые обычно возникают, когда на Arduino выполняется слишком много кода.
Инициализация SD-карты
Прежде чем вы сможете получить доступ к SD-карте, вам необходимо импортировать пакет SD и инициализировать его в функции настройки. Проверка в функции настройки увидит, может ли он получить доступ к карте, иначе выдаст ошибку в последовательном мониторе.
Загрузка файла
Когда вы будете готовы загрузить файл, просто нажмите sd.open(имя файла)
, чтобы открыть файл. Используйте оператор if, чтобы убедиться, что файл существует, а затем выполните цикл по содержимому файла, пока он не достигнет конца.
Ниже приведен пример веб-страницы, которая загружается через SD-карту с помощью Ajax (поясняется ниже), обновляющего элементы на странице.
Выполнение действий через веб-страницу (AJAX)
Может возникнуть ситуация, когда вы захотите управлять устройством или датчиком через веб-страницу. В этом разделе я рассмотрю выполнение запросов и обновлений с использованием AJAX. Это означает, что вы не будете видеть, как страница загружается снова и снова, но она все равно будет обновляться по мере необходимости.
AJAX или асинхронный JavaScript и XML слишком сложны, чтобы полностью охватить их в этом руководстве, но я расскажу об основах их использования на Arduino. Вы должны быть в состоянии настроить примеры в соответствии с вашими потребностями без особых проблем.
Пример AJAX
AJAX работает, отправляя запрос на сервер, затем сервер проверяет, существует ли в заголовке строка ajaxrefresh или ledstatus (для этого примера). Если это так, то он сгенерирует соответствующие данные и вернет их.
Затем JavaScript находит соответствующий элемент HTML с правильным идентификатором, а затем заменяет innerHTML ответом на запрос AJAX.
В приведенном ниже примере отправляется запрос на веб-сервер, работающий на Arduino, с переменной GET ajaxrefresh . Если сервер возвращает данные, он заменит innerHTML элемента с идентификатором Analog_Data .
Этот сценарий запускается каждые 5 секунд, но его можно настроить в соответствии с вашими потребностями.
Ajax-функции Arduino
Две приведенные ниже функции вызываются всякий раз, когда на сервер поступает соответствующий AJAX-запрос. Они очень просты: первый считывает аналоговые контакты и возвращает соответствующие данные.
Вторая функция включает или выключает КРАСНЫЙ светодиод в зависимости от его текущего состояния. Он также вернет статус светодиода, чтобы AJAX мог обновить значение на веб-странице.
AJAX с HTML, сгенерированным Arduino
В приведенном ниже примере все HTML и JavaScript полностью сгенерированы Arduino. JavaScript делает запросы AJAX к серверу Arduino, который обновляет страницу в зависимости от результатов, которые он предоставляет.
Одна проблема, которую я заметил, создавая весь код на Arduino, заключалась в том, что он начал нехватать места и выдавал предупреждения о стабильности. Это может быть проблемой, если вы хотите, чтобы на странице было множество датчиков и опций. Возможно, вы захотите сохранить HTML-код на SD-карте и вместо этого получить его оттуда.
AJAX с файлами HTML на SD-карте
Как вы можете видеть ниже, результат намного чище, если просто сохранить HTML в файле на SD-карте. Это должно помочь вашему скрипту в основном обрабатывать код, особенно если вы делаете все через AJAX и загружаете HTML с SD-карты.
Имейте в виду, что это всего лишь циклическая часть кода, если вы хотите получить полную версию на моей странице Github.
Устранение неполадок
Как и в любом проекте Arduino, вы можете столкнуться с некоторыми проблемами, следующие проблемы — лишь некоторые из тех, с которыми я столкнулся при составлении этого руководства.
- Я не могу получить доступ к своей веб-странице: Дважды проверьте IP-адрес и убедитесь, что он не конфликтует с другим устройством в сети. Кроме того, попробуйте пропинговать IP-адрес и посмотреть, получите ли вы ответ.
- Моя SD-карта говорит, что она недоступна: Нажмите и удерживайте кнопку выключения, затем вставьте SD-карту. Я обнаружил, что это обычно решает проблему.
- CSS: Вы можете включить CSS на свои веб-страницы, вы можете сделать это либо встроенным, либо расположенным в заголовке между тегами стиля. Это то, о чем вы, возможно, захотите прочитать больше, если вы мало занимались CSS. В этом нет необходимости, если только вы не хотите, чтобы ваши страницы выглядели хорошо.
Дополнительные реализации
Существует гораздо больше способов использования веб-сервера, которые увеличат функциональность вашей схемы. Я быстро перечислю несколько проектов, в которых вы, возможно, захотите реализовать веб-интерфейс.
- Вентилятор/Контроль температуры – Мониторинг серверной, теплицы или чего-либо подобного, где важны тепло и воздушный поток. Вы можете добавить элементы управления для включения и выключения обогревателей и вентиляторов.
- Счетчик — Используйте датчик движения для обнаружения движения и подсчета при каждом срабатывании датчика. Вы можете применить ту же логику практически к любому типу датчика.
Я надеюсь, что это руководство по веб-серверу Arduino помогло вам создать и запустить веб-сайт, где вы можете просматривать данные и взаимодействовать с ними. Если у вас есть какие-либо рекомендации, советы или вы заметили, что что-то не так, не стесняйтесь оставлять комментарии ниже.
Настройка собственного облачного сервера Arduino IoT
Если у вас была возможность поиграть с некоторыми из новых аппаратных платформ с поддержкой Arduino, таких как SoC ESP8266 Wi-Fi, вы, возможно, уже использовали онлайн IoT сервис для вашего проекта. В этой статье мы покажем вам, как настроить собственный онлайн-сервис, настроив виртуальный частный сервер (VPS) и серверное программное обеспечение для вашего проекта Arduino IoT.
Вам также может понравиться: Создание системы IoT с использованием Arduino и облачной платформы IoT
Помимо настройки собственного VPS, мы покажем вам, как установить простой пример, позволяющий управлять светодиодами, подсветкой и т. д. с помощью браузера. На следующем рисунке показано, как можно управлять любым количеством устройств в режиме реального времени, переходя к вашему собственному VPS с помощью браузера. Онлайн-VPS работает как прокси и позволяет любому количеству пользователей управлять устройствами через онлайн-сервер.
Некоторые преимущества использования онлайн-сервера и его работы в качестве прокси-сервера для маршрутизации сообщений между пользователями и устройствами:
Позволяет пользователям одной сети управлять устройствами в другой сети. Например, устройством, подключенным к домашней сети, можно управлять через смартфон, подключенный к сотовой сети.
Устройства работают как сетевые (TCP/IP) клиенты, поэтому для получения доступа к устройствам через онлайн-сервер не требуется переадресации портов маршрутизатора или других ухищрений.
Устройства, выступающие в качестве сетевых клиентов, работают в скрытом режиме, что значительно повышает безопасность устройств. Подробнее о безопасности мы поговорим позже.
Небольшие устройства обычно не имеют ресурсов для предоставления прямого веб-интерфейса. Онлайн-сервер управляет всей тяжелой работой по предоставлению веб-интерфейса для устройств, что значительно снижает сложность кода в устройствах.
Виртуальный частный сервер
Настройка собственного VPS может показаться сложной и дорогой, но реальность такова, что настроить VPS очень просто, а затраты могут быть минимальными. Можно найти услуги VPS всего за 8 долларов в год. Мой любимый сайт для покупки бюджетного VPS — lowendbox. com, а один из моих любимых провайдеров VPS — secureragon, где вы можете получить трехмесячную аренду менее чем за 6 долларов и годовую аренду за 12 долларов.
Ограничение памяти
Ограничением бюджетного VPS является объем доступной памяти. Бюджетный VPS, который мы используем в этой статье, имеет только 64 МБ памяти, что ограничивает выбор серверных решений IoT, которые можно использовать. Решение IoT, которое мы будем использовать в этой статье, представляет собой структуру сервера приложений, которая включает в себя протокол IoT, веб-сервер, язык сценариев на стороне сервера и базу данных в одном устройстве. Этот программный пакет может легко работать на бюджетном VPS, и в моей тестовой среде я смог подключить 10 000 устройств к онлайн-серверу. Я выполнил тест, используя несколько дополнительных виртуальных частных серверов, на которых я запустил несколько смоделированных устройств.
Linux
Бюджетный VPS будет работать под управлением Linux. Если вы никогда не использовали Linux, вы можете подумать, что это не для вас; однако ничто не может быть дальше от истины. Онлайн-VPS — лучшая отправная точка для всех, кто только начинает изучать командную строку Linux, потому что независимо от того, что вы делаете с VPS, простой в использовании веб-интерфейс управления VPS позволит вам восстановить исходную конфигурацию VPS с помощью нажатие кнопки.
По этой причине игра с онлайн-VPS — отличный способ изучить командную строку Linux. Если ваш Linux VPS находится в состоянии, когда вы не можете его восстановить, войдите в веб-панель управления VPS и нажмите кнопку переустановки. Свежий Linux VPS будет доступен через одну-две минуты, и вы сможете начать все сначала.
Удаленный вход через SSH
Онлайн-VPS позволяет удаленно входить в систему с помощью SSH (Secure Shell). Если на вашем компьютере установлена Windows, загрузите клиент SSH Putty и запустите исполняемый файл из любого каталога. Компьютеры Mac и Windows обычно включают SSH-клиент командной строки, поэтому вы можете просто ввести ssh в командной строке в Linux и Mac.
Когда вы подписываетесь на услугу VPS, такую как бюджетный VPS secureragon (O64), вы получите электронное письмо с инструкциями о том, как удаленно войти в ваш VPS с помощью SSH. Инструкции включают IP-адрес вашего нового VPS и пароль root (admin). На следующем рисунке показано, как ввести IP-адрес в Putty и как войти в систему как пользователь root в окне командной строки.
На этом этапе не стесняйтесь попробовать несколько команд Linux. Не беспокойтесь о повреждении VPS, так как простое нажатие кнопки на панели управления VPS переустановит операционную систему Linux.
Установка сервера IoT
Чтобы установить серверное программное обеспечение и пример программы, скопируйте все указанные ниже элементы и вставьте команды в окно консоли SSH.
wget http://makoserver. net/install/brokerX86/install.sh;
chmod +x install.sh;
./install.sh
В следующем видео показана полная последовательность установки, от настройки бесплатного доменного имени, входа в VPS, установки программного обеспечения до проверки его работы с помощью браузера.
Несколько замечаний к видео выше:
- Предлагаемый провайдер VPS Berry больше не работает. Используйте secureragon, как было предложено выше, или перейдите на LowEndTalk и выберите провайдера VPS из списка опросов лучших провайдеров VPS, оцененных сообществом.
- В последней части видео показано, как установить программное обеспечение пограничного узла на свой компьютер в целях тестирования. Вам не нужно делать это, если у вас есть ESP8266 и если вы следуете приведенным ниже инструкциям по установке программного обеспечения ESP8266.
- Сценарий установки сервера IoT был обновлен после создания видео. Сценарий установки теперь также устанавливает веб-редактор исходного кода, который дополнительно позволяет редактировать код на стороне сервера и интерфейс HTML с помощью браузера. Смотрите предыдущее видео в этой статье, в разделе Установка сервера IoT на собственный компьютер , чтобы узнать, как использовать веб-среду IDE.
Загрузка и компиляция эскиза Arduino
Пример Arduino был протестирован на совместимом с Arduino ESP8266 Wi-Fi. Тем не менее, вы сможете использовать Arduino с небольшими изменениями в коде запуска.
Загрузите и распакуйте эскиз Arduino в любой каталог:
https://realtimelogic.com/downloads/SMQ/SMQ-Arduino.zip
В следующем видео показано, как скомпилировать код и загрузить его в ESP8266
youtube.com/embed/aolQxPTmpiY»>Откройте файл скетча SMQ.ino в Arduino IDE и прокрутите вниз, пока не увидите:
#error УДАЛИТЕ ЭТУ СТРОКУ И УСТАНОВИТЕ ДВЕ ПЕРЕМЕННЫЕ НИЖЕ
статическая константа char* ssid = "";
static const char* password = "";
Удалите первую строку выше и задайте для переменной «ssid» идентификатор вашей беспроводной сети, а для «password» — пароль беспроводной сети.
Откройте файл led-example.cpp и прокрутите вниз, пока не увидите:
#define SIMPLEMQ_DOMAIN "http://simplemq.com"
Измените доменное имя «simplemq.com» на IP-адрес вашего VPS.
Скомпилируйте и загрузите файл скетча на плату Arduino. Если все пойдет как надо, устройство Arduino должно появиться в веб-интерфейсе. Вы попадаете в веб-интерфейс, используя браузер и переходя к IP-адресу вашего VPS.
Вышеизложенное — это все, что вам нужно для настройки онлайн-сервера, который вы можете использовать для управления вашими устройствами Arduino в режиме реального времени с помощью браузера. Полное приложение можно использовать «как есть» для управления всем, что обеспечивает состояние включения/выключения, например светодиодами, освещением, двигателями и т. д. Полное приложение состоит из двух частей: (1) веб-приложение на основе JavaScript, работающее в вашем браузер и подключен к онлайн-серверу. (2) код Arduino, работающий на плате Arduino, который также подключен к онлайн-серверу. Онлайн-сервер действует как универсальный прокси-сервер и маршрутизирует сообщения между устройствами и браузерами.
Протокол IoT, используемый в этом приложении, называется SMQ и обеспечивает индивидуальную связь (через онлайн-прокси) в дополнение к шаблону публикации/подписки. Функция публикации/подписки (pub/sub) в SMQ аналогична другим протоколам публикации/подписки, таким как MQTT и AMQP. Онлайн-прокси-сервер обычно называют брокером при использовании pub/sub-протоколов. Брокер отвечает за маршрутизацию сообщений между издателями и подписчиками. Подробное объяснение того, как работает приложение JavaScript и код Arduino, можно найти здесь.
Использование FreeRTOS
Среда Arduino отлично подходит для начинающих, но функциональность Arduino очень ограничена. Вместо Arduino вы также можете использовать готовую к использованию среду FreeRTOS, называемую esp-open-rtos, но не волнуйтесь, вам не нужно выполнять сложную настройку esp-open-rtos. Вместо этого вы можете использовать предварительно сконфигурированную и полностью готовую к использованию среду с простой в использовании веб-средой IDE. Веб-среда разработки отлично подходит для пользователей Arduino, которые привыкли к простой в использовании среде разработки Arduino.
Перейдите к RTL и загрузите бесплатную интегрированную среду разработки ESP8266.
IDE, разработанная для образовательных целей, включает в себя предварительно настроенный esp-open-rtos в комплекте с простой в использовании веб-средой IDE с исходным кодом C. Для IDE требуется VMWare или VirtualBox. Я предпочитаю VMWare, а не VirtualBox, так как мне проще его использовать. Обратите внимание, что VMWare бесплатна для некоммерческого использования.
На приведенном ниже снимке экрана показаны виртуальная машина и веб-среда IDE, подключенная к виртуальной машине. Обратите внимание, как виртуальная машина стала владельцем USB-подключения ESP8266. Веб-среда IDE обнаруживает это и показывает, что ESP8266 подключен и готов к прошивке новой прошивкой.
Обратите внимание, что IP-адрес вашей виртуальной машины, скорее всего, будет отличаться от указанного на рисунке выше. Не забудьте щелкнуть в окне виртуальной машины для IP-адреса. Если окно пустое, щелкните окно, а затем нажмите клавишу ввода. Вы должны ввести этот IP-адрес в браузере, чтобы открыть веб-IDE.
Дополнительные платформы
C-код граничного узла также доступен для многих дополнительных платформ. Дополнительные сведения см. на странице SMQ на GitHub.
Пользовательский интерфейс Java
Если вы программист Java и предпочитаете разрабатывать пользовательский интерфейс с помощью Java, а не HTML, см. статью Управление устройствами Java IoT.
Установка сервера IoT на собственный компьютер
Установка сервера IoT на собственный компьютер вместо онлайн-сервера — отличный способ начать использовать сервер IoT в учебных целях.
Вы можете использовать приведенный выше сценарий установки VPS на своем компьютере, если вы используете Linux x86 или Windows 10.
Сценарий установки предназначен для Linux, но сценарий установки также работает в Windows 10, если вы устанавливаете подсистему Linux. Если вы используете Windows, откройте Microsoft Store и найдите «debian». Установите подсистему Windows Debian для Linux и откройте оболочку bash.
В следующем видеоролике показано, как использовать сценарий установки в подсистеме Windows для Linux. Вы бы использовали ту же установку в стандартном дистрибутиве Linux.
youtube.com/embed/AoQkerI-a1E»>Безопасность Интернета вещей
Я обновил эту статью и добавил информацию о безопасности.
Насколько безопасно это решение?
Протокол SMQ, использованный в приведенном выше руководстве, обладает превосходными функциями безопасности, но все сводится к мерам безопасности, которые необходимо предпринять.
Аутентификация
В примере кода, разработанном для этого руководства, не используется аутентификация по паролю для протокола SMQ. Вы можете легко добавить аутентификацию по паролю в пример кода. Я не буду вдаваться в подробности, но протокол SMQ поддерживает строгую аутентификацию. Аутентификацию можно сделать безопасной даже при не-TLS-подключении, используя так называемую аутентификацию на основе начального хэша.
Протокол SMQ предоставляет начальное значение. Вам просто нужно решить, какой алгоритм хеширования использовать. Функция C SMQ_init()
предоставляет начальное значение в качестве выходного параметра, и это начальное значение можно использовать, например, для создания хэша HMAC.