(2020/05/21)
今天去鳳山國中參加ESP32-CAM的研習
法蘭斯的github:https://github.com/fustyles
今日上課的講義及相關資料:
一、認識ESP32-CAM
腳位 (以下資料取自法蘭斯)
最穩定的兩個腳位是GPIO2及GPIO13
二、ESP32-CAM簡介與開發環境建置
開啟範例檔 CamreaWebServer
CameraWebServer 範例程式,若進一步檢視該程式內容的前幾段,可以發現該程式的執行可透過三款 ESP32 板卡實現,分別是樂鑫官方推出的 ESP-WROVER-KIT、M5STACK 公司推出的 ESP32 Camera Module Development Board,以及前述安可信推出的 ESP32-CAM。在程式碼中分別寫成 CAMERA_MODEL_WROVER_KIT、CAMERA_MODEL_M5STACK_PSRAM、CAMERA_MODEL_AI_THINKER。(所以要選對才可以)
三、法蘭斯程式 (檔案可在上方下載或到附件下載)
ESP32-CAM_FaceRecognition_PAGE
ESP32-CAM_PIR_GoogleDrive
ESP32-CAM_PIR_Gmail
ESP32-CAM_PIR_GoogleSpreadsheet
ESP32-CAM_PIR_Linenotify
ESP32-CAM_PIR_Telegram (我沒有跟著做)
四、測試法蘭斯程式 (檔案可在上方下載或到附件下載)
ESP32-CAM_FaceRecognition_PAGE
程式說明:
/*
ESP32-CAM Face Recognition
Author : ChungYi Fu (Kaohsiung, Taiwan) 2020-5-21 13:00
https://www.facebook.com/francefu
http://192.168.xxx.xxx //網頁首頁管理介面
http://192.168.xxx.xxx:81/stream //取得串流影像 嵌入網頁語法 <img src="http://192.168.xxx.xxx:81/stream">
http://192.168.xxx.xxx/capture //取得影像 嵌入網頁語法 <img src="http://192.168.xxx.xxx/capture">
http://192.168.xxx.xxx/status //取得影像狀態值
//自訂指令格式 http://192.168.xxx.xxx/control?cmd=P1;P2;P3;P4;P5;P6;P7;P8;P9
http://192.168.xxx.xxx/control?facename=matched_id;name //設定姓名
//官方指令格式 http://192.168.xxx.xxx/control?var=xxx&val=xxx
http://192.168.xxx.xxx/control?var=framesize&val=value // value = 10->UXGA(1600x1200), 9->SXGA(1280x1024), 8->XGA(1024x768) ,7->SVGA(800x600), 6->VGA(640x480), 5 selected=selected->CIF(400x296), 4->QVGA(320x240), 3->HQVGA(240x176), 0->QQVGA(160x120)
http://192.168.xxx.xxx/control?var=quality&val=value // value = 10 to 63
http://192.168.xxx.xxx/control?var=brightness&val=value // value = -2 to 2
http://192.168.xxx.xxx/control?var=contrast&val=value // value = -2 to 2
http://192.168.xxx.xxx/control?var=flash&val=value // value = 0 to 255
*/
程式有中文說明,記得要輸入WIFI的帳密
監控視窗
簡化了選單,但增加了人臉辨識的功能
ESP32-CAM_PIR_GoogleDrive
程式說明:
/*
ESP32-CAM PIR人體移動感測器啟動影像上傳Google雲端硬碟
Author : ChungYi Fu (Kaohsiung, Taiwan) 2020-5-21 13:00
https://www.facebook.com/francefu
PIR人體移動感測器 -> GND, gpio13, 3.3V
如何新增Google Script
https://www.youtube.com/watch?v=f46VBqWwUuI
Google Script管理介面
https://script.google.com/home
https://script.google.com/home/executions
Google雲端硬碟
https://drive.google.com/drive/my-drive
Google Script程式碼
function doPost(e) {
var myFoldername = e.parameter.myFoldername; //取得資料夾名
var myFile = e.parameter.myFile; //取得影像
var myFilename = Utilities.formatDate(new Date(), "GMT+8", "yyyyMMddHHmmss")+"_"+e.parameter.myFilename; ////取得影像檔名
var contentType = myFile.substring(myFile.indexOf(":")+1, myFile.indexOf(";"));
var data = myFile.substring(myFile.indexOf(",")+1);
data = Utilities.base64Decode(data);
var blob = Utilities.newBlob(data, contentType, myFilename);
var folder, folders = DriveApp.getFoldersByName(myFoldername);
if (folders.hasNext()) {
folder = folders.next();
} else {
folder = DriveApp.createFolder(myFoldername);
}
var file = folder.createFile(blob);
file.setDescription("Uploaded by " + myFilename);
var imageID = file.getUrl().substring(file.getUrl().indexOf("/d/")+3,file.getUrl().indexOf("view")-1);
var imageUrl = "https://drive.google.com/uc?authuser=0&id="+imageID;
return ContentService.createTextOutput(myFoldername+"/"+myFilename+"\n"+imageUrl);
}
*/
Google Script管理介面
進入 https://script.google.com/home,並點擊【新方案】
把上面的程式複製進去
存檔
發布/ 部署為網路應用程式
從上取得網址
程式
結果
可到雲端硬碟找到拍攝的相片 (約每18秒拍1張,不會停)
ESP32-CAM_PIR_Gmail
作法同上
/*
ESP32-CAM PIR人體移動感測器啟動影像上傳Gmail發信
Author : ChungYi Fu (Kaohsiung, Taiwan) 2020-5-21 13:00
https://www.facebook.com/francefu
PIR人體移動感測器 -> GND, gpio13, 3.3V
如何新增Google Script
https://www.youtube.com/watch?v=f46VBqWwUuI
Google Script管理介面
https://script.google.com/home
https://script.google.com/home/executions
Gmail
https://mail.google.com/
Google Script程式碼
function doPost(e) {
var myRecipient = decodeURIComponent(e.parameter.myRecipient); //取得收件者
var mySubject = decodeURIComponent(e.parameter.mySubject); //取得信件標題
var myBody = new Date().toString(); //取得信件內容
var myFile = e.parameter.myFile; //取得影像
var contentType = myFile.substring(myFile.indexOf(":")+1, myFile.indexOf(";"));
var data = myFile.substring(myFile.indexOf(",")+1);
data = Utilities.base64Decode(data);
var blob = Utilities.newBlob(data, contentType, "esp32-cam.jpg");
// Send a photo as an attachment by using Gmail
var response = GmailApp.sendEmail(myRecipient, mySubject, myBody,{
attachments: [blob],
name: 'Automatic Emailer Script'
}
);
return ContentService.createTextOutput(response);
}
修改程式
結果
ESP32-CAM_PIR_GoogleSpreadsheet
作法同上
/*
ESP32-CAM PIR人體移動感測器啟動影像上傳Google試算表
Author : ChungYi Fu (Kaohsiung, Taiwan) 2020-5-21 13:00
https://www.facebook.com/francefu
PIR人體移動感測器 -> GND, gpio13, 3.3V
如何新增Google Script
https://www.youtube.com/watch?v=f46VBqWwUuI
Google Script管理介面
https://script.google.com/home
https://script.google.com/home/executions
Google Script程式碼
function doPost(e) {
var myFile = e.parameter.myFile; //取得影像檔
var myFilename = Utilities.formatDate(new Date(), "GMT", "yyyyMMddHHmmss")+"_"+e.parameter.myFilename; //取得影像檔名
var mySpreadsheet = e.parameter.mySpreadsheet; //取得試算表路徑
var myCellRow = e.parameter.myCellRow; //取得插入影像儲存格Row
var myCellCol = e.parameter.myCellCol; //取得插入影像儲存格Col
var contentType = myFile.substring(myFile.indexOf(":")+1, myFile.indexOf(";"));
var data = myFile.substring(myFile.indexOf(",")+1);
data = Utilities.base64Decode(data);
var blob = Utilities.newBlob(data, contentType, myFilename);
var ss = SpreadsheetApp.openByUrl('https://docs.google.com'+mySpreadsheet)
ss.getActiveSheet().setHiddenGridlines(true);
var sheet = ss.getSheets()[0];
sheet.insertImage(blob, myCellRow, myCellCol);
var images = sheet.getImages();
while (images.length>2) { //影像數超過兩張即刪除最早影像,僅保留最新兩張影像
images[0].remove();
}
return ContentService.createTextOutput("ok");
}
修改程式
試算表路徑
新增一個google 試算表檔案,點擊右上角的【共用】
先幫檔案命名
變更權限
ESP32-CAM_PIR_Linenotify
取得LINE的權杖,請參閲04 LINE的應用
修改程式