ESP32CAM的使用 (一)

ESP32CAM的使用

基础入门

import camera

camera.init(0,format=2)
camera.init(0,format=camera.GRAYSCALE) 
#默认灰度图

camera.init(0,format=3)
camera.init(0,format=camera.JPEG)
#JPG格式

# 相关格式
# JPEG -- 3
# YUV422 -- 1
# GRAYSCALE -- 2
# RGB565 -- 0


camera.framesize(5)
#320X240 设置分辨率 

img=camera.capture()



import uos

from machine import SDCard

#FAT 格式的存储卡

uos.mount(SDCard(),'/sd')
uos.listdir()
uos.chdir('/sd')
uos.listdir()


fg=open("a.jpg","w")
fg.write(img)
fg.close() 

#thonny 使用直接右击下载文件,直接查看,本地空间,OPENMV下的esp32cam有1MB的可用空间,单纯micropython下有2MB的空间


#闪关灯

#GPIO4 为LED补光灯,若长时间使用会有严重的发热问题
from machine import Pin
flash=Pin(4,Pin.OUT)
flash.on() #打开闪关灯
flash.off() #关闭闪关灯



openmv初体验

img参数直接打印为: 分辨率 文件类型 文件大小

在非jpg下 建设使用320×240 的分辨率(默认分辨率)
可用分辨率:

需要250ms (推荐分辨率 可以4FPS)
* camera.framesize(5) 5 :::: {“w”:320, “h”:240, “type”=”grayscale”, “size”:76800} ::: 267 ms
* camera.framesize(6) 6 :::: {“w”:400, “h”:296, “type”=”grayscale”, “size”:118400} ::: 249 ms

需要750ms
* camera.framesize(7) 7 :::: {“w”:480, “h”:320, “type”=”grayscale”, “size”:153600} ::: 770 ms
* camera.framesize(8) 8 :::: {“w”:640, “h”:480, “type”=”grayscale”, “size”:307200} ::: 722 ms
* camera.framesize(9) 9 :::: {“w”:800, “h”:600, “type”=”grayscale”, “size”:480000} ::: 686 ms

需要2000ms(不建议使用)
* camera.framesize(10) 10 :::: {“w”:1024, “h”:768, “type”=”grayscale”, “size”:786432} ::: 2019 ms
* camera.framesize(11) 11 :::: {“w”:1280, “h”:720, “type”=”grayscale”, “size”:921600} ::: 1819 ms
* camera.framesize(12) 12 :::: {“w”:1280, “h”:1024, “type”=”grayscale”, “size”:1310720} ::: 2126 ms
* camera.framesize(13) 13 :::: {“w”:1600, “h”:1200, “type”=”grayscale”, “size”:1920000} ::: 1968 ms

JPG模式下全分辨率可用,但是使用OPENMV建议处理分辨率为320×240 或 400×296

ESP32CAM 处理步骤

  1. 设定相机参数
  2. 拍照
  3. 使用OPENMV处理

使用img(拍摄完的对象)进行处理
使用help(img)查看其方法
和openmv的stm32设备下,除了拍照方面不同,其他方面都差不多,文档地址:
book.openmv.cc
大家做相应的替换

二维码识别:

img.find_qrcodes()
若识别到二维码,就会返回扫描的相关数据。
但是二维码需要使用灰度图片

import time,camera
camera.init(0,format=2)
camera.init(0,format=camera.GRAYSCALE) 
while True:
    img=camera.capture()
    e=img.find_qrcodes()
    if e:
        print(e)
    time.sleep(0.5)

最便宜的OPENMV设备

目前OPENMV的国内代理 星瞳 家设备价格都高高再上,再加上因为疫情STM32的芯片水涨船高,那些非 星瞳 家的OPENMV设备普遍都在100+以上,这使贫穷的我特别难受。

后来就有了他,ESP32CAM,看过我之前的视频也知道,我用过ESP32CAM的MPY固件,不过就基本只使用了拍照和网络两个功能,就把他搁置了下来。

直到我发现了这个固件,esp32cam的openmv,md 绝了,这esp32cam的可玩性直接爆表啊,而且性价比爆表,只要二十多元你就可以玩上了openmv了,目前这个固件可以完成openmv的绝大多数内容,二维码识别,人脸识别,色块识别等等

首先你先需要下载这个固件,下载地址:https://gitee.com/danmu_admin/esp32cam-openmv

首先使用usb转串口的设备连接esp32cam,请务必记住,烧录时IO0接GND,其余请看连线图。

使用下载底座的,烧录时请按一下,esp32cam板子上的RST和底座上的IO0,才能下载。

打开flash_download_tools,选择esp32,选择刚刚下载好的3个bin文件,并设置后面的地址,请看此图:

先擦除,后烧录。

烧录完成后将IO0的接地线拔掉,使用Putty连接,注意使用底座不能正常使用。

esp32cam的openmv的玩法请参照openmv的官方文档,或者关注我 我会出一系列的视频教程。

micropython Timer 定时器

micropython

from machine import Timer
y=Timer(12)
p=Timer(16)
y.init(period=9000, mode=Timer.ONE_SHOT, callback=lambda t:print(12))
p.init(period=9000, mode=Timer.PERIODIC, callback=lambda t:print(12))

Timer.ONE_SHOT 一次性

PERIODIC 重复

period=9000 时间9000ms

callback= 回调函数

注意:设置回调函数的必须传参数

def xc(a):#注意a的参数
    print(123)

y.init(period=9000, mode=Timer.ONE_SHOT, callback=xc)

micropython中文显示

使用固件

https://github.com/wangshujun-tj/mpy-Framebuf-boost

支持 esp32 esp32c3 esp12k(安信可的esp32s2)

范例代码

from machine import I2C,Pin
i2c=I2C(sda=Pin(19), scl=Pin(21))  
from ssd1306 import SSD1306_I2C
oled = SSD1306_I2C(128, 32, i2c)
oled.font_load("GB2312-16.fon")

oled.font_set(1,4,0,0)
oled.text("你",0,0,1)
oled.show()

oled.fill(0)
oled.font_set(0xab,3,4,0)
oled.text("1",32,0,1)
oled.show()

#font_set(字形1-4 0xab,旋转0-3,放大1-4,反白0-1)