- 作者:老汪软件技巧
- 发表时间:2024-10-05 21:01
- 浏览量:
概述
往期内容:
跨界开发:前端也能玩硬件 - ESP32Cam摄像头示例(1)- 掘金 ()跨界开发:前端也能玩硬件 - ESP32Cam摄像头示例代码分析(2)- 掘金 ()
在往期内容中,我为大家展示了如何使用ESP32-Cam来实现基础摄像头的 Demo,后续分析代码逻辑并探讨了如何修改 WebServer 的 HTML 文件内容。接下来,我们将探索如何为带有摄像头模块的 ESP32 烧录 MicroPython,并进一步进行开发。跟着我的步骤,相信你也能够编译出你的开发板支持的micropython包。
本篇的主要内容
搭建虚拟机环境编译出带camera模块的micropython包烧录micropython包到开发板上搭建虚拟环境
在本篇内容中我使用的是 Kali 虚拟机进行编译。虽然我之前也尝试过使用 Ubuntu 桌面版的虚拟机,但其自带的一些依赖项版本可能会产生与编译环境之间的冲突。如果你按照我的示例操作,应该不会有问题,能够顺利编译出来。但如果你选择使用其他镜像,就可能会遇到一些不兼容的情况。
Kali 虚拟机镜像下载地址:
后续就是使用VMware或Virtualbox启动虚拟机,下载编译环境的相关依赖
大家如果有魔法,可以按照以下方式设置一下共享代理:【环境配置】VMware虚拟机使用主机代理(详细教程)_虚拟机代理
设置好后,大家可以通过su命令,切换到 root 身份,这样执行命令才有权限,kali的默认root身份的密码是没有设置的。需要大家手动设置一下,普通用户的密码就是kali
sudo passwd root
设置root的密码后,使用su命令,切换到root身份,输入密码后执行以下命令下载依赖
# 确保已经是root身份了,不然需要在命令前加一个sudo
apt-get install git wget libncurses-dev flex python3 python3-pip python3-setuptools python3-serial python3-click python3-cryptography python3-pyparsing libffi-dev python-is-python3 build-essential
# 下载cmake
uname -r # 检查自己的是什么架构的
# kali的是amd64,就去下64位的
wget https://cmake.org/files/v3.30/cmake-3.30.0-linux-x86_64.tar.gz
# 下载后在当前目录下执行以下命令
tar -zxvf cmake-3.30.0-linux-x86_64.tar.gz
mv cmake-3.30.0-linux-x86_64 cmake
nano ~/.profile
# 在末尾加上以下内容
export PATH=$PATH:/home/kali/cmake/bin # 修改为你cmake的路径
source ~/.profile
# 使用以下命令检查配置的cmake是否生效
cmake --version
# 配置python虚拟环境
apt upgrade
apt update
apt install python3-venv -y
如果有代理还可以设置一下git的代理,因为会拉取git仓库的分支
git config --global http.proxy 192.168.xxx.xx:xxxx # 替换为你的代理地址
git config --global https.proxy 192.168.xxx.xx:xxxx # 替换为你的代理地址
拉取git仓库
在编译micropython过程中,我们需要使用到以下仓库
按照以下顺序执行命令
git clone --recursive https://github.com/micropython/micropython.git
git clone https://github.com/lemariva/micropython-camera-driver.git
cat micropython/ports/esp32/README.md | grep "git checkout"
# 会输出类似git checkout v5.2.2的字样,也就是告诉我们要拉取哪一个版本的esp-idf
git clone -b v5.2.2 --recursive https://github.com/espressif/esp-idf.git
cd esp-idf/components
git clone https://github.com/espressif/esp32-camera
cd ../
./install.sh
# 此时可能会报错执行python -m pypi install的报错字样,按照以下内容执行即可
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
# 取消代理
unset http_proxy
unset https_proxy
# 再次执行
./install.sh
# 执行成功后会提示执行什么命令
. ./export.sh
cd ../
# 修改你对应的摄像头模块,CONFIG_摄像头_SUPPORT=y
nano micropython-camera-driver/boards/ESP32_CAM/sdkconfig.esp32cam
cp -r micropython-camera-driver/boards/ESP32_CAM micropython/ports/esp32/boards/ESP32_CAM
# 添加一个#define MODULE_CAMERA_ENABLED (1)
nano micropython/ports/esp32/boards/开发板型号/mpconfigboard.h
# 修改引脚信息,引脚的定义可以参考上一期内容(这里是重点)
nano micropython-camera-driver/src/modcamera.h
cd micropython/mpy-cross
make
cd ../ports/esp32
make submodules
cd ../../../
# 将全部 STATIC 修改为 static, nano使用ctrl + \实现全局替换
nano micropython-camera-driver/src/modcamera.c
cd micropython/ports/esp32
# 这里将BOARD=修改为你的开发板型号
make USER_C_MODULES=../../../../micropython-camera-driver/src/micropython.cmake BOARD=ESP32_GENERIC_S3 all
# 编译好后就会在当前目录下生成一个build-开发板型号的文件夹,目录下有个firmware.bin,咱们使用VMWare工具共享到主机中
apt-get remove open-vm-tools
apt-get remove --auto-remove open-vm-tools
apt-get purge open-vm-tools
apt-get purge --auto-remove open-vm-tools
apt install open-vm-tools*
mkdir /mnt/hgfs
vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other -o uid=1000 -o gid=1000 -o umask=022
# 再在VMWare中设置共享文件夹即可
cp ./build-开发板型号/firmware.bin /mnt/hgfs/共享文件夹名称/
修改引脚这里很重要,最开始在这里卡了很久,后续查了很多文档才知道要这样才能实现摄像头的捕获
烧录到开发板中
以上的内容中将camera模块编译进了micropython中,现在就可以将编译好的micropython包烧录到开发板中
pip install esptool
# 修改为你的端口,可以在设备管理器或Thonny中查看
esptool --port COM3 erase_flash
# --chip修改为你的开发板
esptool --chip esp32s3 --port COM3 write_flash -z 0 firmware.bin
烧录完成后打开Thonny, 使用以下命令查看是否将camera模块编译进了micropython
help("modules")
通过以下方式使用camera模块
import camera
try:
camera.init(0, format=camera.JPEG)
except Exception as e:# 捕获报错
print(f'camera init error:{e}')
camera.deinit() # 必须deinit否则就只能重新烧录固件
camera.init(0, format=camera.JPEG)
camera.quality(4) # 设置质量
camera.flip(1) # 垂直翻转
camera.framesize(camera.FRAME_HD) # 设置大小
buf = camera.capture()
with open("./picture.png", "wb") as f:
f.write(buf) # buf中的数据就是图片的数据
print("successful...")
camera.deinit() # 必须deinit否则就只能重新烧录固件
将文件传出后就可以得到看到捕获到的内容
总结
以上内容就是我从0开始编译带camera模块的micropython经历,下一篇文章的话,我会使用micropython + HTML教大家如何进行配网操作。
希望这篇文章能够帮助大家更顺利地开发 ESP32-Cam。我自己在研究过程中踩了不少坑,因此写下这篇文章并开启一个专栏,希望大家在学习时能避开这些问题。如果这篇文章对你有所帮助,别忘了点个赞或者关注关注我。今后,我还会继续分享更多有关 ESP32-Cam 相关内容的开发以及各种前端技术的研究,期待与你们一起成长!