工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

Arduino-写真を撮る-Googleドライブにアップロード

コンポーネントと消耗品

>
Arduino Mega 2560
× 1
Arduino用PHPoCWiFiシールド2
× 1
SeedGrove-シリアルカメラキット
× 1
シードグローブベースシールド
× 1
ボタン
× 1

このプロジェクトについて

初心者の方は、ここでArduinoについて学ぶことができます。

デモンストレーション

仕組み

1。 IoTデバイス用のOAuth2.0を介してGoogleアカウントにログインし、 access_token。を取得します。

ログインプロセスは、Hacksterのこのプロジェクトで説明されています。

2。 ボタンを押すと、Arduinoはカメラから画像を取得し、 access_token を使用してGoogleドライブにアップロードします Google DriveAPI経由。

ファイルをアップロードするためのGoogleDrive APIは、Googleドキュメントで説明されています。

方法

  • GoogleデベロッパーポータルからGoogleプロジェクトを作成し、GOOGLE_CLIENT_IDとGOOGLE_CLIENT_SECRETを取得します
  • ArduinoコードのGOOGLE_CLIENT_IDとGOOGLE_CLIENT_SECRETを置き換えます
  • login.phpファイルをPHPoCシールドにアップロードします。手順を参照してください
  • ArduinoIDEを介してArduinoコードをコンパイルおよびアップロードする
  • シリアルモニターのPHPoCシールドのip_addressを参照
  • PHPoCシールドのログインページにアクセスします:http://ip_address/login.phpそしてGoogleアカウントにログインします
  • ボタンを押して写真を撮ります
  • 2秒後にGoogleドライブを確認すると、撮影した写真がドライブに表示されます。

その他のハードウェアプラットフォーム

ここで別のハードウェアプラットフォーム用に同じプロジェクトを作成しました。

初心者のための最高のArduinoスターターキット

Arduinoキットをお探しの場合は、初心者向けの最高のArduinoキットをご覧ください


関数リファレンス

  • Serial.begin()
  • Serial.println()
  • delay()
  • millis()
  • forループ
  • whileループ
  • その他の場合
  • loop()
  • setup()
  • String.toInt()
  • String.substring()
  • String.indexOf()
  • String.remove()
  • String.equals()

コード

  • ArduinoGoogleDrive
  • login.php
  • grove_camera.h
ArduinoGoogleDrive Arduino
これはArduinoのメインコードです。
 #include  #include  #include "grove_camera.h" // GOOGLE_CLIENT_IDとGOOGLE_CLIENT_SECREThereString GOOGLE_CLIENT_ID ="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.google String GOOGLE_CLIENT_SECRET ="xxxxxxxxxxxxxxxxxxxxxxxx"; PhpocServer websocket_server(80); String http_resp_hearder(PhpocClient&client){String listener =""; while(1){if(client.available()){String line =client.readLine(); if(line =="\ r \ n")break;そうでなければ聞き手+ =行; } if(!client.connected()){client.stop();壊す; }} return listener;} String http_resp_body(PhpocClient&client){String body =""; while(1){if(client.available()){char c =client.read();本体+ =c; } if(!client.connected()){client.stop();壊す; }} return body;} String access_token =""; String refresh_token =""; unsigned long access_token_expire_at =0; void websocket_send(String msg){char wbuf [256]; msg.toCharArray(wbuf、msg.length()+ 1); websocket_server.write(wbuf、msg.length());} void googleDeviceOAuthLogin(){PhpocClientクライアント; //ステップ1:デバイスとユーザーコードをリクエストするif(client.connectSSL( "accounts.google.com"、443)){Serial.println(F( "Connected to server"));文字列本体=F( "client_id =");本文+ =GOOGLE_CLIENT_ID; body + =F( "&scope =https://www.googleapis.com/auth/drive.file"); client.println(F( "POST / o / oauth2 / device / code HTTP / 1.1")); client.println(F( "ホスト:accounts.google.com")); client.println(F( "接続:閉じる")); client.println(F( "Accept:* / *")); client.println(F( "Content-Type:application / x-www-form-urlencoded")); client.print(F( "Content-Length:")); client.println(body.length()); client.println(); client.print(body);文字列response_hearder =http_resp_hearder(client);文字列response_body =http_resp_body(client); //Serial.println(response_hearder); //Serial.println(response_body); JSONVar body_json =JSON.parse(response_body); if(JSON.typeof(body_json)=="undefined"){Serial.println( "入力の解析に失敗しました!");戻る; } //ステップ2:承認サーバーの応答を処理するString device_code ="";文字列user_code =""; long Expires_in =0; int間隔=0;文字列verification_url =""; bool is_valid =true; if(body_json.hasOwnProperty( "device_code"))device_code =body_json ["device_code"];それ以外の場合、is_valid =false; if(body_json.hasOwnProperty( "user_code"))user_code =body_json ["user_code"];それ以外の場合、is_valid =false; if(body_json.hasOwnProperty( "expires_in"))expires_in =(long)body_json ["expires_in"];それ以外の場合、is_valid =false; if(body_json.hasOwnProperty( "interval"))interval =(int)body_json ["interval"];それ以外の場合、is_valid =false; if(body_json.hasOwnProperty( "verification_url"))verification_url =body_json ["verification_url"];それ以外の場合、is_valid =false; if(is_valid){//ステップ3:ユーザーコードを表示しますSerial.print(F( "Next、visit")); Serial.print(verification_url); Serial.print(F( "デスクトップまたはスマートフォンで次のコードを入力してください:")); Serial.println(user_code);文字列メッセージ; msg ="{\" Provider \ ":\" google \ "、"; msg + ="\" action \ ":\" LOGIN \ "、"; msg + ="\" verify_url \ ":\" "+ verify_url +" \ "、"; msg + ="\" user_code \ ":\" "+ user_code +" \ "}"; websocket_send(msg); //ステップ5:認証サーバーをポーリングしますint poll_max =Expires_in / interval; body =F( "client_id =");本文+ =GOOGLE_CLIENT_ID; body + =F( "&client_secret =");本文+ =GOOGLE_CLIENT_SECRET; body + =F( "&code ="); body + =device_code; body + =F( "&grant_type =http://oauth.net/grant_type/device/1.0"); for(int poll_count =0; poll_count  debounceDelay){if(reading!=buttonState){buttonState =reading; if(buttonState ==HIGH){trueを返します; }}} lastButtonState =読み取り; falseを返します;} void setup(){Serial.begin(115200); while(!Serial); Phpoc.begin(PF_LOG_SPI | PF_LOG_NET); websocket_server.beginWebSocket( "login"); Serial.print( "WebSocketサーバーアドレス:"); Serial.println(Phpoc.localIP()); pinMode(2、INPUT); cameraInit(CT_JPEG、PR_160x120、JR_640x480);} void loop(){PhpocClient client =websocket_server.available(); if(client){String ws_str =client.readLine(); if(ws_str =="google \ r \ n"){googleDeviceOAuthLogin(); }} if(isButtonPressed(2)){if(access_token!="" &&access_token_expire_at> millis())cameraToGoogleDrive(); else Serial.println( "access_tokenが無効です。もう一度ログインしてください"); }} 
login.php PHP
このファイルコードはPHPoCシールドにアップロードされます。 Googleログインプロセス用のWebユーザーインターフェイスを提供します
    PHPoC / <?echo system( "uname -i")?>        
G o o g l e
Arduinoにログイン




grove_camera.h C / C ++
GroveCamera用ライブラリ
 #define PIC_PKT_LEN 512 //各読み取りのデータ長。ラムが制限されているため、これを大きく設定しすぎないでください。 CT_COLOR_12 0x05#define CT_COLOR_16 0x06#define CT_JPEG 0x07 // Preview Resolution#define PR_80x60 0x01#define PR_160x120 0x03 // JPEG Resolution#define JR_80x64 0x01#define JR_160x128 0x03#define JR_320x240 0x05#def ); // addressunsigned int camera_packet_num; unsigned int camera_last_packet_len; void cameraClearRxBuf(){while(Serial.available()){Serial.read(); }} void cameraSendCmd(char cmd []、int cmd_len){for(char i =0; i > 8)&0xff、0}; while(1){cameraClearRxBuf(); cameraSendCmd(cmd3、6); if(Serial.readBytes((char *)resp、6)!=6)続行; if(resp [0] ==0xaa &&resp [1] ==(0x0e | camera_address)&&resp [2] ==0x06 &&resp [4] ==0 &&resp [5] ==0)break; }} long cameraGetPicture(){char cmd [] ={0xaa、0x04 | camera_address、0x01、0x00、0x00、0x00}; unsigned char resp [6]; unsigned long picTotalLen =0; //画像の長さwhile(1){cameraClearRxBuf(); cameraSendCmd(cmd、6); if(Serial.readBytes((char *)resp、6)!=6)続行; if(resp [0] ==0xaa &&resp [1] ==(0x0e | camera_address)&&resp [2] ==0x04 &&resp [4] ==0 &&resp [5] ==0){Serial.setTimeout (1000); if(Serial.readBytes((char *)resp、6)!=6)続行; if(resp [0] ==0xaa &&resp [1] ==(0x0a | camera_address)&&resp [2] ==0x01){picTotalLen =(resp [3])| (resp [4] <<8)| (resp [5] <<16);壊す; }}} camera_packet_num =(picTotalLen)/(PIC_PKT_LEN-6); camera_last_packet_len =PIC_PKT_LEN; if((picTotalLen%(PIC_PKT_LEN-6))!=0){camera_packet_num + =1; camera_last_packet_len =picTotalLen%(PIC_PKT_LEN-6)+ 6; } return picTotalLen;} long cameraGetPacket(unsigned int i、char * buf){char cmd [] ={0xaa、0x0e | camera_address、0x00、0x00、0x00、0x00}; Serial.setTimeout(100); if(i > 8)&0xff; cameraClearRxBuf(); cameraSendCmd(cmd、6); int pkt_len; if(i <(camera_packet_num-1))pkt_len =PIC_PKT_LEN;それ以外の場合、pkt_len =camera_last_packet_len; uint16_t cnt =Serial.readBytes((char *)buf、pkt_len); cntを返します。 } else {cmd [4] =0xf0; cmd [5] =0xf0; cameraSendCmd(cmd、6); } return "";} 

回路図


製造プロセス

  1. Arduino Spybot
  2. FlickMote
  3. 自家製テレビB-Gone
  4. マスタークロック
  5. Find Me
  6. Arduino Power
  7. Tech-TicTacToe
  8. Arduino Quadruped
  9. OKGoogleのBluetooth音声制御アプライアンス
  10. Arduinoジョイスティック
  11. IoTセキュリティデバイスの採用を促進するためのGoogleの投資