LoginSignup
4
5

More than 5 years have passed since last update.

EdisonからArduinoに書き込む

Last updated at Posted at 2015-11-26

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

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.

できた!

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5