Arduino cheat sheet

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

Without Arduino IDE

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

arduino.cc の情報

Arduino from the Command Line
によると
Arturo
Arturo (a.k.a ano) というのがある。(ググったら ino というのがみつかるが、これがメンテされてないので ino のメンテナンス引き継ぎ版が ano のようだ)
しかし cygwin で Windows 版 Arduino IDE (指定の 1.6.1)のコンパイラーや avrdude を起動したばあい、(cygwin からは正しく見えるのに)パスの問題があるようだ。さっくり cygwin 環境で AVR toolchain を作ることにする。
VirtualBox いれて Linux 動かすという手もあるが、それをいっちゃぁ cygwin がかわいそう ;)
  • 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
python-setuptools
pkg-config
libtool

libusb問題

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

FTDI USB serial driver (メモ書き)

arduino のパッケージには FTDI 社のドライバが梱包されてる
http://www.ftdichip.com/Drivers/VCP.htm
Arduino Unoは Microsoft 純正のドライバで認識する。(Windows 10)

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
数時間コンパイルにかかる。

なぞなエラー

build.all.bash でなぜか以下のエラー。

/bin/sh ../avrdude-6.0.1/ylwrap ../avrdude-6.0.1/lexer.l lex.yy.c lexer.c -- flex
      2 [main] bison 6908 fhandler_disk_file::fixup_mmap_after_fork: requested 0xFFEA0000 != 0x0 mem alloc base 0xFFEA0000, state 0x1000, size 20480, Win32 error 487
  18406 [main] bison 6908 C:\cygwin\bin\bison.exe: *** fatal error in forked process - recreate_mmaps_after_fork_failed
  19179 [main] bison 6908 cygwin_exception::open_stackdumpfile: Dumping stack trace to bison.exe.stackdump
      1 [main] bison 960 fork: child -1 - forked process 6908 died unexpectedly, retry 0, exit code 0x100, errno 11
bison: m4 サブプロセスが失敗しました: Resource temporarily unavailable
Makefile:1263: ターゲット 'config_gram.c' のレシピで失敗しました
make: *** [config_gram.c] エラー 1
ビルドのどこかでコケる。avr-gcc や avr libc 系は完了してる。avrdude か gdb かで。
avrdude.build.bash とか単体でビルドなら出ない
どうも cygwin 固有の問題らしい。locale が問題とのこと。
.bashrc に
export LANG=ja_JP.SJIS
export LC_ALL=C
で解決。
ちなみに cygwin terminal の locale ももちろん ja_JP.SJIS にしておく。

配置

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

avrdude.exe

avrdude の serial port の指定は(もし Windows で認識しているポートが 'COM5' なら) /dev/ttyS4 が動かず '\\.\com5' で動く。
COM ポートを指定したい場合は、Windows で
デバイスマネージャ -> ポート (COM と LPT) -> Arduino Uno (COM?) -> プロパティ -> ポートの設定 -> 詳細設定 -> COM ポート番号
で変える。

giveio services

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

libusb-win32 問題

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

arduino usb serial の windows OS での初期化

arduino の usb を刺しただけでは cygwin から serial device (COM5) としてみえてなので、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
このスクリプト動かす。

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
masterとの差分
git clone -b cygwin_only https://github.com/nxhack/toolchain-avr.git
cd toolchain-avr
./arch.cygwin.build.bash
(メモ) 要確認
bug #40831: LUFA AVRISP-MKII fails with avrdude 6.0.1

Arturo (ano)

ano

Arturo

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

fork してパッチあてたもの
fork scottdarch/Arturo (for cygwin only)
差分
git clone -b cygwin_only https://github.com/nxhack/Arturo.git
cd Arturo
make install

picocom

picocom
picocom をインストール

ano の環境

/etc/ano.ini or ~/.anorc
'com-port' に Windows の COM ポートを指定する。
ちなにみ cygwin の ttyS? は Windows の COM ポート番号からマイナス 1 の数字になる
[build]
board-model = uno
arduino-dist = /usr/share/arduino

[upload]
board-model = uno
arduino-dist = /usr/share/arduino
serial-port = /dev/ttyS4
com-port = '\\.\com5'

[serial]
serial-port = /dev/ttyS4

ano の使い方

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

cygwin メモ

cygwin terminalのロケール

ja_JP.SJIS がよさげ。
かつ .bashrc に
export LANG=ja_JP.SJIS
export LC_ALL=C
MS-DOS 的な SJIS の世界と Windows+cygwin の世界の落としどころかも。
Windows システム自体は(NT Kernel内は) Unicode なので、整合性がおかしい場合があって、いろいろ文字化けはあるかも。(グループ名とか日本語になってるとイタイ)
alias ls='ls -hFG --color=tty'
alias ll='ls -alG'
group を非表示にする。
(メモ) chcp.com
chcp.com 65001
chcp.com 932

cygwin terminalのショートカット

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

apt-cyg

apt-cyg

emacs

.emacs
; Emacs 2x
(cond ((> emacs-major-version 19)
       (progn
         (set-language-environment "Japanese")
         (setq default-enable-multibyte-characters t)
         (setq auto-coding-functions nil)
         (set-default-coding-systems 'sjis )
         (set-buffer-file-coding-system 'sjis )
         (set-terminal-coding-system 'sjis )
         (setq default-buffer-file-coding-system 'sjis )
         (setq default-terminal-coding-system 'sjis )
         (set-keyboard-coding-system 'sjis)
         (set-clipboard-coding-system 'sjis)
         (setq inhibit-startup-message t)
         (setq initial-scratch-message nil)
         ;;(global-font-lock-mode nil)
         (require 'jka-compr)
         (auto-compression-mode 1)
)))

(setq dired-listing-switches "-alG")

;;
;; whitespace
;;
(require 'whitespace)
(setq whitespace-style '(face
                         trailing
                         tabs
                         empty
                         space-mark
                         tab-mark
                         ))

(setq whitespace-display-mappings
      '((tab-mark ?\t [?> ?\t] [?\\ ?\t])))

(global-whitespace-mode 1)
(set-face-foreground 'whitespace-tab "brown")
;(set-face-background 'whitespace-tab "DimGray")

;
(setq-default scroll-step 1)
(line-number-mode t)
(column-number-mode t)
(setq visible-bell t)
(setq-default truncate-lines nil)
(setq next-line-add-newlines nil)
(setq minibuffer-max-depth nil)
(setq initial-scratch-message nil)
(setq inhibit-startup-message t)

(setq-default c-basic-offset 2
              tab-width 4
              indent-tabs-mode nil)

;
(require 'cl)
(add-to-list 'load-path "~/.emacs.d/vendor/arduino-mode")
(setq auto-mode-alist (cons '("\\.\\(pde\\|ino\\)$" . arduino-mode) auto-mode-alist))
(autoload 'arduino-mode "arduino-mode" "Arduino editing mode." t)
Emacs major mode for editing Arduino sketches.

Develop

objdump

avr-objdump -S hoge.elf

nm

avr-nm --size-sort -C hoge.elf

もろもろメモ

あとにつながるメモ

xively (ザイブリー)
EVRYTHNG
thethings.iO
AT&T M2X
SORACOM ソラコム
How to send sensor data to InfluxDB from an Arduino Uno
Time series database にブチ込む
DIY Arduino YUN Integration for PagerDuty Alerts
PagerDuty の Alert で動く
DIY Home Automation Using Twilio, PowerSwitch, Arduino, and Pusher
Twilio blog arduino ネタ多し

RTOS

FreeRTOS

入門

ここがいちばんいい感じ。昔を思い出しつつ...

garretlab

AVR libc

AVR Libc 日本語

IoT するなら

いろいろ検討したが (様々なシールドやPC系GW) 、これでいいやん、そこそこ安いし、arduino 的手軽さもあるし... Arduino Yún

AWS IoTをArduino Yúnで使う(少し詳しく書いてみた) | スイッチサイエンス マガジン
腹腹開発: Arduino YUN上の温湿度センサデータをIBM IoT Foundation QuickStartへ送信する
【電子工作】Arduino YúnをGoogle DocsやTwitterと連携してみた | GMOインターネット 次世代システム研究室
Using Parse for IoT to Create an Order Button
awsIoT - 太陽光パネルの発電量をAWS IoTとAmazon Elasticsearch Serviceを使って可視化してみる - Qiita
SDK for connecting to AWS IoT from an Arduino Yún
OpenWrt
Fork of the openwrt project to add gccgo and libgo
Burgin's Data Thing | Experiment 2 - How to secure Beaver
Serial to Network Proxy (ser2net)
tunneling - Reverse ssh tunnel を安定運用する - Qiita
init.dスクリプトを書いてみる - MQTT and …