!mkdir helloWorld
次に、ino initコマンドでinoプロジェクトを作成します。このとき-t blinkのオプションを追加するとテンプレートからblinkをコピーしてくれます。
注)既にプロジェクトが作成されている場合には、以下の作業は不要です(ファイルがある場合にはino initは失敗します)。
%%bash
cd helloWorld
ino init -t blink
上記コマンドで以下のファイルが作成されます。
! ls -lR helloWorld
helloWorld: total 0 drwxr-xr-x 1 vagrant vagrant 102 Oct 16 02:23 lib drwxr-xr-x 1 vagrant vagrant 102 Oct 16 02:23 src helloWorld/lib: total 0 helloWorld/src: total 4 -rw-r--r-- 1 vagrant vagrant 182 Dec 13 2011 sketch.ino
sketch.inoの内容を確認してみましょう。
! cat helloWorld/src/sketch.ino
#define LED_PIN 13 void setup() { pinMode(LED_PIN, OUTPUT); } void loop() { digitalWrite(LED_PIN, HIGH); delay(100); digitalWrite(LED_PIN, LOW); delay(900); }
! ino list-models
Searching for Board description file (boards.txt) ... /usr/share/arduino/hardware/arduino/boards.txt uno: [DEFAULT] Arduino Uno atmega328: Arduino Duemilanove w/ ATmega328 diecimila: Arduino Diecimila or Duemilanove w/ ATmega168 nano328: Arduino Nano w/ ATmega328 nano: Arduino Nano w/ ATmega168 mega2560: Arduino Mega 2560 or Mega ADK mega: Arduino Mega (ATmega1280) leonardo: Arduino Leonardo esplora: Arduino Esplora micro: Arduino Micro mini328: Arduino Mini w/ ATmega328 mini: Arduino Mini w/ ATmega168 ethernet: Arduino Ethernet fio: Arduino Fio bt328: Arduino BT w/ ATmega328 bt: Arduino BT w/ ATmega168 LilyPadUSB: LilyPad Arduino USB lilypad328: LilyPad Arduino w/ ATmega328 lilypad: LilyPad Arduino w/ ATmega168 pro5v328: Arduino Pro or Pro Mini (5V, 16 MHz) w/ ATmega328 pro5v: Arduino Pro or Pro Mini (5V, 16 MHz) w/ ATmega168 pro328: Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega328 pro: Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega168 atmega168: Arduino NG or older w/ ATmega168 atmega8: Arduino NG or older w/ ATmega8 robotControl: Arduino Robot Control robotMotor: Arduino Robot Motor
%%bash
cd helloWorld
ino build -m atmega328
src/sketch.ino Searching for Arduino lib version file (version.txt) ... /usr/share/arduino/lib/version.txt Detecting Arduino software version ... 1.0.5 (1:1.0.5+dfsg2-2) Scanning dependencies of src Scanning dependencies of arduino src/sketch.cpp arduino/WInterrupts.c arduino/wiring_analog.c arduino/wiring.c arduino/wiring_digital.c arduino/wiring_pulse.c arduino/avr-libc/realloc.c arduino/avr-libc/malloc.c arduino/wiring_shift.c arduino/Tone.cpp arduino/HardwareSerial.cpp arduino/WMath.cpp arduino/CDC.cpp arduino/new.cpp arduino/Stream.cpp arduino/USBCore.cpp arduino/main.cpp arduino/HID.cpp arduino/WString.cpp arduino/Print.cpp arduino/IPAddress.cpp Linking libarduino.a Linking firmware.elf Converting to firmware.hex Searching for Board description file (boards.txt) ... /usr/share/arduino/hardware/arduino/boards.txt Searching for Arduino lib version file (version.txt) ... /usr/share/arduino/lib/version.txt Detecting Arduino software version ... 1.0.5 (1:1.0.5+dfsg2-2) Searching for Arduino core library ... /usr/share/arduino/hardware/arduino/cores/arduino Searching for Arduino standard libraries ... /usr/share/arduino/libraries Searching for Arduino variants directory ... /usr/share/arduino/hardware/arduino/variants Searching for make ... /usr/share/arduino/hardware/tools/avr/bin/make Searching for avr-gcc ... /usr/share/arduino/hardware/tools/avr/bin/avr-gcc Searching for avr-g++ ... /usr/share/arduino/hardware/tools/avr/bin/avr-g++ Searching for avr-ar ... /usr/share/arduino/hardware/tools/avr/bin/avr-ar Searching for avr-objcopy ... /usr/share/arduino/hardware/tools/avr/bin/avr-objcopy
make: Warning: File `.build/atmega328/Makefile.deps' has modification time 0.013 s in the future make: warning: Clock skew detected. Your build may be incomplete.
最後にino uploadコマンドでArduinoに書き込みます。
環境設定でシリアルポート2を指定しているので、ubuntuでのデバイスは/dev/ttyS1となります。 ino uploadコマンドのポート指定は、-p /dev/ttyS1で指定します。
%%bash
cd helloWorld
ino upload -m atmega328 -p /dev/ttyS1
avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.00s avrdude: Device signature = 0x1e950f avrdude: reading input file ".build/atmega328/firmware.hex" avrdude: writing flash (1018 bytes): Writing | ################################################## | 100% 0.52s avrdude: 1018 bytes of flash written avrdude: verifying flash memory against .build/atmega328/firmware.hex: avrdude: load data flash data from input file .build/atmega328/firmware.hex: avrdude: input file .build/atmega328/firmware.hex contains 1018 bytes avrdude: reading on-chip flash data: Reading | ################################################## | 100% 0.44s avrdude: verifying ... avrdude: 1018 bytes of flash verified avrdude done. Thank you.
%%writefile helloWorld/src/sketch.ino
#define LED_PIN 13
void setup()
{
pinMode(LED_PIN, OUTPUT);
}
void loop()
{
digitalWrite(LED_PIN, HIGH);
delay(200);
digitalWrite(LED_PIN, LOW);
delay(200);
}
Overwriting helloWorld/src/sketch.ino
ビルドして、アップロードします。
%%bash
cd helloWorld
ino build -m atmega328
ino upload -m atmega328 -p /dev/ttyS1
src/sketch.ino Scanning dependencies of src src/sketch.cpp Linking firmware.elf Converting to firmware.hex
avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.00s avrdude: Device signature = 0x1e950f avrdude: reading input file ".build/atmega328/firmware.hex" avrdude: writing flash (1018 bytes): Writing | ################################################## | 100% 0.53s avrdude: 1018 bytes of flash written avrdude: verifying flash memory against .build/atmega328/firmware.hex: avrdude: load data flash data from input file .build/atmega328/firmware.hex: avrdude: input file .build/atmega328/firmware.hex contains 1018 bytes avrdude: reading on-chip flash data: Reading | ################################################## | 100% 0.45s avrdude: verifying ... avrdude: 1018 bytes of flash verified avrdude done. Thank you.
jupyterノート上でもシリアルの出力をみることができます(残念ながら入力はできません、どなたかご存じの方はtake.pwave@gmail.comまでお知らせください)。
スケッチを以下の様に変更します。
%%writefile helloWorld/src/sketch.ino
#define LED_PIN 13
void setup(){
pinMode(13, OUTPUT);
Serial.begin(9600);
}
void loop(){
digitalWrite(13, HIGH);
delay(1000);
Serial.println("on");
digitalWrite(13, LOW);
delay(1000);
Serial.println("off");
}
Overwriting helloWorld/src/sketch.ino
ビルドして、アップロードします。
%%bash
cd helloWorld
ino build -m atmega328
ino upload -m atmega328 -p /dev/ttyS1
src/sketch.ino Scanning dependencies of src src/sketch.cpp Linking firmware.elf Converting to firmware.hex
make: Warning: File `.build/atmega328/Makefile.deps' has modification time 0.016 s in the future make: warning: Clock skew detected. Your build may be incomplete. avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.00s avrdude: Device signature = 0x1e950f avrdude: reading input file ".build/atmega328/firmware.hex" avrdude: writing flash (2408 bytes): Writing | ################################################## | 100% 1.24s avrdude: 2408 bytes of flash written avrdude: verifying flash memory against .build/atmega328/firmware.hex: avrdude: load data flash data from input file .build/atmega328/firmware.hex: avrdude: input file .build/atmega328/firmware.hex contains 2408 bytes avrdude: reading on-chip flash data: Reading | ################################################## | 100% 1.06s avrdude: verifying ... avrdude: 2408 bytes of flash verified avrdude done. Thank you.
スケッチを以下の様に変更してシリアルからの情報を表示してみましょう。
出力を止めるには、JupyterのKernelメニューからInterruptを選択します。
! ino serial -p /dev/ttyS1
Searching for Serial monitor (picocom) ... /usr/bin/picocom
picocom v1.7
port is : /dev/ttyS1
flowcontrol : none
baudrate is : 9600
parity is : none
databits are : 8
escape is : C-a
local echo is : no
noinit is : no
noreset is : no
nolock is : yes
send_cmd is : sz -vv
receive_cmd is : rz -vv
imap is :
omap is :
emap is : crcrlf,delbs,
Terminal ready
on
off
on
off
on
off
on
とても簡単にArduinoプログラミンが体験できます。みなさんもjupyterで Arduinoプログラミングに挑戦してみてください。
これからもArduinoのスケッチの作成過程をjupyterのノートブックで共有し、電子工作の楽しさを広めたいと願っています。