同步操作将从 superddg123/esp32 wifi 投屏到oled显示 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
有arduino 和microPython两个版本,esp8266和esp32均支持,wifi无线投屏
使用流程:先打开上位机服务端,然后复位板子连接,顺序不要颠倒。
B站:super大大怪i
oled显示助手v1.1链接:
复制这段内容后打开百度网盘App,操作更方便哦。
链接:https://pan.baidu.com/s/1vYzb4HZ_ok3S7kn4yLdSwQ
提取码:m1ys
oled显示助手v1.2链接:请看版本更新说明
链接:https://pan.baidu.com/s/12cyvd74OJ7UvAfkQ6g56_A
提取码:s56g
复制这段内容后打开百度网盘手机App,操作更方便哦
关于软件,大家可以提出意见或想法,我会优化
esp32用的arduino
oled显示助手由Python-tkinter编写
esp32 iic默认引脚(scl=22,sda=21)
esp8266 iic默认引脚(scl=5,sda=4)
也可以在u8g2构建对象那里参数更改为其他引脚,但是建议使用硬件IIC,速度更快
使用该软件之前,你需要修改程序里wifi信息,ip填写上位机打开服务端后显示的地址,端口固定8888
让esp32连接到同一个局域网中(同一路由器或电脑热点),连接成功后,OLED会显示连接成功
服务端连接成功后,就可以投屏啦,自由的发送图片和视频!
oled显示助手的帧速度设置,计算方法为1/视频的帧率 如(1/30帧=0.034s,1/24帧=0.41),即可以达到原视频的帧率,如果你的mcu达不到每帧显示(microPython较慢,需要跳帧),你可以将取帧频率设置为2,就是间隔一帧发送一次(30张图发送15张),从而保证OELD帧数的提高,跳帧后你需要调高你的帧速设置(30帧的视频取帧频率为2,要保持30帧的流畅度,你需要将帧数设置为 1/15=0.066s)
定义:图像的二值化,就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的只有黑和白的视觉效果。
灰度值0:黑,灰度值255:白
一幅图像包括目标物体、背景还有噪声,要想从多值的数字图像中直接提取出目标物体,常用的方法就是设定一个阈值T,用T将图像的数据分成两部分:大于T的像素群和小于T的像素群。这是研究灰度变换的最特殊的方法,称为图像的二值化(Binarization)。
二值化的方法选择,其中numpy,OTSU(大律法),mean(均值),gauus(高斯),这些都是cv2里的自适应阈值的方法,同时我加入了自定义阈值设置,用户可以根据自己的需要,去调节黑白的对比度。
由于用的是i2c协议,开始信号,应答信号,数据传输等,全在一根线上,有系统开销,速度慢是很正常的,我找到他们之间的区别。
IIC总线速度为从0Hz到3.4MHz。它没有SPI 那样快,但对于系统管理器件如温度传感器来说则非常理想。IIC 存在系统开销,这些开销包括起始位/停止位、确认位和从地址位,但它因此拥有流控机制。
SPI 时钟速度很快,范围可从几兆赫兹到几十兆赫兹,且没有系统开销。SPI 在系统管理方面的缺点是缺乏流控机制,无论主器件还是从器件均不对消息进行确认,主器件无法知道从器件是否繁忙。
esp32 SPI最高速度可以设置为80MHz,对于彩屏数据传输非常快,有兴趣的朋友可以去试试
esp8266 和esp32 使用 arduino 版本的程序最大帧速对比
从准备接受数据到刷新图片结束耗费的时间,称为显示一张图片所需要的时间,esp32大概40ms刷新完一张图片,也就是说1s=1000ms能刷新25张图片,这也直接得出esp32支持该IIC协议OLED的最大帧率为25帧Fps/s,由于我没有SPI接口的OLED,本次没有做对比,估计肯定是SPI速度翻倍甚至更多,大家感兴趣可以试试。
另外,电脑的图片数据字节排列顺序一般是 逐行式-由高到底排列,而u8g2.drawXBMP()函数要求的顺序是,逐行式-由底到高排列,这个问题我没发现之前困扰了我一下午,发过去的图片和视频都是花的,我以为是u8g2库有问题,乱码,后面经过显示多张图片发现,黑白顺序有所颠倒,才想到图片的取模方式是否有问题,所以编写了个字节反转函数byte_reverse()得以解决
本软件的投屏,是不断的截取屏幕的画面,经过cv2处理后发送给esp32显示,
方法用的是Python自带库 PIL 中的ImageGrab.grab()函数截取图片
截取图片的致命缺点就是速度,该方法截取1080-1920(全屏)的时间为50ms左右,也就是说,它的最大帧率只有20帧左右,所以我们投过去的画面都是跳帧后显示的,比如播放一个30帧的视频,而截屏频率为15帧/s,你就会发现画面非常卡顿,并不是像发送视频那样,每一帧都发送过去显示了的。
真正意义上的投屏,是将视频音频一起投过去,用DNLA、Miracast,这种专有的投屏协议,家里的电视机大多就是采用的DNLA协议。
今天b站有粉丝发现 OLED显示助手获取本地IP出错导致无法连接,原来是由于多个网络适配器造成上位机获取IP不准确,目前已经更新,获取的IP是正在上网的IP,完善了 同步帧速 功能,帧速=1/(视频帧率/取帧频率),如(1/(30/1)=0.033),同时将投屏截图频率速度提高了40%,可能esp8266 microPython使用会有花屏的情况,这是由于发送速度过快,而处理速度过慢造成的,如出现花屏。可继续使用1.1版本(如出现获取ip不正确,电脑设置打开网络适配器,除wifi以外,关闭其他的网络适配器)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。