Arduboyの画面をキャプチャする

Arduboyの画面キャプチャの方法を試したところ、環境の違いで動かなかった。
community.arduboy.com


私の環境、macPython 3.6で動かした手順を書いておこう。

1. macとArduboyをUSBで接続し、Arduboyの電源をONする。
2. macのターミナルから次のコマンドを叩き、端末名をメモする。

ls /dev/tty.usb*

 私の環境では「/dev/tty.usbmodem1421」と表示された。

3. macで次のPythonコードを実行する。

# -*- coding: utf-8 -*-

from PIL import Image
import serial

fnum = 0

while True:
    # ls /dev/tty.usb*で表示された端末名を書く
    with serial.Serial('/dev/tty.usbmodem1421', 9600) as ser:
        data = ser.read(int(128*64/8))

        img = Image.new('RGB', (128, 64))
        idx = 0

        for y in range(0, 8):
            for x in range(0, 128):
                for i in range(0, 8):
                    if data[idx] & (1 << i):
                        img.putpixel((x, y * 8 + i), (255, 255, 255))
                idx += 1

        fname = '{:0>3}'.format(fnum) + '.png'
        fnum += 1
        print('saving... '  + fname)
        img.save(fname)

4. Arduboyで次のコードを実行する。

#include <Arduboy2.h>
Arduboy2 arduboy;

void setup()
{
  // シリアル通信の設定
  Serial.begin(9600);

  arduboy.begin();
  arduboy.setFrameRate(60);
  arduboy.clear();
}

void loop()
{
  if (!arduboy.nextFrame()) return;
  arduboy.pollButtons();
  arduboy.clear();

  static int cnt = 0;
  arduboy.print(cnt++);
  arduboy.drawTriangle(10, 20, 30, 10, 20, 40, WHITE);

  arduboy.display();

  if (arduboy.justPressed(A_BUTTON)) {
    // Aボタンが押されたら画面キャプチャをシリアル通信で送る
    Serial.write(arduboy.getBuffer(), 128 * 64 / 8);
  }
}

5. ArduboyのAボタンを押下すると画面キャプチャ画像がmacに保存される。
f:id:raohu69:20180314225400p:plain