Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Arduino - Foto aufnehmen - Auf Google Drive hochladen

Komponenten und Verbrauchsmaterialien

Arduino Mega 2560
× 1
PHPoC WiFi Shield 2 für Arduino
× 1
Seeed Grove - Serienkamera-Kit
× 1
Seeed Grove Basisschild
× 1
Schaltfläche
× 1

Über dieses Projekt

Wenn Sie ein Anfänger sind, können Sie hier Arduino lernen.

Vorführung

Wie es funktioniert

1. Melden Sie sich über OAuth 2.0 für IoT-Geräte beim Google-Konto an, um access_token zu erhalten

Der Login-Prozess wird in diesem Projekt auf Hackster beschrieben.

2. Wenn die Taste gedrückt wird, erhält Arduino ein Bild von der Kamera und lädt es dann mit access_token auf Google Drive hoch über die Google Drive-API.

Die Google Drive API zum Hochladen von Dateien wird im Google-Dokument beschrieben.

Anleitung

  • Google-Projekt über das Google Developer Portal erstellen und GOOGLE_CLIENT_ID und GOOGLE_CLIENT_SECRET abrufen
  • Ersetzen Sie GOOGLE_CLIENT_ID und GOOGLE_CLIENT_SECRET im Arduino-Code
  • Laden Sie die Datei login.php in PHPoC Shield hoch. Siehe Anleitung
  • Arduino-Code über die Arduino-IDE kompilieren und hochladen
  • Siehe die IP-Adresse des PHPoC-Schilds auf dem Serial Monitor
  • Zugriff auf die Anmeldeseite von PHPoC Shield:http://ip_address/login.php und Anmeldung bei Ihrem Google-Konto
  • Drücken Sie die Taste, um ein Bild aufzunehmen
  • Überprüfen Sie Ihr Google Drive nach zwei Sekunden. Sie sehen das aufgenommene Bild in Ihrem Drive.

Andere Hardwareplattform

Ich habe das gleiche Projekt für eine andere Hardwareplattform hier gemacht.

Das beste Arduino Starter Kit für Anfänger

Wenn Sie nach einem Arduino-Kit suchen, lesen Sie Das beste Arduino-Kit für Anfänger


Funktionsreferenzen

  • Seriell.begin()
  • Seriell.println()
  • verzögerung()
  • millis() ​​​​​​
  • for-Schleife
  • while-Schleife
  • wenn sonst
  • Schleife()
  • setup()
  • String.toInt()
  • String.substring()
  • String.indexOf()
  • String.remove()
  • String.equals()

Code

  • ArduinoGoogleDrive
  • login.php
  • grove_camera.h
ArduinoGoogleDriveArduino
Dies ist der Arduino-Hauptcode.
#include #include #include "grove_camera.h"// Ersetzen Sie Ihre GOOGLE_CLIENT_ID und GOOGLE_CLIENT_SECRET hereString GOOGLE_CLIENT_ID ="xxxxxxxxxxxxxxxxxxxxxxxx"content String GOOGLE_CLIENT_SECRET ="xxxxxxxxxxxxxxxxxxxxxxxx";PhpocServer websocket_server(80);String http_resp_hearder(PhpocClient &client){ String Hörer =""; while(1){ if(client.available()){ String line =client.readLine(); if(line =="\r\n") break; sonst Hörer +=Zeile; } if(!client.connected()){client.stop(); brechen; } } Rückgabe des Hörers;}String http_resp_body(PhpocClient &client){ String body =""; while(1){ if(client.available()){ char c =client.read(); Körper +=c; } if(!client.connected()){client.stop(); brechen; } } Körper zurückgeben;}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-Client; // Schritt 1:Geräte- und Benutzercodes anfordern if(client.connectSSL("accounts.google.com", 443)){ Serial.println(F("Connected to server")); String body =F("client_id="); Körper +=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("Host:accounts.google.com")); client.println(F("Verbindung:schließen")); client.println(F("Akzeptieren:*/*")); client.println(F("Content-Type:application/x-www-form-urlencoded")); client.print(F("Inhaltslänge:")); client.println(body.length()); client.println(); client.print (Körper); String response_hearder =http_resp_hearder(client); String response_body =http_resp_body(client); //Seriell.println(response_hearder); //Serial.println(response_body); JSONVar body_json =JSON.parse(response_body); if(JSON.typeof(body_json) =="undefiniert") { Serial.println("Parsing-Eingabe fehlgeschlagen!"); Rückkehr; } // Schritt 2:Behandeln Sie die Antwort des Autorisierungsservers String device_code =""; String user_code =""; lang verfällt_in =0; int-Intervall =0; String verifikation_url =""; bool is_valid =true; if(body_json.hasOwnProperty("device_code")) device_code =body_json["device_code"]; sonst is_valid =false; if(body_json.hasOwnProperty("user_code")) user_code =body_json["user_code"]; sonst is_valid =false; if(body_json.hasOwnProperty("expires_in")) expires_in =(long) body_json["expires_in"]; sonst is_valid =false; if(body_json.hasOwnProperty("interval")) interval =(int) body_json["interval"]; sonst is_valid =false; if(body_json.hasOwnProperty("verification_url")) verification_url =body_json["verification_url"]; sonst is_valid =false; if (is_valid) {// Schritt 3:Zeigen Sie den Benutzercode Serial.print (F ( "Next, visit") an); Serial.print (verification_url); Serial.print (F(" auf Ihrem Desktop oder Smartphone und geben Sie diesen Code ein:")); Serial.println (Benutzercode); String-Nachricht; msg ="{\"Anbieter\":\"google\","; msg +="\"Aktion\":\"LOGIN\","; msg +="\"verification_url\":\"" + verification_url + "\","; msg +="\"Benutzercode\":\"" + Benutzercode + "\"}"; websocket_send(msg); // Schritt 5:Autorisierungsserver abfragen int poll_max =expires_in / interval; body =F("client_id="); Körper +=GOOGLE_CLIENT_ID; Körper +=F("&client_secret="); Körper +=GOOGLE_CLIENT_SECRET; Körper +=F("&code="); Körper +=Gerätecode; body +=F("&grant_type=http://oauth.net/grant_type/device/1.0"); for(int poll_count =0; poll_count  debounceDelay) { if (lesen !=buttonState) { buttonState =lesen; if (buttonState ==HIGH) { return true; } } } lastButtonState =Lesen; Rückgabe falsch;}void setup () { Serial.begin (115200); while(!Seriell); Phpoc.begin(PF_LOG_SPI | PF_LOG_NET); websocket_server.beginWebSocket("login"); Serial.print("WebSocket-Serveradresse:"); Serial.println (Phpoc.localIP()); pinMode (2, EINGANG); 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 ist ungültig, bitte erneut anmelden"); }}
login.phpPHP
Dieser Dateicode wird in PHPoC Shield hochgeladen. Es bietet eine Webbenutzeroberfläche für den Google-Anmeldeprozess
PHPoC / <?echo system("uname -i")?>
G o o g l e
Login für Arduino




grove_camera.hC/C++
Bibliothek für Grove Camera
#define PIC_PKT_LEN 512 //Datenlänge jedes Lesevorgangs, nicht zu groß einstellen, da der RAM begrenzt ist#define CAM_ADDR 0//Color Type#define CT_GRAYSCALE_2 0x01#define CT_GRAYSCALE_4 0x02#define CT_GRAYSCALE_8 0x03#define 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 0 JR_640x240 ); // 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}; Während (1) { KameraClearRxBuf(); KameraSendCmd(cmd3, 6); if(Serial.readBytes((char *)resp, 6) !=6) fortfahren; if(resp[0] ==0xaa &&resp[1] ==(0x0e | Kameraadresse) &&resp[2] ==0x06 &&resp[4] ==0 &&resp[5] ==0) break; }}lange KameraGetPicture(){ char cmd[] ={ 0xaa, 0x04 | Kameraadresse, 0x01, 0x00, 0x00, 0x00}; unsigned char resp[6]; unsigned long picTotalLen =0; // Bildlänge while (1){ cameraClearRxBuf(); KameraSendCmd(cmd, 6); if(Serial.readBytes((char *)resp, 6) !=6) fortfahren; 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) fortfahren; if(resp[0] ==0xaa &&resp[1] ==(0x0a | Kameraadresse) &&resp[2] ==0x01){ picTotalLen =(resp[3]) | (bzw.[4] <<8) | (bzw.[5] <<16); brechen; } } } 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 | Kameraadresse, 0x00, 0x00, 0x00, 0x00}; Serial.setTimeout (100); if(i > 8) &0xff; KameraClearRxBuf(); KameraSendCmd(cmd, 6); int pkt_len; if(i <(kamera_paket_num - 1)) pkt_len =PIC_PKT_LEN; else pkt_len =camera_last_packet_len; uint16_t cnt =Serial.readBytes((char *)buf, pkt_len); zurück cnt; aufrechtzuerhalten. Sonst { cmd[4] =0xf0; cmd[5] =0xf0; KameraSendCmd(cmd, 6); } return "";}

Schaltpläne


Herstellungsprozess

  1. Arduino Spybot
  2. FlickMote
  3. Selbstgemachter Fernseher B-Gone
  4. Hauptuhr
  5. Finde mich
  6. Arduino-Power
  7. Tech-TicTacToe
  8. Arduino-Vierbeiner
  9. Sprachgesteuerte Bluetooth-Geräte mit OK Google
  10. Google investiert, um die Einführung von IoT-Sicherheitsgeräten voranzutreiben