0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

ESP8266WIFI模塊用途開發(fā)實(shí)例 連網(wǎng)播放視頻

碼農(nóng)愛學(xué)習(xí) ? 來(lái)源:碼農(nóng)愛學(xué)習(xí) ? 作者:碼農(nóng)愛學(xué)習(xí) ? 2022-06-06 09:34 ? 次閱讀

本篇介紹ESP8266OLED上播放視頻

電腦Python程序作為視頻數(shù)據(jù)的服務(wù)器,借助OpenCV實(shí)時(shí)讀取視頻幀,并進(jìn)行二值圖像轉(zhuǎn)換,尺寸調(diào)整,再將二值圖像轉(zhuǎn)為數(shù)組,并以二進(jìn)制形式的數(shù)據(jù)通過socket方式無(wú)線發(fā)送給ESP8266。

ESP8266采用Arduino IDE編程,借助U8g2庫(kù),將圖像數(shù)據(jù)實(shí)時(shí)顯示到OLED屏幕中。

pYYBAGKczkKAMkoRAAN3juuVx6M729.png

1 ESP8266端視頻幀接收與播放程序

ESP8266作為socket客戶端,接收服務(wù)端發(fā)送的圖像幀數(shù)據(jù),進(jìn)行顯示。

ESP8266使用Arduino IDE環(huán)境進(jìn)行開發(fā)。

1.1 WIFI初始化與服務(wù)器連接

#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熱點(diǎn)的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 視頻顯示主循環(huán)

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電腦端視頻編碼發(fā)送程序

電腦端作為socket服務(wù)器端,將視頻幀數(shù)據(jù)發(fā)送出去。

電腦端采用Python3編程,借助OpenCV實(shí)現(xiàn)視頻的讀取與圖像數(shù)據(jù)格式轉(zhuǎn)換。

pYYBAGKczleAfJi5AAExs68QNq8808.png

2.1 主程序

程序的基本思想是:

利用OpenCV讀取視頻文件

對(duì)視頻幀的圖像,進(jìn)行尺寸修改

對(duì)圖像進(jìn)行二值化處理

將二值圖像轉(zhuǎn)換為數(shù)組

將數(shù)組通過socket發(fā)送出去

video_path="badapple_320240_xvid.mp4"
    
def PlayVideo(video_path, client):
    endian          = 'L'
    color_reverse   = 'false'
    
    c = 0#累計(jì)幀數(shù)
    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幀進(jìn)行存儲(chǔ)操作
            frame = cv2.resize(frame,(128,64))#調(diào)整尺寸
            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 圖像轉(zhuǎn)為數(shù)組

利用OpenCV,將圖像轉(zhuǎn)為黑白圖像:

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

然后再轉(zhuǎn)為數(shù)組:

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服務(wù)

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 測(cè)試效果

https://www.bilibili.com/video/BV11S4y1S7ir

pYYBAGKczkKAMkoRAAN3juuVx6M729.png

4 總結(jié)

本篇介紹ESP8266在OLED上播放視頻,包括ESP8266端的圖像接收與顯示程序,與電腦端的Python讀取視頻并進(jìn)行編碼與數(shù)據(jù)發(fā)送程序。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5082

    文章

    19126

    瀏覽量

    305198
  • WIFI
    +關(guān)注

    關(guān)注

    81

    文章

    5297

    瀏覽量

    203717
  • ESP8266
    +關(guān)注

    關(guān)注

    50

    文章

    962

    瀏覽量

    45008
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    ESP8266WiFi模塊

    請(qǐng)問,ESP8266WiFi模塊設(shè)置成AP模式,用USB轉(zhuǎn)串口燒錄進(jìn)去的時(shí)候能夠搜到WiFi信號(hào),斷電后重新上電就搜不到信號(hào)了,求各路大神指導(dǎo)
    發(fā)表于 07-27 11:22

    esp8266wifi模塊工作原理

    esp8266wifi模塊工作原理,買正點(diǎn)原子的開發(fā)板時(shí)送了一塊ESP8266wifi模塊,一直沒使用,最近幾天剛好有時(shí)間就拿出來(lái)玩了一下,
    發(fā)表于 07-14 06:39

    ESP8266WiFi模塊的學(xué)習(xí)與使用

    基于STM32的ESP8266wifi模塊控制多路繼電器ESP8266WiFi模塊的學(xué)習(xí)與使用XCOM V2.0串口調(diào)試助手下載鏈接網(wǎng)絡(luò)調(diào)試助手下載鏈接
    發(fā)表于 08-03 07:20

    esp8266WiFi模塊使用經(jīng)驗(yàn)分享

    esp8266WiFi模塊的引腳是怎樣進(jìn)行連接的?如何對(duì)esp8266WiFi模塊進(jìn)行調(diào)試呢?
    發(fā)表于 10-22 09:16

    esp8266過程文檔

    通過串口發(fā)AT指令驅(qū)動(dòng)esp8266wifi模塊,過程
    發(fā)表于 11-10 17:09 ?0次下載

    ESP8266模塊官方使用指導(dǎo)

    無(wú)線WiFi ESP8266模塊主導(dǎo)文件,內(nèi)容包括命令指導(dǎo),使用測(cè)試、實(shí)例和使用方法
    發(fā)表于 06-08 17:52 ?233次下載

    esp8266串口wifi實(shí)例

    ESP8266串口WiFi擴(kuò)展板是深圳四博智聯(lián)科技有限公司開發(fā)的一款基于樂鑫ESP8266的超低功耗的UART-WiFi
    發(fā)表于 12-08 13:34 ?1.9w次閱讀

    esp8266固件如何升級(jí)_ESP8266WIFI模塊固件升級(jí)

    時(shí)下很流行的無(wú)線通信各式各樣,下面小編為大家接收一種最常用的無(wú)線通信模塊WIFI模塊ESP8266 的固件升級(jí)。
    的頭像 發(fā)表于 04-12 10:57 ?4.3w次閱讀
    <b class='flag-5'>esp8266</b>固件如何升級(jí)_<b class='flag-5'>ESP8266WIFI</b><b class='flag-5'>模塊</b>固件升級(jí)

    如何將ESP8266接到WiFi

    在之前的ESP8266項(xiàng)目中,我簡(jiǎn)要介紹了ESP8266 WiFi模塊,如何開始使用ESP8266和Arduino,
    的頭像 發(fā)表于 07-29 11:32 ?8.7w次閱讀
    如何將<b class='flag-5'>ESP8266</b><b class='flag-5'>連</b>接到<b class='flag-5'>WiFi</b>

    如何設(shè)計(jì)和開發(fā)PCBESP8266WiFi模塊

    在本項(xiàng)目/教程中,我將向您展示如何設(shè)計(jì)和開發(fā)PCB ESP8266 WiFi模塊。如果你還記得“開始使用ESP8266和ARDUINO ”項(xiàng)
    的頭像 發(fā)表于 07-29 10:46 ?1.1w次閱讀

    普中WIFI ESP8266模塊的詳細(xì)資料合集免費(fèi)下載

    工具包,串口調(diào)試助手,手機(jī)APP軟件,網(wǎng)絡(luò)調(diào)試助手)ESP8266服務(wù)器及客戶端使用,PZ-WIFI-ESP8266模塊開發(fā)手冊(cè)--普中STM32F1
    發(fā)表于 03-03 08:00 ?108次下載
    普中<b class='flag-5'>WIFI</b> <b class='flag-5'>ESP8266</b><b class='flag-5'>模塊</b>的詳細(xì)資料合集免費(fèi)下載

    ESP8266 WiFi模塊獲取網(wǎng)絡(luò)天氣適配戰(zhàn)艦開發(fā)板的使用實(shí)例

    本文檔的主要內(nèi)容詳細(xì)介紹的是ESP8266 WiFi模塊獲取網(wǎng)絡(luò)天氣適配戰(zhàn)艦開發(fā)板的使用實(shí)例。
    發(fā)表于 06-12 16:36 ?39次下載
    <b class='flag-5'>ESP8266</b> <b class='flag-5'>WiFi</b><b class='flag-5'>模塊</b>獲取網(wǎng)絡(luò)天氣適配戰(zhàn)艦<b class='flag-5'>開發(fā)</b>板的使用<b class='flag-5'>實(shí)例</b>

    ESP8266 wifi模塊開發(fā)匯總

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ESP8266 wifi模塊開發(fā)匯總?ESP8266
    發(fā)表于 11-05 19:21 ?188次下載
    <b class='flag-5'>ESP8266</b> <b class='flag-5'>wifi</b><b class='flag-5'>模塊</b><b class='flag-5'>開發(fā)</b>匯總

    ESP8266 WIFI的stm32f103的完整工程

    ESP8266WIFI 的stm32f103 的完整工程資料分享
    發(fā)表于 11-17 15:23 ?29次下載

    esp8266wifi模塊怎么連接手機(jī)

    ESP8266 WiFi模塊連接手機(jī)主要可以通過兩種方式實(shí)現(xiàn): 通過路由器連接(STA模式)和直接作為熱點(diǎn)連接(AP模式) 。以下是兩種連接方式的步驟: 一、通過路由器連接(STA模式) 配置
    的頭像 發(fā)表于 08-19 17:27 ?2821次閱讀