esp32cam远程监控(局域网的组成)

ESP32-CAM实现局域网/远程视频传输手上这个ESP32-CAM买回来已经放了一个学期了,最近才开始玩,试了试用它来实现视频传输。局域网的视频传输比较简单,基本能正确把例程烧进去就可以了,这篇文章主要记录一下远程视频传输的实现。ESP32-CAM实现局域网/远程视频传输ESP32-CAM实现局域网/远程视频传输方法一:PlatfromIO例程+路由器内网穿透条件1.直接使用Platfr…

大家好,又见面了,我是你们的朋友全栈君。

手上这个ESP32-CAM买回来已经放了一个学期了,最近才开始玩,试了试用它来实现视频传输。局域网的视频传输比较简单,基本能正确把例程烧进去就可以了,这篇文章主要记录一下远程视频传输的实现。

方法一:Platfrom IO例程+路由器内网穿透

条件

  • 安装了Platform IO的VS Code
  • 刷了OpenWrt的路由器
  • 云服务器(可选)

1. 直接使用Platfrom IO创建工程

在这里插入图片描述

简单修改工程

  • 修改wifi名称和密码
    在这里插入图片描述
  • 修改宏定义
    在这里插入图片描述
  • 修改paltformio.ini,添加如下代码board_build.flash_mode = dout

注意事项

  • 模块要用5V供电,接板子上面的5V接口,接VCC不能正常工作
  • 要修改platfromio的flash mode为dout,不然模块会不停重启

2. 编译烧写

烧写完成后,重启模块,用串口工具看输出信息,连接上wifi后,浏览器输入http://192.168.x.x就可以看到操作界面了。(注意在同一个局域网)
在这里插入图片描述
东西还是有点多的,可以玩一下,就是感觉发热有点厉害。

3. 配置路由器实现内网穿透

路由器穿透的插件有很多,我主要试了frp和ddnsto。

frp

可以参考文档
简单来说就是在服务器上运行一个frps程序,然后在路由器上配置相应的信息,启用frp。
我的配置信息:
服务器端:

  [common]
  bind_port = 7252
  token = 马赛克
  dashboard_addr = 0.0.0.0
  dashboard_port = 7500
  dashboard_user = xxxx
  dashboard_pwd = xxxx

路由器端:

[common]
server_addr = 马赛克
server_port = 7252
token = 马赛克
[esp32cam]
type = tcp
local_ip = esp32cam的ip地址
local_port = 80
remote_port = 7001

路由器截图:
在这里插入图片描述

ddnsto

这个方法设置很简单,也可以不用自己的服务器,参考帖子
访问时可能会报错Header fields are too long for server to interpret,可以尝试更换浏览器(我换成edge就好了),或者试着修改代码:
在这里插入图片描述

使用体验

这两种内网穿透方法的速度都很快,跟局域网差别不大,只是发现只能传图像,不能传视频(应该是代码的问题,还没搞明白?)。

方法二:ESP-IDF +Nabto

官方项目和教程

这个是github上的一个项目,也有比较详细的教程。?

注意事项

虽然根据官方的教程和代码,虽然有修改为AI Thinker的接线方式,可是还是会报错:

E (1582) ledc: requested frequency and duty resolution can not be achieved, try reducing freq_hz or duty_resolution. div_param=3
E (1592) camera_xclk: ledc_timer_config failed, rc=ffffffff
I (1602) sccb: pin_sda 26 pin_scl 27

I (1602) gpio: GPIO[32]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0
E (1662) camera: Detected camera not supported.
E (1662) camera: Camera probe failed with error 0x20004
E (1662) app_camera: Camera init failed with error 0x20004

解决方法参考这里,在xclk.c添加一行代码timer_conf.clk_cfg = LEDC_USE_APB_CLK;

        ledc_timer_config_t timer_conf;
        timer_conf.duty_resolution = 2;
        timer_conf.freq_hz = config->xclk_freq_hz;
		timer_conf.speed_mode = LEDC_HIGH_SPEED_MODE;
		timer_conf.timer_num = config->ledc_timer;
		timer_conf.clk_cfg = LEDC_USE_APB_CLK;
		esp_err_t err = ledc_timer_config(&timer_conf);
		if (err != ESP_OK) { 
   
			ESP_LOGE(TAG, "ledc_timer_config failed, rc=%x", err);
			return err;
		}

实现效果

串口输出
在这里插入图片描述
app显示
在这里插入图片描述

软件下载

这里要用到一个app,上Google Play不方便的话,可以从这里下载(我明明设置了免积分的!!),或者百度云,提取码 qe8q。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/128898.html原文链接:https://javaforall.net

(0)
上一篇 2022年4月12日 下午8:40
下一篇 2022年4月12日 下午8:40


相关推荐

  • LINUX安全设置

    LINUX安全设置

    2021年8月31日
    59
  • 【超分辨率】RDN论文详解(Residual Dense Network for Image Restoration)

    【超分辨率】RDN论文详解(Residual Dense Network for Image Restoration)这是CVPR2018的一篇文章,提出了针对图像复原任务的CNN模型RDN(residualdensenetwork)。RDN主要是提出了网络结构RDB(residualdenseblocks),它本质上就是残差网络结构与密集网络结构的结合。1.残差网络(resnet)与密集网络(densenet)1.残差网络结构残差网络结构:在输入与输出之间引入一个前向反馈的shor…

    2022年6月18日
    56
  • nginx部署多个服务

    nginx部署多个服务众所周知 Nginx enginex 是一个高性能的 HTTP 和反向代理服务 也是一个 IMAP POP3 SMTP 服务 Nginx 作为负载均衡服务 Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务 也可以支持作为 HTTP 代理服务对外进行服务 这样说你可能还不理解 但是如果我说 Apache 你肯定知道 nginx 就是类似与 Apache 这样的服务器 nginx 相对于

    2026年3月19日
    1
  • fio使用

    fio使用参考 fiodochelphe 内容 j2 j2 pc fiohelpfio 2 2 10fio options joboptions lt jobfile s gt debug optionsEnabl Maybeone moreof pr

    2026年3月17日
    1
  • Stopwatch 类

    Stopwatch 类命名空间:System.Diagnostics.Stopwatch实例化:StopwatchgetTime=newStopwatch();开始计时:getTime.Start();             getTime.Stop();             Console.WriteLine("getTime:"+totleTime.ElapsedMilliseconds.ToStr…

    2022年6月23日
    33
  • pytorch-DataLoader(数据迭代器)

    pytorch-DataLoader(数据迭代器)目录1.1dataset1.1.1Map-styledatasets实现方法一(简单直白法)实现方法二(借助TensorDataset直接将数据包装成dataset类)实现方法三(地址读取法)1.1.1Iterable-styledatasets我们一般使用一个for循环(或多层的)来训练神经网络,每一次迭代,加载一个batch的数据,神经网络前向反向传播各一次并更新一次参数。而这个过程中加载一个batch的数据这一步需要使用一个torch.utils.data.DataLoader对象,并且

    2022年6月11日
    83

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号