Arduino - разблокировка веб-шаблона
Компоненты и расходные материалы
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Об этом проекте
Введение
Если вы новичок, рекомендую прочитать следующие уроки:
- Arduino - Мотор
- Arduino - сервомотор
- Arduino - Wi-Fi
Вы можете быть знакомы с комбинацией разблокировки, когда получаете доступ к своему телефону. Теперь эта функция доступна на Arduino. Это предотвращает посторонние лица от управления / мониторинга Arduino.
Пользователь может свободно повторно использовать код этого проекта для другого приложения. Для простоты я возьму в качестве примера управление серводвигателем.
Эта идея возникла из двух проектов, написанных для платформы PHPoC:
- https://www.hackster.io/iot_lover/web-based-pattern-unlock-for-iot-device-aeaf44.
- https://forum.phpoc.com/articles/tutorials/350-servo-motor-controlling-servo-motor-via-websocket-with-graphic-ui
Адаптирую их для Arduino.
В этом проекте я использовал PHPoC WiFi Shield для подключения Arduino к Интернету, потому что:
- PHPoC Shield поддерживает веб-сокет, что удобно для этого проекта.
- PHPoC Shield имеет выделенный встроенный веб-сервер, позволяющий хранить встроенное веб-приложение на щите.
PHPoC Shield имеет несколько встроенных веб-приложений, которые позволяют пользователю использовать встроенное веб-приложение для управления / мониторинга Arduino, не требуя каких-либо знаний в области веб-программирования.
Кроме того, PHPoC Shield позволяет пользователям, которые могут программировать веб-приложение, разрабатывать собственное веб-приложение и хранить его на PHPoC Shield.
Демонстрация
Поток данных
Веб-браузер <---> PHPoC WiFi Shield <---> Arduino
Как это работает
Когда пользователь рисует свой шаблон в веб-браузере, шаблон сопоставляется со строкой. Эта строка шаблона отправляется в Arduino через WebSocket (через PHPoC Shield).
Когда Arduino получает строку входного шаблона, он сравнивает полученную строку с жестко закодированной строкой шаблона в Arduino. Если они совпадают, Arduino отправляет ПРИНЯТЫЙ код обратно клиенту (веб-браузеру) и устанавливает аутентифицированную переменную к истине. В противном случае Arduino отправляет клиенту ОТКАЗАННЫЙ код и устанавливает аутентифицированную переменную . на ложь.
Когда Arduino получает команду управления от пользователя, она проверяет значение аутентифицированной переменной . первый. Если значение истинно, он выполняет задачу, соответствующую команде. Если значение ложно, он отправляет ОТКАЗАННЫЙ код клиенту.
Сопоставление паттернов
Шаблон будет сопоставлен со строкой. Например, на изображении выше строка шаблона - «1, 4, 8, 6, 3».
Установлен тайм-аут. По прошествии определенного периода времени, если пользователь не выполняет никаких действий, срок аутентификации истекает, и пользователю необходимо снова ввести шаблон, чтобы разблокировать Arduino.
Исходный код включает два файла:
- ArduinoUnlockExample.ino:компилируется и загружается в Arduino через Arduino IDE.
- unlock.php:это код веб-приложения, он загружается на экран PHPoC через отладчик PHPoC.
Что нам нужно делать
- Установить информацию о Wi-Fi для экрана PHPoC (SSID и пароль)
- Загрузить новый интерфейс на PHPoC Shield
- Напишите код Arduino
Настройка информации о Wi-Fi для PHPoC Shield
См. Эту инструкцию.
Загрузить новый веб-интерфейс в PHPoC Shield
- Загрузите исходный код PHPoC unlock.php (в разделе кода).
- Загрузите два следующих изображения для управления серводвигателем.
- Загрузите его в PHPoC Shield с помощью отладчика PHPoC в соответствии с этой инструкцией (обратите внимание, что НЕ удаляйте существующий файл в PHPoC Shield)
Напишите код Arduino
- Установите библиотеку PHPoC для Arduino в Arduino IDE (см. инструкцию)
- См. исходный код в разделе кода.
- Скомпилируйте и загрузите в Arduino через Arduino IDE.
Попробуйте
- Нажмите кнопку последовательного порта в среде Arduino IDE, чтобы увидеть IP-адрес.
- Откройте веб-браузер, введите
http://
replace_ip_address
/unlock.php
- Нажмите кнопку подключения и проверьте ее.
Лучший стартовый комплект Arduino для начинающих
Если вы ищете комплект Arduino, см. «Лучший комплект Arduino для начинающих»
Ссылки на функции
- Arduino - серво-библиотека
- Servo.attach ()
- Servo.write ()
- Servo.writeMicroseconds ()
- Servo.read ()
- Servo.attached ()
- Servo.detach ()
- Serial.begin ()
- Serial.println ()
- delay ()
- миллис ()
- цикл для
- цикл while
- если еще
- цикл ()
- setup ()
- String.toInt ()
- String.substring ()
- String.indexOf ()
- String.remove ()
- String.equals ()
Код
- unlock.php
- ArduinoUnlockExample
unlock.php PHP
Это веб-интерфейс пользователяArduino - PHPoC Shield
Arduino - разблокировка веб-шаблона
WebSocket: null
ArduinoUnlockExample Arduino
/ * веб-сервер arduino - разблокировка по шаблону * / # include "SPI.h" #include "Phpoc.h" #include#define CMD_AUTH 0 # define CMD_CTRL 1 #define ACCEPTED "202" #define НЕАВТОРИЗОВАННЫЙ "401" сервер PhpocServer (80); сервопривод; шаблон строки; аутентификация bool; длительный тайм-аут без знака; длительный срок без знака lastActiveTime; void setup () {Serial.begin (9600); в то время как (! серийный); Phpoc.begin (PF_LOG_SPI | PF_LOG_NET); //Phpoc.begin (); server.beginWebSocket ("веб-шаблон"); Serial.print ("Адрес сервера WebSocket:"); Serial.println (Phpoc.localIP ()); сервопривод (8); // подключает сервопривод на выводе 8 к сервообъекту servo.write (90); шаблон =Строка ("1,4,8,6,3"); Authenticated =false; таймаут =10000; // 10000 миллисекунд lastActiveTime =0;} void loop () {// ждать нового клиента:PhpocClient client =server.available (); если (клиент) {Строковые данные =client.readLine (); если (данные) {int pos =data.indexOf (':'); int cmd =data.substring (0, pos) .toInt (); if (cmd ==CMD_AUTH) {String reqPattern =data.substring (pos + 1); reqPattern.remove (reqPattern.indexOf (13)); reqPattern.remove (reqPattern.indexOf (10)); если (шаблон.equals (reqPattern)) {аутентифицированный =истина; sendResponse (ПРИНЯТО, 3); lastActiveTime =миллис (); } else {//Serial.print(reqPattern); Authenticated =false; sendResponse (НЕСАНКЦИОНИРОВАНО, 3); }} else if (cmd ==CMD_CTRL) {if (аутентифицировано) {int angle =data.substring (pos + 1) .toInt (); // угол =карта (угол, -90, 90, 0, 180); угол =карта (угол, 90, -90, 0, 180); servo.write (угол); lastActiveTime =миллис (); Serial.println (угол); } else {sendResponse (НЕСАНКЦИОНИРОВАНО, 3); }}}} если (аутентифицированный &&((millis () - lastActiveTime)> тайм-аут)) {аутентифицированный =false; sendResponse (НЕСАНКЦИОНИРОВАНО, 3); }} void sendResponse (char * data, int len) {server.write (данные, len); }
Схема
Производственный процесс