esp32 cam不使用官方示例完成视频内网穿透

这篇具有很好参考价值的文章主要介绍了esp32 cam不使用官方示例完成视频内网穿透。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

刚才给大家讲解了esp32cam使用arduino ide官方示例内网穿透的方法,因目前免费的内网穿透软件无法完成公网ip的两个端口映射,因此作者去学习了另一个不使用官方示例也可以内网穿穿透的方法。 在此先介绍b站王铭东老师,我是在这位老师的基础上学习的,还有csdn上的这位老师,我

仅学习借鉴代码思路部分,这两位老师都很厉害,大家可以看看相关博客和视频。thonny esp32cam,音视频,单片机,http,https,ide,python

接下来便给大家讲解thonny实现内网穿透,目前有两种方法,第一种,使用thonny在esp32cam上烧录代码通过socket通信 udp协议,将视频流传输到pycharm上接收,使用flask框架做web,再使用cpolar或花生壳完成内网穿透。第二种,使用thonny导入flask文件,在thonny上搭建网站,再使用cpolar或花生壳完成内网穿透。

不管是哪种方法都需要使用到thonny,作者便带大家配置thonny并讲解一路上遇到的坑。

首先去thonny官网先下载thonny,这一步大家应该都没问题,下载好thonny后,我们所需要的第一步便是烧录固件,这个非常重要,我把所用到的固件库放在了链接里,永久有效,大家自行下载

链接:https://pan.baidu.com/s/1t7VWx3cJEmQrXBxpXqlxxQ 
提取码:0f63

这个固件库包含camera,官网最新的固件库不能使用camera,所以大家尽量下载我这个,如果烧录过了也没事,还可以重新擦去再烧录,这个库也是我从别的好心博主那copy的,也谢谢那位博主。

thonny esp32cam,音视频,单片机,http,https,ide,python

大家打开后应该是这个界面,我们为了看到文件,先打开视图->文件,便可以看到相关文件配置,接下来便烧录固件,上图中点击右下角,三条横杠处,然后点击配置解释器。

thonny esp32cam,音视频,单片机,http,https,ide,python

thonny esp32cam,音视频,单片机,http,https,ide,python

大家在此选择esp32解释器,端口此时连接到我们的esp32cam开发板,带底座的直接插入就行,不带底座的大家使用ch340或者cp210等连接电脑。

thonny esp32cam,音视频,单片机,http,https,ide,python

作者使用的是底座,可以直接看到com10端口,然后点击右下角的安装或更新micropython····按钮,跳出下方界面。

thonny esp32cam,音视频,单片机,http,https,ide,python

我这个thonny是最新版本,网上看的很多的教程跟我的不一样,这个地方我搞了好久,哈哈哈哈哈,作者太笨了。这个节面便是寻找我们本地的固件进行烧录,点击右下角的三条横杠。

thonny esp32cam,音视频,单片机,http,https,ide,python

然后点击第一个选项 select local ·····,寻找本地固件,然后选择我们刚才下载好的固件库,便可以开始导入。

thonny esp32cam,音视频,单片机,http,https,ide,python

选择完成后,等待安装即可,如果在安装过程中出现了fatal····等字样,便是没有底座的同学们使用ch340或者cp210时的接线问题,大家去别的博客上看看相关解决方法,我曾看到好多解决方法,作者因使用底座,所以就没有仔细研究,大家下载完固件库后便接着看本文中thonny后续流程即可。

thonny esp32cam,音视频,单片机,http,https,ide,python

大家选择好后,便会有下载过程,第一次安装的同学在左边进度条处会看到安装百分比,到最后安装成功会显示  Done 的字样,便安装成功了。

thonny esp32cam,音视频,单片机,http,https,ide,python

接下来最重要的地方来了,大家安装完后不要着急粘代码编译,因为我们底座上的烧录芯片虽然外表看着时c340,但其实是不知名芯片,无法直接烧录代码,会显示下方错误代码。

thonny esp32cam,音视频,单片机,http,https,ide,python

这个时候我们要将开发板与底座分开,使用杜邦线连接5v  gnd  rx  tx这四个端口,因为底座上的芯片会占用esp32cam的部分io口,导致thonny无法使用。

thonny esp32cam,音视频,单片机,http,https,ide,python

大家像我一样连接四根线便可以正常烧录代码,连接后,重启thonny即可。

thonny esp32cam,音视频,单片机,http,https,ide,python

shell区域没有了乱码,此时便可以正常使用烧录代码了,如果以后还要烧录别的固件库便使用底座,仅烧录代码便一直使用那四根杜邦线连接,没有办法,谁让底座上的ch340是个盗版的,没有底座的同学,使用ch340或者cp210的同学去其他博主那看一下怎么烧录固件和代码,esp32cam好像有下载模式和调试模式,连线也不相同,b站有个博主就在讲这个,有的esp32cam是六贴片和四贴片(摄像头右下角区域),导致连接ch340和cp210的连线也不同。

当大家都出现这个界面后,直接上第一种代码   thonny代码

import socket
import network
import camera
import time


# 连接wifi
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
    print('connecting to network...')
    wlan.connect('HONOR50Pro', '00000000')
    
    while not wlan.isconnected():
        pass
print('网络配置:', wlan.ifconfig())
 
 
# 摄像头初始化
try:
    camera.init(0, format=camera.JPEG)
except Exception as e:
    camera.deinit()
    camera.init(0, format=camera.JPEG)


# 其他设置:
# 上翻下翻
camera.flip(1)
#左/右
camera.mirror(1)

# 分辨率
camera.framesize(camera.FRAME_HVGA)
# 选项如下:
# FRAME_96X96 FRAME_QQVGA FRAME_QCIF FRAME_HQVGA FRAME_240X240
# FRAME_QVGA FRAME_CIF FRAME_HVGA FRAME_VGA FRAME_SVGA
# FRAME_XGA FRAME_HD FRAME_SXGA FRAME_UXGA FRAME_FHD
# FRAME_P_HD FRAME_P_3MP FRAME_QXGA FRAME_QHD FRAME_WQXGA
# FRAME_P_FHD FRAME_QSXGA
# 有关详细信息,请查看此链接:https://bit.ly/2YOzizz

# 特效
camera.speffect(camera.EFFECT_NONE)
#选项如下:
# 效果\无(默认)效果\负效果\ BW效果\红色效果\绿色效果\蓝色效果\复古效果
# EFFECT_NONE (default) EFFECT_NEG \EFFECT_BW\ EFFECT_RED\ EFFECT_GREEN\ EFFECT_BLUE\ EFFECT_RETRO

# 白平衡
# camera.whitebalance(camera.WB_HOME)
#选项如下:
# WB_NONE (default) WB_SUNNY WB_CLOUDY WB_OFFICE WB_HOME

# 饱和
camera.saturation(0)
#-2,2(默认为0). -2灰度
# -2,2 (default 0). -2 grayscale 

# 亮度
camera.brightness(0)
#-2,2(默认为0). 2亮度
# -2,2 (default 0). 2 brightness

# 对比度
camera.contrast(0)
#-2,2(默认为0).2高对比度
#-2,2 (default 0). 2 highcontrast

# 质量
camera.quality(20)
#10-63数字越小质量越高

# socket UDP 的创建
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM,0)

try:
    while True:
        buf = camera.capture()  # 获取图像数据
        s.sendto(buf, ("192.168.25.19", 9090))  # 向服务器发送图像数据
        time.sleep(0.1)
except:
    pass
finally:
    camera.deinit()


 文章来源地址https://www.toymoban.com/news/detail-850784.html

 下面是pycahrm代码

import socket
import io
from PIL import Image
import numpy as np
from flask import Flask, render_template, Response
import cv2

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, 0)
s.bind(("192.168.25.19", 9090))

app = Flask(__name__)


@app.route('/video_feed')
def video_feed():
    def generate_frames():
        while True:
            data, IP = s.recvfrom(100000)
            bytes_stream = io.BytesIO(data)
            image = Image.open(bytes_stream)
            img = np.asarray(image)
            frame = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)  # ESP32采集的是RGB格式,要转换为BGR(opencv的格式)
            ret, buffer = cv2.imencode('.jpg', frame)
            frame = buffer.tobytes()
            yield (b'--frame\r\n'
                   b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n\r\n')
    return Response(generate_frames(),
                    mimetype='multipart/x-mixed-replace; boundary=frame')

@app.route('/')
def index():
    return render_template('index.html')

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8000)

我第一次粘在csdn上代码,不知道大家看到是不是跟别的作者那样在一个框框里,如果代码跟文字掺在了一次,大家评论回复我,我私发给大家。

这个代码是将esp32cam的视频先通过udp传输到pycharm然后在到web网页,电脑和esp32cam应在同一wifi下。

thonny esp32cam,音视频,单片机,http,https,ide,pythonthonny esp32cam,音视频,单片机,http,https,ide,pythonthonny esp32cam,音视频,单片机,http,https,ide,pythonthonny esp32cam,音视频,单片机,http,https,ide,python

大家可以看到结果还是不错的,这个时候我们只需要cpolar或者花生壳,将pycharm终端打印的ip地址和端口输入进去便可以内网穿透,从公网访问我们的web页面了,也不需要两个端口。

接下来是第二种方法

上代码前需要先配置文件,因为我们是在thonny上直接搭建网站,需要用到flask,但是,但是,很重要的点,esp32等解释器,没有办法去下载flask软件包 像numpy、opencv、pillow等等是没办法在thonny的esp32解释器上下载的,也就是在我们当前这个项目中,没有办法使用opencv、flask等软件库,当然python解释器是可以的,这个地方困扰了我很多天。

点击thonny界面的工具->管理包,打开下面这个界面

thonny esp32cam,音视频,单片机,http,https,ide,python

能看到左上角写的是com10包,这代表是esp32解释器,可以更换成python解释器下载我刚才说的那些包,但是我们不需要python解释器,当前esp32解释器只能使用内置的软件包,因此我们想要搭建web网页,需要flask包怎么办,我最开始介绍的csdn博主已经提供了相关py文件,我在此也分享给大家

链接:https://pan.baidu.com/s/1oerFmQ6zoOGAmfE7VgPL2Q 
提取码:0rdc

里面是一个py文件,大家下载到thonny的保存的项目里就行,之后我们便可以使用flask框架了。

上代码  thonny代码

#该文件是学习csdn  并完成视频传输到网站
from microdot import Microdot
import time
import camera
from machine import reset
import network

def wifiConnect():
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    if not wlan.isconnected():
        print('connecting to network...')
        wlan.connect('HONOR50Pro', '00000000')
        while not wlan.isconnected():
            pass
    print('网络配置:', wlan.ifconfig())
    
wifiConnect()  #连接wifi
app = Microdot()


try:
    camera.init(0, format=camera.JPEG)
except Exception as e:
    camera.deinit()
    camera.init(0, format=camera.JPEG)
    
    
camera.flip(1)
camera.mirror(1)
camera.framesize(camera.FRAME_HVGA)
camera.speffect(camera.EFFECT_NONE)
camera.saturation(0)
camera.brightness(0)
camera.contrast(0)
camera.quality(20)

@app.route('/')
def index(request):
    return '''<!doctype html>
<html>
  <head>
    <title>Microdot Video Streaming</title>
  </head>
  <body>
    <h1>Microdot Video Streaming</h1>
    <img src="/video_feed" width="30%">
  </body>
</html>''', 200, {'Content-Type': 'text/html'}


@app.route('/video_feed')
def video_feed(request):
    def stream():
        yield b'--frame\r\n'
        while True:
            frame = camera.capture()
            yield b'Content-Type: image/jpeg\r\n\r\n' + frame + \
                b'\r\n--frame\r\n'
            #time.sleep_ms(50)

    return stream(), 200, {'Content-Type':
                           'multipart/x-mixed-replace; boundary=frame'}

if __name__ == '__main__':
    app.run(debug=True)

    

 

将wifi更换成自己的,运行代码到esp32cam上,如果shell出现初始化相机失败,便检查连线,并重启thonny即可,我有时也会这样,问题不大。大家把刚才的microdot.py文件另存到micropython设备上,如下图。

thonny esp32cam,音视频,单片机,http,https,ide,python

thonny esp32cam,音视频,单片机,http,https,ide,python

thonny esp32cam,音视频,单片机,http,https,ide,python

以上电脑和esp32cam也需要在一个wifi下才能访问,但是我们今天需要的是内网穿透,打开我们的cpolar或者花生壳,两个我都会演示,先打开cpolar,把我们esp32cam返回的ip地址和端口号输入进去,生成公网ip,进入查看,上述过程可在我的上一篇博客查看.

thonny esp32cam,音视频,单片机,http,https,ide,python

thonny esp32cam,音视频,单片机,http,https,ide,python

 

thonny esp32cam,音视频,单片机,http,https,ide,python 

 

 大家可以看到,我esp32cam连接的wifi是HONOR50Pro,设置cpolar也是HONOR50Pro,在另一台电脑上,连接的wifi不是HONOR50Pro,使用公网ip,也可以看到esp32cam的图像,完成了内网穿透。

 下面呢是花生壳展示

 

thonny esp32cam,音视频,单片机,http,https,ide,python 

 thonny esp32cam,音视频,单片机,http,https,ide,python

thonny esp32cam,音视频,单片机,http,https,ide,python

thonny esp32cam,音视频,单片机,http,https,ide,python 

 

这个是使用花生壳,原理跟cpolar相似,也是编辑内网ip地址和端口号,在同一wifi下部署,在别的设备上查看,可以看到当前视频,但是花生壳的公网ip是固定的,要比cpolar要好,但是需要6元,还可以吧,大家择优选择,以上就是所有的内容,如果有不清楚或者错误的地方请大家指点,如看到会及时回复。 

 

到了这里,关于esp32 cam不使用官方示例完成视频内网穿透的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • QT获取ESP32-CAM视频流分析

    1、前言       使用QT获取ESP32-CAM视频流的原理是在QT模拟浏览器发送http请求,然后ESP32-CAM返回视频流,当QT界面接收到数据后,对数据进行解析,然后合成图片进行显示。       在QT中发送http请求的方法很多,这里使用Qt网络模块中的类QNetworkReply发送http请求。 2、核心代

    2023年04月20日
    浏览(38)
  • 安卓App与ESP32Cam的视频传输

    实现结果 app可以控制Esp32Cam的摄像头开关和闪光灯的开关 Esp32Cam代码   安卓app代码    

    2023年04月08日
    浏览(39)
  • ESP32-CAM , io控制,UDP 数据发送,视频传输

    主代码 附件文件

    2024年02月11日
    浏览(89)
  • ESP32-CAM视频传输至公网服务器并转发视频数据流

            有关esp32-cam目前大多数文章都是在写如何在内网(同一网络环境下)的视频传输, 即便是传输服务器上, 视频图像也只是显示在服务器中, 无法将视频数据流再转发到客户端. 先介绍一下大致思路, 很简单, esp32-cam把数据流发送到公网服务器, 服务器将数据原样透传给用

    2024年02月12日
    浏览(44)
  • QT+ESP32-CAM上位机获取视频流(附源码)

    第二章 qt获取esp32-cam视频流 本文是基于esp32-cam 官方示例扩展的QT上位机程序 可以获取视频流来做一些图像处理 帧率和直接用网页打开的帧率差不多(25FPS) 由于也是刚玩ESP32-cam 在网上想找个QT上位机的程序来做一些测试 但是找到的一些例程获取的帧率比较低所以开发了一个测

    2024年02月03日
    浏览(45)
  • ESP32 CAM与服务器(python)UDP视频传输

    ESP32 CAM Arduino代码 UDP Server代码

    2023年04月11日
    浏览(82)
  • Arduino IDE + Esp32 Cam + 实现视频流 + 开发环境部署

    1、开发环境 Arduino ide 版本:2.2.1 esp32工具:2.0.5 示例代码

    2024年02月08日
    浏览(72)
  • 基于开源的Micro-RTSP,使用VLC和ffmpeg拉流播放RTSP视频流,本例使用安信可ESP32 CAM进行推流。

    基于开源的Micro-RTSP,使用VLC和ffmpeg拉流播放RTSP视频流,本例使用安信可ESP32 CAM进行推流。 vlc播放命令为:rtsp://192.168.43.128:8554/mjpeg/1。 ffmpeg播放命令为:ffplay rtsp://192.168.43.128:8554/mjpeg/1。 使用ESP-IDF5.0编译成功。esp-idf-v4.4.2编译不成功,有成功的小伙伴可以分享一下。 git cl

    2024年02月01日
    浏览(47)
  • ESP32 官方AT固件编译(从零开始环境搭建到编译完成全过程)

    https://download3.vmware.com/software/WKST-PLAYER-1702/VMware-player-full-17.0.2-21581411.exe https://releases.ubuntu.com/jammy/ubuntu-22.04.2-desktop-amd64.iso 可能需要进电脑的BIOS打开一个选项才能安装成功虚拟机 5.1 GIT 克隆 git clone --recursive https://github.com/espressif/esp-at.git 如果没有安装git,按照控制台的提示安

    2024年02月15日
    浏览(51)
  • 使用 ESP32 CAM 和 OpenCV 的运动检测

    目录 概述 使用 PC 摄像头的运动检测鱿鱼游戏 ESP32 摄像头模组 ESP32-CAM FTDI 连接

    2024年02月07日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包