ESP8266WIFI模块用途开发实例 连网播放视频

本篇介绍esp8266在oled上播放视频:
电脑端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 8080void 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 = 0client = 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读取视频并进行编码与数据发送程序。

商用终端千兆级LTE正式到来!中国移动完成千兆级外场测试
科学家研发可替代泡沫塑料的隔热材料
美国军方正在追赶人工智能的“第三次浪潮”,届时机器人将具备10岁儿童的基本常识
5G平台构建的标准化和生态系统是未来主要任务
波音与FAA正在对波音737 MAX可能会出现短路问题的一个线路进行审查
ESP8266WIFI模块用途开发实例 连网播放视频
肖特基二极管的作用特点 肖特基二极管在运用中需要注意哪些事项
屏下指纹商机夹杂专利官司 思立微诉汇顶科技专利侵权未获支持
MySQL各存储引擎使用了三种类型的锁定机制
干电池1.5V和两节干电池3V升压到3.3V的测试
NAMUR输出标准是什么
Littelfuse SIDACtor保护晶闸管可在高频高强度浪涌环境中加强浪涌保护
对于防水透气膜,它的加工生产工艺主要都有哪几种
打响云计算的激烈战,阿里云能否与AWS比肩
锁存器和寄存器介绍
三星、苹果瞄准Tag新商机:手机硬件早已提前就位
新一代电源质量监控技术—帮助工业设备保持良好状态
米家床头灯2高清图赏
纯电动汽车它究竟怕不怕水呢
一个安全性的漏洞会导致什么样的混乱?