#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アドレスが原因かと思ったしだいです。他に原因がありそうなので、挑戦してみます。
うまくできれば、安くいくのですが....。
ありがとうございました。