Arduino-Webパターンのロックを解除
コンポーネントと消耗品
> |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
このプロジェクトについて
はじめに
初心者の方は、次のチュートリアルを読むことをお勧めします。
- Arduino-モーター
- Arduino-サーボモーター
- Arduino-Wifi
あなたがあなたの電話にアクセスするとき、あなたはロック解除パターンに精通しているかもしれません。現在、この機能はArduinoで利用できます。許可されていない人がArduinoを制御/監視するのを防ぎます。
ユーザーは、このプロジェクトのコードを他のアプリケーションで自由に再利用できます。簡単にするために、例としてサーボモーター制御を取り上げます。
このアイデアは、PHPoCプラットフォーム用に作成された2つのプロジェクトに由来しています。
- 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は、このプロジェクトに便利なWebSocketをサポートしています。
- PHPoC Shieldには専用の組み込みWebサーバーがあり、組み込みWebアプリケーションをシールドに保存できます。
PHPoC Shieldにはいくつかの組み込みWebアプリケーションがあり、ユーザーは組み込みWebアプリケーションを使用して、Webプログラミングの知識がなくてもArduinoを制御/監視できます。
また、PHPoCシールドを使用すると、Webアプリケーションをプログラムできるユーザーは、独自のWebアプリケーションを開発して、PHPoCシールドに保存できます。
デモンストレーション
データフロー
Webブラウザ<---> PHPoCWiFiシールド<---> Arduino
<図>
仕組み
ユーザーがWebブラウザーでパターンを描画すると、パターンは文字列にマップされます。このパターン文字列は、WebSocketを介して(PHPoCシールドを介して)Arduinoに送信されます。
Arduinoは入力パターン文字列を受信すると、受信した文字列をArduinoのハードコードされたパターン文字列と比較します。それらが一致する場合、ArduinoはACCEPTEDコードをクライアント(Webブラウザー)に送り返し、 認証された変数を設定します。 本当に。それ以外の場合、ArduinoはDENIEDコードをクライアントに送信し、 認証された変数を設定します falseに。
Arduinoはユーザーから制御コマンドを受信すると、 認証された変数の値をチェックします 初め。値がtrueの場合、コマンドに対応するタスクを実行します。値がfalseの場合、DENIEDコードがクライアントに送信されます。
パターンマッピング
<図>パターンは文字列にマッピングされます。たとえば、上の画像では、パターン文字列は「1、4、8、6、3」です。
タイムアウトが設定されます。一定期間後、ユーザーにアクティビティがない場合、認証は期限切れになります。ユーザーはパターンを再度入力して、Arduinoのロックを解除する必要があります。
ソースコードには2つのファイルが含まれています:
- ArduinoUnlockExample.ino:コンパイルされ、ArduinoIDEを介してArduinoにアップロードされます
- unlock.php:これはWebアプリコードであり、PHPoCデバッガーを介してPHPoCシールドにアップロードされます。
私たちがしなければならないこと
- PHPoCシールドのWifi情報(SSIDとパスワード)を設定します
- 新しいUIをPHPoCシールドにアップロードする
- Arduinoコードを書く
PHPoCシールドのWi-Fi情報の設定
この手順を参照してください。
新しいWebUIをPHPoCシールドにアップロードする
- PHPoCソースコードunlock.phpをダウンロードします(コードセクションにあります)。
- サーボモーターを制御するための次の2つの画像をダウンロードします
- この手順に従って、PHPoCデバッガーを使用してPHPoCシールドにアップロードします(PHPoCシールド上の既存のファイルを削除しないように注意してください)
Arduinoコードを書く
- Arduino IDEにArduino用のPHPoCライブラリをインストールします(手順を参照)
- コードセクションのソースコードを参照してください。
- ArduinoIDEを介してコンパイルしてArduinoにアップロードする
試してみてください
- Arduino IDEのシリアルボタンをクリックして、IPアドレスを確認します。
- Webブラウザを開き、
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()
- millis()
- forループ
- whileループ
- その他の場合
- loop()
- setup()
- String.toInt()
- String.substring()
- String.indexOf()
- String.remove()
- String.equals()
コード
- unlock.php
- ArduinoUnlockExample
unlock.php PHP
これはWebユーザーインターフェイスです<!DOCTYPEhtml>Arduino --PHPoC Shield
Arduino-Webパターンのロック解除
角度: 0
WebSocket: null
ArduinoUnlockExample Arduino
/ * arduinoWebサーバー-パターンロック解除* /#include "SPI.h" #include "Phpoc.h" #include#define CMD_AUTH 0#define CMD_CTRL 1#define ACCEPTED "202" #define UNAUTHORIZED "401" PhpocServer server(80);サーボサーボ;文字列パターン;ブール認証; unsigned long timeout; unsigned long lastActiveTime; void setup(){Serial.begin(9600); while(!Serial); Phpoc.begin(PF_LOG_SPI | PF_LOG_NET); //Phpoc.begin(); server.beginWebSocket( "web_pattern"); Serial.print( "WebSocketサーバーアドレス:"); Serial.println(Phpoc.localIP()); Servo.attach(8); //ピン8のサーボをサーボオブジェクトservo.write(90);に接続します。パターン=String( "1,4,8,6,3");認証済み=false;タイムアウト=10000; // 10000 Milllisecond lastActiveTime =0;} void loop(){//新しいクライアントを待機します:PhpocClient client =server.available(); if(client){String data =client.readLine(); if(data){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)){認証済み=true; sendResponse(ACCEPTED、3); lastActiveTime =millis(); } else {//Serial.print(reqPattern);認証済み=false; sendResponse(UNAUTHORIZED、3); }} else if(cmd ==CMD_CTRL){if(authenticated){int angle =data.substring(pos + 1).toInt(); // angle =map(angle、-90、90、0、180); angle =map(angle、90、-90、0、180); Servo.write(角度); lastActiveTime =millis(); Serial.println(角度); } else {sendResponse(UNAUTHORIZED、3); }}}} if(authenticated &&((millis()-lastActiveTime)> timeout)){authenticated =false; sendResponse(UNAUTHORIZED、3); }} void sendResponse(char * data、int len){server.write(data、len); }
回路図
製造プロセス