搜索
bottom↓
回复: 0

《ESP32-S3使用指南—MicroPython版 V1.0》第三十五章 WebCAM实验

[复制链接]

出0入234汤圆

发表于 2024-8-30 17:18:33 | 显示全部楼层 |阅读模式
本帖最后由 正点原子 于 2024-8-30 17:18 编辑

2.jpg
1)实验平台:正点原子ESP32S3开发板
2)购买链接:https://detail.tmall.com/item.htm?id=768499342659
3)全套实验源码+手册+视频下载地址:http://www.openedv.com/thread-347618-1-1.html
4)正点原子官方B站:https://space.bilibili.com/394620890
5)正点原子手把手教你学ESP32S3快速入门视频教程:https://www.bilibili.com/video/BV1sH4y1W7Tc
6)正点原子FPGA交流群:132780729
1.png
3.png

第三十五章 WebCAM实验


       本章描述了作者如何使用Microdot脚本构建一个视频网络服务器,用于显示摄像头输出的图像数据。在本实验中,我们采用了正点原子的OV2640和OV5640作为摄像头模组,来采集图像数据。
       35.1 Microdot简介
       35.2 硬件设计
       35.3 软件设计
       35.4 下载验证

       35.1 Microdot简介
       Microdot是一款轻量级的Python Web框架,专为微控制器和其他资源受限设备设计。它受到Flask框架的启发,并被优化以在MicroPython环境中运行。Microdot旨在简化在嵌入式系统上构建Web应用程序的过程,使开发者能够更快速、更轻松地创建可靠且可扩展的微服务。
       Microdot具有以下特点:

       1,轻量级:Microdot框架本身占用内存较少,适合在资源受限的环境中运行。

       2,简单易用:Microdot的API设计简洁明了,易于学习和使用。它提供了与Flask类似的接口,使开发者可以快速上手。

       3,可扩展性:Microdot支持使用第三方模块和插件来扩展其功能。

       4,可定制性:Microdot允许开发者自定义和配置框架的各种组件和行为。

       5,跨平台支持:Microdot可以在多种操作系统和平台上运行,包括MicroPython等系统。

       通过Microdot,开发者可以快速构建可靠、可扩展的微服务,并将其部署到各种资源受限的设备上。无论你是初学者还是经验丰富的开发者,Microdot都能够帮助你简化嵌入式Web应用程序的开发过程。
       Microdot相关内容,可参考micordot英文官网提供的Microdot在线文档,在此文档中,已经详细介绍了Microdot的使用方法以及提供了多种使用案例。
       本章节的目的是利用MicroPython控制ESP32-S3开发板板载的摄像头,以实现实时视频流传输,并能够通过浏览器进行观看。以下是架构设计图:

第三十五章 WebCAM实验909.png
图35.1.1 视频网络服务器架构

       首先,需要将ESP32-S3开发板与电脑连接至同一个AP(子网络)。然后,在ESP32-S3开发板上运行一个Web服务器,使用Microdot这个包来简化架站的功能。最后,通过打开web浏览器即可观看实时视频流传输的结果。

       35.2 硬件设计

       1. 例程功能
       本章实验功能简介:网络连接成功后,系统开始构建Web服务器,然后我们根据返回的网络信息,来打开Web服务器(浏览器),此时,该服务器显示摄像头输出的图像数据。

       2. 硬件资源

       1)ESP32-S3内部WiFi

       3. 原理图
       本章实验使用的WiFi为ESP32-S3的片上资源,因此并没有相应的连接原理图。

       35.3 软件设计

       35.3.1 程序流程图
       程序流程图能帮助我们更好的理解一个工程的功能和实现的过程,对学习和设计工程有很好的主导作用。下面看看本实验的程序流程图。

第三十五章 WebCAM实验1323.png
图35.3.1.1 程序流程图

       35.3.2 程序解析
       本书籍的代码都在main.py脚本下编写的,读者可在光盘资料下找到对应的源码。WebCAM实验main.py源码如下:
  1. import network
  2. import time
  3. import camera
  4. import atk_xl9555 as io_ex
  5. from machine import Pin,SPI,I2C
  6. from microdot import Microdot


  7. # 配置WIFI账号与密码
  8. SSID = "xxx"          # wifi名称
  9. PASSWORD = "xxx"      # wifi密码



  10. """
  11. * @brief       连接网络
  12. * @param       无
  13. * @retval      无
  14. """
  15. def connect():
  16.    

  17.     wlan = network.WLAN(network.STA_IF)
  18.     wlan.active(False)
  19.     wlan.active(True)
  20.     if not wlan.isconnected():
  21.         print('connecting to network...')
  22.         wlan.connect(SSID, PASSWORD)
  23.         while not wlan.isconnected():
  24.             pass
  25. print('network config: ', wlan.ifconfig())



  26. """
  27. * @brief       程序入口
  28. * @param       无
  29. * @retval      无
  30. """
  31. if __name__ == '__main__':
  32.    

  33.     # 连接网络
  34.     connect()
  35.     # 建立 Microdot 网站服务器
  36.     app = Microdot()
  37. time.sleep_ms(1000)

  38.     # IIC初始化
  39. i2c0 = I2C(0, scl = Pin(42), sda = Pin(41), freq = 400000)

  40.     # XL9555初始化
  41.     xl9555 = io_ex.init(i2c0)
  42. xl9555.write_bit(io_ex.BEEP,1)

  43.     # 复位摄像头
  44.     xl9555.write_bit(io_ex.OV_RESET,0)
  45.     time.sleep_ms(100)
  46.     xl9555.write_bit(io_ex.OV_RESET,1)
  47. time.sleep_ms(100)

  48.     # 开启摄像头
  49.     xl9555.write_bit(io_ex.OV_PWDN,1)
  50.     time.sleep_ms(100)
  51.     xl9555.write_bit(io_ex.OV_PWDN,0)
  52. time.sleep_ms(100)


  53.     # 初始化摄像头
  54.     for i in range(5):
  55.         cam = camera.init(0, format=camera.JPEG, fb_location=camera.PSRAM,
  56. framesize = camera.FRAME_240X240,xclk_freq = 24000000)
  57.         print("Camera ready?: ", cam)
  58.         if cam:
  59.             print("Camera ready")
  60.             break
  61.         else:
  62.             time.sleep(2)
  63.     else:
  64.         print('Timeout')
  65.         reset()
  66.     time.sleep_ms(1000)
  67.     # 定义视频流的路径(‘/video_feed’)与操作
  68. @app.route('/')


  69.     def index(request):
  70.         return '''<!doctype html>
  71.     <html>
  72.       <head>
  73.         <title>Microdot Video Streaming</title>
  74.       </head>
  75.       <body>
  76.         <h1>ATK WebCAM </h1>
  77.         <img src="/video_feed" width="30%">
  78.       </body>
  79.     </html>''', 200, {'Content-Type': 'text/html'}
  80. @app.route('/video_feed')


  81.     def video_feed(request):
  82.         def stream():
  83.             yield b'--frame\r\n'
  84.             while True:
  85.                 frame = camera.capture()
  86.                 yield b'Content-Type: image/jpeg\r\n\r\n' + frame + \
  87.                     b'\r\n--frame\r\n'
  88.         return stream(), 200, {'Content-Type':
  89.                                'multipart/x-mixed-replace; boundary=frame'}
  90.    
  91. # 激活网站服务器
  92.     app.run(debug = True)
复制代码
       上述示例中,首先,连接网络和初始化一些外设,如IIC接口、XL9555 IO扩展芯片和摄像头,然后,搭建Microdot 网站服务器,并且定义网站根目录网页等相关操作(请参考Microdot官方文档),最后,激活网站服务器。这样我们就可以在浏览器上查看摄像头图像了。
       添加Microdot.py脚本有两种方法,一种是在Thonny的本地目录下添加,另一种是Thonny软件下新建文件,然后把内容复制粘贴到该文件当中,并且保存至MicroPython设备lib文件夹目录下(这种方式需开发者在MicroPython设备中新建lib文件夹)。第一种方法很简单,只需把Thonny本地目录设置为正点原子例程目录,然后右键把04_WebCAM实验的lib文件夹上存到MicroPython设备当中,如下图所示。

第三十五章 WebCAM实验4147.png
图35.3.2.1 把实验的lib文件夹上存至MicroPython设备当中

       此时,MicroPython设备出现了lib文件夹及lib文件夹下的Microdot.py脚本,如下图所示。

第三十五章 WebCAM实验4243.png
图35.3.2.2 设备添加Microdot.py脚本完成

       main.py脚本也是如此,直接把正点原子提供的04_WebCAM例程main.py脚本上存至MicroPython设备当中,这样我们无需反复创建文件,然后复制粘贴了。
       第二种方式可能比较繁琐,主要是在microPython设备中创建lib文件夹,如下图所示,然后在Thonny软件下新建文本,并复制正点原子提供的microdot.py脚本内容,粘贴至新建的文本当中,接着,把这个文本保存至MicroPython设备lib目录下,并重命名为“microdot.py”。

第三十五章 WebCAM实验4510.png

第三十五章 WebCAM实验4512.png

第三十五章 WebCAM实验4515.png
图35.3.2.3 在microPython设备中新建lib文件夹

       同理,main.py脚本可与上述流程一样创建,值得我们注意的是,main.py脚本必须放置MicroPython设备根目录下。

       35.4 下载验证
       程序下载到开发板后,我们可在Thonny软件的Shell交互窗口下得到如下信息。

第三十五章 WebCAM实验4666.png
图35.4.1 网络配置信息

       在上图中,192.168.101.98为ESP32-S3设备的IP地址;5000为Web服务器的端口号。根据设备的IP地址和端口号就可以访问WebServer服务器。首先,开发者打开浏览器(本机必须与ESP32-S3设备同一网段),然后,在搜索条输入“192.168.101.98:5000”内容,回车进入WebServer服务器,此时,我们就可以查看摄像头输出的图像了,如下图所示。

1.png
图35.4.2 摄像头图像

阿莫论坛20周年了!感谢大家的支持与爱护!!

阿莫论坛才是最爱国的,关心国家的经济、社会的发展、担心国家被别国牵连卷入战争、知道珍惜来之不易的和平发展,知道师夷之长,关注世界的先进文化与技术,也探讨中国文化的博大精深,也懂得警惕民粹主义的祸国殃民等等等等,无不是爱国忧民的表现。(坛友:tianxian)
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-9-17 16:23

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表