1. 程式人生 > >《智慧家居》培訓第六天------2019-01-10

《智慧家居》培訓第六天------2019-01-10

目錄:

  一)攝像頭

  二)照明

  三)所想

  四)總結

 

 

一)攝像頭

  攝像頭這塊學了跟沒學一樣我覺得,攝像頭給的api,yuyv轉rgb24也是給的api,總而言之就是,直接給了兩個原始檔,這兩個原始檔已經實現了螢幕顯示攝像頭資料的這個功能,我們所做的就只是把這兩個檔案和main檔案整合,攝像頭是怎麼獲得資料怎麼傳輸資料,資料如何通過什麼方式顯示在螢幕上這些重點的都沒詳細講,只是粗略講了一下這個過程,不過這也正常,看了一下老師的原始碼,涉及到的東西確實很多,不覺得這是幾天可以搞定的東西,而這可以說是本次培訓的最後一天了。

  那麼這篇筆記該怎麼寫呢,如何實現的肯定是沒法寫的了,我也不懂,就只記錄目前知道的東西吧

  1)老師的筆記圖

  2)V4L2

  V4L2是linux系統中的一個關於處理視訊這一塊的一個開發框架,一個處理視訊資料的機制,目前我還沒有開始學習這個框架

  點選此連結學習V4L2

  3)過程遇到的問題

  ① 問題:顯示攝像頭介面與選單欄的點選無法同時實現,就是希望進入攝像介面以後點選返回可以返回主介面,再進入攝像介面依然可以顯示攝像頭內容

  ② 解決方法:有了之前解決視訊選單欄無法顯示的經驗,容易想到這個問題也可以使用執行緒來解決

  ③ 實現:我希望我的main.c檔案儘量簡潔,其中程式碼儘量少儘量清晰,我整合了很久程式碼,希望最終可以只是在main裡新增一個顯示攝像頭的子執行緒,而把其他什麼開啟裝置、快取幀、yuyv轉rgb24等顯示攝像頭內容之前需要進行的操作獨立成一個檔案,但是無論我怎麼嘗試,都無法實現預期,幾個小時後,我妥協了,直接把攝像這一塊的程式碼全部移植到main裡,yuyv轉rgb24為單獨一個檔案,這就解決問題了,但是我的main.c也變得繁瑣起來了。以下是攝像介面圖,圖一是攝像頭開啟前顯示的畫面:

 

二)照明

  其實就是點燈,這個就不詳寫了,直接給程式碼吧

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <fcntl.h>
 4 #include <linux/ioctl.h>
 5 
 6 #define GEC210_LED_ON    _IOW('A', 0x03, unsigned long) 
 7 #define GEC210_LED_OFF    _IOW('A', 0x04, unsigned long)
 8 int light(void
) 9 { 10 int fd_light; 11 fd_light = open("/dev/led_drv", O_RDONLY);//以只讀的方式LED的驅動,這個驅動檔案要先安裝,用老師給的驅動檔案led_drv.ko 12 if(fd_light < 0) 13 { 14 perror("open"); 15 return -1; 16 } 17 //在此基礎上實現流水燈的效果 18 while(1) 19 { 20 ioctl(fd_light, GEC210_LED_ON, 4); //點亮第4個燈 21 sleep(1); 22 ioctl(fd_light, GEC210_LED_OFF, 4); //關閉第4個燈 23 sleep(1); 24 } 25 close(fd_light); 26 return 0; 27 }
led.c

三)所想

  1)沒什麼想的今天,就感覺沒學到什麼東西,希望自己可以抽空學習一下V4L2這個東西,如果學了的話到時候再補充這篇筆記

四)總結

   1)實現了攝像頭的功能,解決的選單欄的問題

  2)選單欄的拍照拍攝功能沒有實現

  3)學習了點燈

  4)第七天就不單獨寫筆記了,因為第七天沒學新東西,專案驗收而已,我在第七天嘗試了實現拍照功能,但是失敗了,的確可以生成一張jpg圖片,但是這張圖片沒有資料,問了一下老師,說是在資料寫入的時候出現了問題,測試了一下發現不是資料寫入的問題,而是使用read函式讀取螢幕資訊的時候就失敗了,嘗試了半天,read依然返回-1,也就是依然失敗,最後放棄了。