毕设期间,其中有一部分,需要使用到esp32 cam摄像头,并使用公网对其进行访问。首先在此说明,该博客在arduino ide的示例代码中无法完成视频流的内网穿透,如需其他成功内网穿透视频流方法,可以看我的另一篇博客,如果想要学习使用 内网穿透(不需要服务器)的同学可以继续往下看。
首先以arduino ide的esp32 cam的示例代码展示。
如图所示,我们需要更改的地方是代码中第11行,将其注释掉,我们目前市面上使用的板子是代码中的第18行-AI_THINKER,将18行的AI_THINKER取消注释,并在下方的 23 24行的wifi密码更改成自己家里的wifi或者热点,完成代码更改后,接下来选择烧录开发板。
大家选择跟我同型号的开发板即可,接下来便可以烧录代码,完成代码烧录后,打开串口监视器,等待wifi连接便会返回一个ip地址,这个ip地址便是我们一会所要内网穿透的内网ip。
在此需要大家注意的是,arduino ide的这个示例代码,默认使用的是80和81两个端口,80端口是提供web页面的基础设置及照片显示,当你点击开启视频流后,通过页面代码我们可以发现使用的同一ip地址的81端口。
大家在与esp32 cam同一wifi的电脑浏览器上打开端口输出的ip地址,便可以进入到这个web,作者在这使用的是360极速浏览器,不是chorm,打开web后,按下F12按键,便可看到html源码,上述图片是我打开视频流后(实时摄像头)后,当前窗口的视频来源ip,大家放大图片右方可以看到http://192.168.16.107:81/stream,字样,由此可见81端口返回的是视频流。
接下来便给大家介绍内网穿透,我使用的软件是cpolar和花生壳,这两个都可以内网穿透,大家可以直接在浏览器搜索下载,首先介绍cpolar
基于windows系统,大家点击下载正常安装后,直接打开cmd命令窗口,然后看上述图片第三步,连接账户,每个人的authtoken是不同的,大家看自己的就行,大家把第三步的的 ./ 后面的复制下来,./ 是在linux里面使用的语句,windows系统只需要 从 cpolar······开始复制便可以,复制到cmd命令窗口后回车,会显示绑定成功,这个时候便可关闭cmd窗口,打开ui界面,如下图。
最开始进去会显示几个创建好的隧道,隧道也就是内网穿透,上述是我自己创建的,大家点击编辑进入编辑页面。
协议我们选择http,本地地址就是刚才ide串口返回的ip,后面需要添加:80 端口号,地区选择china开头的就可以,其他不需要设置,此时点击更新,便可以自动开启内网穿透。
####注意:此时电脑需要与esp32 cam连接在同一wifi下,不然cpolar找不到你想要穿透的ip。
上述完成后,便可以在刚才ui界面点击在线隧道列表,查看我们的公网ip
大家把公网地址复制下来到浏览器上便可以看到刚才的摄像头web界面,此时需要注意的是,你只能拍照不能看视频,这也是最重要的地方。
####注意:在刚才作者已经说过,eps32 cam的web网页需要两个端口才能完成拍照和看视频的功能,此时我们只映射了一个端口 80,没有映射81,可能有同学要问了,我再设置一个不行吗,大家可以去试一下,我们使用的是免费版,每一次更改内网ip,返回的公网ip是随机的,我重新设置一个81端口,返回的公网ip和刚才的80端口返回的公网ip是不同的,如上图所示,但是我们在html源代码处便看到了,81端口使用的还是与80端口相同的ip地址,又因为cpolar返回的80和81端口的公网ip不同,因此我们无法完成视频和照片同时存在的功能,这是一个遗憾,不差钱的同学可以去买个套餐,哈哈哈哈哈。
花生壳软件,这个软件相比于cpolar好的地方是有一个固定的域名,缺点是你得花6元钱,不然你没法使用花生壳,最后的效果也与cpolar相同无法完成视频和照片同时存在的功能。可能是作者能力问题,没找到合适的方法,如果有大佬可以在留言区 留言。
上述所说是在arduino ide的示例代码上完成的,无法完成web的视频映射,但是作者为了实现视频内网穿透,也找到了一个好的方法,便是使用thonny 对esp32 cam进行编译,可以完成视频的内网穿透,大家可以看我的另一篇博客。
这篇博客给大家介绍了如何内网穿透,如果你没有视频内网穿透的要求,那么cpolar和花生壳是个不错的选择,因为你不需要额外部服务器,如果你仅使用内网穿透控制led 舵机和其他等等设备,上述内网穿透的方法完全适用,只需更改内网的ip地址即可,大家如果感觉看着字多费劲,作者到时候会出一期视频讲解。