Ethernet3_WebClientReadResponse

最終更新日:2023/3/13

インクルードするライブラリですが、Ethernet3を使用します。このライブラリは安定していると思います。
TM1637用のポートは確保します。

オリジナルコード

//Author: Martin Chlebovec
//Web: https://arduino.php5.sk
//Support: http://paypal.me/chlebovec
#include <SPI.h>
#include <Ethernet3.h>
const int led = 6;
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
char serverName[] = "www.arduino.php5.sk"; // webserver
IPAddress ip(192, 168, 1, 254); //for instance in 192.168.1.0 /24 network
EthernetClient client;
String readString;        //our variable
int x=0; //counter of line
char lf=10; //line feed character
void setup(){
pinMode(led, OUTPUT);
 if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    Ethernet.begin(mac, ip);
  }
  Serial.begin(9600); 
}
void loop(){
if (client.connect(serverName, 80)) {  //starts client connection, checks for connection
    Serial.println("connected");
    client.println("GET rele/rele1.txt HTTP/1.1"); //download text
    client.println("Host: www.arduino.php5.sk");
    client.println("Connection: close");  //close 1.1 persistent connection  
    client.println(); //end of get request
  } 
  else {
    Serial.println("Pripojenie neuspesne"); //error if i am not connected
    Serial.println();
  }
  while(client.connected() && !client.available()) delay(1); //wait for datas
  while (client.connected() || client.available()) { //check response
    char c = client.read(); //get bits from buffer
    Serial.print(c); //full http header
    if (c==lf) x=(x+1); //pocitaj 
    else if (x==12) readString += c; //our variable
   } 
    Serial.print("Variable: ");
    Serial.print(readString); //our variable parsed like string
                   if(readString=="ZAP"){
                                      digital.Write(led, HIGH);
                   }else if(readString=="VYP"){
                    digital.Write(led, LOW);
                   }else{
                   Serial.println("Unsupported variable");
                   }
  readString = ("");          //delete our variable
  x=0;                         //reset counter
  client.stop(); //end connection
  delay(5000); //wait 5 seconds and start again
}

説明

W5500-EVB-PICO単体で使用するEthernetスケッチです。今回はAdvancedChatServerです。
W5500-EVB-PICOはW5500とRP2040をSPI接続しています。GP16..21が占有されます。
汎用ライブラリの場合、自分でちゃんとPIN指定した方がいいです。
また、W5500のRESETピンがPULL_UPされていないようなので、自分でHIGHに固定する必要がありそうです
※オリジナルコードのdigital.Writeは間違いかと思います。

MACアドレスはWIZNET系にしておきます。
IPは192.168.0.210にしておきますがオリジナルのコードがDHCP優先なのでそれを尊重します。
アクセスWebServerがwww.arduino.php5.skとなっています。このサーバの仕様がよく判っていません。
適当なWebServerにアクセスすると、

My IP address: 192.168.0.28
connected
Variable: Unsupported variable

となります。接続してもメッセージが返らないので、次のコードから

if(readString=="ZAP"){
digitalWrite(led, HIGH);
}else if(readString=="VYP"){
digitalWrite(led, LOW);
}else{
Serial.println("Unsupported variable");
}

“Unsupported variable”を返していることを確認しとりあえずOKとします。

レタッチコード

/*
 * 2023/03/13 T.Wanibe
 * WebClientReadResponse
 * このスケッチは Web サーバーに接続し、リクエストを行います
 * WiznetW5500-ENV-PICOをターゲットとします。
 * 回路:
 * ピン 16..21に接続されたイーサネットchip
 * 最大1044480バイトのフラッシュメモリのうち、スケッチが63484バイト(6%)を使っています。
 * 最大262144バイトのRAMのうち、グローバル変数が8028バイト(3%)を使っていて、ローカル変数で254116バイト使うことができます。
 */
#include        <SPI.h>
#include        <Ethernet3.h>
#define         SPI_SCK         18
#define         SPI_RX          16
#define         SPI_TX          19
#define         SPI_CS          17
#define         NICReset        20
#define         HTTPport        80
#define         TELNETport      23
#define         SerialRate      115200
//char            serverName[] = "www.arduino.php5.sk";                   // webserver
byte            serverName[]    ={192,168,0,202};
const int       led     = 25;
// コントローラの MAC アドレスと IP アドレスを以下に入力します。
// IP アドレスは、ローカル ネットワークによって異なります。
// ゲートウェイとサブネットはオプションです。
byte            mac[]           = {0x00,0x08,0xDC,0x54,0x4D,0xE0};      //WIZNET
byte            ip[]            = {192, 168, 0, 210};
byte            dns_server[]    = {192, 168, 0, 1};
byte            gateway[]       = {192, 168, 0, 1};
byte            subnet[]        = {255, 255, 255, 0};
String          readString;                                             //our variable
int             x               =0;                                     //counter of line
char            lf              =10;                                    //line feed character
EthernetClient  client;
//----------------
void setup(){
        Serial.begin(SerialRate); 
        pinMode(led, OUTPUT);
        pinMode(SPI_CS,OUTPUT);
        pinMode(NICReset,OUTPUT);
        // イーサネット接続とサーバーを開始します。
        SPI.setSCK(SPI_SCK);
        SPI.setRX(SPI_RX);
        SPI.setTX(SPI_TX);
        SPI.setCS(SPI_CS);
        SPI.begin();
        // Ethernet.init(pin)を使用してCSピンを設定できます
        Ethernet.setCsPin(SPI_CS);
        Ethernet.setRstPin(NICReset);
        digitalWrite(NICReset,LOW);
        delay(10);
        digitalWrite(NICReset,HIGH);
        Ethernet.init(SPI_CS);
        // イーサネット デバイスを初期化する
        if (Ethernet.begin(mac) == 0) {
                Serial.println("Failed to configure Ethernet using DHCP");
                Ethernet.begin(mac, ip);
        }
        Serial.print("My IP address: ");
        Serial.println(Ethernet.localIP());
}
//----------------
void loop(){
        if (client.connect(serverName, HTTPport)) {                     //starts client connection, checks for connection
                Serial.println("connected");
                client.println("GET rele/rele1.txt HTTP/1.1");          //download text
                client.println("Host: www.arduino.php5.sk");
                client.println("Connection: close");                    //close 1.1 persistent connection  
                client.println();                                       //end of get request
        } else {
                Serial.println("Pripojenie neuspesne");                 //error if i am not connected
                Serial.println();
        }
        while(client.connected() && !client.available()) delay(1);      //wait for datas
        while (client.connected() || client.available()) {              //check response
                char c = client.read();                                 //get bits from buffer
                Serial.print(c);                                        //full http header
                if (c==lf) x=(x+1);                                     //pocitaj 
                else if (x==12) readString += c;                        //our variable
        } 
        Serial.print("Variable: ");
        Serial.print(readString);                                       //our variable parsed like string
        if(readString=="ZAP"){
                digitalWrite(led, HIGH);
        }else if(readString=="VYP"){
                digitalWrite(led, LOW);
        }else{
                Serial.println("Unsupported variable");
        }
        readString = ("");                                              //delete our variable
        x=0;                                                            //reset counter
        client.stop();                                                  //end connection
        delay(5000);                                                    //wait 5 seconds and start again
} 


戯言(nonsense)に戻る


問い合わせ頁の表示


免責事項

本ソフトウエアは、あなたに対して何も保証しません。本ソフトウエアの関係者(他の利用者も含む)は、あなたに対して一切責任を負いません。
あなたが、本ソフトウエアを利用(コンパイル後の再利用など全てを含む)する場合は、自己責任で行う必要があります。

本ソフトウエアの著作権はToolsBoxに帰属します。
本ソフトウエアをご利用の結果生じた損害について、ToolsBoxは一切責任を負いません。
ToolsBoxはコンテンツとして提供する全ての文章、画像等について、内容の合法性・正確性・安全性等、において最善の注意をし、作成していますが、保証するものではありません。
ToolsBoxはリンクをしている外部サイトについては、何ら保証しません。
ToolsBoxは事前の予告無く、本ソフトウエアの開発・提供を中止する可能性があります。

商標・登録商標

Microsoft、Windows、WindowsNTは米国Microsoft Corporationの米国およびその他の国における登録商標です。
Windows Vista、Windows XPは、米国Microsoft Corporation.の商品名称です。
LabVIEW、National Instruments、NI、ni.comはNational Instrumentsの登録商標です。
I2Cは、NXP Semiconductors社の登録商標です。
その他の企業名ならびに製品名は、それぞれの会社の商標もしくは登録商標です。
すべての商標および登録商標は、それぞれの所有者に帰属します。