目录
- 基于Thonny和micropython
- ESP32-CAM开发板无法连接Thonny
- esp32cam局域网图传
- esp32代码
- 上位机代码
基于Thonny和micropython
ESP32-CAM开发板无法连接Thonny
esp32cam有两个模式:下载模式、运行模式
两种模式的接线不同 IO0 短路 GND !
正是因为两种模式接线不同,所以这个底板在Thonny中只能用来下载固件
链接: 参考链接
esp32cam局域网图传
不到1秒的延时效果还不错
esp32代码
要修改对应wifi名字、密码、目标服务器IP
import socket
import network
import camera
import time# 连接wifi
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():print('connecting to network...')wlan.connect('wifiname', 'mima') # wifi名字和密码while not wlan.isconnected():pass
print('网络配置:', wlan.ifconfig())# 摄像头初始化
try:camera.init(0, format=camera.JPEG)
except Exception as e:camera.deinit()camera.init(0, format=camera.JPEG)# 其他设置:
# 上翻下翻
camera.flip(1)
#左/右
camera.mirror(1)# 分辨率
camera.framesize(camera.FRAME_HVGA)
# 选项如下:
# FRAME_96X96 FRAME_QQVGA FRAME_QCIF FRAME_HQVGA FRAME_240X240
# FRAME_QVGA FRAME_CIF FRAME_HVGA FRAME_VGA FRAME_SVGA
# FRAME_XGA FRAME_HD FRAME_SXGA FRAME_UXGA FRAME_FHD
# FRAME_P_HD FRAME_P_3MP FRAME_QXGA FRAME_QHD FRAME_WQXGA
# FRAME_P_FHD FRAME_QSXGA
# 有关详细信息,请查看此链接:https://bit.ly/2YOzizz# 特效
camera.speffect(camera.EFFECT_NONE)
#选项如下:
# 效果\无(默认)效果\负效果\ BW效果\红色效果\绿色效果\蓝色效果\复古效果
# EFFECT_NONE (default) EFFECT_NEG \EFFECT_BW\ EFFECT_RED\ EFFECT_GREEN\ EFFECT_BLUE\ EFFECT_RETRO# 白平衡
# camera.whitebalance(camera.WB_HOME)
#选项如下:
# WB_NONE (default) WB_SUNNY WB_CLOUDY WB_OFFICE WB_HOME# 饱和
camera.saturation(0)
#-2,2(默认为0). -2灰度
# -2,2 (default 0). -2 grayscale # 亮度
camera.brightness(0)
#-2,2(默认为0). 2亮度
# -2,2 (default 0). 2 brightness# 对比度
camera.contrast(0)
#-2,2(默认为0).2高对比度
#-2,2 (default 0). 2 highcontrast# 质量
camera.quality(10)
#10-63数字越小质量越高# socket UDP 的创建
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM,0)try:while True:buf = camera.capture() # 获取图像数据s.sendto(buf, ("20.10.41.35", 9090)) # 向服务器发送图像数据time.sleep(0.1)
except:pass
finally:camera.deinit()
上位机代码
import socket
import cv2
import io
from PIL import Image
import numpy as nps = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, 0)
s.bind(("0.0.0.0", 9090)) # 注意这里修复了括号try:while True:try:data, IP = s.recvfrom(100000)if not data:continuebytes_stream = io.BytesIO(data)image = Image.open(bytes_stream)img = np.asarray(image)img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)cv2.imshow("ESP32 Capture Image", img)if cv2.waitKey(1) == ord("q"):breakexcept Exception as e:print(f"An error occurred: {e}")
finally:cv2.destroyAllWindows()s.close()