Arduino - Desbloqueio de Padrão da Web
Componentes e suprimentos
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Sobre este projeto
Introdução
Se você é iniciante, recomendo a leitura dos seguintes tutoriais:
- Arduino - Motor
- Arduino - servo motor
- Arduino - Wifi
Você pode estar familiarizado com o padrão de desbloqueio ao acessar seu telefone. Agora, esse recurso está disponível no Arduino. Ele evita que pessoas não autorizadas controlem / monitorem o Arduino.
O usuário pode reutilizar livremente o código deste projeto para outro aplicativo. Para simplificar, tomo o controle do servo motor como exemplo.
Essa ideia se origina de dois projetos, que são escritos para a plataforma 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
Eu os adapto para o Arduino.
Neste projeto, usei PHPoC WiFi Shield para conectar o Arduino à Internet porque:
- PHPoC Shield suporta websocket, o que é conveniente para este projeto.
- PHPoC Shield tem um servidor web embutido dedicado, permitindo armazenar o aplicativo web embutido no escudo.
O PHPoC Shield tem alguns aplicativos da web integrados que permitem ao usuário usar o aplicativo da web integrado para controlar / monitorar o Arduino sem a necessidade de nenhum conhecimento de programação da web.
Além disso, o escudo PHPoC permite que os usuários que podem programar aplicativos da web desenvolvam seus próprios aplicativos da web e os armazenem no escudo do PHPoC.
Demonstração
Fluxo de dados
Navegador da Web <---> PHPoC WiFi Shield <---> Arduino
Como funciona
Quando o usuário desenha seu padrão no navegador da web, o padrão é mapeado para uma string. Essa string padrão é enviada ao Arduino por meio do WebSocket (via PHPoC Shield).
Quando o Arduino recebe a string de padrão de entrada, ele compara a string recebida com a string de padrão embutida no Arduino. Se houver correspondência, o Arduino envia o código ACEITO de volta ao cliente (navegador da Web) e define a variável autenticada para verdade. Caso contrário, o Arduino enviará o código NEGADO para o cliente e definirá a variável autenticada para falso.
Quando o Arduino recebe um comando de controle do usuário, ele verifica o valor da variável autenticada primeiro. Se o valor for verdadeiro, executa a tarefa correspondente ao comando. Se o valor for falso, envia o código NEGADO ao cliente.
Mapeamento de padrões
O padrão será mapeado para uma string. Por exemplo, na imagem acima, a string padrão é "1, 4, 8, 6, 3".
Um tempo limite é definido. Após um período de tempo, se o usuário não tiver nenhuma atividade, a autenticação expirou, o usuário precisa inserir o padrão novamente para desbloquear o Arduino.
O código-fonte inclui dois arquivos:
- ArduinoUnlockExample.ino:é compilado e carregado para o Arduino via Arduino IDE
- unlock.php:este é o código do aplicativo da web, ele é carregado para o escudo PHPoC por meio do depurador PHPoC.
O que precisamos fazer
- Definir informações de Wifi para escudo PHPoC (SSID e senha)
- Carregue uma nova IU para o escudo PHPoC
- Escreva o código do Arduino
Definindo informações de Wi-Fi para PHPoC Shield
Veja esta instrução.
Carregar nova IU da web para PHPoC Shield
- Baixe o código-fonte do PHPoC para unlock.php (na seção de código).
- Baixe duas imagens a seguir para controlar o servo motor
- Faça o upload para o escudo PHPoC usando o depurador PHPoC de acordo com esta instrução (observe que NÃO exclua o arquivo existente no escudo PHPoC)
Escreva o código do Arduino
- Instale a biblioteca PHPoC para Arduino no Arduino IDE (consulte as instruções)
- Consulte o código-fonte na seção de códigos.
- Compilar e fazer upload para o Arduino via Arduino IDE
Experimente
- Clique no botão serial no Arduino IDE para ver o endereço IP.
- Abra o navegador da web, digite
http://
replace_ip_address
/unlock.php
- Clique no botão conectar e teste.
O melhor Arduino Starter Kit para iniciantes
Se você estiver procurando por um kit Arduino, consulte O melhor kit Arduino para iniciantes
Referências de função
- Arduino - Biblioteca Servo
- Servo.attach ()
- Servo.write ()
- Servo.writeMicroseconds ()
- Servo.read ()
- Servo.attached ()
- Servo.detach ()
- Serial.begin ()
- Serial.println ()
- atraso ()
- milis ()
- para loop
- while loop
- se mais
- loop ()
- configuração ()
- String.toInt ()
- String.substring ()
- String.indexOf ()
- String.remove ()
- String.equals ()
Código
- unlock.php
- ArduinoUnlockExample
unlock.php PHP
Esta é a interface do usuário da WebArduino - PHPoC Shield
Arduino - Desbloqueio de padrão da Web
WebSocket: nulo
ArduinoUnlockExample Arduino
/ * servidor web arduino - desbloqueio de padrão * / # include "SPI.h" #include "Phpoc.h" #include#define CMD_AUTH 0 # define CMD_CTRL 1 # define ACCEPTED "202" #define NÃO AUTORIZADO "401" Servidor PhpocServer (80); Servo servo; Padrão de string; bool autenticado; tempo limite longo sem sinal; lastActiveTime longo não assinado; void setup () {Serial.begin (9600); while (! Serial); Phpoc.begin (PF_LOG_SPI | PF_LOG_NET); //Phpoc.begin (); server.beginWebSocket ("web_pattern"); Serial.print ("endereço do servidor WebSocket:"); Serial.println (Phpoc.localIP ()); servo.attach (8); // anexa o servo no pino 8 ao objeto servo servo.write (90); padrão =String ("1,4,8,6,3"); autenticado =falso; tempo limite =10000; // 10000 milissegundos lastActiveTime =0;} void loop () {// espera por um novo cliente:PhpocClient client =server.available (); if (cliente) {String data =client.readLine (); if (dados) {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)); if (pattern.equals (reqPattern)) {authenticated =true; sendResponse (ACEITO, 3); lastActiveTime =millis (); } else {//Serial.print(reqPattern); autenticado =falso; sendResponse (NÃO AUTORIZADO, 3); }} else if (cmd ==CMD_CTRL) {if (autenticado) {ângulo interno =data.substring (pos + 1) .toInt (); // ângulo =mapa (ângulo, -90, 90, 0, 180); ângulo =mapa (ângulo, 90, -90, 0, 180); servo.write (ângulo); lastActiveTime =millis (); Serial.println (ângulo); } else {sendResponse (NÃO AUTORIZADO, 3); }}}} if (autenticado &&((millis () - lastActiveTime)> tempo limite)) {authenticated =false; sendResponse (NÃO AUTORIZADO, 3); }} void sendResponse (char * data, int len) {server.write (data, len); }
Esquemas
Processo de manufatura