• 検索結果がありません。

TCP_BP3591 の説明 V /03/28 ROHM 社製 WIFi モジュール BP3591 を使用して 無線 LAN により TCP/IP 通信を行うプログラムです 簡単な文字列によるコマンド ( 例 : LED0 ON ) を受信して LED の ON/OFF を行います 受

N/A
N/A
Protected

Academic year: 2021

シェア "TCP_BP3591 の説明 V /03/28 ROHM 社製 WIFi モジュール BP3591 を使用して 無線 LAN により TCP/IP 通信を行うプログラムです 簡単な文字列によるコマンド ( 例 : LED0 ON ) を受信して LED の ON/OFF を行います 受"

Copied!
25
0
0

読み込み中.... (全文を見る)

全文

(1)

1 TCP_BP3591 の説明 V002 2014/03/28

ROHM 社製 WIFi モジュール BP3591 を使用して、無線 LAN により TCP/IP 通信を行うプログラムです。

簡単な文字列によるコマンド(例: “LED0 ON”)を受信して LED の ON/OFF を行います。 受信したデータはエコーバックされます。

無料の開発ツール Atollic TrueSTUDIO for ARM Lite (試用版) で作成したプロジェクトです。

プログラムの開始番地は 0x08000000 です。デバッグが可能です。

目次

1. CPU 基板と WiFi モジュール BP3591 との接続 ... 2 1.1. 「飛石伝ひ CPU 基板」の場合 ... 2 1.2. 「飛石伝ひ I/F 基板」の場合 ... 3 1.3. STM32F4 Discovery 基板の場合 ... 4 2. TCP/IP 通信のための Network 構成(ローカル接続) ... 5 3. プログラム実行時の動作と動作確認 ... 6 3.1. AccessTCP_Local プログラムで試験... 6 1) AccessTCP_Local プログラムの起動 ... 6 2) エコーバック ... 7 3) LED ON/OFF ... 7 3.2. Tera Term で試験 ... 8 1) Tera Term の起動 ... 8 2) IP アドレスの登録 ... 8 3) TCP/IP 接続 ... 10 4) エコーバック ... 11 5) コマンド送信による LED の ON/OFF ... 12 4. プロジェクトの構成 ... 13 4.1. 追加したソースフォルダ ... 14 4.2. フォルダ main ... 15 5. Network パラメータの設定 ... 16 5.1. WiFi ルータの設定 (NetworkParam.h) ... 16

5.2. TCP/IP の Port 番号の設定 (NetworkParam.h) ... 16

5.3. TCP/IP のアドレスの設定 (NetworkParam.c) ... 16 6. TCP_BP3591 のプログラムの構造 ... 17 6.1. 処理番号を使用したプログラムのフロー ... 17 6.2. 処理番号を使用したプログラムの形 ... 18 7. Network 処理モジュールの概要 ... 19 7.1.ソースフォルダ Network の下のファイル ... 19 7.2. ソースフォルダ BP3591 ... 20

(2)

2 1. CPU 基板と WiFi モジュール BP3591 との接続 WiFi モジュール BP3591 をアクセスするために UART(非同期シリアル通信)を使用します。 1.1. 「飛石伝ひ CPU 基板」の場合 1) ROHM 株式会社製の WiFi モジュール BP3591 と接続用基板 BP359D とのセット 表1.1. 1) BP359D と「飛石伝ひ CPU 基板」との接続信号 CN1 番号 BP359D の信号名 CPU 信号名 CPU 機能名 コネクタピン番号 備考 1 GND --- --- --- 2 GPIO0 --- --- --- 3 GPIO1 --- --- --- 4 VCC --- --- +3.3V 5 VCC --- --- +3.3V 6 BOOT_SEL1 --- --- --- 10k の抵抗でプルアップ 7 BOOT_SEL0 --- --- --- 8 FLASH_SEL --- --- --- 9 GND --- --- --- CN2 番号 BP359D の信号名 CPU 信号名 CPU 機能名 コネクタピン番号 備考 1 GND --- --- --- 2 SDDATA1 --- --- --- 3 SDDATA0 --- --- --- 4 UART_RxD PB10 UART3_TX P2-20 5 UART_TxD PB11 UART3_RX P2-19 6 GPIO6 --- --- ---

7 PRST PA1 I/O P2-41 Network_Reset

8 GPIO2 --- --- --- Status_LED

9 GND --- --- ---

2) TMD3591AD との接続

表1.1. 2) TMD3591AD と「飛石伝ひ CPU 基板」との接続信号

番号 TMD3591AD の信号名 CPU 信号名 CPU 機能名 コネクタピン番号 備考

1 VCC --- --- --- +3.3V

2 VCC --- --- --- +3.3V

3 PRST PA1 I/O P2-41 Network_Reset

4 GPIO0 --- --- --- 5 GPIO1 --- --- --- 6 GPIO2 --- --- --- Status_LED 7 GPIO6 --- --- --- 8 M_ANA --- --- --- 9 FLASH_SEL --- --- --- 10 BOOT_SEL_0 --- --- --- 11 UART_RXD PB10 USART3_TX P2-20 12 UART_TXD PB11 USART3_RX P2-19 13 SDATA1 --- --- --- 14 SDATA0 --- --- --- 15 GND --- --- --- 16 GND --- --- ---

(3)

3 1.2. 「飛石伝ひ I/F 基板」の場合 1) ROHM 株式会社製の WiFi モジュール BP3591 と接続用基板 BP359D とのセット I/F02 基板の CN1, CN2 に実装することができます。 2) TMD3591AD との接続 I/F02 基板の P10 に実装することができます。

(4)

4 1.3. STM32F4 Discovery 基板の場合 1) ROHM 株式会社製の WiFi モジュール BP3591 と接続用基板 BP359D とのセット 表1.2. 1) BP359D と STM32F4 Discovery 基板との接続信号 CN1 番号 BP359D の信号名 CPU 信号名 CPU 機能名 コネクタピン番号 備考 1 GND --- --- --- 2 GPIO0 --- --- --- 3 GPIO1 --- --- --- 4 VCC --- --- +3.3V 5 VCC --- --- +3.3V 6 BOOT_SEL1 --- --- --- 10k の抵抗でプルアップ 7 BOOT_SEL0 --- --- --- 8 FLASH_SEL --- --- --- 9 GND --- --- --- CN2 番号 BP359D の信号名 CPU 信号名 CPU 機能名 コネクタピン番号 備考 1 GND --- --- --- 2 SDDATA1 --- --- --- 3 SDDATA0 --- --- --- 4 UART_RxD PB10 UART3_TX P1-34 5 UART_TxD PB11 UART3_RX P1-35 6 GPIO6 --- --- ---

7 PRST PA1 I/O P1-11 Network_Reset

8 GPIO2 --- --- --- Status_LED

9 GND --- --- ---

2) TMD3591AD との接続

表1.2. 2) TMD3591AD と STM32F4 Discovery 基板との接続信号

番号 TMD3591AD の信号名 CPU 信号名 CPU 機能名 コネクタピン番号 備考

1 VCC --- --- --- +3.3V

2 VCC --- --- --- +3.3V

3 PRST PA1 I/O P1-11 Network_Reset

4 GPIO0 --- --- --- 5 GPIO1 --- --- --- 6 GPIO2 --- --- --- Status_LED 7 GPIO6 --- --- --- 8 M_ANA --- --- --- 9 FLASH_SEL --- --- --- 10 BOOT_SEL_0 --- --- --- 11 UART_RXD PB10 USART3_TX P1-34 12 UART_TXD PB11 USART3_RX P1-35 13 SDATA1 --- --- --- 14 SDATA0 --- --- --- 15 GND --- --- --- 16 GND --- --- ---

(5)

5 2. TCP/IP 通信のための Network 構成(ローカル接続) ルータと PC および CPU 基板の接続は次のようになります。 ルータ WiFi モジュール BP3591 CPU 基板 UART PC

(6)

6 3. プログラム実行時の動作と動作確認

1) プログラムを実行すると基板上の LED LD4(緑)が 1 秒点灯、2 秒消灯 で点滅します。

2) プログラムの動作が開始してから、BP3591 と WiFi ルータの接続が確立するのに、約 20 秒程度かかります。

BP3591 の GPIO2 に Status LED を接続している場合、接続確立中は1秒間隔で点滅します。接続が確立すると点灯した ままになります。

ただし、コンフィグレーションが行われなかった場合など、最初から点灯したままなので注意が必要です。

20 秒近く点滅した後、点灯したら接続が確立したと判断するとよいと思います。

TCP 通信プログラム AccessTCP_Local または Tera Term を使用して TCP/IP 通信の確認を行います。

AccessTCP_Local は Microsoft Visual C# 2010 Express で作成したプログラムです。プロジェクトを公開していますので 興味のある方はご覧ください。インストールして使用する方法も説明しています。(TCP_Server のページ)

3.1. AccessTCP_Local プログラムで試験 1) AccessTCP_Local プログラムの起動

AccessTCP_Local プログラムを起動すると、次のダイアログが表示されます。

(7)

7 2) エコーバック

この例では、送信データに ”How are you?” と入力して、[送信] ボタンをクリックした結果、エコーバックされて受信の 部分に表示されています。

3) LED ON/OFF

a) STM32F4 Discovery 基板の場合 : LED0 : LD5(赤) または LED1 : LD6(青) を ON/OFF します。 b) 「飛石伝ひ CPU 基板」の場合 : Port1-bit6 または Port1-bit7 を ON/OFF します。

この例では “LED1 ON” を送信しました。

a) STM32F4 Discovery 基板で実行している場合は、LD6(青)の LED が点灯します。 b) 「飛石伝ひ CPU 基板」で実行している場合は、Port1-bit7 が ON します。

(8)

8 3.2. Tera Term で試験

1) Tera Term の起動

以前の設定が Serial port を使用に設定してあったので、”Cannot open COM4” のメッセージが表示されました。 [OK] ボタンをクリックします。

2) IP アドレスの登録

(9)

9

ルータに設定した DHCP の静的割り当てアドレスを指定して [Add] ボタンをクリックします。

ここに追加されました。[OK] ボタンをクリックしてダイアログを閉じます。

(10)

10 3) TCP/IP 接続

メニューの {File} -> {New connection…} をクリックします。次のダイアログが開きます。

TCP/IP のラジオボタンを選択して、TCP port#: に 10000 を設定します。10000 は TCP_Server のプログラムの NetParam.h で指定している番号です。

[OK] ボタンをクリックしてください。

(11)

11 4) エコーバック

ABCD と PC のキーを押すとエコーバックされて画面に表示されます。

メモ帳で “LED0 ON”と書いたファイルを作成して LED0_ON.txt という名前で保存します。

メニューの {File} -> {Send file…} をクリックして LED0_ON.txt を選択して送信すると、GPIO PD14 に対応した LED が 点灯します。

(12)

12 5) コマンド送信による LED の ON/OFF

メニューの {File} -> {Send file…} をクリックすると次のダイアログが開きます。

“LED0 ON” が記述されたファイル LED0_ON.txt を選択して、[開く(O)] ボタンをクリックします。 次ページに続く

(13)

13

送信した “LED0 ON” がエコーバックされて CPU 基板側では対応する LED が点灯します。 LED0_OFF.txt を送信すると、LED が消灯します。

4. プロジェクトの構成

(14)

14 4.1. 追加したソースフォルダ 1) CommonModules 共通に使用するモジュールを記述してあります。 時間待ち、文字列操作 などの処理を記述しています。 2) CommunicateHOST

TCP/IP 通信で受信した “LED0 ON” などの文字列コマンドを処理します。 3) Handles a) HandleTimer2 タイマ割り込みの初期化を記述しています。 b) HandleUART UART(非同期シリアル通信)の初期化を行います。 4) Network TCP/IP 通信の処理を記述しています。 a) Network.h Network.c TCP/IP 通信処理の一番上位のモジュールです。BP3591 のコンフィグレーションを行った後、TCP/IP 通信を行います。 b) NetParam WiFi ルータに接続するためのパラメータと IP アドレスなどを設定します。 c) NetUtilities 文字列の IP アドレスを 32bit のデータに変換する処理や、32bit データを文字列の IP アドレスに変換するなど、 Network 処理に使用する共通処理を記述してあります。 5) BP3591 : フォルダ Network の下にフォルダ BP3591 があります。 a) HandleBP3591 BP3591 のコミュニケーションモードを使用するための WID の書き込み、読み込みを行います。 b) CommunicateBP3591 UART により BP3591 と送受信する処理を行います。 c) ConfigBP3591 BP3591 をコンフィグレーションします。 d) AccessBP3591 受信データからフレームデータを取り出し、種類により処理します。 TCP Server としての処理を行い、受信したコマンドデータの処理を行います。 6) UserPrograms

(15)

15 4.2. フォルダ main

1) main.c

a) main モジュール

プログラム開始のモジュールです。

I/O の初期化、Network の初期化 および TCP/IP 通信処理を呼び出しています。

2) stm32f4xx_it.

(16)

16 5. Network パラメータの設定 本プログラムサンプルでは WiFi ルータの SSID やアクセスのための IP アドレスなどをプログラム埋め込みにしているため、 使用環境に応じて、設定部分を変更する必要があります。 5.1. WiFi ルータの設定 (NetworkParam.h) NetworkParam.h内の下記の部分を使用するWiFiルータに合わせて書き換えてください。 項目は上から、SSID, SecurityKey, PinCode の3項目です。

//--- // WiFiルータの設定

//--- // 実際の環境に合わせて書き換えてください。

//--- #define defSSID "URoadWPS-35F14B"

#define defSecurityKEY "01234567"

#define defPinCode "76543210"

//--- 5.2. TCP/IP の Port 番号の設定 (NetworkParam.h)

NetworkParam.h 内の下記の部分の TCP/IP にアクセスするための Port 番号を実際に使用する番号に変更してください。

//--- //Port番号 //--- // 実際の環境に合わせて書き換えてください。 //--- #define defTCP_ServerPort 10000 #define defHTTP_ServerPort 10001 //--- 5.3. TCP/IP のアドレスの設定 (NetworkParam.c) NetworkParam.c 内の下記の部分の TCP/IP にアクセスするためのアドレスを実際に使用するアドレスに変更してください。 上から、IP アドレス、 Mask アドレス、 Gateway アドレス です。

//--- // IP Addressの設定

//--- // 実際の環境に合わせて書き換えてください。

//---

uint8_t GLB_uchrIP[4] = {192, 168, 100, 109}; //Source IP Address

uint8_t GLB_uchrMaskIP[4] = {0xFF, 0xFF, 0xFF, 0x00}; //IP Address Mask

uint8_t GLB_uchrGatewayIP[4] = {192, 168, 100, 254}; //Gateway IP Address //---

(17)

17 6. TCP_BP3591 のプログラムの構造 TCP_BP3591 のプログラムは処理番号を使用して、順次処理を行う構造をとっています。 今後、紹介する HTTP Server, Mail 送信、 DDNS 処理 は全てこの構造になっています。 6.1. 処理番号を使用したプログラムのフロー 処理番号を使用したプログラムの概念的なフローを以下に示します。 この例ではモジュールが 処理番号0、 処理番号1、 処理番号2 の3個の処理で構成されています。 処理番号0 -> 処理番号1 -> 処理番号2 -> 処理番号0 -> ...と処理番号0 ~ 処理番号2を繰り返します。 また、戻り値は処理中は -1、 最後の処理番号の処理で正常終了時 0、エラーが発生した場合 NG : 1 以上の値を 返します。 YES 開始 処理番号による分岐 処理番号0の処理 処理番号1の処理 処理番号2の処理 処理終了? NO 処理番号 +1 終了 YES 処理終了? NO 処理番号 +1 YES 処理終了? NO 処理番号 = 0 戻り値 = -1 戻り値 = -1 戻り値 = 0

(18)

18 6.2. 処理番号を使用したプログラムの形 例えば、処理番号 : uint8_t uchrJobNum を用いて次のように処理します。 この例では、通信の処理において 受信待ちをしてデータを受信したらデータの処理をして応答のための送信処理を 行っています。送信処理が終了したら受信待ちに戻ります。 //戻り値 : // -1 : 処理中 // 0 : OK 終了 // 1 以上 : NG 終了 int16_t 送受信処理() { switch(uchrJobNum){ case 0: intReturn = 受信処理(); if(intReturn == -1){ break; //処理中 } if(intReturn > 0){ intReturn = 1; //NG 終了 break; } 受信データによる処理と送信データ作成(); uchrJobNum++; //次の処理番号 intReturn = -1; //処理中 break; case 1: intReturn = 送信処理(); if(intReturn == -1){ break; //処理中 } uchrJobNum = 0; //処理番号を 0 に戻す intReturn = 0; //OK 終了 break; } return(intReturn); } 上記の 受信処理(); と 送信処理(); の内部も同じ構造で記述されています。戻り値が -1 の時は処理中で同じ処理番号 の部分をループして、処理が OK 終了だった場合、処理番号を進めて、次の処理を行います。

(19)

19 7. Network 処理モジュールの概要 Network 処理のためのモジュールについて概要を説明します。 プロジェクトのソースフォルダ Network のしたに、上位モジュールを記述したファイルと BP3591 をアクセスするための モジュールが記述されたソースファイル群が格納されているソースフォルダ BP3591 があります。 7.1.ソースフォルダ Network の下のファイル 1) Network Network 処理の最上位のモジュールです。 Network の初期化を行った後、Network 通信処理をループします。 a) TransaxtNetwork //--- //Network処理 //--- // BP3591の初期化を行った後、Network通信処理をLoopする。 //--- //引数 : //uint8_t *puchrJobNum : 処理番号のポインタ //---

int16_t TransactNetwork(uint8_t *puchrJobNum);

2) NetParam

a) SetNetworkParameter

Network 接続のためのパラメータ、WiFi の SSID, SecurityKEY や IP アドレスなどを設定します。

//--- //Set parameter for Network :

//--- //戻り値: // 0 : OK // 1以上 : NG //--- int16_t SetNetworkParameter(void); 3) NetUtilities Network 処理のための共通モジュールを記述してあります。

(20)

20 7.2. ソースフォルダ BP3591 1) AccessBP3591 a) NetworkAccessBP3591 BP3591 にアクセスして Network 通信を行います。 //--- //Network通信処理 //--- //引数 : // uint8_t *puchrJobNum : 処理番号

// struct sNetworkData *pstructNetworkData : 受信したNetworkデータを格納する構造体のポインタ //戻り値:

// -1 : 処理中

// 0 : OK終了

//---

int16_t NetworkAccessBP3591(uint8_t *puchrJobNum, struct sNetworkData *pstructNetworkData);

b) TCP_AccessBP3591 TCP 通信を行います。

//--- //Access for TCP Server : TCP Server通信処理

//--- //引数 :

// uint8_t *puchrJobNum : 処理番号

// struct sNetworkExpect *pstructNetworkExpect : 取得するデータを指定する構造体のポインタ // struct sSocket *pstructSocket_TCP : パケットの内容をセットする構造体のポインタ

//戻り値:

// -1 : 処理中

// 0 : OK終了

//---

int16_t TCP_AccessBP3591(uint8_t *puchrJobNum, struct sNetworkExpect *pstructNetworkExpect, struct sSocket *pstructSocket_TCP);

(21)

21 2) CommunicateBP3591 BP3591 との通信処理を行います。 a) UART_SendBP3591 BP3591 にデータを送信します。 //--- //Network WiFiBP3591 UART送信

//--- //引数 : // uint8_t *puchrJobNum : 処理番号のポインタ // uint16_t uintLength : 送信データ数 // uint8_t *puchrData : 送信データのポインタ //戻り値 : // -1 : 処理中 // 0 : OK終了 //---

int16_t UART_SendBP3591(uint8_t *puchrJobNum, uint16_t uintLength, uint8_t *puchrData);

b) UART_ReceiveBP3591

BP3591 からデータを受信します。

//--- //Network WiFiBP3591 UART受信

//--- //引数 :

// uint8_t *puchrJobNum : 処理番号のポインタ

// uint8_t *puchrData : 受信データを格納するBufferのポインタ // uint16_t uintLength : 受信データ数をセットするWorkのポインタ //戻り値 :

// -1 : 処理中

// 0 : OK終了

// 1以上 : NG

//---

(22)

22 c) CommunicationReceiveBP3591 BP3591 からの受信データからフレームデータを取り出し、種類に見合ったデータを取得します。 //--- //受信 BP3591 : 受信したデータの種類を識別して種類に見合ったデータを取得する。 //--- //引数 : //uint8_t *puchrJobNum : 処理番号

//struct sNetworkData *pstructNetworkData : 受信したNetworkデータを格納する構造体のポインタ //戻り値:

// -1 : 処理中

// 0 : OK終了

//---

int16_t CommunicationReceiveBP3591(uint8_t *puchrJobNum, struct sNetworkData *pstructNetworkData);

d) GetReceiveDataAndSetFlag_BP3591 フレームデータから種類に見合ったデータを取得します。 //--- //Data取得とflagセット : 受信データの種類(WID/DATA)によりフラグをセットして種類に見合ったデータを取得する。 //--- //引数 :

//uint8_t *puchrReceiveData : 受信データが格納されたBufferのポインタ

//struct sNetworkData *pstructNetworkData : 受信したNetworkデータを格納する構造体のポインタ //戻り値:

// 0 : OK

// 1 : NG and Continue

// 2 : NG and End

//---

int16_t GetReceiveDataAndSetFlag_BP3591(uint8_t *puchrReceiveData,

(23)

23 3) ConfigBP3591 a) InitializeBP3591 BP3591 との通信に使用する UART を初期化し、BP3591 をコンフィグレーションします。 //--- //WiFi BP3591初期化 //--- //引数 : // uint8_t *puchrJobNum : 処理番号のポインタ

// struct sNetworkData *pstructNetworkData : 受信したNetworkデータを格納する構造体のポインタ // struct sNetworkExpect *pstructNetworkExpect : 取得するデータを指定する構造体のポインタ //戻り値:

// -1 : 処理中

// 0 : OK

// 1 : NG

//---

int16_t InitializeBP3591(uint8_t *puchrJobNum, struct sNetworkData *pstructNetworkData,

struct sNetworkExpect *pstructNetworkExpect);

b) EnterCommunicationMode BP3591 をコミュニケーションモードにします。 //--- //コミュニケーションモードに移行 //--- //引数 : // uint8_t *puchrJobNum : 処理番号のポインタ //戻り値: // -1 : 処理中 // 0 : OK // 1 : Timeout //---

(24)

24 c) ConfigurationBP5391

BP3591 をコンフィグレーションします。

//--- //コンフィグレーションBP5391 : 接続するWiFiのSSIDやBP3591のIP Address, Port番号などを設定する。 //--- //引数 :

// uint8_t *puchrJobNum : 処理番号のポインタ

// struct sNetworkExpect *pstructNetworkExpect : 取得するデータを指定する構造体のポインタ //戻り値 : // -1 : 処理中 // 0 : OK // 1 : NG(初期化失敗) // 2 : Network ParameterがFlashMemoryに設定されていない。 //---

int16_t ConfigurationBP5391(uint8_t *puchrJobNum, struct sNetworkExpect *pstructNetworkExpect);

4) HandleBP3591

BP3591 のコンフィグレーションモードにおいて WID 書き込み、読み込みを行います。

WID 処理をするためのモジュールを全て記述してあります。

(25)

25 改訂履歴

V001 2014/01/31 初版

参照

関連したドキュメント

テューリングは、数学者が紙と鉛筆を用いて計算を行う過程を極限まで抽象化することに よりテューリング機械の定義に到達した。

Jabra Talk 15 SE の操作は簡単です。ボタンを押す時間の長さ により、ヘッドセットの [ 応答 / 終了 ] ボタンはさまざまな機

タップします。 6通知設定が「ON」になっ ているのを確認して「た めしに実行する」ボタン をタップします。.

えて リア 会を設 したのです そして、 リア で 会を開 して、そこに 者を 込 ような仕 けをしました そして 会を必 開 して、オブザーバーにも必 の けをし ます

パスワード 設定変更時にパスワードを要求するよう設定する 設定なし 電波時計 電波受信ユニットを取り外したときの動作を設定する 通常

(7)

“〇~□までの数字を表示する”というプログラムを組み、micro:bit

すべての Web ページで HTTPS でのアクセスを提供することが必要である。サーバー証 明書を使った HTTPS