#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の動作は確認できたかな?



Domo arigato gozai masta
返信削除大阪 在住のBambusと言います。
返信削除SAKURAボードについて教えて下さい。
>MACアドレスは適宜変更が必要。
とありますが、SAKURAボードの場合、MACアドレスは無いようですが、どのように設定するのですか?
ArduineからSAKURAへの移植でここだけがどうしても分からないのです。
こんにちは。
削除TEthernet.begin(mac)でMACアドレスが設定されます。っていう意味ではないですよね・・・。
MACアドレスの数値はどうするの?という事ですよね。
本来、グローバルあるいは一般的なネットワークに接続するには、IEEEにお金を払って上位24bitをメーカの識別コードとして取得し、下位24bitをメーカが製品や連番で任意に世界中で「一意」になるように設定します。(実際には、もうちょっと、ルールが有るかもしれません。→ http://en.wikipedia.org/wiki/MAC_address#Address_details )
ArduinoのEthernetシールドはメーカがMACアドレスを取得して、そのアドレスをシールで貼ってくれていたかと思いますが、SAKURAはそれが無いと思います。つまり、インターネットや一般的なネットワークにはつないではいけないわけですが、実験用に構成した自分の管理下にあるローカルのネットワーク(他に影響しない)であれば、自分の任意のMACアドレス(そのネットワーク内にあるものと重ならないように)を振ってしまえば、動作します。
der_Bambusさんの問題の解決にはならないかもしれませんが、よろしくお願い致します。
いしわたむねおさま
削除早々のResありがとうございます。
>der_Bambusさんの問題の解決にはならないかもしれませんが、>よろしくお願い致します。
いや、解決に"なり過ぎ"でした。私の質問したMacアドレスは、ご指摘のように「購入時に番号が振られていない」ことです。私もネットで時々話題になる、Arduineを使って遠隔で(スマホから)エアコン制御を作成してみました。ま、問題無く動作しますが、エアコンの赤外線の信号データが巨大で(1信号にint型データが400~500必要)、入/切信号だけでメモリーがパンク!冷房だの除湿だの暖房だのを入れるには、メモリー容量が大きいArduine MEGAに頼らざるを得ない...。その時知ったのが、メモリー十分で5000円しないSAKURAで、これに飛びついたのですが、Macアドレスが分からない??となったのです。
で結局、いしわたむねおさま が言われるようにSAKURAでは、公のインターネットに繋げない、繋いではいけない と言うことなのでしょうか? 正式にインターネットに繋ぐには、別途ネットワークカード等が必要になるのでしょうか? 分かる範囲で御教授願えるとうれしいです。宜しくお願いします。
エアコンの制御コード、長いですよね・・・。なんであんな長いんでしょう?テレビとかレコーダのリモコンのほうがボタンとか多いと思うんですが・・・
削除さて、MACアドレスの件ですが、インターネットに直接繋がなければ、おそらく問題ないはずです。一般家庭ではおそらくルータを使っているとおもいますので、ルータのLAN側で稼働させる分には、インターネット側から見たMACアドレスはルータのものになっているはずです(たぶん・・・)。マンション等の集合型やケーブルTV等のインターネットではわかりませんが、既にスマホからの遠隔制御を行なっているということは、固定IPかDDNSを使ってルータでポートフォワードしているとおもいますので、大丈夫じゃないでしょうか。「問題ありません。」と断言する知識がないので、すみません、「たぶん」です。
期待できそうですね。
返信削除「DDNSを使ってルータでポートフォワードしているとおもいますので」...その通りです。
確かに、我が家に入ってくれば、192.168....だけで可能と思っていたのですが、全く通信できないので、MACアドレスが原因かと思ったしだいです。他に原因がありそうなので、挑戦してみます。
うまくできれば、安くいくのですが....。
ありがとうございました。