(1) ESP32获取图像,并通过电脑端服务器显示图像

news2024/11/24 9:58:14

目录​​​​​​​

一、所需器件工具

二、客户端与服务器进行UDP通信

1、客户端代码

2、服务器端代码

3、效果展示

三、客户端拍照,通过UDP传输到服务器进行显示

1、客户端获取图像并UDP传输

2、电脑端服务器显示图像

3、效果展示

四、代码链接


一、所需器件工具

        1.ESP32开发板:开发板购买链接

二、客户端与服务器进行UDP通信

        UDP(User Datagram Protocol)是一种无连接的、不可靠的传输层协议,它用于在计算机网络上通过数据包传输信息。

        UDP通信适用于那些对数据传输延迟要求较低、可以容忍少量数据丢失的应用场景,例如音频和视频流传输、实时游戏、DNS查询等。然而,由于UDP不提供可靠性,如果数据包在传输过程中丢失或到达顺序被打乱,应用程序需要自行处理这些问题。因此,在选择UDP作为通信协议时,需要仔细考虑应用的需求和可能的数据丢失风险。

1、客户端代码

import socket
import network

#连接wifi
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
    wlan.connect('wifi名称', 'wifi密码')
    while not wlan.isconnected():
         pass
print('客户端的网络参数:', wlan.ifconfig())

ip = ("192.168.0.105",9090) #填写服务器IP地址和端口 
# 创建一个UDP套接字并绑定到指定的IP地址和端口
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM,0) # 创建UDP套接字

#先发送后接收
s.sendto("我是ESP32-CAM客户端".encode(),ip) #向服务器发送数据,这个数据必须是 Byte类型的

data,IP = s.recvfrom(1024) #接收服务器的消息
print(data.decode())

2、服务器端代码

import socket

# 创建一个UDP套接字并绑定到指定的IP地址和端口
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM,0)  # 创建UDP套接字

s.bind(("192.168.0.105",9090)) # 绑定IP地址和端口(填入自身IP地址)

while True:

    #先接收后发送
    data,IP = s.recvfrom(1024) #接收客户端发来的消息
    print(data.decode(),IP)

    s.sendto("我是服务器".encode(),IP) #服务器向客户端发送消息

3、效果展示

三、客户端拍照,通过UDP传输到服务器进行显示

        ESP32-CAM是一款基于ESP32芯片的摄像头模块,搭载了OV2640传感器,支持高达2百万像素的图像分辨率。它能够拍摄静态图像和简单的视频,并支持JPEG编码和解码,具备microSD卡存储能力。该模块适用于监控、物联网、教育和娱乐等多个应用领域。

        OpenCV是计算机视觉中经典的专用库,其支持多语言、跨平台,功能强大。OpenCV-Python为OpenCV提供了Python接口,使得使用者在Python中能够调用C/C++,在保证易读性和运行效率的前提下,实现所需的功能。  参考链接

1、客户端获取图像并UDP传输

        通过ESP32-CAM获取JPEG的图像数据流,具体代码实现方法:ESP32图像数据获取:http://t.csdn.cn/zdLhi。然后通过UDP通信把数据传输到服务器端,服务器获取到数据后对数据进行处理。

import socket
import network
import time
import cam
 
#连接wifi
wlan = network.WLAN(network.STA_IF)
wlan.active(True)

if not wlan.isconnected():
    wlan.connect('HUAWEI APL', 'APL84365170')  #输入用户名和密码
    while not wlan.isconnected():
         pass
        
print('客户端的网络参数:', wlan.ifconfig())

ip = ("192.168.3.111",9090) #服务器IP地址和端口
# 创建一个UDP套接字并绑定到指定的IP地址和端口  
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM,0) # 创建UDP套接字

while True:
    
    buf = cam.camera.capture() #获取图像数据流
    
    s.sendto(buf,ip) #向服务器发送图像数据流
    
    time.sleep(0.1)  #延时0.1秒

2、电脑端服务器显示图像

        这段Python程序是一个基于UDP协议的图像接收和显示应用。它通过创建一个UDP socket,绑定到本地IP地址和端口,实时接收从指定IP地址发送过来的图像数据,然后将数据解码为图像并在窗口中显示。用户可以通过按下键盘上的"q"键来退出程序。

# 导入必要的模块  
import socket  # 用于网络通信  
import cv2  # 计算机视觉库,用于图像处理  
import io  # 用于处理流数据  
from PIL import Image  # 用于处理图像数据  
import numpy as np  # 用于进行数值计算  



# 创建一个UDP套接字并绑定到指定的IP地址和端口  
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, 0)  # 创建UDP套接字  
s.bind(("192.168.3.111", 9090))  # 绑定IP地址和端口(填入自身IP地址)


# 进入主循环,等待接收数据  
while True:
    
    data, IP = s.recvfrom(100000)  # 从套接字接收数据,最多接收100000字节的数据  

    bytes_stream = io.BytesIO(data)  # 将接收到的二进制数据转换为字节流  
    image = Image.open(bytes_stream)  # 从字节流中打开图像  
    img = np.asarray(image)  # 将图像转换为NumPy数组  
  
    # 将颜色通道从BGR转换为RGB,因为OpenCV读取图像为BGR格式,而我们通常使用的为RGB格式  
    img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)  
  
    cv2.imshow("12", img_rgb)  # 显示图像,窗口名称为"12"  
  
    # 如果按下"q"键,则退出循环  
    if cv2.waitKey(1) == ord("q"):
        cv2.destroyAllWindows() # 关闭所有打开的窗口
        break

3、效果展示

四、代码链接

代码下载链接:https://download.csdn.net/download/qq_26043945/88368391

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1034027.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高压放大器电源有什么作用和用途

高压放大器是一种专门用于放大高压信号的电子设备。它可以将低幅度的输入信号放大成高幅度的输出信号,用于驱动高压负载或处理高压信号。然而,高压放大器需要特定的电能来运行,而这就是电源的作用。 高压放大器电源的主要作用是为高压放大器提…

Python入门教程 | Python 命名空间和作用域

命名空间 先看看官方文档的一段话: A namespace is a mapping from names to objects.Most namespaces are currently implemented as Python dictionaries。 中文翻译:命名空间(Namespace)是从名称到对象的映射,大部分的命名空间都是通过 P…

投资理财五大定律

大家好,我是财富智星,今天跟大家分享一下理财的五大定律,一起来学习吧。 一、投资理财,别把鸡蛋放一个篮子里 投资理财,不要把所有的资金都放在同一个理财产品中。应该了解市场上各种理财产品的风险、收益、周期和起买…

古代有没有电子元器件?

手机,电脑,电视等等电子产品,无时无刻充斥在我们的生活中,如果有一天突然没有了这些功能多样的电子产品,估计大部分人都会一时之间难以适应。 这就好比正在上网,结果突然被人断了网,导致无网络连…

Linux实现HTTP服务器

在Linux系统中,我们可以利用HTTP服务器代理来实现网络请求的转发和加速,从而提高网站的访问速度和性能。本文将为您详细介绍如何搭建HTTP服务器代理,让您在网络世界中畅通无阻,更加快速高效地进行数据通信。 一、了解HTTP服务器代…

下载水果FLStudio21.2软件安装更新教程

编曲是一种对音乐创作过程中涉及的元素和步骤进行组织和安排的艺术形式。对于想要学习编曲的人来说,以下是一些有用的建议: 1. 学习基础知识 在开始学习编曲之前,你需要掌握一些基础知识,例如音乐理论、乐器演奏和数字音乐制作技…

【Elsevier旗下】JCR2/3区,最快25天录用!计算机与娱乐、教育、游戏、新媒体均可

期刊简介: 出版社:Elsevier 影响因子(2022):2.5-3.0 期刊分区:JCR2/3区,中科院4区 检索数据库:SCIE 在检 数据库检索年份:2016年 预警情况:无中科院预警…

【计算机毕业设计】基于SpringBoot的电影在线预定与管理系统的设计与实现

博主主页:一季春秋博主简介:专注Java技术领域和毕业设计项目实战、Java、微信小程序、安卓等技术开发,远程调试部署、代码讲解、文档指导、ppt制作等技术指导。主要内容:毕业设计(Java项目、小程序等)、简历模板、学习资料、面试题…

uni-app 苹果手机底部安全区域的适配问题

方案一(最快速) 解决办法&#xff1a;利用 IOS 新增的 env() 和 constant() 特性来解决&#xff0c;不需要自己动态计算高度&#xff0c;只需将如下 CSS 代码添加到样式中即可。无法解决如果底部区域是输入框&#xff0c;苹果手机的输入法会把输入框遮挡的问题 <!-- 底部栏…

驱动相关命令,指令,API,结构体,路径

【linux内核模块编程】 内核模块 编译&#xff1a;make modlues 安装模块&#xff1a;insmod ***.ko 查看已安装模块&#xff1a;lsmod 卸载模块&#xff1a;rmmod *** 查看模块相关信息&#xff1a;modinfo ***.ko【printk打印 & 输出级别 & dmesg命令】 打印函数&a…

C语言字符和字符串函数(2)

大家好&#xff0c;我今天继续来给大家分享C语言中的字符和字符串函数。 目录 ** 1.字符分类函数 2.memcpy 3.memmove 4.memcmp** 1.字符分类函数 islower判断字母小写函数 int main() {char ch w;if (islower(ch)){printf("小写\n");}else{printf("非小写\…

【附源码】用Python写了一个下载网站所有内容的软件

目录 环境介绍:代码实战获取数据获取视频采集弹幕采集评论GUI部分 前言 嗨喽~大家好呀&#xff0c;这里是小曼呐 ❤ ~! 天我们分享一个用Python写下载视频弹幕评论的代码。 顺便把这些写成GUI&#xff0c;把这些功能放到一起让朋友用起来更方便~ 环境介绍: python 3.8pycha…

Request method ‘GET‘ not supported,不支持GET形式访问

org.springframework.web.HttpRequestMethodNotSupportedException: Request method ‘GET’ not supported 原因&#xff1a;异常提示的很明确&#xff0c;请求不支持GET方式访问&#xff0c;出现这种问题一般都是由于限制请求接口为POST&#xff0c;然后使用GET形式访问造成的…

Postman应用——Variable变量使用(Global、Environment和Collection)

文章目录 变量的使用同名变量优先级Postman内置变量 Global、Environment和Collection变量设置&#xff0c;点击查看。 变量的使用 语法&#xff1a; {{变量名}}使用{{}}包裹变量名&#xff0c;引用设置好的变量。 注意&#xff1a;Environment变量引用前需要先选择已有的环…

mysqld_exporter监控MySQL服务

一、MySQL授权 1、登录MySQL服务器对监控使用的账号授权 CREATE USER exporterlocalhost IDENTIFIED BY 123456 WITH MAX_USER_CONNECTIONS 3; GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO exporterlocalhost; flush privileges;2、上传mysqld_exporter安装包&#…

【2023研究生数学建模】E题完整解答过程

2023年中国研究生数学建模E题解答过程 目前已经完成E题全部代码和文档&#xff0c;包含代码&#xff0c;结果&#xff0c;技术文档&#xff0c;以及详细的解题思路&#xff0c;分享一部分给大家&#xff0c;需要完整版的直接私信我哦~

攻防世界做题

xff_referer 进来之后显示ip地址必须为123.123.123.123 抓包看一下 要求ip是123.123.123.123 就可以用xff伪造即X-Forwarded-For: 123.123.123.123 得到显示&#xff1a; 说必须来自google&#xff0c;伪造referer Referer: https://www.google.com 我的要在右边的 inspec…

报错处理:解决Linux上Nginx启动报错:Worker Processes Sleeping

大家好&#xff0c;今天我来分享一个我在运维过程中遇到的问题&#xff0c;关于Linux上Nginx启动时出现的“Worker Processes Sleeping”报错&#xff0c;以及如何解决这个问题的。 首先&#xff0c;让我们来看看这个报错信息。当你在启动Nginx时&#xff0c;如果你看到类似以下…

如何用ArkUI实现一个加入购物车效果?

关键词&#xff1a;ArkUI的动效能力&#xff0c;动效开发&#xff0c;ArkUI动画 我们在购买商品时&#xff0c;往往习惯将商品先加入购物车&#xff0c;然后在购物车里确认后再下订单&#xff0c;这是一个典型的访问者模式。对于这个高频场景&#xff0c;增添一些动效可以增加a…

基于springboot+vue的老年一站式服务平台

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…