电脑端Python程序作为视频数据的服务器,借助OpenCV实时读取视频帧,并进行二值图像转换,尺寸调整,再将二值图像转为数组,并以二进制形式的数据通过socket方式无线发送给ESP8266。
ESP8266采用Arduino IDE编程,借助U8g2库,将图像数据实时显示到OLED屏幕中。

1 ESP8266端视频帧接收与播放程序
ESP8266作为socket客户端,接收服务端发送的图像帧数据,进行显示。
ESP8266使用Arduino IDE环境进行开发。
1.1 WIFI初始化与服务器连接
#define IP "192.168.5.100"
#define PORT 8080
void initWiFi()
{
Serial.print("Connecting WiFi...");
WiFi.mode(WIFI_STA); //配置WIFI为Station模式
WiFi.begin(ssid, pass); //传入WIFI热点的ssid和密码
while (WiFi.status() != WL_CONNECTED) //等待连接成功
{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP()); //打印自己的IP地址
client.connect(IP, PORT);
}
1.2 视频显示主循环
uint8_t testb[1024] = {};
void loop()
{
//Serial.println("hello esp8266");
delay(10);
while (client.available())
{
delay(12);
client.read(testb, 1024);
u8g2.firstPage();
do {
u8g2.drawXBM(0, 0, 128, 64, testb);
} while (u8g2.nextPage());
}
}
2电脑端视频编码发送程序
电脑端作为socket服务器端,将视频帧数据发送出去。
电脑端采用Python3编程,借助OpenCV实现视频的读取与图像数据格式转换。

2.1 主程序
程序的基本思想是:
利用OpenCV读取视频文件
对视频帧的图像,进行尺寸修改
对图像进行二值化处理
将二值图像转换为数组
将数组通过socket发送出去
video_path="badapple_320240_xvid.mp4"
def PlayVideo(video_path, client):
endian = 'L'
color_reverse = 'false'
c = 0#累计帧数
timeF = 8#隔x帧截一次图
video = cv2.VideoCapture(video_path) #打开视频
player = MediaPlayer(video_path) #打开音频
while True:
grabbed, frame= video.read()
audio_frame, val = player.get_frame()
if not grabbed:
print("End of video")
break
if cv2.waitKey(28) & 0xFF == ord("q"):
break
cv2.imshow("Video", frame)
if val != 'eof' and audio_frame is not None:
img, t = audio_frame
if (c % timeF == 0): # 每隔timeF帧进行存储操作
frame = cv2.resize(frame,(128,64))#调整尺寸
frame = binary_image(frame)#二值化
matrix = img_to_matrix(frame, endian, color_reverse)
data = bytes(matrix)
client.send(data)
c = c + 1
#time.sleep(0.2)
#cv2.waitKey(1)
video.release()
cv2.destroyAllWindows()
###############
client = 0
client = socket_start()
PlayVideo(video_path, client)
2.2 图像转为数组
利用OpenCV,将图像转为黑白图像:
def binary_image(image):#将图像处理为二值化的程序
gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY) #把输入图像灰度化
h, w =gray.shape[:2]
m = np.reshape(gray, [1,w*h])
mean = m.sum()/(w*h)
ret, binary = cv2.threshold(gray, mean, 255, cv2.THRESH_OTSU)
return binary
然后再转为数组:
def img_to_matrix(frame, endian, color_reverse):
width = frame.shape[1] #128
height = frame.shape[0] #64
if endian == 'B':
byte_reverse = True
else:
byte_reverse = False
if color_reverse == 'true':
color_reverse = True
else:
color_reverse = False
unalign = 0
matrix = list()
if (width%8) != 0:
unalign = 1
for i in range(0, height): #64
for j in range(0, (width//8)+unalign): #128/8=16
v = 0x00
rs = 8*j
re = 8*(j+1)
if re > width:
re = width
for k in range(rs, re):
if frame[i, k] != 0:
if not byte_reverse:
v |= (0x01 << (k%8))
else:
v |= (0x01 << (7-(k%8)))
if color_reverse:
v ^= 0xff
matrix.append(v)
return matrix
2.3 开启socket服务
def socket_start():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = socket.gethostbyname(socket.gethostname())
port = 8080
host = '192.168.5.100'
print(host)
print(port)
s.bind((host,port))
s.listen(5)
print('等待客户端连接中…')
client,client_address = s.accept()
print('新连接')
client_IP = str(client_address[0])
print('IP:'+client_IP)
client_port = str(client_address[1])
print('Port:' + client_port)
return client
3 测试效果
https://www.bilibili.com/video/BV11S4y1S7ir

4 总结
本篇介绍ESP8266在OLED上播放视频,包括ESP8266端的图像接收与显示程序,与电脑端的Python读取视频并进行编码与数据发送程序。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
嵌入式
+关注
关注
5212文章
20763浏览量
338639 -
WIFI
+关注
关注
82文章
5543浏览量
214769 -
ESP8266
+关注
关注
51文章
972浏览量
49943
发布评论请先 登录
相关推荐
热点推荐
ESP8266WiFi模块
请问,ESP8266WiFi模块设置成AP模式,用USB转串口烧录进去的时候能够搜到WiFi信号,断电后重新上电就搜不到信号了,求各路大神指导
发表于 07-27 11:22
esp8266wifi模块工作原理
esp8266wifi模块工作原理,买正点原子的开发板时送了一块ESP8266wifi模块,一直没使用,最近几天刚好有时间就拿出来玩了一下,
发表于 07-14 06:39
ESP8266WiFi模块的学习与使用
基于STM32的ESP8266wifi模块控制多路继电器ESP8266WiFi模块的学习与使用XCOM V2.0串口调试助手下载链接网络调试助手下载链接
发表于 08-03 07:20
如何设计和开发PCBESP8266WiFi模块
在本项目/教程中,我将向您展示如何设计和开发PCB ESP8266 WiFi模块。如果你还记得“开始使用ESP8266和ARDUINO ”项
普中WIFI ESP8266模块的详细资料合集免费下载
工具包,串口调试助手,手机APP软件,网络调试助手)ESP8266服务器及客户端使用,PZ-WIFI-ESP8266模块开发手册--普中STM32F1
发表于 03-03 08:00
•114次下载
ESP8266 WiFi模块获取网络天气适配战舰开发板的使用实例
本文档的主要内容详细介绍的是ESP8266 WiFi模块获取网络天气适配战舰开发板的使用实例。
发表于 06-12 16:36
•39次下载
esp8266wifi模块怎么连接手机
ESP8266 WiFi模块连接手机主要可以通过两种方式实现: 通过路由器连接(STA模式)和直接作为热点连接(AP模式) 。以下是两种连接方式的步骤: 一、通过路由器连接(STA模式) 配置
ESP8266WIFI模块用途开发实例 连网播放视频
评论