MARY(LPC1114)でArduinoっぽい開発をしたい
Arduinoっぽい(目指すは100%互換の)ラッパーを用意し、C++を使ったソフトウェアArduino互換機としてのMARYの開発をしちゃう、ちょっと斜め45度オトトイの方向をむいちゃってるプロジェクトです。
「MARYDuino(仮)」プロジェクト
Arduinoが流行ってますし
ArduinoはATmegaシリーズなどのAVRマイコン上にC++風のArduino言語と統合開発環境が準備されていて、スケッチが豊富にあり、とても使いやすいようです。例えばLCDシールドと専用のスケッチをダウンロードすれば誰でも簡単にLCDに文字や図形を表示できる環境を手に入れられます。
「ArduinoスケッチがMARYで動いたら便利じゃね?」
というトンデモな思いつきを少しずつ実行に移してみようと思います。
C++環境の構築と、Arduinoラッパーの用意
まず、Arduinoライクな環境を作るにはLPC1114向けのC++環境を構築する必要がありました。LPCXpressoはC言語のみの対応になっていますが、実体はEclipse + arm-none-eabi-gccでありC++環境の開発も出来ます。LPC1114のFlashとRAMが少ないので工夫しないとすぐ一杯になってしまいますが。
どう使えば良いの?
このページの下にあるリンクからMARYDuinoのひな形プロジェクトをダウンロードします。(現在LPCXpresso IDEのみの対応です。Mac OSX版はしばらくお待ち下さい) 解凍後、LPCXpresso IDEを起動し画面左下にある"Import existing projects"で、maryduinoフォルダを指定して下さい。[src]フォルダの[main.cpp]を書き換えてArduino風の開発をします。
プロジェクト現状
対応している関数が非常に少なく、これから漸進的に機能及びドキュメントを充実させてゆきます。
現在動作するペリフェラルと対応するArduino関数を示します。
- Systick :: delay(ms), millis()
- UART :: Serial.write(val), Serial.read(), Serial.println(string), Serial.print(string), Serial.print(val, format), Serial.println(val, format)
- SPI :: SPI.transfer(data), SPI.setClockDivider(), SPI.setDataMode(), (オリジナル関数)SPI.setBitLength()
- GPIO :: pinMode(pin, state), digitalWrite(pin, state), digitalRead(pin) (※ピン番号が特殊な割り付けになっています。詳しくはgpio.hをご覧ください)
- OLED :: MARY拡張OB基板のArduino風OLEDドライバです。詳しくはサンプルプログラムをご覧ください
- SDFile :: MARY拡張XB基板のArduino風SDFileドライバです。詳しくはサンプルプログラムをご覧ください
ダウンロード
このプロジェクトではMARY拡張OB基板に文字や、正弦波を表示しています。またdelay関数で1秒周期でMB基板の裏側にある3カラーLEDを同時点灯/消灯させ、白色光を1秒周期で点滅させています。加えてUARTで文字も表示しています。TeraTermなどで表示内容を見ることができます。エンコードをUTF-8に設定しますと日本語表示もできます。TeraTermの詳細な設定は記事のp.81を参照して下さい。
MARYDuinoアルファ版
ベータ版に格上げしました。またこれ以降のネームをMARY-DUINOとします。(マルツさんのArduinoボード「MARUDUINO」と混同しないため)
MARY-DUINOベータ版
更新情報
20110812 ... 初回アルファ版アップ
20110813 ... Serial.print(val,format) 及び println(val, format)のアスキーコード、2進、8進、10進、16進の基数に対応:maryduino_20110813.zip
20110815 ... SPIなど、それぞれのコンストラクタをクラスファイル内部で宣言するようにした。これにより使用しないライブラリはインクルードしないようにすれば容量を圧迫せずに済む…はず
20110821 ... 大幅な修正をしました。
- OLEDの初期化ルーチンの修正。
- putp関数を誌面と同じ16ビットピクセルモードに修正した(24bitに戻したい場合はoled.cppのputp関数のコメントアウトを復元してください)。
- GPIOの設定をpinMode(P0_7,OUTPUT)のようにピン番号そのものでも指定できるようにした。
- SPIモードとOLEDクラスをMAPLEボード+LPCXpresso LPC1114の組み合わせに対応した。
- SPI.begin() -> 従来どおり、MARYでのSPI初期化
- SPI.begin(LPCXSSP0) -> LPCXpresso LPC1114 + MAPLE ボードでのSPI使用(SCKポートをP2_11に変更しているだけ)
- oled.reset() -> 従来どおり、MARYでのOLED初期化
- oled.begin(LPCXSSP0) -> LPCXpresso LPC1114 + MAPLE ボードでのOLED使用(MARMEX-スロット1を使用してください)
- SDfile.begin() -> 従来どおり、MARY-XBボードでのSDカード初期化
- SDfile.begin(int CS_PIN) -> SDカードのCSピンを変更する場合。(例:SDFile.begin(P0_13) PIN0_13をSDのCSピンに設定して初期化)
- SDfile.begin(LPCXSSP0) -> LPCXpresso LPC1114 + MAPLEボードのSDカードスロットを使う場合(CSピンの初期化はLPCXSSP0が指定されたときに内部で行うので特に要らないです)
- 20111108 ... Arduino XBee APIライブラリを移植(MARY-XB基板を使用してください)。主にSeries2で動作確認済み。
応用例
これから
- Arduino関数の全ての実装 (processingはまだ)
- Flash容量が多いCortex-M0シリーズのLPC1227へのポート。(ターゲットボード:LPCXpresso LPC1227)
ありがたいコメントを頂戴しちゃう欄
- 皆で参加型で応援しましょう。ドキュメントやサンプル等、どうですか? -- Gingaxx (2011-08-12 22:29:21)
- これを待ってました! -- processingunit (2011-08-13 00:09:25)
最終更新:2011年11月29日 00:19