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 networkwlan = 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():passprint('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