Ameba Arduino: [RTL8195] ArduCam – 使用ArduCAM-Mini-2MP將照片傳出

材料準備

  • Ameba x 1
  • ArduCAM-Mini-2MPx 1
  • AccessPort V.137終端機連線軟體

範例說明

這個範例裡使用ArduCAM-Mini-2MP模組來產生JEPG,並將raw data輸出至console。我們需要的library有
https://github.com/Ameba8195/Arduino/blob/master/libraries/AmebaArduCAM.zip
安裝library的方式請參考Arduino官方網站的教學文章將zip檔的library加入Ameba RTL8195:
https://www.arduino.cc/en/Guide/Libraries#toc4
關於ArduCAM-Mini-2MP使用說明請參考AMEBA_ArduCAM_Mini_OV2640_JPEG範例
接線圖如下:
1我們打開範例 “File” -> “Examples” -> “AmebaArducam” -> “AMEBA_ArduCAM_Mini_OV2640_JPEG”,編譯並上傳至Ameba RTL8195之後按下Reset按鈕reboot。

操作說明

此範例採用Serial communication與使用者互動,而我們使用終端機軟體為AccessPort,連線baudrate為115200如下圖連上Ameba RTL8195之後:
2
程式在一開始會等待使用者從Serial傳輸界面等待輸入16進位指令,首先將AccessPort發送欄位的設定由字串設定為十六進位,並且設定圖片解析度(預設為320x240),可在AccessPort的發送欄位框裡輸入0~8,OV2640可以支援的最大解析度如下所示:

      case 0:
        myCAM.OV2640_set_JPEG_size(OV2640_160x120);
        break;
      case 1:
        myCAM.OV2640_set_JPEG_size(OV2640_176x144);
        break;
      case 2:
        myCAM.OV2640_set_JPEG_size(OV2640_320x240);
        break;
      case 3:
        myCAM.OV2640_set_JPEG_size(OV2640_352x288);
        break;
      case 4:
        myCAM.OV2640_set_JPEG_size(OV2640_640x480);
        break;
      case 5:
        myCAM.OV2640_set_JPEG_size(OV2640_800x600);
        break;
      case 6:
        myCAM.OV2640_set_JPEG_size(OV2640_1024x768);
        break;
      case 7:
        myCAM.OV2640_set_JPEG_size(OV2640_1280x1024);
        break;
      case 8:
        myCAM.OV2640_set_JPEG_size(OV2640_1600x1200);
        break;

接著在AccessPort發送欄位輸入0x11數值,在程式碼中0x11代表設定輸出圖片格式為JPEG(預設已是JPEG格式),之後再重新輸入0x10,OV2640即開始往終端機列印1張jpeg的raw data

      case 0x10:
        mode = 1;
        start_capture = 1;
        //Serial.println("CAM start single shoot.");
        break;
      case 0x11:
        myCAM.set_format(JPEG);
        myCAM.InitCAM();
        break;

此時可將AccessPort的Terminal頁面設定為HEX顯示,可以看到從OV2640傳出的raw data,如下圖:
3

當Terminal頁面印完了raw data之後,點擊上圖存檔的圖示,在存檔的過程中,存檔的類型要選擇All Files(*.*),之後即可觀賞圖片
4

另外還提供一種圖片連續的輸出方式,只要回到AccessPort發送欄位輸入0x20數值,OV2640就會不斷地輸出jpeg的raw data

case 0x20:
        mode = 2;
        start_capture = 2;
        //Serial.println("CAM start contrues shoots.");
        break;     

直到Ameba RTL8195從AccessPort收到0x21的數值指令則會結束列印jpeg raw data

temp = Serial.read();
if (temp == 0x21)
{
     start_capture = 0;
     mode = 0;
     break;
}