コンソールからのArduinoプログラミング、gentoo-way、それ以上

問題の状態は一方では複雑であり、他方では非常に簡単に定式化されます。 ArduinoはFTDIコンバーターを介して接続されており、非常に遠くにサーバーがあります。 サーバーアクセス-SSH。 そして、ファームウェアを修正、コンパイル、ボードにアップロードする必要があります。 古典的な例は、鍵穴を通して鍵のかかった部屋の壁紙を張ることです。 明らかに、Arduino IDE、Eclipse、または他の美しいプログラミング環境の話はありません。



一方、家を建て、引き寄せ、私たちが生きるということです。



したがって、目標は、Arduinoをプログラムするのに十分な環境をリモートシステムに作成することです。 もちろん、深刻なデバッグの可能性についての話はありません。私は、Eclipse環境のデスクトップマシンで自分でスケッチを書いてデバッグします。 したがって、1つのボードはラピッドプロトタイピングのために回路基板に搭載され、もう1つのボードは遠く離れたサーバーに搭載されているため、生産は栄光に満ちています。



参照用に、ターゲットシステム:
X86アーキテクチャ、カーネル3.7.5-hardened-r1

最新バージョンの安定したパッケージがインストールされます。

Arduino Pro Mini 328p 16MHz 5VボードとFTDIチップ上のUSBコンバーター





カーネルサポートUSBコンバーターへのインストール



カーネルにFTDIコンバーターのモジュールサポートを追加する方法については、以前の記事で説明していますが 、詳細についてはそれを参照しますが、ここでは、カーネル構成に追加する必要があるものを示します。



デバイスドライバー--->
     [*] USBサポート---> 
         <M> USBシリアルコンバーターのサポート--->
             <M> USB FTDIシングルポートシリアルドライバー




コンバーターをUSBに接続すると、次のデバイスが表示されます。



 #ls -l / dev / ttyUSB0
 crw-rw ---- 1ルートuucp、3月0 9 13:04 AM / dev / ttyUSB0




コンパイルツールチェーン環境の設定



一般に、すべては私が以前に書いものに似ていますが、彼らが言うように、ニュアンスがあります。 ターゲットシステムは、強化されたカーネルと対応するPortageキーを使用するため、ツールチェーンの単純なビルドはエラーで失敗します。



  configure:error:*** --enable-espはこのXXXXターゲットではサポートされていません。 




この問題を解決するには、ターゲットアセンブリに関係のないキーを無効にする必要があります;このため、コマンドは次のように変更されます。



  #USE = "nopie nossp -hardened -pic -openmp" crossdev -S -t avr 




途中で、不正なパスの問題を解決します


すでに書いたように、パスは正しくない可能性があるため、シンボリックリンクを作成する必要があります。



 #find / usr / -name avr5.x
 /usr/lib64/binutils/avr/2.23.1/ldscripts/avr5.x
 #ln -s /usr/lib64/binutils/avr/2.23.1/ldscripts / usr / avr / lib / ldscripts

 #find / usr / -name crtm328p.o
 /usr/avr/lib/avr5/crtm328p.o
 #ln -s /usr/avr/lib/avr5/crtm328p.o / usr / avr / lib /




プログラマとミニコムを同時にインストールします


  #emerge dev-embedded / avrdude net-dialup / minicom 




ユーザーを作成



ルート環境で行うことはこれ以上ないので、まだ存在しない場合は自分用の単純なユーザーを作成し、その環境で他のすべてを続行します。 ユーザーをuucpグループに追加することを忘れないでください。



 #useradd -G uucp -m -U arduino
 #パスワードArduino
 #su arduino




Arduinoソース、 個人的な余分なものはありません



Portageからarduinoをインストールすると、多くのパッケージと依存関係、同じJava VMなどを取得します。 特にターゲットシステムがサーバーシステムであることを覚えている場合は、これらすべてをインストールする理由はありません。



したがって、ソースをダウンロードして解凍します。このため、ここでarduino.cc/en/Main/Softwareにアクセスし最新のものを確認します。 執筆時点で、リリース1.0.4がリリースされました。 場合によっては、バージョンが異なる可能性があるため、次の手順はバージョンに依存せず、ディレクトリの名前を変更するだけです。



 $ wget http://arduino.googlecode.com/files/arduino-1.0.4-linux32.tgz
 $ tar -xzvf arduino-1.0.4-linux32.tgz
 $ mv arduino-1.0.4 arduino




静的ライブラリのコンパイル



将来のプロジェクトと後でリンクするための静的ライブラリを取得するには、3つのオプションがあります。







ライブラリ用のフォルダーを作成し、ソースを接続します




 $ cd〜
 $ mkdir ArduinoCore
 $ cd ArduinoCore
 $ mkdir src
 $ ln -s〜/ arduino /ハードウェア/ arduino / cores / arduino / * src /




これに問題がある場合、これはArduino.hファイルが置かれているフォルダーであり、他のヘッダーとソースは、コマンドを見つけることができます:



 $ find〜/ arduino -name Arduino.h 
 /home/arduino/arduino/hardware/arduino/cores/arduino/Arduino.h 




さらに、ボードのバージョンに固有のヘッダーファイルpins_arduino.hが必要です。 私の場合、次のファイルが利用可能です。



 $ find〜/ arduino -name pins_arduino.h 
 /home/arduino/arduino/hardware/arduino/variants/micro/pins_arduino.h 
 /home/arduino/arduino/hardware/arduino/variants/standard/pins_arduino.h 
 /home/arduino/arduino/hardware/arduino/variants/leonardo/pins_arduino.h 
 /home/arduino/arduino/hardware/arduino/variants/mega/pins_arduino.h 
 /home/arduino/arduino/hardware/arduino/variants/eightanaloginputs/pins_arduino.h 




標準的なものは私に合っており、あなたはあなたのものを選択します:



  $ ln -s〜/ arduino /ハードウェア/ arduino / options / standard / pins_arduino.h src / 




ライブラリのコンパイル


正直にEclipseからMakefileを取得し、相対パスではなく絶対パスが存在する2行のみを修正しました。 実際、イデオロギー全体がそこから取られ、コンソールに実装されています。 328P_16MHz.tgzを取得して〜/ ArduinoCoreフォルダーに展開すると、次のようになります。



 $ cd〜/ ArduinoCore /
 $ wget https://github.com/madixi/ArduinoCore/blob/master/ArduinoCore/328P_16MHz.tgz?raw=true \
	 -O 328P_16MHz.tgz 
 $ tar -xzvf 328P_16MHz.tgz

 $ ls -R〜/ ArduinoCore
 / home / arduino / ArduinoCore:
 328P_16MHz 328P_16MHz.tgz src

 /ホーム/ arduino / ArduinoCore / 328P_16MHz:
 makefile objects.mk sources.mk src

 /ホーム/ arduino / ArduinoCore / 328P_16MHz / src:
 subdir.mk

 /ホーム/ arduino / ArduinoCore / src:
 Arduino.h IPAddress.h Stream.h WCharacter.h malloc.c lighting_private.h
 CDC.cpp Platform.h Tone.cpp WInterrupts.c new.cpp lighting_pulse.c
 Client.h Print.cpp USBAPI.h WMath.cpp new.h lighting_shift.c
 HID.cpp Print.h USBCore.cpp WString.cpp pins_arduino.h
 HardwareSerial.cpp Printable.h USBCore.h WString.h lighting.c
 HardwareSerial.h Server.h USBDesc.h binary.h lighting_analog.c
 IPAddress.cpp Stream.cpp Udp.h main.cpp lighting_digital.c




異なるボード(別のチップ)および/または異なる周波数を使用している場合は、ファイル内のコンパイラキーを修正するだけです。



 〜/ ArduinoCore / 328P_16MHz / src / subdir.mk
         -mmcu = atmega328p
         -DF_CPU = 16000000UL




最後に行う必要があるのは、静的ライブラリのコンパイルです。



 $ cd 328P_16MHz
 $ make




次のような結果になります。



 $ ls -l〜/ ArduinoCore / 328P_16MHz
合計592
 -rw-r-r-- 1 arduino arduino 187186 3月18日10:18 libArduinoCore.a
 -rw-r-r-- 1 arduino arduino 327022 3月18日10:18 libArduinoCore.lss
 -rw-r-r-- 1 arduino arduino 2021 Mar 17 14:46 makefile
 -rw-r-r-- 1 arduino arduino 231 Mar 17 14:46 objects.mk
 -rw-r-r-- 1 arduino arduino 599 Mar 17 14:46 sources.mk
 drwxr-xr-x 2 arduino arduino 4096 Mar 18 18 10:17 src




これをすべて行ったために、これは静的ライブラリlibArduinoCore.aであり、将来のプロジェクトとリンクします。



最初のプロジェクト



各プログラミング言語には独自のHello worldがあります。Arduinoでは、点滅LEDはボードに直接はんだ付けされ、チップの13番目のピンに接続されています。 最後に彼の陽気な点滅は、すべてがうまくいったことを伝えます。



 $ cd〜
 $ mkdir BlinkA
 $ cd BlinkA




main.cppファイルを作成します

/* * main.cpp * * Example: Blink 'A'-letter Morse code '.-' * * Created on: 15.03.2013 * Author: madixi */ #include <Arduino.h> int led = 13; void setup() { pinMode(led, OUTPUT); Serial.begin(9600); Serial.println("Example: Blink 'A'-letter Morse code '.-'"); } void loop() { digitalWrite(led, HIGH); delay(200); digitalWrite(led, LOW); delay(200); digitalWrite(led, HIGH); delay(600); digitalWrite(led, LOW); delay(200); Serial.println("._"); } int main(void) { init(); setup(); for (;;) { loop(); } }
      
      







ご覧のとおり、スケッチとは少し異なります。 最初に、Arduino.hヘッダーファイルの接続が追加され、最後にメイン関数本体が追加されます。 Arduino IDEは、これらすべてをあなたから感知できないほど追加します。 必要な理由が正確にわからない限り、main()関数を変更しないでください。



最初のプロジェクトのコンパイル


前のケースと同様に、MakefileはEclipseから取得され、編集は絶対パスを相対パスに置き換えることのみに関係していました。 ArduinoBuild.tgzファイルを取得し、プロジェクトのあるフォルダーに解凍します。 以下を取得する必要があります。



 $ cd〜/ BlinkA
 $ wget https://github.com/madixi/BlinkA/blob/master/BlinkA/ArduinoBuild.tgz?raw=true -O ArduinoBuild.tgz 
 $ tar -xzvf ArduinoBuild.tgz

 $ ls -lR〜/ BlinkA /  
 /ホーム/ arduino / BlinkA /:
合計8
 -rw-r-r-- 1 arduino arduino 1430 Mar 18 10:20 ArduinoBuild.tgz
 drwxr-xr-x 2 arduino arduino 71 Mar 17 21:06デバッグ
 -rw-r-r-- 1 arduino arduino 563 Mar 17 19:45 main.cpp

 /ホーム/ arduino / BlinkA /デバッグ:
合計16
 -rw-r-r-- 1 arduino arduino 2314 Mar 17 21:06 makefile
 -rw-r-r-- 1 arduino arduino 249 Mar 17 21:06 objects.mk
 -rw-r-r-- 1 arduino arduino 609 Mar 17 17:06 sources.mk
 -rw-r-r-- 1 arduino arduino 761 Mar 17 21:06 subdir.mk




次に、プロジェクトを組み立てます。



 cd〜/ BlinkA /デバッグ
作る




すべてが順調に進んだ場合、次のようになります。



 $ ls -lR〜/ BlinkA /
 /ホーム/ arduino / BlinkA /:
合計12
 -rw-r-r-- 1 arduino arduino 1430 Mar 18 10:20 ArduinoBuild.tgz
 drwxr-xr-x 2 arduino arduino 4096 Mar 18 10:23デバッグ
 -rw-r-r-- 1 arduino arduino 563 Mar 17 19:45 main.cpp

 /ホーム/ arduino / BlinkA /デバッグ:
合計216
 -rwxr-xr-x 1 arduino arduino 29271 Mar 18 10:23 BlinkA.elf
 -rw-r-r-- 1 arduino arduino 7078 3月18日10:23 BlinkA.hex
 -rw-r-r-- 1 arduino arduino 41490 3月18日10:23 BlinkA.lss
 -rw-r-r-- 1 arduino arduino 98309 3月18日10:23 BlinkA.map
 -rw-r-r-- 1 arduino arduino 2994 3月18日10:23 BlinkA.symbol
 -rw-r-r-- 1 arduino arduino 713 Mar 18 10:23 main.d
 -rw-r-r-- 1 arduino arduino 6588 Mar 18 10:23 main.o
 -rw-r-r-- 1 arduino arduino 2314 Mar 17 21:06 makefile
 -rw-r-r-- 1 arduino arduino 249 Mar 17 21:06 objects.mk
 -rw-r-r-- 1 arduino arduino 609 Mar 17 17:06 sources.mk
 -rw-r-r-- 1 arduino arduino 761 Mar 17 21:06 subdir.mk




実際、 BlinkA.hexファイルは既製のファームウェアであり、コントローラーにアップロードします。



ファームウェア


ファームウェアコマンドは簡単です。



  / usr / bin / avrdude -pm328p -carduino -P / dev / ttyUSB0 -b57600 -D -Uflash:w:BlinkA.hex:a 




この場合、コントローラーのタイプは異なる可能性があります。-pパラメーター、完全なリストはmanにあります。



ファームウェアプロセスをメイクファイルに追加できます。この場合、ファームウェアは各ビルドの最後に発生します。 これを行うには、 ArduinoBuild.tgzファイルの代わりに、 ArduinoBuildBuild.tgzを使用する必要があります。



何が機能したかを確認する方法


上記のスケッチでは、変な点滅のLEDだけでなく、シリアルポートへのメッセージの出力もあります。 この場合、出力を制御手段として使用することは非常に便利です。デーモンを固定することもできます。これにより、syslogのすべてのボードメッセージが取得されますが、今は停止しません。



シリアルポートを調べるには、minicomが必要です。



  $ minicom -b 9600 -D / dev / ttyUSB0 




すべてが正常に機能する場合、一点鎖線「.–」の形で「パルス」が表示されます。



結論の代わりに



次回の記事では、外部ライブラリを使用する際の問題を明らかにする予定です。外部ライブラリには現在多くのライブラリがあります。



内容



  1. LinuxからのArduinoプログラミング、gentoo-way、クイックスタート
  2. コンソールからのArduinoプログラミング、gentoo-way、それ以上




使用されるソース:



  1. playground.arduino.cc/linux/gentoo
  2. playground.arduino.cc/code/eclipse
  3. forums.gentoo.org/viewtopic-p-6971658.html



All Articles