XBeeシールドとEthernetシールドを同時に使う

ArduinoのEthernetシールドには、ピンヘッダをそのまま上にバイパスするソケットがついており、他のシールドを重ねて装着することができます。



XBeeシールド + Ethernetシールド


上記のリンク先にもXbeeシールドEthernetシールドの上に載せて3階建てにした写真がありますが、実は単に重ねただけだとXBeeシールドが動作しません。


これは、XBeeシールドがArruinoのICSPピン(横にある小さなピンヘッダ)から電源をとっているためです。これはAVRにファームウェアを書き込んだりする際に使うものなので、シールドではあまり使わないのですが、XBeeシールドはここから、5V, GND, RESETを取り出しているようです(RESETはXBeeシールド上のスイッチを押した時にArduinoをリセットするため)。


ですから、3階建てにするためには、下のようにEthernetシールドにあるソケットから(無理やり)5V/GND/RESETを配線してから積み重ねてやれば動作します。


ブレッドボート用のジャンパで無理やり配線(^^;;;


配線するのは以下の通りです。

Ethernetシールド XBeeシールド(上記のように裏から見たときの位置)
5V 左上
GND 左下
RESET 右下

一応、テスタで各配線がちゃんとArduino上のICSPピンの位置と対応していることを確認するとよいです。

注意点として、積み重ねると5VやGND付近にXBeeモジュールの半田面が来るため、配線とショートしないよう十分確認が必要です。

また、EthernetシールドとXBeeシールドを合わせると結構電力を食う(220〜250mA?)ので、USBの給電能力や、ACアダプタから給電する場合はArduinoの5V用3端子レギュレータの温度に注意が必要です。


さて、せっかくXBeeEthernetが両方使えるので、XBeetelnetを中継するスケッチを書いてみました。一応、複数同時セッションも張れます。XBeeネットワークにPCや他のネットワーク機器を参加させるのが簡単になるかも? なおポートは23(telnet)にしてますが、自由に変えられます。コードは以下。

#include <Ethernet.h>

// network configuration.  gateway and subnet are optional.
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 10, 0, 0, 177 };
byte gateway[] = { 10, 0, 0, 1 };
byte subnet[] = { 255, 255, 0, 0 };

// telnet defaults to port 23
Server server(23);

void setup()
{
  Serial.begin(9600);
  
  Ethernet.begin(mac, ip, gateway, subnet);
  server.begin();
}

void loop()
{
  if (Serial.available()) {
    server.write(Serial.read());
  }
  Client client = server.available();
  if (client) {
    char k = client.read();
    server.write(k);
    Serial.write(k);
  }
}