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;
}