制作一个无线摄像头
前言
关于ESP32
ESP32是一款低成本的高性能单片机,支持2.4GHz的WIFI、蓝牙,可以做很多有意思的物联网产品
ESP8266相信大家都很熟悉了,ESP32比8266强多了
ESP32模组是一款非常受欢迎的模组,可能是由于其低廉的价格(仅需十多元)与较高的性能(双核处理器,240Mhz主频)
关于ESP32-CAM
基于ESP32模组的ESP32-CAM开发板提供了一种低成本的无线摄像头实现方式
我购买的ESP32CAM如下
21元,带OV2640摄像头
要让它跑起来,还需要一个USB转UART,用于下载(烧录)程序
开始
安装Arduino IDE
因为不想配官方IDE环境,所以这里偷懒选了Arduino IDE
Arduino IDE 2.0看起来好新的样子,趁这次机会试一下新版
- 访问Arduino官网
- 选择2.0版本
- 下载完、解压之后双击Arduino IDE.exe
如下,即安装完成
新版比旧版启动速度快很多
安装ESP32-CAM的板卡库
打开首选项
在下面的框框填入如下网址
1 | https://dl.espressif.com/dl/package_esp32_index.json |
完成之后点击下面图片中箭头所指的地方
输入ESP32即可看到如下结果
如果没有显示,可以重启下Arduino IDE
点击安装
出现下面情况说明正在下载
通过观察json,发现要下三个依赖包
如果出现下面情况,说明没有在下载
再次点击install即可
- 情况一
- 情况二
下面这样则是正常下载
进度条在走,需要好长一段时间,挂了梯子应该会快一点
下载第二个组件esptool,用于给esp32进行程序烧录
下载第三个包:SPI File system
好不容易安装完了
编译程序
选择板卡
随便选一个即可
Tools->Board->esp32
打开示例程序
找到ESP32 Camera示例
File>Examples>ESP32->Camera->CameraWebServer
修改示例程序
先编译一遍看看潜在错误
编译还是一如既往的耗时间,一点都没改
出错了,这个报错说的是编译出来的程序大小超过了所选ESP32开发板的存储程序的空间大小
看来不能随便选开发板
重选一下开发板
Tools->Board->esp32->AI Thinker ESP32-CAM
编译通过
修改wifi的SSID和密码为自己的
连接与程序烧录
连接
USB转UART转换器TX接ESP32-CAM的RX
USB转UART转换器RX接ESP32-CAM的TX
3.3V接ESP32-CAM的VCC(或者5V接5V,因为板上有AMS1117-3.3用于将5V降压到3.3V)
GND接GND
插上电脑
如果不知道哪个COM,可以去设备管理器看
选择正确的COM
如果没有port选项,而且确定设备管理器中识别到了端口,就稍等一会,它会自己出现
进入下载模式
将IO0与GND连接起来,并按下ESP32-CAM上的RST键
RST键在这里
编译并烧录
按下箭头所指按键
烧录完成
打开串口监视器
设置波特率115200
拔掉IO0和GND的连接线,按下RST使其正常启动
错误修正
遇到下面这种情况,先拔掉电源,再重新插拔下摄像头
发现无效,找到以下片段,则修改为以下所示
成功启动
效果
访问
打开上图所示地址
开始摄像
点击start stream即可看到图像
光线不太好,比较暗
经过测试,实际效果其实还是可以的,蛮清晰的
更多操作
为了更好地使用,可以对代码进行修改
设置静态IP
有时候我们会有固定IP的需求(方便标号管理)
如果不太明白IP是什么,请不要操作
下面代码可以将IP地址固定为192.68.1.11
1 | WiFi.mode(WIFI_STA); |
添加到此处(wifi begin前)
修改成功
添加WIFI断线重连功能
代码1
1 | unsigned long wifi_recon_time = 0; |
添加到此处
代码2
1 | check_and_recon_wifi(); |
此处改为下图所示
WEB界面控制LED
有空再更
制作简单的客户端
使用Python3实现了几个小功能
(保存一张图片)get_jpeg.py
运行即可保存一张图片
需要安装requests包
1 | import requests |
(自动化设置摄像头)set_cam.py
设置摄像头并保存一张图片
这里只提供了分辨率和ISO调节以及两个我用的上的按钮,
其它设置大同小异,改改代码即可
需要requests、json包
1 | import requests, json |
运行之后
保存的图像
(获取实时图像)get_jpeg_stream.py
获取实时图像
需要opencv
1 | import requests, json |
运行效果如下,窗口显示实时图像
END
就到这里了
EOF