Arduino cheat sheet

From misc notes
Jump to navigation Jump to search

Arduino + cygwin + ino (ano) ハマりどころメモ

Without Arduino IDE

arduino を cygwin 環境内で build, upload したい。

arduino.cc の情報

Arduino from the Command Line
によると
Arturo
Arturo (a.k.a ano) というのがある。(ググったら ino というのがみつかるが、これがメンテされてないので ino のメンテナンス引き継ぎ版が ano のようだ)
しかし cygwin で Windows 版 Arduino IDE のコンパイラーや avrdude を起動したばあい、(cygwin からは正しく見えるのに)パスの問題があるようだ。さっくり cygwin 環境で AVR toolchain を作ることにする。
  • ano build のエラー
fatal error: Arduino.h: No such file or directory
 #include <Arduino.h>
  • ano upload のエラー
avrdude: can't open config file "/usr/share/arduino/hardware/tools/avr/etc/avrdude.conf": No such file or directory
avrdude: error reading system wide configuration file "/usr/share/arduino/hardware/tools/avr/etc/avrdude.conf"

cygwin 環境で AVR toolchain をビルド

cygwin 準備

Installing and Updating Cygwin for 32-bit versions of Windows
32bit バージョンをインストールする。(64bit バージョンは AVR toolchain のコンパイルに不具合あり)
cygwin のパッケージは以下のものを入れる。
git
wget
unzip
zip
gperf
bison
flex
make
patch
autoconf
gcc-g++
libncurses-devel
pkg-config
python-setuptools

libusb問題

cygwin のパッケージで libusb をインストールしている場合は avrdude の build で不具合があるので、あれば削除しておく。(もし必要なら avrdude の build で static link をやめる逃げ道はある)

FTDI USB serial driver (メモ書き)

arduino のパッケージには FTDI 社のドライバが梱包されてる
http://www.ftdichip.com/Drivers/VCP.htm

arduino IDE 配置

先ほど arduino.cc の記述によると ano は arduino IDE versions 1.6.1 は動くとのこと。
Arduino 1.6.x, 1.5.x BETA
arduino-1.6.1-windows.exe
をとってきてインストールする。
Windows 版の IDE は最新をつかいたいので、version 1.6.1 は /Program Files/Arduino を /cygwin/usr/share 配下にコピーする。
名前は Arduino から arduino に変える。(たんなる趣味)
Windows の権限管理の問題があるので arduino フォルダーのプロパティを開き、セキュリティ タブで *適切な設定* にしておく。
Windows 版 IDE を最新したいなら、1.6.1 を uninstall して、再度最新版をインストールする。

AVR toolchain 配置

The AVR toolchain used by the Arduino IDE
arduino IDE 1.6.1 の場合は release 3.4.5 である。tag を指定して git clone する。
git clone --depth=1 --branch 3.4.5 --single-branch https://github.com/arduino/toolchain-avr.git
Readme.md にあるように texinfo の指定バージョン 4.13 は cygwin にないので、自分でコンパイルして配置する。
ついでに automake-1.11.1 も cygwin のパッケージつかわないで自分でコンパイルして配置する。
texinfo-4.13.tar.gz
automake-1.11.1.tar.bz2
arch.win32.build.bash はつかわない。なので MinGW 環境は不要。
sourceforge の ごたごたで URL がかわってしまってソースが取れない。 build がコケるので事前にとって配置しておく。
wget http://distribute.atmel.no/tools/opensource/Atmel-AVR-GNU-Toolchain/3.4.5/avr8-headers-6.2.0.469.zip
wget http://download.savannah.gnu.org/releases/avr-libc/avr-libc-1.8.0.tar.bz2
wget http://download.savannah.gnu.org/releases/avrdude/avrdude-6.0.1.tar.gz
wget http://mirror.switch.ch/ftp/mirror/gnu/autoconf/autoconf-2.64.tar.bz2
wget http://mirror.switch.ch/ftp/mirror/gnu/automake/automake-1.11.1.tar.bz2
wget http://mirror.switch.ch/ftp/mirror/gnu/binutils/binutils-2.24.tar.bz2
wget http://mirror.switch.ch/ftp/mirror/gnu/gcc/gcc-4.8.1/gcc-4.8.1.tar.bz2
wget http://mirror.switch.ch/ftp/mirror/gnu/gdb/gdb-7.8.tar.xz
wget http://mirror.switch.ch/ftp/mirror/gnu/gmp/gmp-5.0.2.tar.bz2
wget http://mirror.switch.ch/ftp/mirror/gnu/mpfr/mpfr-3.0.0.tar.bz2
wget http://download.sourceforge.net/project/libusb-win32/libusb-win32-releases/1.2.6.0/libusb-win32-bin-1.2.6.0.zip
wget http://download.sourceforge.net/project/libusb/libusb-1.0/libusb-1.0.18/libusb-1.0.18.tar.bz2
wget http://download.sourceforge.net/project/libusb/libusb-compat-0.1/libusb-compat-0.1.5/libusb-compat-0.1.5.tar.bz2
wget http://www.multiprecision.org/mpc/download/mpc-0.9.tar.gz
bash build.all.bash
数時間コンパイルにかかる。

avrdude.exe

avrdude の serial port の指定は /dev/ttyS? が動かず '\\.\com?' で動く。

giveio services

これが起動しない。32bit only とのこと。あと giveio はいろいろ評判わるそう。
パラレルポートの場合に必要とのこと。なので今回は無視。

libusb-win32 問題

cygwin でコンパイルした avrdude.exe がいろいろ win32 系の dll を見るのでうざい

arduino usb serial の windows OS での初期化

arduino の usb を刺しただけでは cygwin から serial device (COM?) としてみえてなので、windows OS で認識させる。
シリアルポートの使い方@windows
#!/bin/sh
mode.com $1: BAUD=115200 PARITY=N DATA=8 STOP=1 to=off xon=off odsr=off octs=on dtr=off rts=on idsr=off
このスクリプト動かす。

配置

objdir を /usr/share/arduino/hardware/tools/ 配下にコピーし、tools ディレクトリの avr ディレクトリを avr.org にリネームして、objdir を avr にリネームする。

avrdude build メモメモ

もし、libusb-win32 をつかわないで build する場合は libusb-1.0.18 にパッチを当てる。
diff -urN libusb-1.0.18.orig/libusb/os/windows_usb.h libusb-1.0.18/libusb/os/windows_usb.h
--- libusb-1.0.18.orig/libusb/os/windows_usb.h  2014-01-09 08:55:51.000000000 +0900
+++ libusb-1.0.18/libusb/os/windows_usb.h       2015-08-27 12:55:34.000000000 +0900
@@ -46,7 +46,7 @@
 #endif
 
 #if defined(__CYGWIN__ )
-#define _stricmp stricmp
+#define _stricmp strcasecmp
 // cygwin produces a warning unless these prototypes are defined
 extern int _snprintf(char *buffer, size_t count, const char *format, ...);
 extern char *_strdup(const char *strSource);
ややこしいので AVR toolchain を fork してパッチあてたので、これ使ってください
avr toolchain cygwin only

Arturo (ano)

ano

Arturo
git clone https://github.com/scottdarch/Arturo.git

stty 周りのパッチをあてる。(かなり強引)(要改善)

diff -urN Arturo.orig/ano/commands/upload.py Arturo/ano/commands/upload.py
--- Arturo.orig/ano/commands/upload.py	2015-08-27 12:14:09.000000000 +0900
+++ Arturo/ano/commands/upload.py	2015-08-27 12:18:52.000000000 +0900
@@ -66,7 +66,8 @@
 
         # send a hangup signal when the last process closes the tty
         file_switch = '-f' if platform.system() == 'Darwin' else '-F'
-        ret = subprocess.call([self.e['stty'], file_switch, port, 'hupcl'])
+        #ret = subprocess.call([self.e['stty'], file_switch, port, 'hupcl'])
+        ret = subprocess.call([self.e['stty'], file_switch, port, 'cs8'])
         if ret:
             raise Abort("stty failed")
 
@@ -133,7 +134,8 @@
             self.e['avrdude'],
             '-C', self.e['avrdude.conf'],
             '-p', BoardModels.getValueForVariant(board, boardVariant, 'build', 'mcu'),
-            '-P', port,
+            #'-P', port,
+            '-P', '\\.\com5',
             '-c', protocol,
             '-b', BoardModels.getValueForVariant(board, boardVariant, 'upload', 'speed'),
             '-D',

picocom

picocom
picocom をインストール

ano の環境

/etc/ano.ini or ~/.anorc
[build]
board-model = uno
cpu = 8MHzatmega328p
arduino-dist = /usr/share/arduino

[upload]
board-model = uno
cpu = 8MHzatmega328p
arduino-dist = /usr/share/arduino
serial-port = /dev/ttyS4

[serial]
serial-port = /dev/ttyS4

ano の使い方

ino と同じなので、arduino ino build とかでググってください

cygwin メモ

cygwin terminalのロケール

ja_JP.UTF-8 がよさげ

cygwin terminalのショートカット

Mouse -> (ON) Clicks place command line cursor
Mouse -> Right click action -> Paste

apt-cyg

apt-cyg