Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Arduino - Foto maken - Uploaden naar Google Drive

Componenten en benodigdheden

Arduino Mega 2560
× 1
PHPoC WiFi Shield 2 voor Arduino
× 1
Seeed Grove - Seriële camerakit
× 1
Seeed Grove-basisschild
× 1
Knop
× 1

Over dit project

Als je een beginner bent, kun je hier meer te weten komen over Arduino.

Demonstratie

Hoe het werkt

1. Log in op Google-account via OAuth 2.0 voor IoT-apparaten om access_token te verkrijgen.

Het inlogproces wordt beschreven in dit project op Hackster.

2. Wanneer de knop wordt ingedrukt, haalt Arduino een foto van de camera en uploadt deze naar Google Drive met behulp van access_token via Google Drive API.

Google Drive API voor het uploaden van bestanden wordt beschreven in het Google-document.

Hoe

  • Maak een Google-project vanuit de Google Developer Portal en verkrijg GOOGLE_CLIENT_ID en GOOGLE_CLIENT_SECRET
  • Vervang GOOGLE_CLIENT_ID en GOOGLE_CLIENT_SECRET in Arduino-code
  • Upload login.php bestand naar PHPoC Shield. Zie instructie
  • Compileer en upload Arduino-code via Arduino IDE
  • Bekijk ip_adres van PHPoC-schild op seriële monitor
  • Toegang tot de inlogpagina op PHPoC Shield:http://ip_address/login.php en log in op uw Google-account
  • Druk op de knop om een ​​foto te maken
  • Controleer uw Google Drive na twee seconden, u ziet de gemaakte foto in uw Drive.

Ander hardwareplatform

Ik heb hier hetzelfde project gemaakt voor een ander hardwareplatform.

De beste Arduino-starterkit voor beginners

Als u op zoek bent naar een Arduino-kit, zie dan De beste Arduino-kit voor beginners


Functiereferenties

  • Serial.begin()
  • Serial.println()
  • vertraging()
  • millis() ​​​​​​​
  • for-lus
  • terwijl-lus
  • indien anders
  • loop()
  • setup()
  • String.toInt()
  • String.substring()
  • String.indexOf()
  • String.remove()
  • String.equals()

Code

  • ArduinoGoogleDrive
  • login.php
  • grove_camera.h
ArduinoGoogleDriveArduino
Dit is de belangrijkste Arduino-code.
#include #include #include "grove_camera.h"// Vervang uw GOOGLE_CLIENT_ID en GOOGLE_CLIENT_SECRET hierString GOOGLE_CLIENT_ID ="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.xxxuser. String GOOGLE_CLIENT_SECRET ="xxxxxxxxxxxxxxxxxxxxxxxx";PhpocServer websocket_server(80);String http_resp_hearder(PhpocClient &client){ String hearer =""; while(1){ if(client.available()){ String line =client.readLine(); if(regel =="\r\n") pauze; anders hoorder +=regel; } if(!client.connected()){ client.stop(); pauze; } } return hearer;}String http_resp_body(PhpocClient &client){ String body =""; while(1){ if(client.available()){ char c =client.read(); lichaam +=c; } if(!client.connected()){ client.stop(); pauze; } } 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-client; // Stap 1:Vraag apparaat- en gebruikerscodes op if(client.connectSSL("accounts.google.com", 443)){ Serial.println(F("Verbonden met server")); String lichaam =F("client_id="); lichaam +=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("Verbinding:sluiten")); client.println(F("Accepteren:*/*")); client.println(F("Content-Type:application/x-www-form-urlencoded")); client.print(F ("Inhoudslengte:")); client.println(body.length()); klant.println(); cliënt.print(body); String response_hearder =http_resp_hearder(client); String 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 ("Parsing input failed!"); opbrengst; } // Stap 2:Behandel het antwoord van de autorisatieserver String device_code =""; String gebruikerscode =""; lang verloopt_in =0; int-interval =0; String verificatie_url =""; bool is_valid =waar; if(body_json.hasOwnProperty("device_code")) device_code =body_json["device_code"]; anders is_valid =false; if(body_json.hasOwnProperty("user_code")) user_code =body_json["user_code"]; anders is_valid =false; if(body_json.hasOwnProperty("expires_in")) expires_in =(lang) body_json["expires_in"]; anders is_valid =false; if(body_json.hasOwnProperty("interval")) interval =(int) body_json["interval"]; anders is_valid =false; if(body_json.hasOwnProperty("verification_url")) verificatie_url =body_json["verification_url"]; anders is_valid =false; if(is_valid){ // Stap 3:Toon de gebruikerscode Serial.print(F("Volgende, bezoek ")); Serial.print(verificatie_url); Serial.print(F(" op uw desktop of smartphone en voer deze code in:")); Serial.println(gebruikerscode); String bericht; msg ="{\"provider\":\"google\","; msg +="\"action\":\"LOGIN\","; msg +="\"verification_url\":\"" + verificatie_url + "\","; msg +="\"user_code\":\"" + user_code + "\"}"; websocket_send (bericht); // Stap 5:Poll-autorisatieserver int poll_max =expires_in / interval; body =F("client_id="); lichaam +=GOOGLE_CLIENT_ID; body +=F("&client_secret="); lichaam +=GOOGLE_CLIENT_SECRET; lichaam +=F("&code="); body +=apparaatcode; body +=F("&grant_type=http://oauth.net/grant_type/device/1.0"); for(int poll_count =0; poll_count  debounceDelay) { if (lezing! =buttonState) { buttonState =lezen; if (buttonState ==HIGH) { return true; } } } lastButtonState =lezen; return false;}void setup(){ Serial.begin(115200); while(!Serial); Phpoc.begin(PF_LOG_SPI | PF_LOG_NET); websocket_server.beginWebSocket("login"); Serial.print("WebSocket-serveradres:"); 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 is ongeldig, log opnieuw in"); }}
login.phpPHP
Deze bestandscode wordt geüpload naar PHPoC Shield. Het biedt een webgebruikersinterface voor het aanmeldingsproces van Google
PHPoC / <?echo system("uname -i")?>
G o o g l e
Inloggen voor Arduino




grove_camera.hC/C++
Bibliotheek voor Grove Camera
#define PIC_PKT_LEN 512 //datalengte van elke leesactie, stel dit niet te groot in want ram is beperkt#define CAM_ADDR 0//Color Type#define CT_GRAYSCALE_2 0x01#define CT_GRAYSCALE_4 0x02#define CT_GRAYSCALE_8 0x03#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-resolutie#define JR_80x64 0x01=define JR_160x128 0x240#define JR_160x128 0x240#define JR_160x128 0x240#define ); // 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) doorgaan; if(resp[0] ==0xaa &&resp[1] ==(0x0e | camera_address) &&resp[2] ==0x06 &&resp[4] ==0 &&resp[5] ==0) break; }}lange cameraGetPicture(){ char cmd[] ={ 0xaa, 0x04 | camera_adres, 0x01, 0x00, 0x00, 0x00 }; niet-ondertekende char resp[6]; niet-ondertekende lange picTotalLen =0; // foto lengte terwijl (1) {cameraClearRxBuf(); cameraSendCmd(cmd, 6); if(Serial.readBytes((char *)resp, 6) !=6) doorgaan; 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) doorgaan; if(resp[0] ==0xaa &&resp[1] ==(0x0a | camera_address) &&resp[2] ==0x01){ picTotalLen =(resp[3]) | (resp[4] <<8) | (resp[5] <<16); pauze; } } } 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;}lange cameraGetPacket(unsigned int i, char* buf){ char cmd[] ={ 0xaa, 0x0e | camera_adres, 0x00, 0x00, 0x00, 0x00 }; Seriële.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); retour cnt; } else { cmd[4] =0xf0; cmd[5] =0xf0; cameraSendCmd(cmd, 6); } retourneer "";}

Schema's


Productieproces

  1. Arduino Spybot
  2. FlickMote
  3. Zelfgemaakte tv B-Gone
  4. Hoofdklok
  5. Vind mij
  6. Arduino Power
  7. Tech-TicTacToe
  8. Arduino Quadruped
  9. Bluetooth spraakgestuurde apparaten met OK Google
  10. Arduino-joystick
  11. Investering van Google om adoptie van IoT-beveiligingsapparaten te stimuleren