精华内容
下载资源
问答
  • 好消息的是,乐鑫科技推出的ESP32芯片能满足图传的需求,某宝基于该芯片出售的ESP32-cam摄像头模块能满足图传的需求,最低价格26块能买到手,性价比相当高,ESP32的运行速度和wifi速度都比ESP8266高。26块集成了ESP...
  • Cam802是灵卡技术开发的针对WiFi无线图传系统的手机软件客户端。 Cam802支持的模块型号类型有:LC329/LC328/LC350/LC320等。 Cam802可以在用户Android设备上显示LC系列图传模块采集并传输到设备端的实时低延迟画面...
  • 第一篇:ESP32-CAM高性价比WIFI图传方案快速入门教程 文章目录ESP32-CAM ArduinoIDE开发系列文章目录前言一、高性价比WIFI图传方案是什么?二、搭建Arduino IDE开发环境 编写第一个图传程序1.观看搭建开发环境视频...

    ESP32-CAM ArduinoIDE开发系列文章目录


    第一篇:ESP32-CAM高性价比WIFI图传方案快速入门教程



    前言

    daodanjishui物联网核心原创技术之ESP32 Arduino IDE开发。


    一、高性价比WIFI图传方案是什么?

        目前基于图像处理使用市场上监控摄像头二次开发的案例很多,包括海康威视萤石开源摄像头;还有使用自带FIFO的OV7725或者OV7670摄像头模块结合stm32进行图传;还有OPENMV+OV7725的图像处理方案;还有一种使用MIPS架构的路由器芯片例如RT5350加免驱MPJG摄像头方案。每一种方案价格都要达到50块以上,因为除了购买摄像头之外还有购买单片机,成本降不下来。
        好消息的是,乐鑫科技推出的ESP32芯片能满足图传的需求,某宝基于该芯片出售的ESP32-cam摄像头模块能满足图传的需求,最低价格26块能买到手,性价比相当高,ESP32的运行速度和wifi速度都比ESP8266高。26块集成了ESP32最小系统板和OV2640摄像头和板载蓝牙wifi天线,买了也不亏,一个好点的USB摄像头都不只这个价格了!为啥很少人使用呢?原因是入门比较麻烦。要是使用乐鑫idf去搭建开发图传,很麻烦,很难成功。
        后期将会使用这个摄像头推出最简单DIY基于ESP32CAM的物联网相机系统 敬请期待!

    国内某个测评网有详细简介:https://post.smzdm.com/p/amm03d0d/
    点我跳转

    详细管脚图是:
    在这里插入图片描述

    硬件结构图:
    在这里插入图片描述

    二、搭建Arduino IDE开发环境 编写第一个图传程序

        该模块在某宝很多家店铺有售,至于代工厂估计有很多家,但是根据原理图就那么多IO口,资料都是通用的。
        经过我自己个人努力,半年时间内掌握了ESP32图传技术,采用的是Arduino开发环境开发,很多情况下使用库函数来快速实现图传的功能。搭建开发环境也花了不少时间,后面根据一个教程搭建成功了。

    1.观看搭建开发环境视频教程

    搭建视频链接:https://pan.baidu.com/s/1_xYw-Mg3LPb5vqMuVgiD2A
    点我跳转
    提取码:qdl2

    搭建软件及素材:链接:https://pan.baidu.com/s/1eIES_hDWNgr5lZD4akP9Jw
    点我跳转
    提取码:zrwu

    2.下载我修改过的源码

        下面是我根据搭建环境自带的图传源码修改裁剪后的图传源码(在最后免费下载),该源码是我将三四个源码文件裁剪修改合成一个源码文件,实现了图传功能,代码精简利于阅读和学习,先进行配置和运行的说明:
    源码下载地址

    3.根据搭建开发环境视频教程安装Arduino IED FOR ESP32

    视频中搭建环境的资料可能比较陈旧,如果安装包失效,或者出现安装失败可以尝试下:
    http://www.kpcb.org.cn/h-nd-288.html#_np=136_468
    点我跳转

    如果对ESP32开发感兴趣的读者可以看看下面的那本书,虽然我已经入门,但是还是购买了这本书作为开发的参考。特别是搭建环境失败的读者,仔细看看下面三个截图,肯定会找到突破口的。

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    4.打开源码工程

    (1)整个工程就是一个9kb的源码,名字叫websocet.ino文件,然后修改热点的名称和密码,如下图所示:
    在这里插入图片描述
    然后你还要配置一下开发板,这个步骤一定不能出问题,如下图。
    在这里插入图片描述
    到这里你会看到“端口”是灰色的(如上图所示),说明你的单片机没有通过USB转TTL模块连上你的电脑,所以你需要连接好才能让这个端口显示出来,怎么连呢?后面有详细介绍,不连串口是不会影响你的编译的,只会影响你串口下载程序到单片机上,如下图所示。
    在这里插入图片描述

    点击编译按钮
    在这里插入图片描述
    正在编译,如下图所示:
    在这里插入图片描述

    直到编译完成,说明你程序没有错,可以下载到单片机了,如果有错,就必须修改到正确才能下载程序,如下图所示,3MB大小的程序存储空间:
    在这里插入图片描述

    (2)找一个CH340的USB转TTL电平的模块,某宝几块钱有卖的,按照下图接上模块:
    在这里插入图片描述
    右边的模块就是USB转TTL模块,主要是用来下载程序和串口调试,左边接ESP32CAM模块,右边接电脑。

    个人建议给cam模块供电压5V在第一张原理图左下角的端口供电,免得电源不足,不要接错了!

    UoR就是RX端

    UOT是TX端

    这两个端跟CH340的RX、TX交叉连接,如图示

    将IO0端口与GND连接上之后就可以马上下载程序了(必须要注意,下载完毕记得拔除这个线才能运行程序,否则一直是下载程序的模式)

    5.下载程序

    用Arduino下载程序,如下图所示:(如果下载过程中出现失败,可以尝试按下模块的RST按键)
    在这里插入图片描述

    等待完成,如上图所示:
    在这里插入图片描述
    下载完成,如上图所示。

    6.运行与调试

    这个时候要把GPIO0的线拔除,按重启键就可以运行代码了,否则不行。先打开“串口监视器”如下图所示:
    在这里插入图片描述
    按下单片机的重启键“RST”,查看串口打印信息,如下图所示:
    在这里插入图片描述
    在监视器看到连上了无线路由器,从图上看出,RST按下时,第一次程序运行不对,第二次运行正确了,打印出IP地址。右下角显示有设备连上热点。多试试几次就能成功的!
    那么就可以在浏览器验证图传效果了,打开谷歌浏览器,输入网址串口打印的网址:172.25.139.2(个人具体IP看打印为准)就可以看到摄像头采集的视频流,相当流畅,如下图所示:(其他浏览器可能失败,由于摄像前面的保护膜没有撕掉,所以有点模糊,视频还是很流畅的。):
    在这里插入图片描述
    到此为止,调试结束。
    代码如下(示例):

    #include "esp_camera.h"
    #include <WiFi.h>
    #include "esp_timer.h"
    #include "img_converters.h"
    #include "Arduino.h"
    #include "fb_gfx.h"
    #include "soc/soc.h" //disable brownout problems
    #include "soc/rtc_cntl_reg.h"  //disable brownout problems
    #include "esp_http_server.h"
    //Replace with your network credentials
    const char* ssid = "路由器无线wifi名称";
    const char* password = "路由器密码";
    #define PART_BOUNDARY "123456789000000000000987654321"
    
    // This project was tested with the AI Thinker Model, M5STACK PSRAM Model and M5STACK WITHOUT PSRAM
    #define CAMERA_MODEL_AI_THINKER
    //#define CAMERA_MODEL_M5STACK_PSRAM
    //#define CAMERA_MODEL_M5STACK_WITHOUT_PSRAM
    
    // Not tested with this model
    //#define CAMERA_MODEL_WROVER_KIT
    
    #if defined(CAMERA_MODEL_WROVER_KIT)
      #define PWDN_GPIO_NUM    -1
      #define RESET_GPIO_NUM   -1
      #define XCLK_GPIO_NUM    21
      #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      19
      #define Y4_GPIO_NUM      18
      #define Y3_GPIO_NUM       5
      #define Y2_GPIO_NUM       4
      #define VSYNC_GPIO_NUM   25
      #define HREF_GPIO_NUM    23
      #define PCLK_GPIO_NUM    22
    
    #elif defined(CAMERA_MODEL_M5STACK_PSRAM)
      #define PWDN_GPIO_NUM     -1
      #define RESET_GPIO_NUM    15
      #define XCLK_GPIO_NUM     27
      #define SIOD_GPIO_NUM     25
      #define SIOC_GPIO_NUM     23
      
      #define Y9_GPIO_NUM       19
      #define Y8_GPIO_NUM       36
      #define Y7_GPIO_NUM       18
      #define Y6_GPIO_NUM       39
      #define Y5_GPIO_NUM        5
      #define Y4_GPIO_NUM       34
      #define Y3_GPIO_NUM       35
      #define Y2_GPIO_NUM       32
      #define VSYNC_GPIO_NUM    22
      #define HREF_GPIO_NUM     26
      #define PCLK_GPIO_NUM     21
    
    #elif defined(CAMERA_MODEL_M5STACK_WITHOUT_PSRAM)
      #define PWDN_GPIO_NUM     -1
      #define RESET_GPIO_NUM    15
      #define XCLK_GPIO_NUM     27
      #define SIOD_GPIO_NUM     25
      #define SIOC_GPIO_NUM     23
      
      #define Y9_GPIO_NUM       19
      #define Y8_GPIO_NUM       36
      #define Y7_GPIO_NUM       18
      #define Y6_GPIO_NUM       39
      #define Y5_GPIO_NUM        5
      #define Y4_GPIO_NUM       34
      #define Y3_GPIO_NUM       35
      #define Y2_GPIO_NUM       17
      #define VSYNC_GPIO_NUM    22
      #define HREF_GPIO_NUM     26
      #define PCLK_GPIO_NUM     21
    
    #elif defined(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     22
    #else
      #error "Camera model not selected"
    #endif
    
    static const char* _STREAM_CONTENT_TYPE = "multipart/x-mixed-replace;boundary=" PART_BOUNDARY;
    static const char* _STREAM_BOUNDARY = "\r\n--" PART_BOUNDARY "\r\n";
    static const char* _STREAM_PART = "Content-Type: image/jpeg\r\nContent-Length: %u\r\n\r\n";
    
    httpd_handle_t stream_httpd = NULL;
    
    static esp_err_t stream_handler(httpd_req_t *req){
      camera_fb_t * fb = NULL;
      esp_err_t res = ESP_OK;
      size_t _jpg_buf_len = 0;
      uint8_t * _jpg_buf = NULL;
      char * part_buf[64];
    
      res = httpd_resp_set_type(req, _STREAM_CONTENT_TYPE);
      if(res != ESP_OK){
        return res;
      }
    
      while(true){
        fb = esp_camera_fb_get();
        if (!fb) {
          Serial.println("Camera capture failed");
          res = ESP_FAIL;
        } else {
          
            if(fb->format != PIXFORMAT_JPEG){
               Serial.println("fb->format != PIXFORMAT_JPEG");
              bool jpeg_converted = frame2jpg(fb, 80, &_jpg_buf, &_jpg_buf_len);
              esp_camera_fb_return(fb);
              fb = NULL;
              if(!jpeg_converted){
                Serial.println("JPEG compression failed");
                res = ESP_FAIL;
              }
            } else {
               Serial.println("fb->format == PIXFORMAT_JPEG");
                Serial.println((char*)fb->buf);
              _jpg_buf_len = fb->len;
              _jpg_buf = fb->buf;
            }
          }
        
        if(res == ESP_OK){
          size_t hlen = snprintf((char *)part_buf, 64, _STREAM_PART, _jpg_buf_len);
          res = httpd_resp_send_chunk(req, (const char *)part_buf, hlen);
        }
        if(res == ESP_OK){
          res = httpd_resp_send_chunk(req, (const char *)_jpg_buf, _jpg_buf_len);
         
        }
        if(res == ESP_OK){
          res = httpd_resp_send_chunk(req, _STREAM_BOUNDARY, strlen(_STREAM_BOUNDARY));
        }
        if(fb){
          esp_camera_fb_return(fb);
          fb = NULL;
          _jpg_buf = NULL;
        } else if(_jpg_buf){
          free(_jpg_buf);
          _jpg_buf = NULL;
        }
        if(res != ESP_OK){
          break;
        }
        Serial.printf("MJPG: %uB\n",(uint32_t)(_jpg_buf_len));
      }
      return res;
    }
    
    void startCameraServer(){
      httpd_config_t config = HTTPD_DEFAULT_CONFIG();
      config.server_port = 80;
    
      httpd_uri_t index_uri = {
        .uri       = "/",
        .method    = HTTP_GET,
        .handler   = stream_handler,
        .user_ctx  = NULL
      };
      
      //Serial.printf("Starting web server on port: '%d'\n", config.server_port);
      if (httpd_start(&stream_httpd, &config) == ESP_OK) {
        httpd_register_uri_handler(stream_httpd, &index_uri);
      }
    }
    
    void setup() {
      //WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); //disable brownout detector
     
      Serial.begin(115200);
      
      
      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; 
     // config.frame_size = FRAMESIZE_QQVGA;
     config.frame_size = FRAMESIZE_QVGA;
      config.jpeg_quality = 10;
      config.fb_count = 2;
    
      
      // 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;
      }
     
      // Wi-Fi connection
      WiFi.begin(ssid, password);
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
      Serial.println("");
      Serial.println("WiFi connected");
      
      Serial.print("Camera Stream Ready! Go to: http://");
      Serial.print(WiFi.localIP());
     
      // Start streaming web server
      startCameraServer();
    
    }
    
    void loop() {
    }
    

    其实读者也可以用Arduino新建工程,把我这个代码拷贝到工程里面编译即可,代码就一个文件,非常方便。有些读者可能会说,博主你怎么不解释一下代码的工作原理呢?因为这个是入门教程,不需要涉及复杂的代码研究,如果想深入理解可以去Arduino库看看源码,或者你就需要关注我后期系列的文章了。用Arduino开发说白了就是忽略代码的细节用加载库调用函数的方式解决问题!这样是Arduino的优势所在。
        如果读者硬要研究底层摄像头驱动的代码,我建议读者去研究linux一个开源程序Mjpg-Streamer,这个代码我整整读了三年,还没有完全读懂,是一个团队写的,可以部署在路由器、ARM、Linux-PC等等平台的开源源码。市面上一些无人机的图传摄像头方案就用了该方案,后期我会出该源码的OpenWRT路由器应用程序开发,敬请期待。


    总结

        该教程演示了用ESP32作为一个STA模式连上路由器或者笔记本热点,在同一个局域网环境下用浏览器登录ESP32的IP地址就可以收看ESP32摄像头采集下来的图像信息。后期会陆续发布根据此源码升级成视频监控小车、视频监控智能控制摄像头、视频监控系统和手机客户端图传、stm单片机图传接收、机器人视觉人脸签到系统、远程MQTT图传手机app接收、局域网javaweb显示图传、等等项目,敬请期待。

    展开全文
  • 第一篇:最简单DIY基于ESP32CAM的物联网相机系统①(用网页实现拍照图传) 第二篇:最简单DIY基于...第五篇(上):最简单DIY基于ESP32CAM的物联网相机系统⑤(用1306OLED实现WIFI黑白屏照相机) 第五篇(下):最简单DIY

    第一篇:最简单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/
    点我直接跳转

    展开全文
  • 在上一期:高性价比WIFI图传方案快速入门教程 我们可以看到确实这个图传模块可以实现高性价比的图传方案,但是问题又来了,上一期的wifi摄像头连上的是局域网的热点,并且局域网的热点和密码是写死在程序里面的,所以...
  • BOJINGnet_MT7688_WIFI图传模块用户手册 版本: v1.0 制造商:深圳市博晶网络科技有限公司 地址:深圳市宝安区西乡街道西乡大道288号宝源华丰总部经济大厦C座4楼3A11室 目录 1、功能简介:... 3 2、接口...

                                              BOJINGnet_MT7688_WIFI图传模块用户手册

     

    版本: v1.0

    制造商:深圳市博晶网络科技有限公司

    地址:深圳市宝安区西乡街道西乡大道288号宝源华丰总部经济大厦C座4楼3A11室

     

     

    目录

    1、功能简介:... 3

    2、接口规格:... 3

    3、接口定义:... 3

    4、使用说明:... 4

     

    1、功能简介:

    WiFi图传模块基于芯片组MT7688

    WiFi传输速率150Mbps 支持802.11b/g/n支持AP/sta模式可以连接WiFi路由器,有效空旷传输距离20米;

    实现WiFiUSB,USBWiFi

    480Mbps的高速USB 2.0 Host接口,可接入USB uvc摄像头或内窥镜视频格式要求MJPG,传输时延300ms

    与手机app  HiFiCAM配套使用,支持拍照与录制视频;

    与电脑端VLC media player可以查看实时视频;

    超小尺寸L53mmxW35mmxH4mm

    内置恢复出厂设置按键;

    内置WiFi天线-陶瓷片式天线;

    Micro接口设计,供电与接摄像头设备分离;

    支持串口数据透传,3v3  ttl接口;

    多种应用场景:USBWiFi内窥镜、工业USB摄像头转WiFiUSBWiFi演讲稿制作仪、高拍仪、汽修、美容等等;

    2接口规格:

    类型

    电压

    电流

    备注

    Power

    5v0

    Max  1000 mA

    输入 Micro

    Cam

    5v0

    Max  500mA

    输出 Micro

    3接口定义:

     

    名称

    描述

    备注

    G

    GND

    接地输出

    R

    串口数据接收

    TTL电平 3v3

    T

    串口数据发送

    TTL电平 3v3

    V

    3V3

    电源输出max100mA

     

    4使用说明:

    4.1用手机查看实时视频

    @手机IOSandroid可在商城搜索HiFiCam并下载安装到手机,安卓下载链接http://www.bojingnet.com/index.php?id=3375

     

    @USB摄像头或USB内窥镜接到图传模块并通电如下图所示

    @通电20秒左右后打开手机WiFi连接以BOJINGnet-xxxxx的热点,初始密码12345678

    @打开手机HiFiCam APPApp将自动连接加载视频数据并显示当前图像

    4.2用电脑VLC media player查看实时视频

     

    @首先电脑连接BOJINGnet-xxxxx的热点,初始密码12345678在电脑端安装VLC media player播放器然后打开VLC播放器

     

    @点击媒体选项卡

     

    @点击打开网络串流并输入http://192.168.8.1:8080

     

    @点击播放即可以查看实时视频(注意:VLC播放器解码视频有缓存图像会有延时属于正常现象

     

    展开全文
  • 其实除了需要视频需要压缩输外,其实还有wifi路由模图传的方式实现—wifi内窥镜。 很多80后和90后小时候,都玩过一种叫纸上动画。当一个个图画连贯性快速在眼前略过的时候,我们所看到的就会是一个会动的动画。...

    说起wifi视频传输大家是否第一时间想到需要带有视频压缩SOC的核心模块,庞大的系统,复杂的远程服务器等等,超额的预算成本,让很多人都望尘莫及。其实除了需要视频需要压缩输外,其实还有wifi路由模图传的方式实现—wifi内窥镜。

    很多80后和90后小时候,都玩过一种叫纸上动画。当一个个图画连贯性快速在眼前略过的时候,我们所看到的就会是一个会动的动画。wifi路由视频的原理也是如此,在同一个局域网内,wifi路由模块经过USB摄像头读取到图片快速地连贯性的传输到手机APP或者电脑端的时候,我们看到的就是一个视频的形态。

    在小编借用BOJINGnet型号BOJINGnet_115聊聊低成本,性价比好的一款wifi内窥镜图传模块。

    BOJINGnet_115WiFi图传模块基于芯片组MT7688;
    WiFi传输速率150Mbps 支持802.11b/g/n支持AP/sta模式可以连接WiFi路由器,有效空旷传输距离20米;
    实现WiFi转USB,USB转WiFi;
    480Mbps的高速USB 2.0 Host接口,可接入USB uvc摄像头或内窥镜视频格式要求MJPG,传输时延300ms;
    与手机app HiFiCAM配套使用,支持拍照与录制视频;
    与电脑端VLC media player可以查看实时视频;
    超小尺寸L48mmxW35mmxH4mm;
    内置恢复出厂设置按键;
    内置WiFi天线-陶瓷片式天线;
    ◆双Micro接口设计,供电与接摄像头设备分离;

    支持串口数据透传,3v3 ttl接口;
    多种应用场景:USB转WiFi内窥镜、工业USB摄像头转WiFi、汽修、管道维修、wifi图传、wifi视频传输、USB转WiFi演讲稿制作仪、高拍仪、汽修、美容等等;

     

    展开全文
  • SKW77是一款大功率wifi路由器方案模块。该模块兼容802.11b/g/n,射频采用2x2 MIMO,最高速率可达300Mbps。模块内部集成了双路PA和LNA,每路发射输出功率可达+28dBm以上。空旷地带有效数据传输距离可达1000米以上,...
  • WIFI航模图传模块

    千次阅读 2021-03-17 19:32:43
    看下面这一类模块,包括板子和摄像头两部分,一般都是这种固定信号线数的摄像头,所以可以根据不同需要来给板子配不同级别的摄像头。 一款WIFI图传模块
  • WiFi技术是热门传输技术,是一项用于实现电子设备之间数据交换以及互联网接入的无线通讯技术。WiFi频段为ISM频段,市面上的一般设备都可以进行连接,例如电脑、电视、手机、平板、智能机顶盒等。 WiFi技术无线...
  • wifi只是无人机图传的方法之一

    千次阅读 2020-06-23 15:31:32
    还有图传和数传的区别是什么 wifi模块是否用到openwrt? https://zhidao.baidu.com/question/1929402787261883147.html
  • WIFI无线传输,图传。视频提节

    千次阅读 2018-01-29 09:21:08
    有空讨论一下,短距WIFI(100M左右)无线传输视频调节遇到的问题总结: 现在无线视频传输分两大类:VGA(640*480)720P(720*1080)。前者传输带宽一般有200K左右就足够。像普联和秘联的WIFI都可以支撑到100左右。...
  • 多媒体时代,用户对音视频的展现技术以及便捷性有了更高的需求,... 云望物联专注于无线物联技术,其创新的LR-WiFi技术(远距离WiFi)解决了低成本,高性能,高速率,远距离的无线通信难题,为物联网重塑WiFi传输边界。
  • WifiDirect (WIFIP2P) 最全最详细,Android(Java)源码,加编译好多apk,适用于Android6.0~~Android P
  • 方便在窄带上实现高清晰的图像传输 ■支持各种PAL、NTSC制式模拟视频输入 ■支持ONVIF协议,可对接海康、大华、美电贝尔、雄迈等NVR ■支持手机监看 ■支持WIFI:热点和STA模式 四、技术参数: 雷卯专心为您解决防雷...
  • wifi模块的配置

    2018-08-18 16:40:03
    esp8266wifi在市面的用途越来越广,现在我上传这些资料供初学者参考
  • 69028+ESP32-CAM摄像头开发板+WiFi+蓝牙模块ESP32串口转WiFi物联网.zip
  • 基于wifibroadcast的无人机数字图传

    千次阅读 2020-03-07 12:16:13
    基于Wifibroadcast的图传 ctime:2020-02-28 14:46:17 +0900|1582868777 标签(空格分隔): 技术 兴趣 去年就关注的项目,一直没时间仔细看一下它的原理,这两天总算有空看了一下。 这个图传的主要优点有: 便宜,...
  • 分享一个基于STM32F407的WIFI视频传输PCB设计,包含了STM32F407单片机系统,wifi模块电路,TFTLCD屏幕电路,摄像头接口电路,
  • 通常数传2.4g,图传5.8g手机有一种方式直连飞机,那就是wifi。无人机发wifi出来,手机连上它,然后传输图像或者指令。遥控器的性能更强,距离更远,有时候数传和图传都是先传到遥控器上,然后再用数据线转接给手机。...
  • 包含主机和从机代码,从机使用OV7725以及侵蚀进行颜色识别,计算坐标控制云台追踪,同时将目标通过WIFI模块传送到主机进行显示与报警
  • 2、为方便控制操作无人机及远距离接收实时航拍画面,在辖区内制高点架设无线遥控天线及图传接收天线,大大提高无人机的操控距离及无线图传距离; 3、无人机拍摄的画面无线传输至辖区内制高点,然后通过光缆等专网...
  • WIFI 芯片ESP8266 开发视频教程(提高篇) 本套教程分为三部分 基础篇,提高篇,实战篇,由于CSDN上传文件限制,已经上传到百度云 基础篇-1 AT指令指导 基础篇-2 烧录和云升级 ****************************** ...
  • 插入手机SIM卡即可实现无限距离高清图传和遥控。配套安卓手机端APP,可以手机触屏操控,也可以外接USB手柄操控,还可以用方向盘+油门刹车踏板进行控制。 本模块支持6路gpio控制信号输出(可控制继电器、灯)以及6路...
  • stm32f103ZET6 摄像头模块 电脑 WiFi模块 将摄像头与单片机的串口相连,连接好WiFi模块,将各个模块初始化完成。 连接电脑与WiFi模块,最后使用UDP协议,因为TCP协议有调错功能,会影响数据的传送,而UDP则没有,...
  • 无线图传上位机.zip

    2021-04-06 18:16:25
    ESP8266+STM32F407+OV7670实现图片传输,基于TCP/IP协议,使用C#语言编写的数据接收上位机软件。接收下位机通过ESP8266发送的图像数据。
  • 构建远距离WiFi网络,无线网络传输数据稳定,地面监控中心可实时掌握采面综采设备运行参数,为综采设备监控数据传输提供了一种切实可行的技术方法。 随着矿井现代化、自动化建设的不断推进,井下设备自动化程度...
  • 方案选型: 1、OpenCV(C++) 2、0.96 OLED 3、串口 一,OpenCV 安装流程参考博客:亲测有效 博客1: 博客2: 踩坑点
  • intchip-极控说明书(软芯微)_V8.4版本 LEADIY-WIFI 100 视频模块 100万像素图传模块使用资料 苹果 APP可以在AppStore里搜索GeekRC,安卓 APP可以在360安全市场或腾讯应用宝里搜索GeeRC,安卓软件也可以在...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 428
精华内容 171
关键字:

wifi图传