不得不喷一下,网上这些用ESP32-CAM 那个固件烧录到这个ESP32-WROVER 是没办法驱动摄像头的,因为引脚都不一样,所以是无法驱动摄像头的,Arduino的摄像头实例的话是有对这个开发板引脚的定义的,没办法人生苦短我用python,只能自己去编译ESP-CAM得固件了,上个文章我们已经介绍了如何变异ESP-CAM固件我们只需要修改一下引脚定义就可以驱动这个板子了
引脚定义修改
//WROVER-KIT PIN Map
#define CAM_PIN_PWDN -1 //power down is not used
#define CAM_PIN_RESET -1 //software reset will be performed
#define CAM_PIN_XCLK 21
#define CAM_PIN_SIOD 26 // SDA
#define CAM_PIN_SIOC 27 // SCL
#define CAM_PIN_D7 35
#define CAM_PIN_D6 34
#define CAM_PIN_D5 39
#define CAM_PIN_D4 36
#define CAM_PIN_D3 19
#define CAM_PIN_D2 18
#define CAM_PIN_D1 5
#define CAM_PIN_D0 4
#define CAM_PIN_VSYNC 25
#define CAM_PIN_HREF 23
#define CAM_PIN_PCLK 22
然后重新编译固件烧录测试
使用microdot 构建一个web服务访问视频流
代码:
from lib.microdot.microdot import Microdot
import time
import camera
from machine import reset, UART
import network
import utime
import _thread
SSID = "H3C"
PASSWORD = "jiashuaimin123ABCD"
# # 定义搞一个串口
uart1 = UART(1, baudrate=38400, tx=20, rx=12)
uart2 = UART(2, baudrate=38400, tx=14, rx=15)
def connect():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
print('connecting to network...')
wlan.connect(SSID, PASSWORD)
while not wlan.isconnected():
pass
print('network config: ', wlan.ifconfig())
connect()
app = Microdot()
# wait for camera ready
for i in range(5):
global cam
# 初始化摄像头
try:
camera.deinit() # 如果捕获到异常,则释放。
cam = camera.init(0, format=camera.JPEG) # 使用try捕获初始化异常
except Exception as e:
camera.deinit() # 如果捕获到异常,则释放。
cam = camera.init(0, format=camera.JPEG)
print("Camera ready?: ", cam)
if cam:
print("Camera ready")
break
else:
time.sleep(2)
else:
print('Timeout')
reset()
@app.route('/')
def index(request):
return ''' <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Micropython</title>
</head>
<body>
<h1>人生苦短,我就用python搞!!!!!!</h1>
<img src="/video_feed" width="30%">
</body>
</html>''', 200, {'Content-Type': 'text/html'}
@app.route('/video_feed')
def video_feed(request):
def stream():
yield b'--frame\r\n'
while True:
frame = camera.capture()
yield b'Content-Type: image/jpeg\r\n\r\n' + frame + \
b'\r\n--frame\r\n'
# time.sleep_ms(50)
return stream(), 200, {'Content-Type':
'multipart/x-mixed-replace; boundary=frame'}
def pushQ():
while True:
try:
utime.sleep_ms(10)
if uart1.any():
bytesd = uart1.read()
print(bytesd)
except Exception as e:
print(e)
if __name__ == '__main__':
try:
print("start acp msg")
_thread.start_new_thread(pushQ, ())
app.run(debug=True)
except Exception as e:
camera.deinit() # 在使用摄像头后,调用camera.deinit释放