#Edison Arduino 書き込み
SparkfunからEdison用Arduino Blockが出ているのですが,書き込みはなぜかArduino Pro Mini同様に有線で行います.
https://www.sparkfun.com/products/13036
公式のHookup Guideを見ても,
Depending on your application, though, it’s recommended that you load code on the Arduino while it’s disconnected from your Edison stack, before adding it to the rest of the system.
とあって,いっそEdison外して書き込むことまで推奨しています.
なんだかスマートではないので,Edisonから書き込めるようにしたいと思います.
書き込み用ソフト ino
EdisonにはGUIがないので(なくはないですがめんどうなので)Arduino公式で出しているapt-get install arduinoで入るツールはX windowがないと喚いて動いてくれません.
cuiだけで動くソフトにinoがあります.これをインストールします.使い方はここあたりを参考に.
私の場合は,
sudo easy_install ino
ですんなり入ってくれました.
あとは使い方に従って書き込みまで試してみます.
mkdir ~/blink
cd ~/blink
ino init -t blink
ino build -m pro328
これでArduinoへ書き込むバイナリができます.
このあと書き込むのですが,そのままだとうまく動きません.
$sudo ino upload -m pro328 -p /dev/ttyMFD1
avrdude: stk500_getsync(): not in sync: resp=0x00
avrdude done. Thank you.
こんななります.なんかSYNCできてないっぽいです.
DTRを自力で動かす.
SYNCできていない原因を探ってみると,どうもDTR(Arduinoのリセットをする端子)が動いていなさそうです.
調べてみると,/dev/ttyMFD1を使用して書き込みますが,このデバイスファイルはそもそもRX,TXのみしかサポートしていません.
inoはシリアルポートにDTRがいることを前提に作られているので,ino/commands/upload.pyの中のDTRを操作する部分が機能していなさそうです.
DTRをシリアル通信に頼る代わりに,自分で操作してリセットをかけたいと思います.
とりあえず,ino/commands/upload.pyを編集します.
普通に入れるとこの辺りにいると思います. /usr/local/lib/python2.7/dist-packages/ino-0.3.6-py2.7.egg/ino/commands/upload.py
from __future__ import absolute_import
import mraa
import os.path
import subprocess
import platform
#いろんな処理
# pulse on DTR
# try:
# s = Serial(port, 115200)
# except SerialException as e:
# raise Abort(str(e))
# s.setDTR(False)
# sleep(0.1)
# s.setDTR(True)
# s.close()
x = mraa.Gpio(25) #DTRはMRAAでは25番
x.dir(mraa.DIR_OUT)
x.write(0)
sleep(0.1)
x.write(1)
これで保存してあげます.あと,同じディレクトリにupload.pycというコンパイル済みっぽいのがいるので間違って使われないようにとりあえず消しておきました.
inoでアップロード確認
これでアップロードができるようになったはずです.確認してみます.
$ sudo ino upload -m pro328 -p /dev/ttyMFD1
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.00s
avrdude: Device signature = 0x1e950f
avrdude: reading input file ".build/pro328/firmware.hex"
avrdude: writing flash (1034 bytes):
Writing | ################################################## | 100% 0.31s
avrdude: 1034 bytes of flash written
avrdude: verifying flash memory against .build/pro328/firmware.hex:
avrdude: load data flash data from input file .build/pro328/firmware.hex:
avrdude: input file .build/pro328/firmware.hex contains 1034 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 0.24s
avrdude: verifying ...
avrdude: 1034 bytes of flash verified
avrdude: safemode: Fuses OK
avrdude done. Thank you.
できた!