マイコンから有線LAN通信を行うためのモジュールです。
pico-ETH-CH9121の設定方法、基本的な使い方としてマイコンをTCP Serverにしたパソコンとの通信、マイコン同士のLAN通信を紹介します。
今回紹介するもの
pico-ETH-CH9121について
特徴
このモジュールはRaspberry Pi Picoを使ってLAN通信を簡単に行うことができるモジュールです。
あらかじめモジュールの専用GUIを使ってモジュール自身と相手のLAN通信設定します。
マイコン側はUARTプログラムを書くことでLANを意識することなく通信できます。
製品情報
駆動電圧 | 3.3 / 5V |
UART TTL | 3.3 / 5V |
通信モード | TCP/UDP |
通信速度 | 300 – 921.6Kbps |
ピン配置
pico-ETH-CH9121が使用しているピンが濃色で示されています。
薄色はピンヘッダーから利用できます。
外観
モジュールの上面にはピンソケットが実装されていて、Raspberry Pi Picoを実装する。
ピンソケットはロングピンなので、Raspberry Pi Picoを合体させてもピンを使用できる。
Raspberry Pi Picoと合体した図。
使用感
Raspberry Pi Picoとの合体が前提となっているので、合体後は一体感がありすっきりしています。
モジュールのLAN設定が少し面倒ですが、UARTスケッチでLAN通信ができるのは楽です。
他にも、LAN通信をするためのモジュールやRaspberry Pi PicoにLANモジュールを搭載したモデルを紹介しているので参考にしてください。
マイコン同士のEthenet通信
この投稿ではpico-ETH-CH9121の設定や使い方について記載をしています。
当サイトではpico-ETH-CH9121以外でのEthenet接続による通信を紹介しています。
これらはpico-ETH-CH9121を含めてそれぞれServerとClientともにどの組み合わせでも使用することができます。
当記事の紹介では、一番高くて初期設定が面倒ですが、スケッチは一番シンプルになります。
準備
使うもの
絵 | 名称(型番) | 用途 | 入手 |
---|---|---|---|
Raspberry Pi Pico 2枚 | USB対抗通信に使用 | 電子部品 ネットショップ | |
pico-EHT-CH9121 2枚 | USB対向通信に使用 | マルツ、Switchscience Ali Expressなど | |
LANケーブル(クロス) | pico-ETH-CH9121同士を接続 | ダイソー | |
USB-LAN変換アダプタ (メーカー不問) | pico-ETH-CH9121の設定 パソコンとモジュールの通信 | Amazonなど |
配線
Raspberry Pi Picoとpico-ETH-CH9121を合体させます。
pico-ETH-CH9121とパソコン(USB-LANアダプタ)とLANケーブルで接続します。
Raspberry Pi Pico とパソコンをUSBで接続します。
通信設定(pico-ETH-CH9121側)
pico-ETH-CH9121の設定アプリケーションをダウンロードします。
アプリケーションを起動します。
①USB-LANアダプタが認識できていれば、Adapterリストボックスに表示されます。
リストボックスになければUSB-LANアダプタを再度接続しなおして、Refreshボタンを押下します。
②Searchを押すことで、Adapterに接続されているpico-ETH-CH9121端末を検索し、結果を「Module List」に表示します。
「Module List」にリストが出てこない場合、配線の確認をする。
またはRaspberry Pi Pico をBOOTモードで起動して初期化を行います。
③pico-ETH-CH9121を選択しダブルクリックすると、個体の設定内容が「Basic」に表示されます。
④と⑤の※(x)は対向通信で通信相手を整合させるために同じ※(x)同士で設定を一致させます。
TCP Serverにする設定 | TCP Clientにする設定 | |
---|---|---|
DHCP | レ点無し | レ点無し |
IP | 192.168.1.200※1 | 192.168.1.100※2 |
Mask | 255.255.255.0 | 255.255.255.0 |
GateWay | 192.168.1.100※2 | 192.168.1.200※1 |
Serial Nego | レ点無し | レ点無し |
引き続き⑤の設定内容です。
TCP Serverにする設定 | TCP Clientにする設定 | |
---|---|---|
Mode | TCP SERVER | TCP CLIENT |
Local Port | 5000※3 | 5000 |
Conn Type | IP | IP |
Dest IP | 192.168.1.100 | 192.168.1.200※2 |
Dest Port | 5000 | 5000※3 |
Baud | 115200 | 115200 |
Data Bit | 8 | 8 |
Stop Bit | 1 | 1 |
Parity | None | None |
Conn Lost | レ点有り | レ点有り |
Pack Len | 1024 | 1024 |
Pack TimeOut | 0 | 0 |
Reconnect | レ点無し | レ点無し |
項目は多いですが、変更する項目は少ない。
⑥ Set ALLを押下します。
通信設定(パソコン側)
パソコンとマイコンのLAN通信をさせない場合は不要です。
パソコンとpico-ETH-CH9121を通信させるために、パソコン側のLAN通信設定を変更します。
今回USB-LANアダプタを使用しています。
Serverとして動作させるモジュールと、Client側で動作させるモジュールで設定が異なります。
パソコンとモジュールとの通信は、1つずつ行います。
Server側と接続するときは「Server側のモジュールと通信する場合」の設定、
Client側と接続するときは「Client側のモジュールと通信する場合」の設定に変更して作業してください。
ライブラリの入手と修正
pico-ETH-CH9121の設定アプリケーションからサンプルライブラリを入手します。
解凍すると
[解凍先フォルダ]\pico-ETH-CH9121_CODE\C\RX_TX\lib\CH9121 フォルダに
CH9121.c
CH9121.h
があります。
スケッチと同じフォルダにコピーします。
CH9121.cはファイル名を CH9121.cpp に変更して、以下の行を修正します。
11行目 UCHAR => char
pico-ETH-CH9121 server スケッチ
スケッチの説明
スケッチはモジュールの初期化が含まれているだけでUARTプログラムです。
サーバー側もクライアント側も共通です。
パソコンから受け取ったデータの大文字と小文字を入れ替えてUARTへ送信します。
UARTから受け取ったデータはそのままパソコンへ送信します。
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
About Licence当サイトで掲載しているスケッチのライセンスについて OSSの利用について 当サイトで掲載しているスケッチおよびプログラム(以下プログラム)は、Open Source Software(以下OSS)を利用しています。誰でも当サイトに掲載されて...
【スケッチの説明】
Raspberry Pi Pico 基板で使用できます。
パソコンからシリアル通信で受信した文字が英文字なら大文字と小文字を入れ替えてUART0に
送信します。
UART0から受信した文字はそのままパソコンにシリアル通信で送信します。
当スケッチはUART0の接続先がpico-ETH-CH9121であるためLAN通信になります。
【ライブラリ】
Raspberry Pi RP2040 Boards(2.3.2) > Raspberry Pi Pico
ETH-pico-CH9121 ライブラリ CH9121.h, CH9121.cpp
【準備】
ETH-pico-CH9121とRaspberry Pi Picoを合体させます。
ETH-pico-CH9121 をServerまたはClientの設定を行います。
ETH-pico-CH9121同士をLANケーブルで接続する。
【バージョン情報】
2022/8/5 : 新規
2022/9/16 : コメントの修正
**********************************************************************/
#include "CH9121.h"
#define UART0_TX 0 //SDAにはGP0を使用する
#define UART0_RX 1 //SCLにはGP1を使用する
uint32_t i = 0;
void setup()
{
CH9121_init(); //ETH-pico-CH9121の初期化
Serial.begin(115200); //パソコン側からの読み取りと書き込みに使用します。
Serial1.setTX(UART0_TX); //もう一方のRaspberry Pi Picoとの通信に使用します。
Serial1.setRX(UART0_RX);
Serial1.begin(115200);
}
void loop()
{
char buf = 0;
//<<送信側としての処理>>
//パソコンからの受信処理と受信側への送信
if(Serial.available() == true)
{
buf = Serial.read();
//ASCコード上で、0b1000 0000ビットが0の時、0b0111 0000 のいずれかが 1なら英文字(正確ではありません。)
if(((buf & 0x80) != 0x80) && ((buf & 0x40) == 0x40))
{
//ASCコード上で 0b0010 0000 のビットを反転させることで、大文字と小文字を入れ替える。
buf = buf ^ 0x20;
}
//受信側へデータを送信する。
Serial1.write(buf);
}
//<<受信側としての処理>>
//送信側からの受信処理と、パソコンへの送信
if(Serial1.available() == true)
{
buf = Serial1.read();
Serial.write(buf);
}
}
結果(パソコンとTCPサーバーの通信)
pico-ETH-CH9121をTCP Serverにする設定によりTCP Serverにします。
スケッチを書き込み再起動した後に、
Teraterm を使いpico-ETH-CH9121とTCP/IP接続、Raspberry Pi Picoとシリアル接続をします。
シリアル接続側からは接続先がClientの認識で、TCP/IP接続側からはServerに接続している認識になります。
・Serverからデータが送信されたと仮定
シリアル側(COM50)から送信したデータは赤実線枠で、Serverから受信したデータは赤点線枠です。
・Clientからデータが送信されたと仮定
TCP/IP側から送信されたデータは青実線枠で、Clientから受信したデータは青点線枠です。
今回Clientからのデータは大文字小文字変換をしないでそのまま送信しています。
マイコン 同士の通信 スケッチ
スケッチの説明
スケッチは「pico-ETH-CH9121 Server」と同じスケッチを使います。
スケッチの掲載は省略します
結果(マイコン同士のとTCP/IP通信)
「パソコンとTCP Serverの通信」で使用した、pico-ETH-CH9121とスケッチ書き込み済みのRaspberry Pi Pico1セット(Server側とします)と
pico-ETH-CH9121を「TCP Clientにする設定」によりTCP Clientにしたpico-ETH-CH9121と同じスケッチを書き込みしたRaspberry Pi Picoを1セット(Client側とします)用意します。
このServer側とClient側をLANケーブルで直接接続します。
Sever側とClient側のそれぞれのRaspberry Pi Pico にUSBケーブルを接続します。
電源はServer側から投入し、続いてClient側の電源を投入します。
Teratermを起動し、それぞれのRaspberry Pi Picoとシリアル接続します。
今回Server側はCOM50, Client側はCOM16で認識されました。
図中にはIPアドレスを記載していますが、これはpico-ETH-CH9121同士が勝手に接続してくれます。
Raspberry Pi PicoはUARTの認識で通信を行っています。
結果はServer側(COM50)からのデータ送信は赤実線枠で、Client側(COM16)の受信は赤点線枠。
Client側のデータ送信は青実線枠で、Server側の受信は青実線枠です。
通信の設定に慣れるまでがなかなか面倒ですが、設定が終わればUARTプログラムを書くだけになります。
コメント