LoginSignup
0
0

More than 3 years have passed since last update.

OrangePi ONEでarduino-cliを動かす

Last updated at Posted at 2020-03-20

OrangePi ONEとは

とても安価で、私には扱いやすいマイコンボードです。詳細はこちら

本家によるOrangePiONEの紹介

色々なOSが選択できますが、ここでは、Armbianを使うことにします。

arduino-cliとは

有名なArduinoの開発環境でポピュラなものはArduino IDEです。

githubのリポジトリ arduino/arduino-cli

GUI使用前提のArduinoの開発環境をCLI(Command Line Interface)でGUIを使わないでコンパイルやプログラミングが出来るように作られたプログラムです。

OrangePi ONEにarduino-cliをインストールする

上述のgithubにアクセスします。ソースコードを入手してコンパイルしてインストールするのが正統派でしょうが、そもそも非力なOrangePi ONEにそんな事をさせるのは可愛そうなので(実は自分が面倒くさい)、
QuickstartのInstall のDownload the latest packagesからバイナリとして出来上がっているファイルを入手します。

対象となるバイナリファイルは、Linux ARM 32bitファイル です。

このファイルをwgetなどでOrangePi ONEで取り込みます。
取り込んだtar.gzファイルをお約束で展開すると2個のファイルができます。
実行ファイルを/usr/local/binなどにinstallします。

$ wget https://downloads.arduino.cc/arduino-cli/arduino-cli_latest_Linux_ARMv7.tar.gz
$ tar xvzf arduino-cli_latest_Linux_ARMv7.tar.gz
LICENSE.txt
arduino-cli
$ sudo install arduino-cli /usr/local/bin

インストール直後に行う事

core情報を最新のものにする。

$ arduino-cli core update-index
$ arduino-cli core install arduino:avr

必要に応じてupgradeする。

$ arduino-cli core upgrade

もし、Arduino IDEを使っていたら、Arduino/librariesの配下に入っているライブラリ群が同様に使用できるかを

$ arduino-cli lib list
Name                        Installed Available Location
Adafruit_MCP9600_Library    1.1.0     -         user    
Adafruit_STMPE610           1.1.0     -         user    
Adafruit_TouchScreen        1.0.4     -         user    
Adafruit_Unified_Sensor     1.1.2     -         user    
MPU6050_tockn               1.5.2     -         user    
Adafruit_ADT7410_Library    1.0.2     -         user    
Adafruit_Circuit_Playground 1.10.4    -         user    
NTPClient                   3.2.0     -         user    
LiquidCrystal_I2C           1.1.2     -         user    
UARDECS_MEGA_Library        1.2.1     -         user    
HX711_Arduino_Library       0.7.2     -         user    
IRremote                    2.2.3     -         user    
HOLLY_UARDECS_MEGA_Library  1.2.1     -         user    
SdFat                       1.1.2     -         user    
Adafruit_SHT31_Library      1.1.6     -         user    
Adafruit_SSD1306            2.2.0     -         user    
K30_CO2_I2C_Arduino                   -         user    
UARDECS_Library             1.2.1     -         user    
UARDECS_MEGA_Library-orig   1.2.1     -         user    
Adafruit_BusIO              1.2.1     -         user    
DS3231                      1.0.2     -         user    
SpacebrewYun                1.0.2     -         user    
SD                          1.2.4     -         user    
Servo                       1.1.6     -         user    
Adafruit_GFX_Library        1.7.5     -         user    
Adafruit_ILI9341            1.5.4     -         user    
ELT_S300_Library            1.0.0     -         user    
Ethernet2                   1.0.4     -         user    
Rtc_by_Makuna               2.3.4     -         user    
AT24Cx                                -         user    
Adafruit_ADXL343            1.2.0     -         user    

などとして確認する。

簡単なプログラミングを試してみる

お約束のLチカをArduino NANO V3(互換機)(以下、NANO)で試してみる。

USBインタフェースにNANOを接続する

$ arduino-cli board list
Port         Type              Board Name   FQBN             Core       
/dev/ttyS0   Serial Port       Unknown                                  
/dev/ttyUSB0 Serial Port (USB) Arduino Nano arduino:avr:nano arduino:avr

接続が確認できる。
実際には、多くの互換ボードではVender IDやProduct IDが本家とは異なり、そのままでは認識されない、それを是正する方法は別に記す。

ソースコードを書く

作業用のサブディレクトリを作って、そこに移動。例えば、'work' というサブディレクトリを作りその下で作業をする。
今回は、Arduino界のHello Worldと呼ばれる、Blinkを作ることにする。

$ mkdir work
$ cd work
$ arduino-cli sketch new Blink
$ cat Blink/Blink.ino
void setup() {
}

void loop() {
}

このように空のBlink.inoファイルがBlinkサブディレクトリの下に作られる。
そこに本来のBlink.inoの動作部分だけをコピペする。

Blink.ino
void setup() {
    pinMode(LED_BUILTIN,OUTPUT);
}

void loop() {
    digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
    delay(1000);                       // wait for a second
    digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
    delay(1000);                       // wait for a second
}

コンパイルしてNANOに書き込む

ここでは、NANOで古いブートローダを使った互換機であることから、ボードの指定を少し細かく行う。
work/Blink内でオペレーションを行うのではなくて、workの下で行う点に注意。

$ cd work
$ arduino-cli compile -b arduino:avr:nano:cpu=atmega328old Blink
Sketch uses 924 bytes (3%) of program storage space. Maximum is 30720 bytes.
Global variables use 9 bytes (0%) of dynamic memory, leaving 2039 bytes for 
local variables. Maximum is 2048 bytes.
$ arduino-cli upload -p /dev/ttyUSB0 -b arduino:avr:nano:cpu=atmega328old Blink

コンパイルが無事に成功すると、コンパイルメッセージが表示される。
アップロードをはじめて、無事終了すると、何のメッセージも出さずにプロンプトに返ってくる。直後からNANOはLチカを始める。uploadにはボード指定は不要なのかもしれないが、複数のボード対象にコンパイルしている場合にはボード毎のhexファイルが生成されるのでその区別のために指定することは有効である。
なお、Blinkディレクトリの中には、elf,hexファイルなどが残る。

$ ls -l Blink
total 32
-rwxr-xr-x 1 mhorimoto users 14104 Mar 21 07:44 Blink.arduino.avr.nano.elf
-rw-r--r-- 1 mhorimoto users  2615 Mar 21 07:44 Blink.arduino.avr.nano.hex
-rw-r--r-- 1 mhorimoto users  7952 Mar 21 07:44 Blink.arduino.avr.nano.with_bootloader.hex
-rw-r--r-- 1 mhorimoto users   359 Mar 20 16:04 Blink.ino

このhexファイルだけが残っていれば、後からarduino-cli uploadコマンドだけで毎回コンパイルしなくてもプログラムをArduinoにアップロードできるので何十枚のArduinoボードが有ってもプログラムのコピーが機械的に楽に実行できる。

Arduino互換機のためのチューニング

今回のNANOもそうですが、互換機の場合には、USBインタフェースに認識されるVender IDやProduct IDが本家とは異なり、そのためBoard設定で接続しているArduinoボードが認識されない、もしくは、期待したモデルで認識されない。という問題が生じる。
その対策については別記事として後日投稿予定。

0
0
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
0
0