ESP32-CAM 网路与摄像头应用

ESP32-CAM 网路与摄像头应用

目录

  • ESP32-CAM 网路与摄像头应用
  • 烧录 ESP32-CAM 固件
  • ESP32-CAM Web 服务器
  • 上电执行 Web 服务器
  • 参考资料
  • 在进行 ESP32-CAM 网路应用时会用到 ESP32-CAM 的 Wi-Fi 与 摄像头(Camera)模块,而先前安装的是 ESP-32 官方所提供的固件,并不支援摄像头(Camera)模块,所以必须下载支援 ESP32-CAM 的固件,才能驱动摄像头(Camera)模块,可以在这里(提取码ccit)下载到所需要的固件,以下简单用 esptool 进行删除原固件并重新上传固件。

    烧录 ESP32-CAM 固件

    将 ESP32-CAM 硬件设定成下载模式,接著删除原有固件、烧录新固件。

    # Mac
    esptool.py --chip esp32 --port /dev/cu.usbserial-14110 erase_flash
    esptool.py --chip esp32 --port /dev/cu.usbserial-14110 --baud 460800 write_flash -z 0x1000 micropython_camera_feeeb5ea3_esp32_idf4_4.bin
    # Windows
    esptool --chip esp32 --port COM3 erase_flash
    esptool --chip esp32 --port COM3 --baud 460800 write_flash -z 0x1000 "E:\22-23-2\bin\micropython_camera_feeeb5ea3_esp32_idf4_4.bin"
    
    

    进入调适模式后,进行远程调适 MicroPython。

    # Mac
    mpremote connect /dev/cu.usbserial-14110 repl
    # Windows
    mpremote connect COM3 repl
    

    透过 help(‘modules’) 命令,可以列出内建的模块。因为是 ESP32-CAM ,所以会多出一个 camera 模块,用来存取摄像头之用。透过 uplatform 模块可以获得平台的开发信息 MicroPython-1.18.0-xtensa-IDFv4.4-beta1-286-gb64925c567-with-newlib3.3.0

    help('modules')
    import uplatform as platform
    platform.platform()
    
  • 开发语言: MicroPython-1.18
  • 处理器: xtensa
  • 开发框架: IDFv4.4
  • 函式库: newlib3.0.0

  • 图 1. 下载 MicroPython for ESP32-CAM 烧录档固件到 ESP32-CAM

    ESP32-CAM Web 服务器

    以下会展示以 ESP32-CAM 做为 Web 服务器的示例,下图说明其运作架构,首先,ESP32-CAM 与个人电脑都要先连上同一个子网的存取点(Access Point, AP),这样 ESP32-CAM 与个人电脑才能相互沟通,接著 ESP32-CAM 将会担任 Web 服务器的角色,而个人电脑则是透过浏览器来观看网页结果。


    图 2. ESP32-CAM Web 服务器架构说明

    接下来的代码比较复杂,以下练习都以 Thonny 来进行,首先,连上 Wi-Fi AP,因为 AP 的ssid与password每个人都不一样,所以以 ‘your-ssid’ 跟 ‘your-password’ 来表示,在实际运行时,记得更换为自己的 ssid 与 password。

    原始代码

    # enable station interface and connect to WiFi access point
    import network
    
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    if not wlan.isconnected():
        print('connecting to network...')
        wlan.connect('your-ssid', 'your-password')
        while not wlan.isconnected():
            pass
    print('network config: ', wlan.ifconfig())
    

    打开 Thonny 后,先注意视窗右下方的配置是否正确,1. 包含了解释器、开发版与串口,将以上代码复制、粘贴在 Thonny 的视窗,并 2. 按下绿色运行键,执行结果会出现在 3. 下方的 Shell 视窗中。


    图 3. Thonny 开发画面

    如果出现 network config: (XXX) 表示连线成功,接著在本机取得 microdot.py 原始档(百度云盘,提取码ccit),透过 Thonny 的画面打开,如下图所示。


    图 4. Thonny 打开文件


    图 5. Thonny 打开本地的 microdot.py 文件

    接著将 microdot.py 存到 ESP32-CAM 上,在前面章节有介绍到可以利用远端存取(mpremote)方式进行,但现在开启 Thonny 后会占用端口,导致无法运行,所以直接在 Thonny 中运行。单击上方工作列的 档案,选择 另存为 ,如下图所示。


    图 6. Thonny 将本地文另存为其他文件

    接著会弹出一个画面,选择存到哪一个设备,选择 MicroPython设备


    图 7. Thonny 选择存到 MicroPython设备

    在 MicroPython设备 中单击右键,选择新建文件夹…,输入 lib


    图 8. Thonny 新建文件夹

    进入 lib 文件夹,文件名输入 microdot.py后,单击 好的

    图 9. 另存为 microdot.py

    会出现上传画面。

    图 10. 正在保存 microdot.py 到 MicroPython设备

    Shell 中输入以下源代码运行,如果运行成功会出现 Starting … 等信息,如下图所示。

    原始代码

    from microdot import Microdot
    app = Microdot()
    
    @app.route('/')
    def index(request):
        return 'Hello, world Microdot!'
    
    app.run(debug=True)
    


    图 11. 导入 microdot 包,架构 Web 服务器

    输出结果为:

    Starting sync server on 0.0.0.0:5000...
    

    重要:将本机连上与 ESP32-CAM 相同的子网后,打开浏览器,并输入 192.168.254.160:5000,如果看到输出,表示ESP32-CAM 所架构的 Web 服务器已经成功建置。


    图 12. 使用本机浏览器观看ESP32-CAM 的 Web 服务器

    上电执行 Web 服务器

    在 MicroPyhon 中,main.py 是事先定义好的文件,以上的范例我们将 Wi-Fi 连线与 Web 服务器的部份则写在 main.py 中

    main.py

    import network
    from microdot import Microdot
    
    # 填上 Wi-Fi 连线信息
    SSID = "<PLACE_YOUR_SSID_HERE>"
    SSI_PASSWORD = "<PLACE_YOUR_WIFI_PASWORD_HERE>"
    
    def connect_WiFi():
        wlan = network.WLAN(network.STA_IF)
        wlan.active(True)
        if not wlan.isconnected():
            print('connecting to network...')
            wlan.connect(SSID, SSI_PASSWORD)
            while not wlan.isconnected():
                pass
        print('network config: ', wlan.ifconfig())
    
    # 连线 Wi-Fi
    connect_WiFi()
    
    app = Microdot()
    @app.route('/')
    def index(request):
        return 'Hello, world Microdot!'
    # 启动 Web 服务器
    app.run(debug=True)
    


    图 13. 确认所需文件都已经保存在 ESP32-CAM

    将 ESP32-CAM 直接透过充电宝供电,并打开电脑的浏览器观看结果。


    图 14. 充电宝上电执行 Web 服务器

    需先记录 ESP32-CAM 所占用的 IP 位址,输入电脑的浏览器就可以观看结果

    图 15. 电脑的浏览器观看结果

    参考资料

  • ESP32 Technical Reference Manual,https://www.espressif.com/sites/default/files/documentation/esp32_technical_reference_manual_en.pdf
  • Espressif IoT Development Framework, https://github.com/espressif/esp-idf
  • ESP32-CAM firmware, https://github.com/lemariva/micropython-camera-driver/blob/master/firmware/micropython_camera_feeeb5ea3_esp32_idf4_4.bin
  • MicroPython: Taking photos with an ESP32-CAM, https://lemariva.com/blog/2019/09/micropython-how-about-taking-photo-esp32
  • microdot, https://github.com/miguelgrinberg/microdot
  • A Simple Microdot Web Server, https://microdot.readthedocs.io/en/latest/
  • 关于MicroPython mpremote工具 的一些用例, https://www.cnblogs.com/Wind-stormger/p/16659124.html
  • micropython-camera-driver, https://github.com/lemariva/micropython-camera-driver
  • Refresh image with a new one at the same url, https://stackoverflow.com/questions/1077041/refresh-image-with-a-new-one-at-the-same-url
  • 物联沃分享整理
    物联沃-IOTWORD物联网 » ESP32-CAM 网路与摄像头应用

    发表评论