最简单diy基于esp32cam的物联网相机系统⑥(用上位机vs2013mfc实现wifi图传)(代码片段)

daodanjishui daodanjishui     2022-12-23     286

关键词:

第一篇:最简单DIY基于ESP32CAM的物联网相机系统①(用网页实现拍照图传)
第二篇:最简单DIY基于ESP32CAM的物联网相机系统②(在JAVAWEB服务器实现图片查看器)
第三篇:最简单DIY基于ESP32CAM的物联网相机系统③(在JSP服务器图传相片给所有客户端欣赏)
第四篇:最简单DIY基于ESP32CAM的物联网相机系统④(用调试串口助手实现串口图传)
第五篇(上):最简单DIY基于ESP32CAM的物联网相机系统⑤(用1306OLED实现WIFI黑白屏照相机)
第五篇(下):最简单DIY基于ESP32CAM的物联网相机系统⑤(用C#上位机实现串口图传)
第六篇:最简单DIY基于ESP32CAM的物联网相机系统⑥(用上位机VS2013 MFC实现WIFI图传)



前言

    daodanjishui物联网核心原创技术之最简单DIY基于ESP32CAM的物联网相机系统⑥(用上位机VS2013 MFC实现WIFI图传)。
    该专栏的第五篇博文(下):最简单DIY基于ESP32CAM的物联网相机系统④(用调试串口助手实现串口图传) 实现的是用ESP32CAM用网页控制拍摄照片通过串口传输到电脑的C#客户端显示图片,其实这样很麻烦。缺点就是:串口传输图片的速度慢,还要有线连接。
    现在本文采用的是高速WIFI的方式传输图片,ESP32通过总线采集出来的图片在内存里面直接通过高速WIFI输出到电脑MFC服务器上。那么可以通过ESP32CAM的嵌入式网页来控制拍照和传输,因为ESP32CAM开发板上没有可用的开关,所以我就还是采用一贯的风格,采用嵌入式网页来实现拍照和上传了。如果是做嵌入式图像处理的读者,我稍微推荐借鉴我这次的开源方案,这个C++代码跟C#不同的,适合老手修改达到二次开发,现在界面编程确实流行C#,因为根植于Windows系统,体积小,运行流畅,所以下载了我这个项目的源码的读者,现在可以做一个基于ESP32CAM监控摄像头监控之类的设计了,也可以学会图像传输和接收和编码等热门知识!
优酷视频演示地址:https://v.youku.com/v_show/id_XNTE2NTI1NzU4MA==.html

ESP32CAM物联网相机(用上位机VS2013 MFC实现WIFI图传)

请看看下面的效果图(为了相机稳定我加了电源控制模块输出稳定的5V电压):




一、最简单DIY基于ESP32CAM的物联网相机系统⑥(用上位机VS2013 MFC实现WIFI图传)是什么?

    这个MFC上位机确实不是我亲自写的,是一个免费开源的项目,在网上下载的,大家想免费的话自行去下载,附上免费下载链接:http://www.openedv.com/forum.php?mod=viewthread&tid=65762&highlight=%C9%E3%CF%F1%CD%B7%2B%C9%CF%CE%BB%BB%FA 代码经过我整理,完美匹配我 本博文涉及到的硬件,所以硬件配置和使用可以去参考前几篇博文的介绍。并且在源码的关键地方加上了我的注释,但是这套上位机源码是用来接收智能小车发送的图片的,后期也有可能用到我智能小车系列项目当中。现在我用来作为服务器无线WIFI接收我ESP32CAM相机拍摄的图片,还是有一定的区别的, 因为这个项目的下位机单片机代码跟前几篇类似,只不过换了封面罢了,我的代码都是一个系列的,上一个项目会与下个项目密切相关。


二、运行环境说明

1.PC软件环境

    运行这个MFC工程需要用到VS2013软件,我当时用的是VS2010这个软件来开发OpenCV和C++和C#,后面也没有更新过这个软件,所以只能硬着头皮在另一台电脑安装了VS2013,顺便说一下,这个版本的软件是真的庞大,占了不少硬盘空间。其实在网上稍微配置一下就可以实现在高版本的VS软件上使用了,不过我也懒得去弄了。该MFC客户端工程免费下载链接:http://www.openedv.com/forum.php?mod=viewthread&tid=65762&highlight=%C9%E3%CF%F1%CD%B7%2B%C9%CF%CE%BB%BB%FA

    下面顺便谈谈该开源MFC代码的故事:据我所知WIFI图传的MFC开源历史要追溯到正点原子开源论坛2016-1-5 21:04:40 那是一个神圣的日子,一个无私奉献的大神将他MFC源码奉献给这个论坛,从此之后很多复制者就把这个代码拿来卖了,我在这里不是卖,我卖的知是我原创的下位机客户端。从那个时间以后,这么多年以来 正点原子论坛或者其他论坛,也没有见如此靠谱的开源代码了!打开这个代码,不少标准的英文格式注释,看起来国人无私奉献的大神不是原创,可能是总结了几个代码模块组合起来的,总的来说是一个复杂的源码。2021年我想写一个最简单DIY基于ESP32CAM的物联网相机系统,才发现这个2016年产的开源客户端和服务端,直接拿来作为服务器验证我写的相机程序,**甚至目前我也没有完全看完该开源项目的源码,只是稍微修改了我原创的下位机ESP32CAM的原创开源代码去匹配这个源码,从而实现WIFI高速图传。**说实话啃这个代码啃得很辛苦,还不如我自己写一个服务器出来,呵呵,还真的被我写出了一个JAVA Swing GUI的图传系统出来。**下一期就开源我写的java版的图传系统。**这个免费源码的精髓就是知道它是通过Socket传输jpg格式的文件就可以了,通过修改我下位机的程序来匹配这个上位机服务器。我这个收费开源代码值钱的地方不是服务器上位机,而是我对这个上位机和下位机配合使用的说明和见解,而是我的下位机单片机用http协议接收嵌入式主页的ajax技术触发的get请求,再用http请求传输图片文件给上位机socket长链接的服务器。这个明修栈道暗度陈仓的功能多少人想写这个功能都写不出来!鲁迅笔下的“拿来主义”在我这里表现的淋漓尽致,这也是当代程序开发者高效捞金的真实写照。


2.单片机开发环境Arduino

官方摄像头源码路径是(只要读者正确安装了ESP32开发环境,这个源码可以在Arduino里面按照下面截图的方式打开的):

#include "esp_camera.h"
#include <WiFi.h>

//
// WARNING!!! PSRAM IC required for UXGA resolution and high JPEG quality
//            Ensure ESP32 Wrover Module or other board with PSRAM is selected
//            Partial images will be transmitted if image exceeds buffer size
//

// Select camera model
#define CAMERA_MODEL_WROVER_KIT // Has PSRAM
//#define CAMERA_MODEL_ESP_EYE // Has PSRAM
//#define CAMERA_MODEL_M5STACK_PSRAM // Has PSRAM
//#define CAMERA_MODEL_M5STACK_WIDE	// Has PSRAM
//#define CAMERA_MODEL_AI_THINKER // Has PSRAM
//#define CAMERA_MODEL_TTGO_T_JOURNAL // No PSRAM

#include "camera_pins.h"

const char* ssid = "*********";
const char* password = "*********";

void startCameraServer();

void setup() 
  Serial.begin(115200);
  Serial.setDebugOutput(true);
  Serial.println();

  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;
  
  // if PSRAM IC present, init with UXGA resolution and higher JPEG quality
  //                      for larger pre-allocated frame buffer.
  if(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;
  

#if defined(CAMERA_MODEL_ESP_EYE)
  pinMode(13, INPUT_PULLUP);
  pinMode(14, INPUT_PULLUP);
#endif

  // camera init
  esp_err_t err = esp_camera_init(&config);
  if (err != ESP_OK) 
    Serial.printf("Camera init failed with error 0x%x", err);
    return;
  

  sensor_t * s = esp_camera_sensor_get();
  // initial sensors are flipped vertically and colors are a bit saturated
  if (s->id.PID == OV3660_PID) 
    s->set_vflip(s, 1); // flip it back
    s->set_brightness(s, 1); // up the brightness just a bit
    s->set_saturation(s, -2); // lower the saturation
  
  // drop down frame size for higher initial frame rate
  s->set_framesize(s, FRAMESIZE_QVGA);

#if defined(CAMERA_MODEL_M5STACK_WIDE)
  s->set_vflip(s, 1);
  s->set_hmirror(s, 1);
#endif

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) 
    delay(500);
    Serial.print(".");
  
  Serial.println("");
  Serial.println("WiFi connected");

  startCameraServer();

  Serial.print("Camera Ready! Use 'http://");
  Serial.print(WiFi.localIP());
  Serial.println("' to connect");


void loop() 
  // put your main code here, to run repeatedly:
  delay(10000);

3.修改上面2的源码变成自己的源码

需要全部工程源码的请到最后链接去下载了。想要自己写出来,不简单的,连MFC里面的C++代码看得都犯迷糊了,不信读者可以下载开源的MFC服务器看看。看看能不能写一个下位机来匹配这个服务器完成图传。现在很多人都在说MFC C++技术是30年前流行用的技术,现在都用C#了,没有必要去啃C++这个硬骨头,确实我看这个C++代码有点头疼,不过实现要实现的功能,一点问题都没有的。对个人而言,我反而喜欢用java去写一些简单的界面,复杂的界面我交给jsp网页去实现,现在能联网的界面一般都用网页显示了。这也是物联网发展的潮流!据说鸿蒙系统的GUI是用JAVAScript来写的,我相机的主页也采用了JAVAScript触发拍照和图传,所以到这里可以看到未来是脚本的天下。


三、运行与调试

概括:用户登录CAM相机的主页,通过相机的主页,输入服务器的IP地址和图传指令,点击发送按钮,就可以控制相机拍照上传图片给MFC图传服务器,服务器收到图片之后就直接显示出来。

(1)开机上电,相机连上无线路由器,根据串口打印相机的IP信息,启动MFC上位机打开其服务器的功能,生成服务器IP信息,根据相机IP信息用浏览器登录相机的主页,输入服务器的IP地址,点击send拍摄一张图片并发送给服务器。输入接收图片服务器的IP地址之后点击send按钮 就可以看到红色的 时间变化了,说明拍照上传成功了。如果是失败也会显示出来的,读者在这里可以学习到嵌入式服务器反馈技术,这是官方程序没有的技术。


MFC服务器:IP地址是192.168.1.103 端口号是8080,端口号是自己输入的,所以我输入跟下位机匹配的端口号,开启的是服务端的模式,让客户端CAM连上就可以传图了。
相机单片机的IP是192.168.104端口号是8081
注意:前提是所有联网的设备都需要在同一个局域网实现,否则玩完!

(2)WIFI通信成功之后会在MFC的界面看到下面的图像:

(3)看看MFC调试的界面打印的信息,知道图传工作完成。
原来官方历程的的功能保留供买家测试:IP地址是192.168.1.104 端口是80,拍照和看视频都OK,买家可以在这里找到官方历程的味道。

调试到此结束,根据结果可以满足博文提出的要求。


总结

总结: 在这个项目,读者可以学到很多技术,下载源码这点付出对于这些核心技术来说不值一提,学核心技术不花钱是有可能的,不过可能性不大,收费开源对得起我付出的努力编写此次博文,也对得起我深夜编码付出的劳动。下一期将会推出全网独家第一个ESP32CAM JAVA SWing GUI 技术编写的java版图传服务器,全部逻辑由我daodanjishui全部完成,历时两周时间研发成功,代码精妙无比,后期会加上远程MQTT控制和图像处理,扩展功能水到渠成,敬请期待。

代码工程下载链接:https://www.cirmall.com/circuit/24701/
点我直接跳转

最简单diy基于esp32cam的物联网相机系统②(在javaweb服务器实现图片查看器)

最简单DIY基于ESP32CAM的物联网相机系统系列文章目录第一篇:最简单DIY基于ESP32CAM的物联网相机系统①(用网页实现拍照图传)第二篇:最简单DIY基于ESP32CAM的物联网相机系统②(在JAVAWEB服务器实现图片查看器&... 查看详情

最简单diy基于esp8266的智能彩灯⑥(android开发通过wifi控制彩灯实现表白神器)(代码片段)

ESP8266和ESP32智能彩灯开发系列文章目录第一篇:最简单DIY基于ESP8266的智能彩灯①(在网页用按钮点亮普通RGB灯)第二篇:最简单DIY基于ESP8266的智能彩灯②(在网页用按键和滑动条控制RGB灯)第三篇:... 查看详情

python+esp32diy炫酷的物联网远程机械臂(代码片段)

来这里发现更多创意案例HaaS开发框架HaaS积木方案,赋能生态开发者,让您快速找到自己需要的解决方案,硬件主板与外设,以及各种应用组件。https://haas.iot.aliyun.com/solution/1、简介1.1、背景  机器人和人工智能... 查看详情

立创eda开源推荐09期基于esp32的物联网时钟

...-zhong简介:立创EDA&高校联合实验室培训用例:基于ESP-C3-12F物联网时钟设计1、项目介绍通过项目的学习,可以学到以下内容:学习根据数据手册设计电路的能力& 查看详情

esp32cam拍照post上传(代码片段)

....简介ESP32-CAM是一款低成本物联网解决方案的开发板,基于ESP32模块开发的最小系统物联网产品,具有小体积,可板载摄像头的优势,适合快速原型搭建,DIY项目开发,物联网入门学习等。该产品集成了Wi-Fi... 查看详情

esp32cam释放内存

...余量的问题;除非我们深入了解用例,否则这个问题没有简单的答案。但是,当开发人员了解有关内存布局,系统要求和常见优化方法的详细信息时,就会发现ESP32可以适应各种有趣的应用程序用例。 查看详情

esp32-cam使用micropython进行开发-使用图形化工具thonny(mac)(代码片段)

...作,尺寸仅为2740.54.5mm。ESP32-CAM可广泛应用于各种物联网场合,适用于家庭智能设备、工业无线控制、无线监控、人脸识别以及其它物联网应用,是物联网应用的理想解决方案。ESP32-CAM采用DIP封装,直接插上底板... 查看详情

GCP 中的物联网管道

】GCP中的物联网管道【英文标题】:IoTpipelineinGCP【发布时间】:2021-04-1305:53:32【问题描述】:我在GCP中有一个IoT管道,其结构如下:IoTCore->Pub/Sub->Dataflow->BigQuery我正在使用esp32设备发送数据,每2秒发送一次新数据。目前... 查看详情

自行编译micropython固件刷入esp32cam,并测试拍照及图传(代码片段)

...、环境准备1.Ubuntu20.04LTS2.ESP-IDF3.micropython操作步骤1.安装基于Windows的linux子系统适用于Linux的Windows子系统安装指南(Windows10)注意:如果安装Ubuntu20.04LTS,需使用wsl,不要安装wsl22.编译环境准备(基于Ubuntu20.04LTS,别的... 查看详情

物联网毕设(基于stm32的智能家居系统)

第一节模块介绍文章目录目录第一节模块介绍文章目录前言一、云平台选择1Oennet(移动云平台)2 连接移动云平台二、硬件选择1.STM32F103ZET6芯片2.STM32F103ZET6简介3.ESP8266无线网模块三、软件选择1.Android开发好处四、程序流... 查看详情

目前见过功能最完整的物联网系统项目,代码结构清晰,第一次使用就有点上头

...0c;代码结构清晰。值得推荐。项目介绍本项目系统是一个基于SpringCloud的开源的、分布式的物联网(IOT)平台,用于快速开发物联网项目和管理物联设备,是 查看详情

基于esp32-cam做一个智能家居监控(代码片段)

...址。 成功运行,我们也可以在APP端设计个软件。我简单的设计了一下。代码如下: MainActivity:packagecom.huangfushi.mjpeg_1;importandroid.app.ProgressDialog;importandroid.content.Context;importandroid.content.DialogInter 查看详情

esp32cam+esp8266用micropython实现人脸识别开门(代码片段)

...了编译micropython的编译和图传,这篇记录一下我自己DIY人脸识别门锁的经验。为什么用esp8266,因为比esp32便宜几块钱,批发甚至只要6块,哈哈由于micropython我也刚上手,也是学一点记录一点,当帮大家提前... 查看详情

一种基于区块链的物联网架构设计

摘要目前已有一些学者基于区块链技术尝试搭建物联网系统,但基于区块链技术搭建的应用对计算资源要求较高,这些物联网系统往往无法良好地契合实际应用环境。为了降低基于区块链技术的物联网系统的复杂度,更契合实际... 查看详情

基于图模型的物联网系统-软件组件与程序编排

        在基于图模型的物联网系统中,信息模型描述了各个物模型以及它们的相互关系。看上去它们都是静态的数据模型。那么,物联网系统的程序如何建模,并且执行呢?本博文讨论这个问题。物联网程序... 查看详情

采用esp8266+mqtt+云服务器+mysql的物联网温湿度检测系统(代码片段)

文章目录前言一、项目所使用软硬件1.硬件部分2.软件部分二、软件安装与使用1.安装宝塔2.安装EMQX3.使用宝塔与Navicat15forMySQL建立数据库4.使用EMQX将数据提取出来转存至MySQL三、硬件接线与代码1.接线部分2.核心代码四、项目效果1.... 查看详情

esp32diy机器狗

...库、微信小程序、人工智能、嵌入式、Linux、Unix、QT、物联网、算法导论、大数据等资料原文链接点击查看所有使用到的资料,均可在文末下载今天给大家带 查看详情

esp32cam用电池供电引脚怎么连接

参考技术A1、在7脚接外接电源正极,再接电源负极接地。2、设计开关按钮,控制外接电源对板子供电。3、将外接的电压转换为自己系统主控芯片. 查看详情