0.前言

基本上ESP32-CAM的测试也差不多了,下面放个合集,方便查找:
1.【好奇心驱动力】ESP32-CAM定时拍照存储到SD卡
2.【好奇心驱动力】ESP32-CAM PIN与GPIO引脚对应关系

1.实验目的

部分步骤和截图来源于官网

最开始的设想是这样的:

  • ESP32-CAM连接人体红外感应模块(PIR)
  • 检测到人体活动并拍照存储到SD卡或者云端
  • 从存储端推送到微信提醒

因为之前写了拍照存储到SD卡的代码,需要解决的主要是连接PIR和推送到微信,连接微信的思路可以参考【好奇心驱动力】ESP8266从零开始折腾记录,不同的是ESP8266是微信远程控制开关二极管,推送消息需要再查一下怎么写。

在查的过程中发现了新平台,巴法云物联网平台,文档很详细,很多示例都是现成的,例如接入天猫精灵等等,这一点比之前用的阿里云物联网平台要简单一些。从巴法云的CSDN上有一篇【esp32-cam图片上传巴法云,http协议传输post】,后续都在这个比较简单的 平台上实现的。

现在的思路是这样的:

  • ESP32-CAM连接人体红外感应模块(PIR)
  • 检测到人体活动并拍照上传到巴法云–控制台–图云
  • 由巴法云平台直接推送给绑定的微信

2.实验方法

与【好奇心驱动力】ESP8266从零开始折腾记录开始介绍的一样,但不需要SD卡,在Arduino中设置好ESP32-CAM运行环境,然后烧录程序。

接线情况:

  • 程序烧录
    主要是连接PIR,当PIR接收情况发生变化时拍照。
/** 2020-07-07* QQ交流群:824273231* 微信:19092550573* 官网https://bemfa.com  **此版本需要json库,再arduino IDE 选项栏,点击“工具”-->"管理库"-->搜索arduinojson 第一个库就是,点击安装即可*
分辨率默认配置:config.frame_size = FRAMESIZE_UXGA;
其他配置:
FRAMESIZE_UXGA (1600 x 1200)
FRAMESIZE_QVGA (320 x 240)
FRAMESIZE_CIF (352 x 288)
FRAMESIZE_VGA (640 x 480)
FRAMESIZE_SVGA (800 x 600)
FRAMESIZE_XGA (1024 x 768)
FRAMESIZE_SXGA (1280 x 1024)config.jpeg_quality = 10;(10-63)越小照片质量最好
数字越小表示质量越高,但是,如果图像质量的数字过低,尤其是在高分辨率时,可能会导致ESP32-CAM崩溃*支持发布订阅模式,当图片上传时,订阅端会自动获取图片url地址,可做图片识别,人脸识别,图像分析
*/#include <HTTPClient.h>
#include "esp_camera.h"
#include <WiFi.h>
#include <ArduinoJson.h>/*********************需要修改的地方**********************/
const char* ssid = "XXXXXXXX";           //WIFI名称
const char* password = "XXXXXXXXXX";     //WIFI密码
int capture_interval = 20*1000;        // 默认20秒上传一次,可更改(本项目是自动上传,如需条件触发上传,在需要上传的时候,调用take_send_photo()即可)
const char*  post_url = "http://images.bemfa.com/upload/v1/upimages.php"; // 默认上传地址
const char*  uid = "XXXXXXXXXXXXXXXXXXXXXXXXXX";    //用户私钥,巴法云控制台获取
const char*  topic = "XXXXXXXXX";     //图云主题名字,可在控制台新建
bool sentWechat = true;               //是否推送到微信,默认不推送,true 为推送。需要在控制台先绑定微信,不然推送不到
const char*  wechatMsg = "Somebody is here.";     //推送到微信的消息,可随意修改,修改为自己需要发送的消息
/********************************************************/bool internet_connected = false;
long current_millis;
long last_capture_millis = 0;// CAMERA_MODEL_AI_THINKER
#define PWDN_GPIO_NUM     32
#define RESET_GPIO_NUM    -1
#define XCLK_GPIO_NUM      0
#define SIOD_GPIO_NUM     26
#define SIOC_GPIO_NUM     27
#define Y9_GPIO_NUM       35
#define Y8_GPIO_NUM       34
#define Y7_GPIO_NUM       39
#define Y6_GPIO_NUM       36
#define Y5_GPIO_NUM       21
#define Y4_GPIO_NUM       19
#define Y3_GPIO_NUM       18
#define Y2_GPIO_NUM        5
#define VSYNC_GPIO_NUM    25
#define HREF_GPIO_NUM     23
#define PCLK_GPIO_NUM     22void setup()
{Serial.begin(115200);//PIR初始状态pinMode(12,INPUT);digitalWrite(12,LOW);if (init_wifi()) { // Connected to WiFiinternet_connected = true;Serial.println("Internet connected");}camera_config_t config;config.ledc_channel = LEDC_CHANNEL_0;config.ledc_timer = LEDC_TIMER_0;config.pin_d0 = Y2_GPIO_NUM;config.pin_d1 = Y3_GPIO_NUM;config.pin_d2 = Y4_GPIO_NUM;config.pin_d3 = Y5_GPIO_NUM;config.pin_d4 = Y6_GPIO_NUM;config.pin_d5 = Y7_GPIO_NUM;config.pin_d6 = Y8_GPIO_NUM;config.pin_d7 = Y9_GPIO_NUM;config.pin_xclk = XCLK_GPIO_NUM;config.pin_pclk = PCLK_GPIO_NUM;config.pin_vsync = VSYNC_GPIO_NUM;config.pin_href = HREF_GPIO_NUM;config.pin_sscb_sda = SIOD_GPIO_NUM;config.pin_sscb_scl = SIOC_GPIO_NUM;config.pin_pwdn = PWDN_GPIO_NUM;config.pin_reset = RESET_GPIO_NUM;config.xclk_freq_hz = 20000000;config.pixel_format = PIXFORMAT_JPEG;//init with high specs to pre-allocate larger buffersif (psramFound()) {config.frame_size = FRAMESIZE_UXGA;config.jpeg_quality = 10;config.fb_count = 2;} else {config.frame_size = FRAMESIZE_SVGA;config.jpeg_quality = 12;config.fb_count = 1;}// camera initesp_err_t err = esp_camera_init(&config);if (err != ESP_OK) {Serial.printf("Camera init failed with error 0x%x", err);return;}
}/********初始化WIFI*********/
bool init_wifi()
{int connAttempts = 0;Serial.println("\r\nConnecting to: " + String(ssid));WiFi.begin(ssid, password);while (WiFi.status() != WL_CONNECTED ) {delay(500);Serial.print(".");if (connAttempts > 10) return false;connAttempts++;}return true;
}/********推送图片*********/
static esp_err_t take_send_photo()
{//初始化相机并拍照Serial.println("Taking picture...");camera_fb_t * fb = NULL;fb = esp_camera_fb_get();if (!fb) {Serial.println("Camera capture failed");return ESP_FAIL;}HTTPClient http;//设置请求urlhttp.begin(post_url);//设置请求头部信息http.addHeader("Content-Type", "image/jpg");http.addHeader("Authorization", uid);http.addHeader("Authtopic", topic);if(sentWechat){ //判断是否需要推送到微信http.addHeader("Wechatmsg", wechatMsg);  //设置 http 请求头部信息}//发起请求,并获取状态码int httpResponseCode = http.POST((uint8_t *)fb->buf, fb->len);if(httpResponseCode==200){//获取post请求后的服务器响应信息,json格式String response = http.getString();  //Get the response to the requestSerial.print("Response Msg:");Serial.println(response);           // 打印服务器返回的信息//json数据解析StaticJsonDocument<200> doc;DeserializationError error = deserializeJson(doc, response);if (error) {Serial.print(F("deserializeJson() failed: "));Serial.println(error.c_str());}const char* url = doc["url"];Serial.print("Get URL:");Serial.println(url);//打印获取的URL}else{//错误请求Serial.print("Error on sending POST: ");Serial.println(httpResponseCode);}Serial.print("HTTP Response code: ");Serial.println(httpResponseCode);//清空数据esp_camera_fb_return(fb);  //回收下次再用http.end();}void loop()
{//PIR检测电平变化if(digitalRead(12)==HIGH)  {Serial.println("Somebody is here.");take_send_photo();}else  {Serial.println("Nobody.");}delay(1000);
}

3.实验结果

串口监控输出情况,能够看到PIR监控有反应,然后拍照,上传至巴法云平台,又获取到图片云端存储地址进行解析。

由巴法云直接推送到微信,省去了在阿里云物联网平台设置推送到小程序的情况。

能够看到拍照的情况也正常,可以在微信直接预览

4.问题汇总

有点时候传到云端会显示网络错误,目前不知道具体原因。

【好奇心驱动力】ESP32-CAM人体感应拍照并推送到微信相关推荐

  1. 【好奇心驱动力】ESP32-CAM定时拍照存储到SD卡

    1.实验目的 部分步骤和截图来源于官网 https://randomnerdtutorials.com/esp32-cam-take-photo-save-microsd-card/ 使用ESP32- ...

  2. 自行编译micropython固件刷入ESP32 cam,并测试拍照及图传

    一.环境准备 1.Ubuntu20.04LTS 2.ESP-IDF 3.micropython 操作步骤 1.安装基于Windows的linux子系统 适用于 Linux 的 Windows 子系统安 ...

  3. 绿色节能,怎么用ESP32 + HaaS Python怎么做一个起夜小灯?接上个“智慧路灯”案例中的留下的地下室人体感应亮灭灯

    自上个案例 "用ESP32 + HaaS Python做一个 智慧路灯 系统,稍加改造也能用在地下室哦"发布以来,数度冲上CSDN 领域热度排行榜 与 全站热度排行榜,也有朋友与我 ...

  4. stm32/esp32/cam智能安防系统远程视频监控物联网远程传输视频图像GSM短信报警

    系统实现了智能安防报警系统设计,人体感应报警,烟雾报警,GSM短信报警,同时支持远程视频监控功能,安卓端app端远程查看视频流.实物展示视频 ​​​​​​基于stm32单片机ESP32智能安防系统远程 ...

  5. 智能家居领域技术应用,微波雷达人体感应模块,雷达传感器方案

    雷达感知是一种无线感知技术,通过分析接收到的目标回波特性,提取并发现目标的位置.形状.运动特性和运动轨迹,作用类似于人类的眼睛和耳朵. 与其它传感器相比,雷达模块感应具有许多独特的优势.例如,与视觉传 ...

  6. 和12岁小同志搞创客开发:手撕代码,做一款人体感应灯

    目录 1.传感器原理 2.代码实践 机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧. 项目专栏:https://blog.csdn.net/m0_38106923/categ ...

  7. 微波人体感应模块 24G 24.125g 感应开关微波传感器模块

    ■ 模块简介 今天收到了在TB购买的 微波人体感应模块 (¥8.8),下面对它进行初步的测试. 1.模块外观 ▲ 微波人体感应模块 在做完实验之后,还是忍不住将购买的该模块拆开来看一看.热风枪打不开封 ...

  8. 点阵大屏语音感应时计——人体感应

    点阵屏还是比较耗电的,和显示的内容有关,在最小亮度的条件下,实测平均约130mA.为了节电,延长电池供电下的使用时间,引入了人体感应开关模块,在没有检测到人员活动的情况下关闭屏幕显示,单片机进入掉电模 ...

  9. 太阳能控制器原理图_太阳能人体感应壁灯的电路设计

    近几年来,因为价格平民,市场上的太阳能人体感应壁灯产品越来越流行(不了解太阳能感应灯的朋友可回顾一下我们的上一期聊聊太阳能感应灯),下面我们就来了解一下整个产品的控制电路的一个设计方案. 今天介绍的这 ...

最新文章

  1. 如何扫描和修复 Linux 磁盘错误
  2. Java学习_day009面向对象(oop):对象和类(下)
  3. gin自定义HTTP配置
  4. 【若依(ruoyi)】工作流操作SQL
  5. mysql数据库指定ip远程访问
  6. 关于××× 相关收集资料
  7. 三国佚事--巴蜀危机
  8. LapStyle - 基于拉普拉斯金字塔的高质量风格化方法 | CVPR2021
  9. C++中static关键字用法详解
  10. 华为eSight网络监控平台安装
  11. 第一行代码读书笔记___3章
  12. mysql-高级命令(1)和一些函数(悟已往之不谏,知来者之可追)
  13. uni-app uni-fab修改图标 浮窗位置 是否展开
  14. java解析ip地址_通过JAVA解析IP地址
  15. 微擎系统操作记实--公众号管理员权限设置
  16. FDTD超表面仿真详细教程,几何相位,共振相位,传播相位
  17. LeetCode-预约会议室II
  18. 【磁盘调度算法】磁盘调度模拟的设计与分析
  19. paraview高级动画功能
  20. R语言----逻辑回归各统计量解读

热门文章

  1. 打印机文件服务器主机,打印机服务器主机名称是什么原因
  2. C语言 经典例题 无重复三位数
  3. Node.js 的安装(电脑win7支持的版本)
  4. 苹果android怎么设置,iphone小圆点怎么设置调出来 自定义手势怎么用
  5. 【淘宝】从开店到运营 - 开店前期知识(天猫、淘宝店铺介绍)
  6. 解决,微信网页开发,网页授权域名数量不足问题
  7. 秀动脚本增加微信通知和多账号抢购
  8. mysql 嵌套查询性能_mysql SQL优化之嵌套查询-遁地龙卷风
  9. python中label函数_python tkinter label标签怎么使用?
  10. 李宏毅机器学习2022 HW1