05.picoでwifiデモ動作 ATコマンド


05.picoでwifiデモ動作 ATコマンド

 Pico-ESP8266は、Pico用コネクタ付のWiFiモジュールで、UART ATコマンドで制御でき、TCP/UDP通信プロトコルをサポートしています。

Pico ESP8266 (微雪電子)
https://www.waveshare.com/wiki/Pico-ESP8266

購入先は、アマゾンです。
https://www.amazon.co.jp/gp/product/B09KYF559X/ref=ppx_od_dt_b_asin_title_s00?ie=UTF8&psc=1

・Vsysから3端子で3.3Vを作っています。
・3.3V出力にR1を通して赤LEDが接続されています。(電源LED)
・ESP8266は、3.3Vで動作しています。
・ESP88266のGP0は10kΩで3.3Vに、IO0ボタンでGNDに接続されています。(ESP8266に書込時に使用)
・ESP8266のRSTpinは、10kΩで3.3Vに、RSTボタンでGNDに接続されています。
・そのままでは、GP0とGP1(UART0)ですが、半田し直してGP4とGP5(UART1)に変更できます。RXD0とGP0間、TXD0とGP1間(UART0)に、ジャンパー抵抗が付いていますが、ジャンパー抵抗を横にずらすと、RXD0とGP4間、TXD0とGP5間(UART1)が接続できます。

ATファームウェア更新

picoに転送ソフト?をインストール

Pico ESP8266 (微雪電子)のHPで、下側のデモコードの中にある
Pico-ESP8266\dev_cdc_ports.uf2
をpicoにコピーします。

ESP8266にFlash Download toolをインストール

HPの下側にあるソフトウェアのFlash Download toolをダウンロード
パスに日本語があるとダメなので、
C:\Pico\flash_download_tool
にコピーし、
flash_download_tool_v3.8.5.exe を実行。開いたら、
Developer Mode > ESP8266 DownloadTool
SPIDownloadタブを以下に設定します。
・1行目の...をクリックして、
C:\Pico\flash_download_tool\Ai-Thinker_ESP8266_DOUT_32Mbit_v1.5.4.1-a_20171130.bin を開く
・@の右に 0x0を入力
・左にチェックマークを入れます
・SPI SPEED = 40MHz
・SPI MODE = DOUT
・FLASH SIZE = 32Mbit-C1
・COM値を選択
・BAUD = 115200
ESP8266のIO0ボタンを押したまま、ESP8266のRSTボタンを押してダウンロードモードに入ります。
画面のSTARTをクリックするが、___...___しか表示しなかったので変更します。
フラッシュダウンロードツールV3.9.2(2021/11/10)
https://www.espressif.com/en/support/download/other-tools
をダウンロードし、binファイルは以前のものを使用すると
FINISH と表示されます。

Tera Termの設定

設定 > シリアルポート...
・ポート = 正しいCOMを選択
・スピード = 115200
・(8bit, none, 1bit, none)
に設定 > 新規オープン

設定 > 端末 > 改行コード
・受信 = AUTO
・送信 = CR+LF
* 送信コマンドの"+"は、数字キーボードの"+"ではなく、Shiftを押しながら ; の"+"で入力します。

TCP Client、TCP Server、UDPとは

TCP

受信側の確認後に送信。信頼性が高い。

UDP

一方的に送信。通信速度が速い。

TCP Client

クライアントは、特定のIPアドレス+TCPポート番号で接続待ちをしているサーバに対して接続要求を出します。接続が成功すると、通信を開始できます。一度接続が出来上がってしまえば、サーバとクライアントで通信方法に違いはありません。

・127.0.0.1(localhost)の20000番へ接続
・文字列を送信
・送信が終わったらソケットを閉じる。

TCP Server

サーバは、クライアントからの接続要求を待ちます。接続要求を待つには、どのような待ち方をするかを設定しないといけません。設定する情報としては、接続待ちをするTCPポート番号があります。一度接続が出来上がってしまえば、サーバとクライアントで通信方法に違いはありません。

・ポート番号20000番で開く。
・クライアントからの接続を受付ける
・クライアントからのデータを最後まで受信
・受信したデータはコンソールに表示
・クライアントとの接続ソケットを閉じる。
・待受けソケットを閉じる。

サーバーの立ち上げ方

ネットワーク製品を販売しているHWgroup社のヘラクレスセットアップユーティリティを使用してサーバーを立ち上げます。
https://www.hw-group.com/product-version/hercules
Ver3.2.8(2014/6)
1つの.exeファイルのみでインストールは不要です。

製品紹介
https://www.hw-group.com/software/hercules-setup-utility
同ユーティリティを使用した、下記pdfも参考になります。
ESP-WROOM02の取説
http://www.microtechnica.tv/support/manual/espwroom02jp_man.pdf
p5 透過的通信(ATコマンドモード)
p6 サーバー(ソフトAPモード)
p7 仮想COMポートによるPCとの透過的通信
p8 ESP同士による通信 ステーションモード
p10 ESP同士による通信 ソフトAPモード
p10 ESPからTwitterへの投稿、読取り
p11 Twitterから最新返信の読取り
p12 Androidとの通信

[TCP Client]での立上げ方法

1.exeファイルをダブルクリックし起動
2.最初の配布および使用条件の画面はClose
3.TCP Serverタブをクリック
4.Port = 8000に設定
5.Listenボタンをクリック
6.ポート8000のサーバーが立上がります。
* 上窓が受信文字、下の細長い窓に送信文字を入力します。

[ATコマンド基本]

01. AT

 ATが正しく機能するか

02. AT+RST

 モジュールを再起動

03. AT+GMR

 ATコマンドバージョンを表示

[TCP Server]の動作

01. AT+CWMODE=3

 接続するAP情報を設定
 1:ステーションモード クライアント
 2:APモード ホスト
 3:1+2 デュアルモード

02. AT+CWJAP="*****","*****"

 指定したSSIDとパスワードに接続

03. AT+CIFSR

 ローカルIPアドレスを取得。応答例は、
 +CIFSR:APIP,"192.168.4.1"
  ↑ESP8266 SoftAPのIPアドレス
 +CIFSR:APMAC,"46:17:93:04:8c:ae"
  ↑ESP8266 SoftAPのMACアドレス
 +CIFSR:STAIP,"192.168.68.61"
  ↑ESP8266ステーションのIPアドレス
  この値は、PC > スタート > Windowsシステムツール > コマンドプロンプトで arp -a の入力で表示と同じです。
 +CIFSR:STAMAC,"44:17:93:04:8c:ae"
  ↑ESP8266ステーションのMACアドレス

04. AT+CIPMUX=1

 {0:単一接続, 1-4:複数接続}
 * 全接続が切断された後にのみ変更可能。
 * サーバーが起動時は再起動が必要。

05. AT+CIPSERVER=1

 {0:サーバー削除 再起動までにフォローの必要あり, 1:サーバー作成}
 * サーバーは、AT+CIPMUX=1の時のみ作成可能。
 * サーバー作成時にサーバーモニターが自動的に作成。
 * クライアントがサーバーに接続時、1つの接続を使用しIDが提供。

06.Tera Termの追加画面設定

 ファイル > 新しい接続 > TCP/IP にて
 ・ホスト=192.168.68.61(ESP8266のIPアドレス)
 ・Telnet
 ・TCPポート#=333(デフォルト)
 OKで今までのシリアル接続の他にTCP/IP接続の画面開くので、その画面にて
 設定 > 端末 > 改行コードで
 ・受信 = AUTO
 ・送信 = CR+LF
 ローカルエコーにチェック > OK

 設定 > TCP/IP... にて
 ・Keep-alive = 0秒
 ・自動的にウィンドウを閉じるのチェックを外す。

07. AT+CIPSEND=0,4

 id番号,データ長最大2048バイトでデータを送る。
 >が表示され、
 text (CR無し)
 と入力すると、もう1面側にtestと表示される。

08. PC側画面(TCP/IP)から

 test(CR)
 と入力するとPico-ESP8266側画面(シリアルポート)に
 +IPD,0,6:test
 と表示される。4文字 + CR + LF

09. AT+CIPCLOSE=0

 TCP or UDP接続を閉じる。

[TCP Client]の動作

環境
   ESP8266 PC
クライアント  サーバー
192.168.68.61 192.168.68.60:8000
  Tera Term Hercules
* ここでPC側のポートは8000としました。

01. AT+CWMODE=3

 01-03は[TCP Server]と同じ。

02. AT+CWJAP="*****","*****"

03. AT+CIFSR

  確認 ESP8266="192.168.68.61"

04. PCのIPアドレスの確認

スタート > 設定 > ネットワークとインターネット > 状態 > プロパティ > IPv4アドレス=192.168.68.60
とわかます。
上記の方法で、PC側にTCPサーバーを立ち上げます。

05. AT+CIPSTART="TCP","192.168.68.60",8000

 TCP接続を確立するかUDPポートを登録してサーバーに接続開始。
 TCP or UDP,リモートIP,リモートポート

06. AT+CIPSEND=4

  > 1234
 と入力すると、ESP8266は、指定長のデータをサーバーに送信し、4文字入れ終わるとヘラクレス側の受信窓に 1234 と表示されます。

07. PCから送信

 ヘラクレスのSend欄に 12345 と入力して、Sendボタンを押すとTera Term側には、
+IPD,5:12345
と表示され、ESP8266がサーバーから受信すると、出力されます。

08. AT+CIPMODE=1

 先の文字に続けて入力します。透過送信モードを有効にします。

09. AT+CIPSEND

 透過送信モードの場合、データを直接送信できます。ESP8266側(Tera Term)から文字を送ると即PC側(ヘラクレス)に表示され、PC側から文字を送ると即ESP8266側に表示されます。

10. +++

 Tera Termに単一パケットで +++ のみを入力し(キーボードで1文字ずつタイプしてもダメでコピーして貼付ける)、1秒待つ。データ送信を終了します。透過送信中に単一パケットで+++が検出された場合、透過送信を停止します。

11. AT+CIPMODE=0

 透過送信モードを終了します。

12. AT+CIPCLOSE

 TCPを切断します。

[UDP]の動作

環境
   ESP8266 PC
192.168.68.61 192.168.68.60
    51000 50000
  Tera Term ヘラクレス
* ここではポートを51000と50000にしました。

01. AT+CWMODE=3

 01-03と5は、[TCP Server]の01-04と同じ

02. AT+CWJAP="*****","*****"

03. AT+CIFSR

 確認

04. サーバーをセットアップ

・ヘラクレスを起動
・ライセンス画面をClose
・UDPタブをクリック
 (UDP Setupタブはメーカー機種のみ利用可能)
・Module IP = 192.168.68.61 (ESP8266)
・Port = 51000 (ESP8266)
・Local port = 50000 (PC)
・上記設定し、Listen ボタンをクリック

05. AT+CIPMUX=1

 複数の接続を有効に設定。

06. AT+CIPSTART=4,"UDP","192.168.68.60",50000,51000,0

 UDPトランスポートを作成します。
・4は、id(0-4) 識別番号
・"192.168.68.60",50000は、送信された相手のリモートIPとポート、ステップ4で構築されたUDPポートです。
・51000は、ESP8266のローカルUDPポートで、構成可能であるか、ランダムポートです。
・0は、現在のUDP送信が確立された後、UDPリモートデバイスが他のデバイスによって変更されません。他のデバイスがUDPプロトコルを介してESP8266UDPポート51000にデータを送信する場合でも、ESP8266の4は置換えられません。

07. AT+CIPSEND=4,7

 データをid4に送信します。入力が7バイトを超えた場合は、BUSYを表示し、最初の7バイトを送信し、送信完でSEND OKと表示します。超えたデータは無効となります。

08. PCから送信

 ヘラクレスのSend欄に12345と入力してSendボタンを押すと、Tera Term側に
+IPD,4,5:12345
と表示されます。ESP8266がサーバーから受信すると表示します。

09-12. 略

 09-12は、GithubのUPD送信に書かれていなく、エラーなので略しました。

13. AT+CIPCLOSE=4

 UDP送信を切断します。カーソル位置に続けて入力します。

確認コマンド

[wifi]
・AT+CWMODE? ESP8266のwifiモード (3)
・AT+CWLAP ssid等一覧
・AT+CWJAP? ESP8266に接続されているssid等
・AT+CIPSTA? ESP8266 STAのIPアドレス
・AT+CIPSTAMAC? ESP8266 STAのMACアドレス
・AT+CWLIF ESP8266 softAPに接続されているステーションのIPアドレス
・AT+CWSAP? ESP8266 softAPモードの構成
・AT+CIPAP? ESP8266 softAPのIPアドレス
・AT+CIPAPMAC? ESP8266 softAPのMACアドレス
[TCP/IP]
・AT+CIPSTATUS  接続情報
{2:IP取得,3:接続済,4:切断}
接続ID(0-4) マルチコネクトの場合
TCP or UDP
IPアドレス(文字列)
ポート番号
{0:WSPはクライアント,1:ESPはサーバー}
・AT+CIFSR ESP8266のローカルIPアドレス
・AT+CIPSTO? クエリサーバーのタイムアウト秒 (180)
[その他]
・AT+GMR ATコマンドのVer (1.2)
・AT ATコマンドが起動するか

参考資料

espressif/ESP8266_AT 公開アーカイブ
https://github.com/espressif/esp8266_at/wiki/AT_Description

ESP8266 ATコマンドリファレンス 2015
https://room-15.github.io/blog/2015/03/26/esp8266-at-command-reference/

ESP8266 ATコマンド 一覧
https://jumpwire.io/ja.docs_subdomain/ESP8266Reference/ATCommands/

ATコマンドを利用した接続の基礎 2018
http://yuukiwogousei.blog.fc2.com/blog-entry-127.html?sp