LAN付きRaspberry Pi Pico W5100S-EVB-Pico

コンピュータ、組み込み

RP2040搭載基板のRaspberry Pi Pico 上位互換基板です。
RJ45コネクタが搭載されていることで、手軽にLAN通信ができます。

紹介するもの

W5100S-EVB-Pico

特徴

基本的には Raspberry Pi Pico です。
LAN通信ができます。

CPURP2040 ARM Cortex M0+ 133MHz
接続Micro B Connector
USB1.1 ホスト/デバイス両対応
MemorySRAM 264KB
フラッシュメモリ 2MB
ロジックレベル3.3V
GPIO25
PWM25 (8bit 0 ~ 255)
ADC3 (10bit 0 ~ 1023)
UART2
I2C2
SPI2 (SPI0はW5100Sが使用)
その他機能基板実装LED 緑(GP25)
内部温度モニタ
RJ45コネクタ (W5100s)

Wiznet の紹介サイトです。

ピン配置

外観

Raspberry Pi Picoと並べてみると、RJ45コネクタ(LANケーブルのコネクタ)が付属した分大きくなります。面積的には40~50%増えています。

400穴ブレッドボードでは、左右2列ずつ使用することができます。

RJ45コネクタが突き出しているので、400穴ブレッドボードでは後部の穴がふさがれてしまいます。
830穴など長手方向に余裕のあるブレッドボードを使用することで解消できます。

使ってみて

W5100S以外はRaspberry Pi Pico と同じなので慣れていれば導入が速い。
LAN通信もサンプルがあるため、接続先の情報がわかればW5100Sが処理してくれるため、対マイコンでも対パソコンでも通信できます。

準備

基板の初期化

1.W5100S-EVB-Pico のBOOT SELボタンを押しながら、USBケーブルをパソコンに接続します。

2.パソコンの画面では、W5100S-EVB-Pico をストレージとして認識します。

3.UF2ファイルを以下のサイトからダウンロードします。

circuit python UF2 Download

4.ダウンロードしたファイル[adafruit-circuitpython-raspberry_pi_pico-ja-7.3.0.uf2]※をストレージ認識したRaspberry Pi Picoにドラッグ&ドロップする。

以上の作業でRaspberry Pi PicoはCOM認識されます。

今回ダウンロードしたuf2ファイルは、保存しておいてください。
Raspberry Pi Picoを初期化したいとき(今何のファームウエアが書かれているかわからなくなったとき)には、BOOTSELボタンを押しながら再起動することで、やり直しができます。

※2022/Jun 時点ではVersion 7.3.0

ライブラリ

ボードライブラリ

Arduino IDEのボードマネージャからRaspberry Pi Pico用のライブラリのインストールとボードの選択をします。

追加のボードマネージャのURLhttps://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json
検索RP2040
ボードライブラリRaspberry Pi RP2040 Boards(x.x.x)※
選択するボードRaspberry Pi RP2040 Boards(x.x.x) > W5100S-EVB-Pico
※動作確認はバージョン 2.0.3です

モジュールライブラリ

モジュールを使用しない場合インストールの必要はありません。

機能/モジュールライブラリ名検索確認時のバージョン
SSD1306Adafruit SSD1306 by AdafruitSSD13062.5.1
ST7735Adafruit ST7735 and ST7789
Library by Adafruit
ST77351.9.3
関連
SSD1306
ST7735
Adafruit GFX Library by AdafruitGFX1.11.3

そのほかライブラリ

WiznetサイトからW5100S-EVB-Pico用のライブラリをダウンロードしてインストールをします。
ライブラリマネージャから検索で見つからないライブラリです。

1.W5100S-EVB-Pico GithubからZipファイルをダウンロード。

2. Arduino IDEからZipファイルのライブラリをインストールする。

3.ファイル選択のブラウザで、ダウンロードしたZipファイルを選択する。

基本スケッチ

タクトスイッチとLED点灯

説明

タクトスイッチを押下している間LEDは点灯します。
タクトスイッチを離すとLEDは消灯します。

スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/

【マイコン基板】
全般で使用できます。
スケッチのLEDは基板実装ですが、ワイヤと抵抗とLEDの組み合わせで点灯します。

【スケッチの説明】
プルダウンしたピンの状態がHighならLEDを点灯、LowならLEDを消灯させます。

【ライブラリ】

【準備】
LEDピン -> 保護抵抗(約200Ω) -> LED Anode, LED Cathode -> GND
3.3V -> ボタンピン

【バージョン情報】
2022/10/28 : 新規
**********************************************************************/
//W5100S-EVB-Pico

#define LED 25       //基板実装LED
#define BUTTON 28    //タクトスイッチ

void setup()
{
  pinMode(LED, OUTPUT);               //ピン出力設定
  pinMode(BUTTON, INPUT_PULLDOWN);    //プルダウンで入力
}

void loop()
{
  int iStat = digitalRead(BUTTON);
  digitalWrite(LED, iStat);           //ボタンの状態をLEDに出力
}

結果

ボタンを押下することでLEDが点灯しました。
ボタンを離すとLEDは消灯しました。

PWM

説明

PWMを使ってLEDのフェード点灯(ゆっくり点灯させる)を行います。

スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/

【マイコン基板】
Arduino開発環境対応基板全般使用できます。

例 : Raspberry Pi Pico

【スケッチの説明】
PWM出力でのフェード点灯(ゆっくり点灯)とフェード消灯(ゆっくり消灯)を行います。

【ライブラリ】

例  Raspberry Pi Pico/RP2040 > Raspberry Pi Pico

【準備】
指定ピン - 保護抵抗(約200Ω) - LED Anode, LED Cathode - GND
抵抗値は使用するLEDにより適切な抵抗値を求めてください。

【バージョン情報】
2022/10/28 : 新規
**********************************************************************/
//W5100S-EVB-Pico

#define PWM 25        //PWM 出力は 25th pin

void setup()
{
  pinMode(PWM , OUTPUT);
}

void loop()
{
  for(int i = 0; i < 256; i ++)
  {
    analogWrite(PWM, i);
    delay(2);
  }

  for(int i = 0; i < 256; i ++)
  {
    analogWrite(PWM, 255 - i);
    delay(2);
  }
}
結果

実装LEDがゆっくり点灯、ゆっくり消灯しました。

ADC

説明

スライド抵抗通過後の電圧値を読み取ります。

配線
W5100S-EVB-Pico配線スライド抵抗
3.3V+
GND
GPIO26(ADC0)S
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/

【マイコン基板】
RP2040搭載基板で使用できます。

例 : Raspberry Pi Pico

【スケッチの説明】
ADCへの入力AD値を読み取ります。

Raspberry Pi Pico の3.3Vを可変抵抗モジュールに通します。
可変抵抗モジュールからの電圧をRaspberry Pi Picoの指定ピンで読み出し、シリアル出力(COM)します。

【ライブラリ】

例  Raspberry Pi Pico/RP2040 > Raspberry Pi Pico

【準備】
Raspberry Pi Pico <-> スライド抵抗
3V3 <-> スライド抵抗 + 
GND <-> スライド抵抗 -
指定ピン <-> スライド抵抗 s

【バージョン情報】
2022/10/28 : 新規
**********************************************************************/
//W5100S-EVB-Pico

#define PIN_ADC0 26     //ADC0

void setup()
{
  delay(1000);
  Serial.begin(115200);         //結果はCOMに出力

  pinMode(PIN_ADC0, INPUT);
}

void loop()
{
  long lADC0 = 0;

  lADC0 = analogRead(PIN_ADC0);

  Serial.printf("ADC0 = %4d\n", lADC0);
  delay(100); 
}
結果

結果はADC0にスライド抵抗を接続しています。
スライド抵抗のつまみを変化させることで、A/Dの読み取り値に変化がありました。

UART

説明

UART0から読み取ったデータをUART1に送信します。
UART1から読み取ったデータをUART0に送信します。

配線
W5100S-EVB-Pico配線FT232RL(1)配線FT232RL(2)
GP0(UART0 TX)RX
GP1(UART0 RX)TX
GP4(UART1 TX)RX
GP5(UART1 RX)TX
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/

【マイコン基板】
RP2040搭載基板で使用できます。

例 : Raspberry Pi Pico

【スケッチの説明】
UART0 と UART1の通信をします。

UART0から受信した内容をUART1へ送信します。
UART1から受信した内容をUART0へ送信します。

【ライブラリ】

例  Raspberry Pi Pico/RP2040 > Raspberry Pi Pico

【準備】
UARTの送受信にFT232RLを使用します。
FT232RLはUART0用と、UART1用の2個使います。それぞれを(1), (2)と識別します。

Raspberry Pi Pico <-> FT232RL(1)
GP0 (UART0 TX) <-> RX
GP1 (UART0 RX) <-> TX

Raspberry Pi Pico <-> FT232RL(2)
GP4 (UART1 TX) <-> RX
GP5 (UART1 RX) <-> TX

【バージョン情報】
2022/10/31 : 新規
**********************************************************************/
//W5100S-EVB-Pico
//UART0 TX に設定可能なピン : 0, 12  (0は UART0 TXのデフォルト)
//UART0 RX に設定可能なピン : 1, 13  (1は UART0 RXのデフォルト)
//UART1 TX に設定可能なピン : 4, 8
//UART1 RX に設定可能なピン : 5, 9

void setup()
{
  //Serial は USB(COM)を使ったシリアル通信用オブジェクト
  //Serial1は UART0の通信用オブジェクト
  //Serial2は UART1の通信オブジェクト

  Serial1.setTX(0);            //UART0はSerial1オブジェクトを使用します。
  Serial1.setRX(1);             //デフォルトではTX = 0, RX = 1

  Serial2.setTX(4);
  Serial2.setRX(5);

  Serial1.begin(115200);                 //SerialオブジェクトはUART0 (COM)
  Serial2.begin(115200);                //Serial1オブジェクトはUART1
}

void loop()
{
  if(Serial2.available() != 0)          //UART1にデータがあれば、読み取った内容をUART0に送信
  {
      Serial1.write(Serial2.read());
  }

  if(Serial1.available() != 0)           //UART0にデータがあれば、読み取った内容をUART1に送信
  {
      Serial2.write(Serial1.read());
  }
}
結果

結果はTeratermを2つ起動して確認します。
1つはUART0 用で、もう一つはUART1用です。
この結果ではUART0用のFT232RLはCOM9, UART1用のFT232RLはCOM131として認識されました。

Teratermの設定はローカルエコーは有効です。
始めにCOM9の赤実線枠に”tamanegi”と入力すると、COM9の赤破線枠のように”tamanegi”と表示されました。
UART0からUART1へデータが送信されたことがわかります。

次にCOM131の青実線枠”HELLO”と入力すると、COM9の青破線枠のように”HELLO”と表示されました。
UART1からUART0へデータが送信されたことがわかります。

I2C(SSD1306)

説明

I2Cを使ってSSD1306(OLED 0.96inch)モニタのサンプルを動作させます。
W5100S-EVB-Picoでは、I2Cが2系統あります。
決められた中から任意のピンに信号を出力することができます。
本サンプルではピン設定の仕方と簡単な表示を行っています。
各I2C系統での設定可能なピンはサンプルを参照してください。

掲載以外の図形表示などのサンプルは以下のサンプルを参照してください。
ファイル(F) > スケッチ例 > Adafruit SSD1306 > ssd1306_128x64_i2c

配線

本サンプルはI2C0を使用します。
配線は以下の表のとおりです。

W5100S-EVB-Pico配線SSD1306(0.96inch)
3.3VVCC
GNDGND
GP0(I2C0 SCL)SCL
GP1(I2C0 SDA)SDA
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/

【マイコン基板】
RP2040搭載基板で利用できます。

例 : Raspberry Pi Pico

【スケッチの説明】
SSD1306 OLEDの制御をします。
I2Cは I2C0とI2C1のどちらのサンプルも掲載しますが、
I2C1側はコメントアウトしますので、状況に応じてコメントを外してください。
※コメント検索 [I2C1の場合]

【ライブラリ】
例 Raspberry Pi Pico / RP2040 > Raspberry Pi Pico

【準備】
マイコン基板 <-> SSD1306
3V3           <-> VCC
GND           <-> GND
GP0(I2C0 SDA) <-> SDA
GP1(I2C0 SCL) <-> SCL

I2C1の場合
3V3           <-> VCC
GND           <-> GND
GP2(I2C1 SDA) <-> SDA
GP3(I2C1 SCL) <-> SCL

【バージョン情報】
2022/10/30 : 新規
**********************************************************************/
//W5100S-EVB-Pico
//I2C0 SDA に設定可能なピン : 0, 4, 8, 12,
//I2C0 SCL に設定可能なピン : 1, 5, 9, 13,
//I2C1 SDA に設定可能なピン : 2, 6, 10, 14, (18), 26
//I2C1 SCL に設定可能なピン : 3, 7, 11, 15, (19), 27
//()内のピンは、LANを使わなければI2Cとして使用可能

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>


#define PIN0_SDA 0
#define PIN0_SCL 1
#define PIN1_SDA 2
#define PIN1_SCL 3

#define SCREEN_WIDTH 128                //解像度 128 x 64 で使用します。
#define SCREEN_HEIGHT 64                //SCREEN_HEIGHTは 32 に設定することができます。

#define OLED_RESET     -1               //使用しないので -1を設定する。
#define SCREEN_ADDRESS 0x3C             //I2Cアドレスは 0x3C

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);     //I2C0の場合
//Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire1, OLED_RESET);     //I2C1の場合

                                        
void setup()
{
  
  // //I2C0の場合
  Wire.setSDA(PIN0_SDA);
  Wire.setSCL(PIN0_SCL);

  //I2C1の場合
  // Wire1.setSDA(PIN1_SDA);
  // Wire1.setSCL(PIN1_SCL);


  if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
    for(;;);
  }

  display.clearDisplay();               //何か表示されている場合に備えて表示クリア

  display.setTextSize(2);               //フォントサイズは2(番目に小さい)
  display.setTextColor(SSD1306_WHITE);  //色指定はできないが必要
  display.setCursor(20, 5);            //テキストの表示開始位置
  display.print(F("TAMANEGI"));         //表示文字列
  display.setCursor(35, 25);
  display.print(F("W5100s"));
  display.setCursor(20, 45);
  display.print(F("EVB-Pico"));

  display.display();                    //バッファ転送(表示)
}

void loop()
{
}
結果

SSD1306のサンプルスケッチが動作しました。

SPI(ST7735)

説明

SPIを使ってST7735(LCD 1.8inch)モニタのサンプルを動作させます。

掲載以外の図形表示などのサンプルは以下のサンプルを参照してください。
ファイル(F) > スケッチ例 > Adafruit ST7735 and ST7789 Library > graphicstest

配線

本サンプルはSPI0を使用します。
配線は以下の表のとおりです。

W5100S-EVB-Pico配線ST7735(1.8inch)
3.3VVCC
3.3VLED
GNDGND
GP1(SPI0 CS)CS
GP28Reset
GP27AO(DC)
GP3(SPI0 TX)SDA
GP2(SPI0 SCK)SCK
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/

【マイコン基板】
RP2040搭載基板で利用できます。

例 : Raspberry Pi Pico

【スケッチの説明】
ST7735 LCDの制御をします。
SPIは SPI0とSPI1のどちらのサンプルも掲載しますが、
SPI1側はコメントアウトしますので、状況に応じてコメントを外してください。
※コメント検索 [SPI1の場合]

【ライブラリ】
例 Raspberry Pi Pico / RP2040 > Raspberry Pi Pico

【準備】
マイコン基板 <-> ST7735
3V3               <-> VCC
GND               <-> GND
GPIO1(SPI0 CS)    <-> CS
GPIO28            <-> Reset
GPIO27            <-> AO
GPIO3(SPI0 MOSI)  <-> SDA
GPIO2(SPI0 SCK)   <-> SCK

SPI1の場合
3V3               <-> VCC
GND               <-> GND
GPIO13(SPI1 CS)   <-> CS
GPIO28            <-> Reset
GPIO27            <-> AO
GPIO14(SPI1 MOSI) <-> SDA
GPIO15(SPI1 SCK)  <-> SCK

【バージョン情報】
2022/10/30 : 新規
**********************************************************************/

#include <Adafruit_GFX.h> 
#include <Adafruit_ST7735.h>
#include <SPI.h>

//SPI0の場合
#define TFT_CS          1   // CS
#define TFT_RST         28  // Reset 
#define TFT_DC          27  // DC
#define TFT_MOSI        3   // MOSI
#define TFT_SCK         2   // SCK

//SPI1の場合
// #define TFT_CS          13  // CS
// #define TFT_RST         28  // Reset 
// #define TFT_DC          27  // DC
// #define TFT_MOSI        15  // MOSI
// #define TFT_SCK         14  // SCK

//SPI0の場合
Adafruit_ST7735 tft = Adafruit_ST7735(&SPI, TFT_CS, TFT_DC, TFT_RST);
//SPI1の場合
//Adafruit_ST7735 tft = Adafruit_ST7735(&SPI1, TFT_CS, TFT_DC, TFT_RST);

void setup(void) 
{
  //SPI0の場合
  SPI.setTX(TFT_MOSI);
  SPI.setSCK(TFT_SCK);

  //SPI1の場合
  // SPI1.setTX(TFT_MOSI);
  // SPI1.setSCK(TFT_SCK);
  

  tft.initR(INITR_BLACKTAB);                  //Init ST7735S初期化
  
  tft.fillScreen(ST77XX_BLACK);               //背景の塗りつぶし

  //テキスト表示
  tft.setRotation(3);                         //画面回転
  tft.setTextSize(3);                         //サイズ

  tft.setCursor(0, 20);                      //カーソル位置                      
  tft.setTextColor(ST77XX_RED);              //赤
  tft.printf("TAMANEGI\n");

  tft.setTextColor(ST77XX_GREEN);            //緑
  tft.printf("TAMANEGI\n");

  tft.setTextColor(ST77XX_BLUE);             //青
  tft.printf("TAMANEGI\n");

  tft.setTextColor(ST77XX_YELLOW);           //黄
  tft.printf("TAMANEGI\n");
}

void loop()
{
}
結果

ST7735のサンプルスケッチが動作しました。

特別なスケッチ

LAN通信のスケッチ

説明

LANを使用するスケッチでは、「準備 > ライブラリ > そのほかのライブラリ」のWiznet-Arduino Ethernetライブラリをインストールします。

このライブラリのインストールによるサンプルは
File > スケッチ例 > Ethernet 以下にありますので参照してください。

当サイトでは、コマンドベースで行うTelenet通信による紹介をします。

Telenet Client

説明

Telenet Clientとしてマイコンと通信します。
通信相手は当サイトで紹介した、pico-ETH-CH9121をTCPサーバにします。

W5100S-EVB-Pico からLANを使い文字を送信し、pico-ETH-CH9121で読み取ります。
pico-ETH-CH9121からLANを使い文字を送信し、W5100S-EVB-Picoで読み取ります。

スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/

参考
Wiznet-Arduino Ethernetライブラリ
スケッチ例 > Ethernet > TelenetClient

【マイコン基板】
W5100S-EVB-Pico 基板で使用できます。

【スケッチの説明】
Telnet ClientとしてTelnet Serverと通信します。

COMから読み取った文字をServerへ送信します。
Serverから読みとった文字をCOMへ送信します。

【ライブラリ】
Raspberry Pi Pico/RP2040 > W5100S-EVB-Pico

【バージョン情報】
2022/10/28 : 新規
**********************************************************************/
//W5100S-EVB-Pico

#include <SPI.h>
#include <Ethernet.h>

//Mac アドレスと ローカルIPアドレスの設定
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
IPAddress ip(192, 168, 1, 100);                       //たまねぎブログの紹介記事により TCP Client側は 192.168.1.100としています。

IPAddress server(192, 168, 1, 200);                   //接続先のサーバIP 
#define PORTNO 5000                                   //接続先サーバポート番号

EthernetClient client;

void setup() {
  Ethernet.init(17);                                  // WIZnet W5100S-EVB-Pico の CS

  Ethernet.begin(mac, ip);                            // Ethernet 接続開始

  Serial.begin(115200);
  while (!Serial) {
    ;
  }

  //Ethernetシールド確認
  if (Ethernet.hardwareStatus() == EthernetNoHardware) {
    Serial.println("Ethernet shield was not found.  Sorry, can't run without hardware. :(");
    while (true) {
      delay(1); // do nothing, no point running without Ethernet hardware
    }
  }

  //接続ができるまで待機
  while (Ethernet.linkStatus() == LinkOFF) {
    Serial.println("Ethernet cable is not connected.");
    delay(500);
  }

  delay(1000);
  Serial.println("connecting...");

  //サーバー側との接続
  if (client.connect(server, 5000)) {
    Serial.println("connected");
  } else {
    Serial.println("connection failed");
  }
}

void loop()
{

  //LANからの読み取りが可能であれば、読み取った結果をCOMで送信
  if (client.available() != 0)
  {
    char cClient = client.read();
    Serial.print(cClient);
  }

  //COMからの読み取りが可能であれば、読み取った結果をLANで送信
  while (Serial.available() > 0)
  {
    char cCOM = Serial.read();
    if (client.connected() == true)
    {
      client.print(cCOM);
    }
  }

  // サーバから切断された場合、ポーリング待機
  if (client.connected() == false) 
  {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
    // do nothing:
    while (true)
    {
      delay(1);
    }
  }
}




結果

結果はTeratermを2つ起動して確認します。
1つはpico-ETH-CH9121と接続されているRaspberry Pi Pico のCOM用です。
もう一つはW5100S-EVB-PicoのCOM用です。

この結果ではRaspberry Pi PicoはCOM16, W5100S-EVB-PicoはCOM137として認識されました。

Teratermの設定はローカルエコーは有効です。
始めにCOM16の赤実線枠に”abcdefg”と入力すると、COM137の赤破線枠のように”ABCDEFG”と表示されました。
Raspberry Pi PicoのスケッチではCOMから読み取った英文字の大文字と小文字を入れ替えてpico-ETH-CH9121に送信しているためです。

次にCOM137の青実線枠”tamanegi”と入力すると、COM16の青破線枠のように”tamanegi”と表示されました。
LANケーブルを経由して、双方のマイコンが通信したことがわかります。

Telenet Server

説明

Telnet Serverとしてマイコンと通信します。
通信相手は上記で紹介した、W5100S-EVB-Pico のTelnetClientです。
なお、pico-ETH-CH9121で紹介したTCP Clientと通信も可能です。

W5100S-EVB-Pico TelnetServer側からLANを使い文字を送信し、TelnetClient側で読み取ります。
W5100S-EVB-Pico TelnetClient側からLANを使い文字を送信し、TelnetServer側で読み取ります。

スケッチ

/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/

【マイコン基板】
W5100S-EVB-Pico 基板で使用できます。

例 : Raspberry Pi Pico

【スケッチの説明】
Telnet ClientとしてTelnet Serverと通信します。

COMから読み取った文字をClientへ送信します。
Clientから読みとった文字をCOMへ送信します。

【ライブラリ】
Raspberry Pi Pico/RP2040 > W5100S-EVB-Pico

【バージョン情報】
2022/10/28 : 新規
**********************************************************************/
//W5100S-EVB-Pico

#include <SPI.h>
#include <Ethernet.h>

#define SOCKET_PORT    5000             // 接続ポート

byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xEE
};

IPAddress ip(192, 168, 1, 200);
IPAddress myDns(192, 168, 1, 100);
IPAddress gateway(192, 168, 1, 100);
IPAddress subnet(255, 255, 255, 0);

EthernetServer server(SOCKET_PORT);

void setup()
{
  Ethernet.init(17);                            // WIZnet W5100S-EVB-Pico の CS

  // Ehternet 接続
  Ethernet.begin(mac, ip, myDns, gateway, subnet);

  Serial.begin(115200);
  
  if (Ethernet.hardwareStatus() == EthernetNoHardware) {
    Serial.println("Ethernet shield was not found.  Sorry, can't run without hardware. :(");
    while (true) {
      delay(1);
    }
  }

  Serial.println("ok....");
  Serial.print("localIP: ");
  Serial.println(Ethernet.localIP());
  Serial.print("subnetMask: ");
  Serial.println(Ethernet.subnetMask());
  Serial.print("gatewayIP: ");
  Serial.println(Ethernet.gatewayIP());
  Serial.print("dnsServerIP: ");
  Serial.println(Ethernet.dnsServerIP());

  server.begin();
  Serial.println("Server Start");
}

void loop()
{
  EthernetClient client = server.available();

   //LANからの読み取りが可能であれば、読み取った結果をCOMで送信
  if (client.available() != 0)
  {
    char cClient = client.read();
    Serial.print(cClient);
  }

  //COMからの読み取りが可能であれば、読み取った結果をLANで送信
  if(Serial.available() > 0)
  {
    char cCOM = Serial.read();
    server.print(cCOM);
  }

}
結果

結果はTeratermを2つ起動して確認します。
1つはW5100S-EVB-PicoのTelnet Server側で、もう一つはTelnet Client側です。

この結果ではRaspberry Pi PicoはCOM16, W5100S-EVB-PicoはCOM137として認識されました。

Teratermの設定はローカルエコーは有効です。
始めにCOM138の赤実線枠に”Hello”と入力すると、COM137の赤破線枠のように”Hello”と表示されました。

次にCOM137の青実線枠”tamanegi”と入力すると、COM138の青破線枠のように”tamanegi”と表示されました。
LANケーブルを経由して、双方のマイコンが通信したことがわかります。

コメント

タイトルとURLをコピーしました