Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Arduino - Tomar foto - Subir a Google Drive

Componentes y suministros

Arduino Mega 2560
× 1
PHPoC WiFi Shield 2 para Arduino
× 1
Seeed Grove - Kit de cámara en serie
× 1
Escudo base de Seeed Grove
× 1
Botón
× 1

Acerca de este proyecto

Si eres un principiante, puedes aprender sobre Arduino aquí.

Demostración

Cómo funciona

1. Inicie sesión en la cuenta de Google a través de OAuth 2.0 para dispositivos IoT para obtener access_token.

El proceso de inicio de sesión se describe en este proyecto en Hackster.

2. Cuando se presiona el botón, Arduino obtiene la imagen de la cámara y luego la carga a Google Drive usando access_token a través de la API de Google Drive.

La API de Google Drive para cargar archivos se describe en el documento de Google.

Cómo

  • Cree Google Project desde Google Developer Portal y obtenga GOOGLE_CLIENT_ID y GOOGLE_CLIENT_SECRET
  • Reemplaza GOOGLE_CLIENT_ID y GOOGLE_CLIENT_SECRET en el código Arduino
  • Sube el archivo login.php a PHPoC Shield. Ver instrucciones
  • Compile y cargue el código Arduino a través de Arduino IDE
  • Ver ip_address of PHPoC shield en Serial Monitor
  • Acceda a la página de inicio de sesión en PHPoC Shield:http://ip_address/login.php e inicie sesión en su cuenta de Google
  • Presione el botón para tomar una foto
  • Verifique su Google Drive después de dos segundos, verá la foto tomada en su Drive.

Otra plataforma de hardware

Hice el mismo proyecto para otra plataforma de hardware aquí.

El mejor kit de inicio de Arduino para principiantes

Si está buscando un kit de Arduino, consulte El mejor kit de Arduino para principiantes


Referencias de funciones

  • Serial.begin ()
  • Serial.println ()
  • retraso ()
  • milis ()
  • para bucle
  • ciclo while
  • si es otra cosa
  • bucle ()
  • configuración ()
  • String.toInt ()
  • String.substring ()
  • String.indexOf ()
  • String.remove ()
  • String.equals ()

Código

  • ArduinoGoogleDrive
  • login.php
  • grove_camera.h
ArduinoGoogleDrive Arduino
Este es el código principal de Arduino.
 #include  #include  #include "grove_camera.h" // Reemplace su GOOGLE_CLIENT_ID y GOOGLE_CLIENT_SECRET hereString GOOGLE_CLIENT_ID ="xxxxxxxxxoglexxxxxxxx.xx Cadena GOOGLE_CLIENT_SECRET ="xxxxxxxxxxxxxxxxxxxxxxxx"; PhpocServer websocket_server (80); Cadena http_resp_hearder (PhpocClient &client) {String Hearder =""; while (1) {if (client.available ()) {String line =client.readLine (); si (línea =="\ r \ n") romper; si no oyente + =línea; } if (! client.connected ()) {client.stop (); descanso; }} return Hearder;} String http_resp_body (PhpocClient &client) {String body =""; while (1) {if (client.available ()) {char c =client.read (); cuerpo + =c; } if (! client.connected ()) {client.stop (); descanso; }} 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 () {Cliente PhpocClient; // Paso 1:Solicite los códigos de dispositivo y usuario if (client.connectSSL ("accounts.google.com", 443)) {Serial.println (F ("Conectado al servidor")); String body =F ("client_id ="); cuerpo + =GOOGLE_CLIENT_ID; cuerpo + =F ("&scope =https://www.googleapis.com/auth/drive.file"); client.println (F ("POST / o / oauth2 / dispositivo / código HTTP / 1.1")); client.println (F ("Host:accounts.google.com")); client.println (F ("Conexión:cerrar")); client.println (F ("Aceptar:* / *")); client.println (F ("Tipo de contenido:aplicación / x-www-form-urlencoded")); client.print (F ("Contenido-Longitud:")); client.println (body.length ()); cliente.println (); client.print (cuerpo); String response_hearder =http_resp_hearder (cliente); String response_body =http_resp_body (cliente); //Serial.println(response_hearder); //Serial.println(response_body); JSONVar body_json =JSON.parse (response_body); if (JSON.typeof (body_json) =="undefined") {Serial.println ("Error de entrada de análisis"); regreso; } // Paso 2:Manejar la respuesta del servidor de autorización String device_code =""; String user_code =""; expires_in =0; int intervalo =0; String verify_url =""; bool is_valid =true; if (body_json.hasOwnProperty ("device_code")) device_code =body_json ["device_code"]; si no es_valido =falso; if (body_json.hasOwnProperty ("código_usuario")) código_usuario =body_json ["código_usuario"]; si no es_valido =falso; if (body_json.hasOwnProperty ("expires_in")) expires_in =(largo) body_json ["expires_in"]; si no es_valido =falso; if (body_json.hasOwnProperty ("intervalo")) intervalo =(int) body_json ["intervalo"]; si no es_valido =falso; if (body_json.hasOwnProperty ("verificacion_url")) verificacion_url =cuerpo_json ["verificacion_url"]; si no es_valido =falso; if (is_valid) {// Paso 3:Muestra el código de usuario Serial.print (F ("Siguiente, visita")); Serial.print (verificacion_url); Serial.print (F ("en su escritorio o teléfono inteligente e ingrese este código:")); Serial.println (código_usuario); String msg; msg ="{\" proveedor \ ":\" google \ ","; msg + ="\" action \ ":\" LOGIN \ ","; msg + ="\" verificacion_url \ ":\" "+ verificacion_url +" \ ","; msg + ="\" código_usuario \ ":\" "+ código_usuario +" \ "}"; websocket_send (msg); // Paso 5:Servidor de autorización de encuesta int poll_max =expires_in / interval; cuerpo =F ("client_id ="); cuerpo + =GOOGLE_CLIENT_ID; cuerpo + =F ("&client_secret ="); cuerpo + =GOOGLE_CLIENT_SECRET; cuerpo + =F ("&código ="); cuerpo + =código_dispositivo; cuerpo + =F ("&grant_type =http://oauth.net/grant_type/device/1.0"); for (int poll_count =0; poll_count  debounceDelay) {if (leyendo! =buttonState) {buttonState =reading; if (buttonState ==HIGH) {devuelve verdadero; }}} lastButtonState =lectura; return false;} void setup () {Serial.begin (115200); mientras (! Serial); Phpoc.begin (PF_LOG_SPI | PF_LOG_NET); websocket_server.beginWebSocket ("inicio de sesión"); Serial.print ("Dirección del servidor WebSocket:"); Serial.println (Phpoc.localIP ()); pinMode (2, ENTRADA); cameraInit (CT_JPEG, PR_160x120, JR_640x480);} bucle vacío () {cliente PhpocClient =servidor_websocket.available (); if (cliente) {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 no es válido, por favor inicie sesión nuevamente"); }} 
login.php PHP
Este código de archivo se carga en PHPoC Shield. Proporciona una interfaz de usuario web para el proceso de inicio de sesión de Google
    PHPoC / <? Echo system ("uname -i")?>        
G o o g l e
Iniciar sesión para Arduino




grove_camera.h C / C ++
Biblioteca para Grove Camera
 #define PIC_PKT_LEN 512 // longitud de datos de cada lectura, no establezca esto demasiado grande porque la RAM es limitada # define CAM_ADDR 0 // Tipo de color # 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 // Resolución de vista previa # define PR_80x60 0x01 # define PR_160x120 0x03 // Resolución JPEG # define JR_80x64 0x01 # define JR_160x128 0x03 # define JR_0540x240 ); // 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) continue; if (resp [0] ==0xaa &&resp [1] ==(0x0e | camera_address) &&resp [2] ==0x06 &&resp [4] ==0 &&resp [5] ==0) break; }} cámara largaGetPicture () {char cmd [] ={0xaa, 0x04 | dirección_cámara, 0x01, 0x00, 0x00, 0x00}; carácter sin firmar resp [6]; picTotalLen largo sin firmar =0; // longitud de la imagen while (1) {cameraClearRxBuf (); cameraSendCmd (cmd, 6); if (Serial.readBytes ((char *) resp, 6)! =6) continue; 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) continue; if (resp [0] ==0xaa &&resp [1] ==(0x0a | camera_address) &&resp [2] ==0x01) {picTotalLen =(resp [3]) | (resp [4] <<8) | (resp [5] <<16); descanso; }}} 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 | dirección_cámara, 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; else pkt_len =camera_last_packet_len; uint16_t cnt =Serial.readBytes ((char *) buf, pkt_len); return cnt; } más {cmd [4] =0xf0; cmd [5] =0xf0; cameraSendCmd (cmd, 6); } volver "";} 

Esquemas


Proceso de manufactura

  1. Arduino Spybot
  2. FlickMote
  3. Televisión casera B-Gone
  4. Reloj maestro
  5. Encuéntrame
  6. Arduino Power
  7. Tech-TicTacToe
  8. Arduino Cuadrúpedo
  9. Dispositivos Bluetooth controlados por voz con OK Google
  10. Joystick de Arduino
  11. Inversión de Google para impulsar la adopción de dispositivos de seguridad IoT