at_yukari.hara
2020年1月20日 8時31分
Armadillo-640を使って、TTLシリアルJPEGカメラで写真を撮影をして保存してみました。
今回は、シリアルコンソールの出力をUART1からUART3に変更し、UART1にカメラを接続しました。
※今回使用したカメラはこちらです。
※手順やコードはこちらを参考させていただきました。
手順
1.コンソールをUART3に設定する
下記URLを参考にブートローダーとブートパラメーターを変更し、コンソールをUART3に変更します。
https://armadillo.atmark-techno.com/howto/armadillo-640-uart3-console
2.Armadillo-640にuartカメラを接続します。
Armadillo-640 CON9 | UARTカメラ |
---|---|
[3]GPIO1_IO17 | TX-A |
[5]GPIO1_IO16 | RX-B |
[9]GND | GND |
[23]USB2_VBUS | 5V |
3.python3、pipをインストールします。
※ネットワーク接続が必要です。
[armadillo ~]# apt-get install python3
[armadillo ~]# apt-get install python3-pip
4.必要なライブラリをインストールします。
※ネットワーク接続が必要です。
[armadillo ~]# pip3 install adafruit-blinka
[armadillo ~]# pip3 install adafruit-circuitpython-vc0706
5.pythonスクリプトを作成します。
import serial
import time
import adafruit_vc0706
IMAGE_FILE = '/root/image.jpg'
uart = serial.Serial("/dev/ttymxc0",baudrate=115200, timeout=0.25)
vc0706 = adafruit_vc0706.VC0706(uart)
print('VC0706 version:')
print(vc0706.version)
vc0706.image_size = adafruit_vc0706.IMAGE_SIZE_640x480
print('Using 640x480 size image.')
print('SNAP!')
if not vc0706.take_picture():
raise RuntimeError('Failed to take picture!')
frame_length = vc0706.frame_length
print('Picture size (bytes): {}'.format(frame_length))
print('Writing image: {}'.format(IMAGE_FILE), end='', flush=True)
stamp = time.monotonic()
with open(IMAGE_FILE, 'wb') as outfile:
wcount = 0
while frame_length > 0:
t = time.monotonic()
to_read = min(frame_length, 32)
copy_buffer = bytearray(to_read)
if vc0706.read_picture_into(copy_buffer) == 0:
raise RuntimeError('Failed to read picture frame data!')
outfile.write(copy_buffer)
frame_length -= 32
wcount += 1
if wcount >= 64:
print('.', end='', flush=True)
wcount = 0
print()
print('Finished in %0.1f seconds!' % (time.monotonic() - stamp))
6.実行
[armadillo ~]# python3 camera.py
7.確認
正常に完了すると、/root/以下にimage.jpgファイルが保存されています。
今回はこちらをUSBメモリに取り出し、PC上で正常に撮影出来ていることを確認しました。
↓実際の画像