pinpongライブラリとMind+を使って、Milk-v duoでPythonビジュアルプログラミング!?

## はじめに
秋葉原ロボット部の有志で、milk-v duoを購入し、個々人が様々な実験を行って、勉強会内で報告しています。

Milk-v duoは9ドルのrisc-vコンピュータとして知られています。
ハードウェアは以下の通りです。

1. CPUはCVITEKのCV1800B (C906@1Ghz + C906@700MHz)
1. 最高1 GHzで動作するデュアルRV64コア
1. 64 MBのラム
1. オプションのアドオンボードを接続すると10/100Mbpsの速度でイーサーネットに接続可能

Mind+はpinpongライブラリを使って、Pythonプログラミングが可能です。
ということは、Pythonのプログラムをビジュアルプログラミングで作成することができるのです。
Milk-v duo用のpinpongドライバは公開されているので、原理的には、Mind+を使ったビジュアルプログラミングでmilk-v duoで動作するプログラムの作成が可能です。
Milk-v duoではLinuxOSが動作していますので、Mind+が対応しているボードの内、LinuxOSが動作しているUNIHIKERの情報を参考に、環境構築を試みました。
また、milk-v duoのOSはbuildrootで提供されているので、OSへのアプリケーションの追加が大変なので、LinuxOSのRaspberry pi OSの動作するRaspberry piも併用することとします。

## マイクロコントローラ搭載ボードを使った場合のプログラム実行
マイクロコントローラ搭載ボードでのプログラム実行までの手順を確認します。
Arduino UNOやmicro:bitのようにマイクロコントローラを搭載したボードをUSBケーブルで接続した場合、以下の段取りでプログラムが実行されます。
1. Mind+がUSBケーブルで接続されたボード上のUSB-TTLのPIDとVIDを参考にボードを識別
1. Mind+上でプログラムを作成し、「Upload」ボタンを押す
1. Mind+がボード上で動作するFirmataプロトコルを含むファームウェアを転送
1. ボード上で、転送したファームウェアが動作
1. Mind+が作成した拡張子.mpのプログラムファイルを.cache-file.pyに変換
1. pinpongライブラリを使って、pythonスクリプトの.cache-file.pyを動作
1. ボードに接続されているデバイスがプログラムにあわせて動作

## LinuxOS搭載ボードUNIHIKERを使った場合のプログラム実行状況の推測
UNIHIKERを使ったMind+のプログラミングの実行状況がYoutubuとHackster.ioに公開されていましたので、それを参考に、手順を推測しました。
1. ボードをインターネットに接続
1. Mind+からボードにssh接続すると、Mind+上に接続先のプロンプトが表示
1. Mind+上でプログラムを作成し、「RUN」ボタンを押す
1. Mind+上で作成した拡張子.mpのファイルが「~/mindplus/cache/作成したファイル名」のディレクトリに転送
1. ボード上で、転送された張子.mpのファイルをpythonスクリプトに変換し、「~/mindplus/cache/作成したファイル名/.cache-file.py」として保存
1. 「.cache-file.py」をボード上で実行

## Milk-v duoを接続した場合
Milk-v duoをUSBケーブルで接続すると、milk-v duoのIPアドレスをカスタマイズしていない場合、192.168.42.1で接続されます。
Milk-v duoにMind+からssh接続すると、Mind+上に接続先のプロンプトが表示されます。
プログラムを作成し、「RUN」ボタンを押すとファイル転送をはじめようとします。
しかし、ファイル転送が始まりません。
Mind+のファイル転送方式は、Milk-duo v標準のscpではないようです。

## Raspberry piを接続した場合
Ethernetに接続されたRaspberry piにMind+からssh接続すると、Mind+上にRaspberry piのプロンプトが表示されます。
プログラムを作成し、「RUN」ボタンを押すとファイル転送されます。
その後、ファイルが見つからなくて、実行できない由のエラーが表示されます。
「~/mindplus/cache/作成したファイル名/」のディレクトリを見てみると、「.cache-file.py」が作成されていないようです。
ボード上に「.mp」ファイルを「.py」ファイルに変換して、「.cache-file.py」として保存するプログラムが必要なようです。
また、ファイル転送方式はsftpの様です。

## ファイル変換プログラムの探索
YoutubuとHackster.ioの情報から、UNIHIKERのOSイメージにはファイル変換のプログラムが含まれているとわかります。
また、64ビットRaspberry pi OSのデスクトップ環境で動作するMind+が公開されています。
上記2種類の環境から、ファイル変換プログラムを探して、適切なフォルダーに配置する必要があります。

## Milk-v duo上での環境整備に必要なこと
上記の情報から、Milk-v duo上での環境整備のポイントは2点になります。
1. buildrootにsftpを導入
1. ファイル変換プログラムの導入

## Milk-v duo上のubuntuでsftp
Milk-v duoには、ubuntuが用意されており、sshにはDropbearが利用されています。
Aptコマンドが使えるので、openssh-sftp-serverをインストールすることで、sftpでファイル転送できる環境を整えます。

## Mind+の生成するmpファイルからpythonスクリプトを取り出す

Mind+の派生元のScratch3.0のsb3ファイルはブロック情報とスクリプトがzip形式で圧縮されています。
sb3ファイルを展開すると、スクリプトの書きこまれたjsonファイルが含まれていることがわかります。
Mind+のmpファイルもzip形式の圧縮ファイルです。
たとえば、milk-v用に作成した「blink_milkv.mp」のディレクトリ構成は以下の通りです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693019/51cf908f-55d6-d50d-aa60-bc8f3f14c098.png)
さらに、zipファイルを展開すると、以下の様なファイルが含まれています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693019/864b6824-3c2c-0517-345e-cdd13ea17591.png)

ファイル名は異なりますが、作成したpythonスクリプトです。
```
#  -*- coding: UTF-8 -*-

# MindPlus
# Python
from pinpong.board import Board
from pinpong.board import Pin
import time


Board("MILKV-DUO").begin()
led = Pin(Pin.D25, Pin.OUT)

while True:
    led.write_digital(1)
    print("1")
    time.sleep(1)
    led.write_digital(0)
    print("0")
    time.sleep(1)
```
mpファイルから「.cache-file.py」を取り出して、実行すればよいことがわかります。

この続きは、秋葉原ロボット部での発表になりそうです。