Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Arduino - Ambil Gambar - Unggah ke Google Drive

Komponen dan persediaan

Arduino Mega 2560
× 1
PHPoC WiFi Shield 2 untuk Arduino
× 1
Seeed Grove - Kit Kamera Serial
× 1
Pelindung dasar Seeed Grove
× 1
Tombol
× 1

Tentang proyek ini

Jika Anda seorang pemula, Anda dapat mempelajari Arduino di sini.

Demonstrasi

Cara Kerjanya

1. Masuk ke Akun Google melalui OAuth 2.0 untuk perangkat IoT guna mendapatkan akses_token.

Proses login dijelaskan dalam proyek ini di Hackster.

2. Saat tombol ditekan, Arduino mengambil gambar dari kamera, lalu mengunggah ke Google Drive menggunakan access_token melalui Google Drive API.

API Google Drive untuk mengunggah file dijelaskan dalam dokumen Google.

Cara

  • Buat Proyek Google dari Portal Pengembang Google dan dapatkan GOOGLE_CLIENT_ID dan GOOGLE_CLIENT_SECRET
  • Ganti GOOGLE_CLIENT_ID dan GOOGLE_CLIENT_SECRET dalam kode Arduino
  • Unggah file login.php ke PHPoC Shield. Lihat instruksi
  • Kompilasi dan Unggah kode Arduino melalui Arduino IDE
  • Lihat ip_address dari PHPoC shield di Serial Monitor
  • Akses Halaman Login di PHPoC Shield:http://ip_address/login.php dan Login ke Akun Google Anda
  • Tekan Tombol untuk mengambil Gambar
  • Periksa Google Drive Anda setelah dua detik, Anda akan melihat gambar yang diambil di Drive Anda.

Platform Perangkat Keras Lainnya

Saya membuat proyek yang sama untuk platform perangkat keras lain di sini.

Kit Pemula Arduino Terbaik untuk Pemula

Jika Anda mencari kit Arduino, lihat Kit Arduino Terbaik untuk Pemula


Referensi Fungsi

  • Serial.begin()
  • Serial.println()
  • tunda()
  • milis() ​​​​​​
  • untuk loop
  • perulangan sementara
  • jika lain
  • loop()
  • penyiapan()
  • String.toInt()
  • String.substring()
  • String.indexOf()
  • String.remove()
  • String.equals()

Kode

  • ArduinoGoogleDrive
  • login.php
  • grove_camera.h
ArduinoGoogleDriveArduino
Ini adalah kode Arduino utama.
#include #include #include "grove_camera.h"// Ganti GOOGLE_CLIENT_ID dan GOOGLE_CLIENT_SECRET Anda di siniString GOOGLE_CLIENT_ID ="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxapps.com";xxxxxxxxxxxxxxxapps.com. String GOOGLE_CLIENT_SECRET ="xxxxxxxxxxxxxxxxxxxxxxxxxxx";PhpocServer websocket_server(80);String http_resp_hearder(PhpocClient &klien){ String pendengar =""; while(1){ if(client.available()){ String baris =client.readLine(); if(baris =="\r\n") break; pendengar lain +=baris; } if(!client.connected()){ client.stop(); merusak; } } kembali pendengar;}String http_resp_body(PhpocClient &klien){ String body =""; while(1){ if(client.available()){ char c =client.read(); tubuh +=c; } if(!client.connected()){ client.stop(); merusak; } } 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());}batalkan googleDeviceOAuthLogin(){ klien PhpocClient; // Langkah 1:Minta perangkat dan kode pengguna if(client.connectSSL("accounts.google.com", 443)){ Serial.println(F("Connected to server")); String badan =F("klien_id="); badan +=GOOGLE_CLIENT_ID; body +=F("&scope=https://www.googleapis.com/auth/drive.file"); client.println(F("POST /o/oauth2/perangkat/kode HTTP/1.1")); client.println(F("Host:akun.google.com")); client.println(F("Koneksi:tutup")); client.println(F("Terima:*/*")); client.println(F("Jenis Konten:aplikasi/x-www-form-urlencoded")); client.print(F("Panjang Konten:")); client.println(body.length()); klien.println(); klien.print(tubuh); String response_hearder =http_resp_hearder(klien); String response_body =http_resp_body(klien); //Serial.println(respons_hearder); //Serial.println(respon_body); JSONVar body_json =JSON.parse(response_body); if(JSON.typeof(body_json) =="undefined"){ Serial.println("Input parsing gagal!"); kembali; } // Langkah 2:Tangani respons server otorisasi String device_code =""; String kode_pengguna =""; lama kedaluwarsa_in =0; int interval =0; String verifikasi_url =""; bool is_valid =benar; if(body_json.hasOwnProperty("device_code")) device_code =body_json["device_code"]; lain is_valid =salah; if(body_json.hasOwnProperty("user_code")) user_code =body_json["user_code"]; lain is_valid =salah; if(body_json.hasOwnProperty("expires_in")) expired_in =(panjang) body_json["expires_in"]; lain is_valid =salah; if(body_json.hasOwnProperty("interval")) interval =(int) body_json["interval"]; lain is_valid =salah; if(body_json.hasOwnProperty("verification_url")) verification_url =body_json["verification_url"]; lain is_valid =salah; if(is_valid){ // Langkah 3:Tampilkan kode pengguna Serial.print(F("Selanjutnya, kunjungi ")); Serial.print(verification_url); Serial.print(F(" pada desktop atau smartphone Anda dan masukkan kode ini:")); Serial.println(kode_pengguna); pesan string; msg ="{\"penyedia\":\"google\","; msg +="\"tindakan\":\"LOGIN\","; msg +="\"verification_url\":\"" +verification_url + "\","; msg +="\"user_code\":\"" + user_code + "\"}"; websocket_send(pesan); // Langkah 5:Server otorisasi polling int poll_max =expired_in / interval; badan =F("id_klien="); badan +=GOOGLE_CLIENT_ID; tubuh +=F("&klien_rahasia="); badan +=GOOGLE_CLIENT_SECRET; badan +=F("&kode="); tubuh +=kode_perangkat; body +=F("&grant_type=http://oauth.net/grant_type/device/1.0"); for(int poll_count =0; poll_count  debounceDelay) { if (membaca !=buttonState) { buttonState =membaca; if (buttonState ==HIGH) { mengembalikan true; } } } lastButtonState =membaca; return false;}pengaturan batal(){ Serial.begin(115200); while(!Serial); Phpoc.begin(PF_LOG_SPI | PF_LOG_NET); websocket_server.beginWebSocket("masuk"); Serial.print("Alamat server WebSocket :"); Serial.println(Phpoc.localIP()); pinMode(2, INPUT); cameraInit(CT_JPEG, PR_160x120, JR_640x480);}void loop(){ PhpocClient client =websocket_server.available(); if (klien) { String ws_str =klien.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 tidak valid, silahkan login kembali"); }}
login.phpPHP
Kode file ini diunggah ke PHPoC Shield. Ini menyediakan Antarmuka Pengguna Web untuk proses Login Google
PHPoC / <?echo system("uname -i")?>
G o o g l e
Masuk untuk Arduino




grove_camera.hC/C++
Pustaka untuk Kamera Grove
#define PIC_PKT_LEN 512 //panjang data setiap pembacaan, jangan atur ini terlalu besar karena ram terbatas#define CAM_ADDR 0//Jenis Warna#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//Resolusi Pratinjau#define PR_80x60 0x01#define PR_160x120 0x03// Resolusi JPEG#define JR_80x64 0x01#define JR_160x128 0x_CAM_160x120 0x_CAM_03xdefine kamera ); // 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) lanjutkan; if(resp[0] ==0xaa &&resp[1] ==(0x0e | camera_address) &&resp[2] ==0x06 &&resp[4] ==0 &&resp[5] ==0) break; }}kamera panjangGetPicture(){ char cmd[] ={ 0xaa, 0x04 | kamera_alamat, 0x01, 0x00, 0x00, 0x00 }; resp char yang tidak ditandatangani[6]; unsigned long picTotalLen =0; // panjang gambar while (1){ cameraClearRxBuf(); cameraSendCmd(cmd, 6); if(Serial.readBytes((char *)resp, 6) !=6) lanjutkan; 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) lanjutkan; if(resp[0] ==0xaa &&resp[1] ==(0x0a | camera_address) &&resp[2] ==0x01){ picTotalLen =(resp[3]) | (resp[4] <<8) | (resp[5] <<16); merusak; } } } 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 | kamera_alamat, 0x00, 0x00, 0x00, 0x00 }; Serial.setTimeout(100); if(i > 8) &0xff; kameraClearRxBuf(); cameraSendCmd(cmd, 6); int pkt_len; if(i <(jumlah_paket_kamera - 1)) pkt_len =PIC_PKT_LEN; lain pkt_len =camera_last_packet_len; uint16_t cnt =Serial.readBytes((char *)buf, pkt_len); kembali cnt; } else { cmd[4] =0xf0; cmd[5] =0xf0; cameraSendCmd(cmd, 6); } kembalikan "";}

Skema


Proses manufaktur

  1. Arduino Spybot
  2. FlickMote
  3. TV Buatan Sendiri B-Gone
  4. Jam Master
  5. Temukan Saya
  6. Arduino Power
  7. Tech-TicTacToe
  8. Arduino Quadruped
  9. Peralatan yang Dikendalikan Suara Bluetooth dengan OK Google
  10. Investasi Google untuk Mendorong Adopsi Perangkat Keamanan IoT