ラベル RXduino の投稿を表示しています。 すべての投稿を表示
ラベル RXduino の投稿を表示しています。 すべての投稿を表示

2012年8月7日火曜日

ArduinoとGR-SAKURA (micro)SD-CARD編1

 シリアル、analogRead, analogWrite, Ethernet と来て、次は(micro)SD-CARDです。Arduino の Ethernet Shield はmicroSDカードスロットもついています。GR-SAKURA や RaXino では本体裏側に標準でmicroSDカードスロットがついています。



 動かしたソース(スケッチ)は次のようなものです。

#define RXDUINO

#ifdef RXDUINO
#include <rxduino.h>
#include <sdmmc.h>
#else
#include <Arduino.h>
#include <SD.h>
#endif

#ifdef RXDUINO
SDMMC SD;
#endif

void setup()
{
    // シリアルポートを9600bpsで開始。
    Serial.begin(9600);
    // 受信バッファにデータが入るまで待機。
    while (Serial.available() == 0);        
    Serial.println("Initializing...");
    // 一旦、受信バッファにデータがあれば、
    if (Serial.available() > 0) {
        // 読み込んで、廃棄。
        char c = Serial.read();
    }
    
    // SDカード(利用機能)の初期化。
    Serial.println("Initializing SD card function...");
#ifdef RXDUINO
    SD.begin();
#else
    // Arudion + Ethernet SD Shield では、SPIの
    // SDカードのCEは4pinになるが、SPIを使う場合は、
    // SS(10pin)を常にOUTPUTモードにしておく必要がある。
    pinMode(10, OUTPUT);
    SD.begin(4);
#endif
    Serial.println("SD initializatoin done.");
    
    File file = SD.open("test.txt", FILE_WRITE);
    
    file.println("Hello, GR-SAKURA!!");
    
    file.close();
    
    Serial.println("finished.");
}

void loop()
{
}

Arduino + (Ethernet &)SD Shield でも GR-SAKURA でも microSD-CARDのルート直下に"Test.txt"ファイルが作成され、ファイルの中身が"Hello, GR-SAKURA!!"となっていることが確認できました。

2012年8月5日日曜日

ArduinoとGR-SAKURA Ethernet編1

 シリアルanalogRead, analogWrite の次は、Ethernet について試してみようと思います。Ethernetといっても色々あるので、今回はArduinoとGR-SAKURAを超簡易版Web Serverにするスケッチを試します。Arduinoのサンプルスケッチの中にあるAD値をブラウザで表示できるWeb ServerのサンプルのAD部分を省略した以下のソース(スケッチ)をArduino と GR-SAKURA で動かしてみました。

#define RXDUINO

#ifdef RXDUINO
#include <rxduino.h>
#else
#include <Arduino.h>
#include <SPI.h>
#endif

#include <Ethernet.h>

#ifdef RXDUINO
TEthernet Ethernet;
#endif

// MACアドレスは適宜変更が必要。
byte mac[] = {
    0x90, 0xA2, 0xDA, 0x0D, 0x02, 0x8C};

EthernetServer server(80);

void setup()
{
    // シリアルポートを9600bpsで開始。
    Serial.begin(9600);
    // 受信バッファにデータが入るまで待機。
    while (Serial.available() == 0);        
    Serial.println("Initializing...");
    // 一旦、受信バッファにデータがあれば、
    if (Serial.available() > 0) {
        // 読み込んで、廃棄。
        char c = Serial.read();
    }
    
    // DHCPでネットワークを開始する。
    if (Ethernet.begin(mac) == 0) {
        // DHCPのアドレス取得に失敗。
        Serial.println("Failed get address on DHCP");
        while(1);
    }
    Serial.println("Get IP address from DHCP is success.");
    // サーバーの開始して、取得アドレスを報告。
    server.begin();
    Serial.print("Please access by browser at http://");
    Serial.println(Ethernet.localIP());
}

void loop()
{
    // クライアントの接続リスン。
    EthernetClient client = server.available();
    // サーバに接続されたクライアントがあれば、
    if (client) {
        Serial.println("new client");
        
        boolean currentLineIsBlank = true;
        // クライアントが接続されていれば、
        while (client.connected()) {
#ifdef RXDUINO
            // (Rxduinoでの)Ethernet受信処理実行。
            Ethernet.processPackets();
#endif
            // クライアントから受け取ったデータがあれば、
            if (client.available()) {
                // データを受信してシリアルへ。
                char c = client.read();
                Serial.write(c);
                // EOL(\n)を受け取ったら、
                if (c == '\n' && currentLineIsBlank) {
                    // http レスポンスを送信する。
                    client.println("HTTP/1.1 200 OK");
                    client.println("Content-Type: text/html");
                    client.println("Connection: close");
                    client.println();
                    client.println("<!DOCUTYPE HTML>");
                    client.println("<html>");
                    client.println("Hello!");
                    client.println("</html>");
                    break;
                }
                
                // EOL(\n)を受け取ったら、
                if (c == '\n') {
                    currentLineIsBlank = true;
                }
                // 
                else if (c != '\r') {
                    currentLineIsBlank = false;
                }
            }
        }
        
        delay(1);
        
        client.stop();
        Serial.println("client disconnected");
    }       
}



 Arudiono では、Ethernetを使うためにはEthernet Shieldが必要になりますが、GR-SAKURAやRaxinoは標準でEthernetポートを持っています。


 Arduino + Ethernet Shield では当然ながら動きます。


 GR-SAKURA(Rxduino)ではEthernet受信処理を行うのに"Ethernet.prosessPackets();"という記述が必要なようで、これをいれないとうまく動きませんでした。
 とりあえず、Web Serverの動作は確認できたかな?

2012年8月3日金曜日

ArduinoとGR-SAKURA シリアル通信編

せっかくなので、ArduinoとGR-SAKURAボードの両方で遊んでみようと思います。まずは、手頃というか、何はなくともはじめに必要になるシリアル通信を試します。

/*GR-SAKURA Sketch Template Version: V1.00*/
#include <rxduino.h>

char c;

void setup()
{
    // シリアルポートを9600bpsで開始。
    Serial.begin(9600);
    // 受信バッファにデータが入るまで待機。
    while (Serial.available() == 0);        
    Serial.println("Hello, GR-SAKURA!");
    // 一旦、受信バッファにデータがあれば、
    if (Serial.available() > 0) {
        // 読み込んで、廃棄。
        c = Serial.read();
    }
}

void loop()
{
    // 受信バッファにデータがあれば、
    if (Serial.available() > 0) {
        // 読み込んで、
        c = Serial.read();
        // エコーバック。
        Serial.write(c);
        // 特定の文字の時だけ、メッセージ。
        switch (c) {
            case 'A':
                Serial.println();
                Serial.println("Hello!");
                break;
            case 'B':
                Serial.println();
                Serial.println("SAKURA");
                break;
            case 'C':
                Serial.println();
                for (int i = 0; i < 0x10; i++) {
                    Serial.print(i, HEX);
                }
                Serial.println();
                break;
            default:
                break;
        }
    }
}

 上記のようなソース(スケッチ)をGR-SAKURA用にWebコンパイラ上で作成、ビルドして、Webコンパイラからソースをコピペして、Arduino-IDE上に貼り付けて、ほぼそのまま(includeを変えるくらい)ビルドして、それぞれ、GR-SAKURAとArduino Unoに書き込んで実行しました。


 GR-SAKURAでは上のようにTeraTerm等での確認になりますが、下のArduinoと同じように動作しています。(ターミナルの改行の動作の設定が違っていたので、改行の状態が違っていますが。)


 だから、何?といわれると、別にどうということはないんですが。
 ちなみに通常のArduino(Unoも含めて)はシリアルポートは一つで、PCと接続・給電をかねたUSB端子に割当たっていますが、Arduino MegaだとSerialの他にSerial1,Serial2,Serial3のハードウェアシリアルが使えます。また、SoftwareSerial機能を使うと通常のGPIOピンにソフトウェア的(CPUの負荷を使って)にシリアル通信の機能を持たせることも可能です。
 一方のGR-SAKURAの方では、SerialはMega同様Serial,Serial1,Serial2,Serial3の4本を利用できるようです。ソフトウェアで任意のピンをシリアル通信させるようなライブラリは現状(2012年8月現在)はないようです。

2012年8月1日水曜日

GR-SAKURA + Motor Shield

 がじぇるね GR-SAKURA ボードはArduinoとピン互換ということで、それなら、Arduinoのシールドはどの程度流用できるのか?というのは気になるところです。大きな違いは電源の5Vと3.3Vかと思います。GR-SAKURAボードやRaXinoボードではデフォルトでは5V Power端子には出力が出ていません。5V出力を供給するにはボード上のジャンパパターン「J2」をはんだづけしてショートする必要があります。


 GR-SAKURAでは表側のコネクタ脇に、RaXinoでは裏側の同じような位置にあります。このJ2はデフォルトオープンなのではんだづけしてショートします。


 そうすると、5Vピンに電源が供給されます。ただし、USBから給電している場合、実際に5Vピンに出力される電圧は4Vくらいになります。これは、USBの電源との間に保護ダイオードが入っているからで、ACアダプタから給電する場合はACアダプタの電源がそのまま出力されます。気をつけないといけないのは、GR-SAKURAやRaXinoではACアダプタを利用した場合はこの端子にACアダプタの出力がそのまま出てきて、ACアダプタは5Vを使う前提ということでしょうか。Arduinoの場合はUSB給電の場合はUSBの5Vがそのまま出てきて、ACアダプタ(普通9Vくらいを使う?)の場合は三端子を通して5Vが給電されます。なので、今回はGR-SAKURAにUSB給電なので、5Vが実際には4Vくらいになっています。
 Motor Shield の方はドライバICのL298のカタログスペックで行くと、電源(回路側)が5V以上、ロジックのHIGHレベルのスレッショルドが3V以上です。PWM端子は3.3Vで行けそうですが、電源が4Vで動くかどうか、試してみました。(とりあえず、モータを回せるかを確認しますが、Motor Shieldは電流検出してAnalog入力端子に電圧を戻す機能もあり、ここに3.3V以上かかると壊れる可能性ありです。今回は、PWM出力を50%くらいにして、Analog入力端子にあまり大きな電圧がかからないようにしたつもり?で試しました。)


 GR-SAKURA に Motor Shield をスタックして、


 ついでに、センサ接続用に作ったコネクタシールドも電源を5Vと3.3Vをジャンパで切り替えられるようにしてから、スタックしてみました。


 以前にArduinoで試した台車に載せて


 試してみたところ、とりあえずモータは回りました。Arduinoのスケッチを流用して、(単純すぎて、CPUがもったいないですが)同じ動きをさせられるか、試していこうと思います。

2012年7月27日金曜日

RaXino (RXduino)

 今日は、Raspberry Pi に続いて、小物の紹介二連発です。


 特殊電子回路 さんの RaXino (RXduino) です。RaXino と RXduino と2つ名称があってよくわからないんですが、たぶん、物理的な基板がRaXinoで、それ(ら)用のArduinoの互換ライブラリ が RXduinoなのかなと思います。


 Arduino の裏面の Made in Italy の地図マークよろしく日本列島のマーク入りです。日本海の部分には Made in Japan の文字入りです。
 RXduino の名前のとおり、ルネサスのRXをMPUに搭載した、Arduino互換ボードです。色々と大変なルネサスですが、日本でほぼ唯一マイコンを作っている(ARMのCPUを製造している工場会社はいくつかあるけどね)メーカなので、頑張って欲しいですね。特殊電子回路さんもそんな思いでこのボードを企画したんだと思います。(極一部の特別な趣向の人たちの間で?)話題のピンク基板の元ではないか?と勝手に想像しています。CPUはRaXinoがRX62N、ピンクはRX63Nになっていますが。
 もともと、H8とかSHをよく使っていたので、それらが消える方向なのは寂しいですが、RXシリーズには頑張って欲しいです。もちろん、ATmegaとかPICとかもいいんですが、日本のメーカのマイコンを使いたいですしね。(なぜって、英語のマニュアルを読むのがいやだから・・・)