当前位置: 首页 > news >正文

网页制作与网站建设课程设计ui设计基础知识

网页制作与网站建设课程设计,ui设计基础知识,wordpress 百度收录,品牌家装十大排名ESP32CAM人工智能教学15 Flask服务器TCP连接 小智利用Flask在计算机中创建一个虚拟的网页服务器服务器#xff0c;让ESP32Cam通过WiFi连接#xff0c;把摄像头拍摄到的图片发送到电脑中#xff0c;并在电脑中保存成图片文件。 Flask是用Python编写的网页服务程序WebServer。…ESP32CAM人工智能教学15 Flask服务器TCP连接 小智利用Flask在计算机中创建一个虚拟的网页服务器服务器让ESP32Cam通过WiFi连接把摄像头拍摄到的图片发送到电脑中并在电脑中保存成图片文件。 Flask是用Python编写的网页服务程序WebServer。这个程序首先在电脑端用Python编写一个服务器端的程序并创建一个指向5000端口的网页服务用于接收ESP32CAM上传的图片数据并保存成图片文件。 本来这个程序挺简单的但是在测试程序时一直都过不了。测试程序耗了我三天时间最后我采用“蚂蚁啃大象”的方法采用由简及繁的方法终于攻下难关。本文的测试主要参考博客内容https://blog.51cto.com/u_16213596/7788901 第一轮给在线网站发信息 首先我们在计算机中用Python编写一个客户端的测试程序然后利用requests驱动库给网上的一个测试网站发送字符信息http://httpbin.org/post是网上为我们提供的一个学习测试的网站。 我们在测试程序中创建一个字典d{‘jpg’,’tupian’}然后把信息发送到测试网页。点击菜单上的Run运行结果在IDLE Shell窗口中可以看到第六行返回了用户发送给网站的信息”jpg”:  ”tupian”。这样表面这个程序的requests的驱动库运行成功了。当然运行程序之前需要在Python中先安装requests的驱动库安装方法看前一课可以到清华大学的镜像网站去下载 第二轮给本地Flask服务器发文字、图片信息 我们在Python中安装Flask驱动库然后编写服务器端的程序test.py。在程序中创建一个一个网页服务开放计算机的5000端口并提供一个上传网页用于接收客户端发送过来的消息。如图所示客户端访问http://192.168.1.162:5000/updata可以给服务器端发送消息了。 修改客户端程序test02.py把上传的地址改成本地的Flask服务器的上传网页地址然后还是给服务器发送消息”jpg”:  “tupian”。 接下来是运行测试程序先运行服务器端的程序test.py可以看到Flask服务器开启了http://192.168.1.162:5000/。接着运行客户端程序test02.py可以看到服务器端的IDLE Shell窗口显示一条消息表示接收到了一条来自客户端的消息并读取消息字典中名为“jpg”的内容并组成字符串返回给客户端。在客户端的IDLE Shell窗口中看到了服务器返回的字符串”user”:  “tupian”。 接下来这个测试就简单了首先把客户端中发送的消息“jpg”的内容更改为一张图片的内容。我们先准备一张图片命名为333.jpg和test.py、test02.py一起都保存在同一个文件夹中Python的安装目录我这里是D:\Python312\。接着更改服务器端的程序返回客户端的消息为接收到的数据长度值。 接下来先运行服务器端的程序在运行客户端的程序可以看到在服务器端的Shell看到接收到了数据在客户端的Shell看到返回的图片文件大小了。这样这张图片就上传成功了可以在D:\Python312\中看到两个图片文件333.jpg是被上传的原图 555.jpg是上传后保存下的图片 这个上传过程就像是左手换右手一样这两张图的内容是一模一样的。 第三轮ESP32Cam读取内存图片发送给Flask 接下来我们进行的是跨设备之间的传递我们让ESP32Cam开发板读取内存中的一张图片的数据然后通过WiFi连接把图片数据发送到计算机中的Flask服务器中保存下来。 首先我们在Thonny中连接ESP32Cam并且下载一个urequests.py文件如果没有可以复制后面的相关代码内容然后在这里粘贴上传上传到ESP32Cam中。 编写ESP32Cam客户端的程序先连接WiFi然后连接到服务器上传网页读取图片内容上传数据。需要注意的是这个urequests.py驱动库文件只能传递二进制的数据无法传递JSON的字符消息所以在客户端和服务器端的程序都有相应的小修改。 我们先在Thonny中上传一张图片到ESP32Cam中。打开服务器端的程序再运行Thonny中的程序这样就可以看到ESP32Cam内存中的那张图片上传到了计算机D:\Python312\文件夹中了在Thonny的Shell窗口中看到了服务器程序返回来的图片文件大小的数字了。 第三轮ESP32Cam摄像头拍摄图片发送给Flask 在这个测试中我们把发送的图片改为摄像头拍摄到了图片经过运行程序测试可以看到摄像头拍摄到的图片发送到了计算机中的D:\Python312\的文件夹中了。 避坑笔迹之前一直测试的程序也是这个程序但是就是一直不成功一直找不到失败的原因不知道传送的过程中究竟是哪个环节出现了问题这个问题一直困扰了我三天时间经过反反复复的测试就是不成功。 后来我就采用“蚂蚁啃大象”的办法从最简单的测试开始尽可能地砍掉了所有的环节保留最简单的连接通道第一轮测试本地客户端程序发送数据到线上的测试网站保留最简单、最短传输路径的测试因为网上的测试网站基本可以忽略存在问题的可能绝大的概率是正确的。等第一轮测试通过后就慢慢增加测试的传输路径长度一点一点的向着最终的目标慢慢前进经过几轮的测试最终完成了ESP32Cam拍摄照片利用TCP连接发送到Flask服务器中的程序。 最后的测试成果与网上的程序之前一直不通过的相比我在摄像头初始化完成的后面增加了一个0.2秒的延时等待摄像头拍摄图片然后在获取图片的数据这样程序测试就通过了。 这个就是三天摸索的结果不过最终还是找到了一个解决问题的办法当程序出现问题的时候如何化繁为简地进行测试从最简单开始一直到实现全部的预定功能。 如果在测试的时候我们点击Thonny中的运行按钮可以成功发送一张照片。第二次运行的时候出现了错误信息可以拔下ESP32Cam重新插如电脑中重新运行程序右可以了。说明这个程序还是有缺陷的还需要改进。 第一轮测试Python编写客户端程序给在线HTTP服务网站发送信息import requests import binascii, jsondef send_image():url http://httpbin.org/postd {jpg: tupian}r requests.post(url, datad)print(r.text)send_image()/ 第二轮测试 在电脑中创建两个Python程序一个做服务器一个做客户端 在Python安装目录中客服端读取333.jpg发送 服务器端接收保存成555.jpgtest.py 服务器端from flask import Flask, request import binasciiapp Flask(__name__)app.route(/updata, methods[POST,GET]) def updata():print(保存图片1)a request.form.get(jpg)with open(555.jpg,wb) as f:val binascii.a2b_base64(a)f.write(val)return (user:%d %len(a))if __name__ __main__:app.run(0.0.0.0, 5000)test02.py 客户端import requests import binascii, jsondef send_image():url http://192.168.1.162:5000/updatawith open(333.jpg,rb) as f:img f.read()img binascii.b2a_base64(img)d {jpg: img}r requests.post(url, datad)print(r.text)send_image()/ 第三轮测试 ESP32CAM读取内存中的一张照片发送到Python创建的Flask服务器端from flask import Flask, request import binasciiapp Flask(__name__)app.route(/updata, methods[POST,GET]) def updata():print(保存图片1)a request.get_data() #直接接收二进制with open(555.jpg,wb) as f:f.write(a)return (user:%d %len(a))if __name__ __main__:app.run(0.0.0.0, 5000) ESP32Cam 设备作为客户端import time, networkdef connectWiFi():wlan network.WLAN(network.STA_IF)if wlan.isconnected():wlan.disconnect()wlan.active(True)wlan.connect(ChinaNet-xxVP, 123456789)while not wlan.isconnected():passprint(network config: , wlan.ifconfig())connectWiFi()import urequests as requestsdef send_image():url http://192.168.1.162:5000/updatawith open(333.jpg, rb) as f:img f.read()r requests.post(url, data img)print(r.text)r.closesend_image()第四轮测试 ESP32CAM拍下一张照片发送到Python创建的Flask服务器端Python服务器端from flask import Flask, request import binasciiapp Flask(__name__)app.route(/updata, methods[POST,GET]) def updata():print(保存图片1)a request.get_data() #直接接收二进制with open(555.jpg,wb) as f:f.write(a)return (user:%d %len(a))if __name__ __main__:app.run(0.0.0.0, 5000) ESP32Cam客户端 import time, networkdef connectWiFi():wlan network.WLAN(network.STA_IF)if wlan.isconnected():wlan.disconnect()wlan.active(True)wlan.connect(ChinaNet-xxVP, 123456789)while not wlan.isconnected():passprint(network config: , wlan.ifconfig())connectWiFi()import camera import time import urequests as requestsdef send_image():url http://192.168.1.162:5000/updatawhile not camera.init(0):time.sleep(0.2)camera.deinit()time.sleep(0.2)time.sleep(0.2) #稍作延时等待拍照img camera.capture() # 获取照片camera.deinit()r requests.post(url, data img)print(r.text)r.closesend_image()// / 保存到ESP32Cam中的 urequests.py 驱动库源代码import usocketclass Response:def __init__(self, f):self.raw fself.encoding utf-8self._cached Nonedef close(self):if self.raw:self.raw.close()self.raw Noneself._cached Nonepropertydef content(self):if self._cached is None:self._cached self.raw.read()self.raw.close()self.raw Nonereturn self._cachedpropertydef text(self):return str(self.content, self.encoding)def json(self):import ujsonreturn ujson.loads(self.content)def request(method, url, dataNone, jsonNone, headers{}, streamNone,paramsNone):try:proto, dummy, host, path url.split(/, 3)except ValueError:proto, dummy, host url.split(/, 2)path if proto http::port 80elif proto https::import usslport 443else:raise ValueError(Unsupported protocol: proto)if : in host:host, port host.split(:, 1)port int(port)if params:path path ?for k in params:path path kparams[k]ai usocket.getaddrinfo(host, port)addr ai[0][4]s usocket.socket()s.connect(addr)if proto https::s ussl.wrap_socket(s)s.write(b%s /%s HTTP/1.0\r\n % (method, path))if not Host in headers:s.write(bHost: %s\r\n % host)# Iterate over keys to avoid tuple allocfor k in headers:s.write(k)s.write(b: )s.write(headers[k])s.write(b\r\n)if json is not None:assert data is Noneimport ujsondata ujson.dumps(json)if data:s.write(bContent-Length: %d\r\n % len(data))s.write(b\r\n)if data:s.write(data)l s.readline()protover, status, msg l.split(None, 2)status int(status)#print(protover, status, msg)while True:l s.readline()if not l or l b\r\n:break#print(l)if l.startswith(bTransfer-Encoding:):if bchunked in l:raise ValueError(Unsupported l)elif l.startswith(bLocation:) and not 200 status 299:raise NotImplementedError(Redirects not yet supported)resp Response(s)resp.status_code statusresp.reason msg.rstrip()return respdef head(url, **kw):return request(HEAD, url, **kw)def get(url, **kw):return request(GET, url, **kw)def post(url, **kw):return request(POST, url, **kw)def put(url, **kw):return request(PUT, url, **kw)def patch(url, **kw):return request(PATCH, url, **kw)def delete(url, **kw):return request(DELETE, url, **kw)
http://www.w-s-a.com/news/167657/

相关文章:

  • 公司网站重新备案做电商没几个能赚钱的
  • 网站开发我们都能解决怎样做网站吸引客户
  • 网站首页图片切换代码wordpress minfy
  • 什么程序做网站收录好企业搭建网站的必要性
  • 建设网站主题建站必须要域名吗
  • 网站建设海报设计购物平台网站建设框架
  • 湖北在线网站建设建一个网站迈年
  • 上班自己花钱做的网站网站首页的动态怎么做
  • 台州网站建设哪家便宜沧州最新消息今天
  • 建设网站 请示 报告wordpress会员制
  • 青岛建网站人做网站怎么赚钱广告
  • 网站建设哪家好公司跨境电商展会2023
  • 设计大神云集的网站是南通市 网站设计
  • 心理咨询网站模板企业画册封面设计
  • 做网站 南京网站建设的重难点分析
  • 深圳做网站980移动网站开发语言
  • 网站评论怎么做seo关键词优化方法
  • 市级部门网站建设自评报告网站优化文章怎么做
  • 可不可以异地建设网站学做网站培训班要多少钱
  • 茌平网站建设公司免费的云服务器有哪些
  • 手机网站单页面铜陵网站制作公司
  • 网站logo怎么做才清晰千库网官网首页登录
  • 山西省建设银行网站首页长沙网站建设制作
  • 襄阳市做网站 优帮云百度搜索次数统计
  • 自己做视频直播网站盐城做网站多少钱
  • 买个网站服务器多少钱重庆做的好的房产网站
  • 深圳定制建站网站建设推广关键词怎么设置
  • 宝山网站建设 网站外包修改wordpress版权
  • 建立网站的基本步骤新网站多久会被百度收录
  • 软件设计开发流程图廊坊关键词seo排名方案