基于ESP32-WROVER 的摄像头踩坑记录

不得不喷一下,网上这些用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释放

​​​​​​​

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值