サンプルプログラム N446RE_WiFi_HTTP の説明
Wi-Fiモジュール ESP-WROOM-02 を使用して、
ST(Station)モードでHTTP Serverとして動作する
サンプルプログラムです。
STMicroelectronics社製の
評価用基板、NUCLEO-F446RE と
freeの開発環境、STM32CubeIDE を
使用しています。
このサンプルプログラムは、
えがおのでんし製の試験用基板 Base-N446RE と IF-N446RE-WiFi を
使用して動作を確認しています。
動作試験用基板 Base-N446RE の説明
基板については、
Base-N446RE基板 の説明 をご覧ください。
動作試験用基板 IF-N446RE-WiFi の説明
基板については、
IF-N446RE-WiFi基板 の説明 をご覧ください。
目次
概要
サンプルプログラム N446RE_WiFi_HTTP のソース
ST(Station)モード接続
Wi-Fiルーターのポートマッピング設定
Wi-Fi選択画面
Wi-Fi接続画面
HTMLファイルのUpload
サンプルプログラム N446RE_WiFi_HTTP の説明
N446RE_WiFi_HTTP の構成
N446RE_WiFi_HTTP の動作パラメータの定義
ユーザープログラムの実行開始位置
N446RE_WiFi_HTTP の main() の説明
1) 初期化の部分
2) LED点滅 と HTTPの通信と処理 の部分
HTTP処理 の説明
IPアドレスとPort番号によるWeb Serverのアクセス
LED点滅時間選択の処理
概要
1) ESP-WROOM-02の制御
CPU内蔵のUART(非同期シリアル通信)を使用して、
ATコマンドにより、ESP-WROOM-02を制御します。
2) PCからCPU基板へのアクセス
PCはWebブラウザ上からIPアドレスとPort番号により、
ESP-WROOM-02を介してCPU基板にアクセスします。
3) HTTP動作
CPU基板はPCからのアクセスに対して、HTTP処理により、PC上に
ボタンとラジオボタンだけを表示する簡単なホームページを開きます。
PC上には以下のようなページが表示されます。
サンプルプログラム N446RE_WiFi_HTTP のソース
STMicroelectronics社製のfreeの開発環境 STM32CubeIDE 1.7.0 を使用して作成しました。
ここからサンプルプログラム R_N446RE_WiFi_HTTP.zip をダウンロードしてください。
ST(Station)モード接続
PCとESP-WROOM-02をST(Station)モードで接続する場合の様子を
以下に示します。
Wi-Fiルーターのポートマッピング設定
ESP-WROOM-02をST(Station)モードで使用し、PCと接続する場合、
ESP-WROOM-02を特定するためにWi-Fiルータのポートマッピング設定が
必要になります。
ポートマッピング設定の一例を紹介します。
Wi-Fiルーターのポートマッピング設定 を、ご覧ください。
使用しているWi-Fiルーターに合わせて設定してください。
Wi-Fi選択画面
PCの画面の右下のタスクバー上のWi-Fiのアイコンをクリックすると、
Wi-Fi接続のダイアログが開きます。
Wi-Fi接続画面
使用しているWi-Fiルーターに接続していることを確認します。
HTMLファイルのUpload
PC上のWebブラウザからCPU基板にアクセスして、
CPU基板上のLEDの点滅時間を制御するために、
HTMLファイル Ajax_LED.html をCPUのFlash Memoryに
書き込む必要があります。
HTMLファイルのUpload をご覧ください。
サンプルプログラム N446RE_WiFi_HTTP の説明
TCP Serverとして動作し、PC上などで動作しているTCP Clientからの
通信によるコマンドを受信して、コマンドに従い、LED点滅を行います。
プロジェクトを最初に開いた画面は以下のようになります。
以下、サンプルプログラム N446RE_WiFi_HTTP について説明していきます。
N446RE_WiFi_HTTP の構成
STM32CubeIDEの画面左側、Project Explorerの
N446RE_WiFi_HTTP を展開した画面は以下のようになります。
サンプルプログラム N446RE_WiFi_HTTP の構成を以下に示します。
N446RE_WiFi_HTTP
|
|- Includes
|
|- Access_ESP8266 : Wi-Fiモジュールとのコマンド通信処理
| |- Config_ESP8266.c
| |- Config_ESP8266.h
| |- Handle_ESP8266.c
| |- Handle_ESP8266.h
| |- Net_Data_ESP8266.c
| |- Net_Data_ESP8266.h
|
|--Access_HTTP_Local : Wi-Fiモジュールの初期化とHTTP通信処理
| |--Access_HTTP_Local.c
| |--Access_HTTP_Local.h
|
|- Blink_LED_Stat : Status LED点滅処理
| |- Blink_LED_Stat.c
| |- Blink_LED_Stat.h
|
|- C_Lib : 共通ライブラリモジュール
| |- Common_Lib.c
| |- Common_Lib.h
|
|- Core
| |- Inc
| | |- main.h
| | |- stm32f4xx_hal_conf.h
| | |- stm32f4xx_it.h
| |
| |- Src
| | |- main.c
| | |- stm32f4xx_hal_msp.c
| | |- stm32f4xx_it.c
| | |- syscalls.c
| | |- system.c
| | |- system_stm32f4xx.c
| |
| |- Startup
|
|- Drivers
|
|--Exec_HTTP_URI : HTTPリクエストのURI部分を取得して処理を行う。
| |--Exec_HTTP_URI.c
| |--Exec_HTTP_URI.h
|
|--HTML_Upload : CPUが実行するHTMLファイルをCPUのFlash Memoryに書き込むための埋め込みHTML
| |--HTML_Upload.c
| |--HTML_Upload.h
|
|- H_F4_UART4 : UART4のハンドラ
| |- H_F4_UART4.c
| |- H_F4_UART4.h
|
|- N446RE_WiFi_Fix_Config : 動作パラメータの定義
| |- Dev_Conf.h
|
|- Net_Param_ST_Fix : Networkパラメータ
| |- Net_P_IP_ST_Fix : IPアドレス設定
| | |- Net_P_IP_ST_Fix.c
| | |- Net_P_IP_ST_Fix.h
| |
| |- Net_P_WiFi_ST_Fix : WiFi設定パラメータ
| | |- Net_P_WiFi_ST_Fix.c
| | |- Net_P_WiFi_ST_Fix.h
|
|- Net_Utilities : Network処理のためのユーティリティ
| |- Net_Utilities.c
| |- Net_Utilities.h
|
|- Periph_F4 : 周辺インターフェース処理
| |- H_F4_FLASH.c
| |- H_F4_FLASH.h
| |- H_F4_GPIO.c
| |- H_F4_GPIO.h
|
|--Transact_HTTP : HTTP処理関数
| |
| |--Exec_HTTP : HTTPリクエストの実行
| | |--Exec_HTTP.c
| | |--Exec_HTTP.h
| |
| |
| |--Load_HTML : Flash Memory上に格納されているHTMLファイルを読み込みHOSTに転送する。
| | |--Load_HTML.c
| | |--Load_HTML.h
| |
| |
| |--Reply_HTTP : HTTP応答処理
| | |--Reply_HTTP.c
| | |--Reply_HTTP.h
| |
| |
| |--Send_HTTP : HTTP送信処理
| |--Send_HTTP
| |--Send_HTTP
|
|- Wait_Itvl : 時間待ち処理
| |- Wait_Itvl.c
| |- Wait_Itvl.h
|
|- N446RE_WiFi_HTTP.launch
|- STM32F446RETX_FLASH.ld
|- STM32F446RETX_RAM.ld
N446RE_WiFi_HTTP の動作パラメータの定義
サンプルプログラム N446RE_WiFi_HTTP の動作パラメータの定義を
N446RE_WiFi_Config/Dev_Conf.h に記述しています。
使用する CPU の定義、ヘッダ名の定義、GPIO のポートとピンの定義、動作パラメータの定義、
などを記述しています。
ユーザープログラムの実行開始位置
プログラムは、int main(void) から実行開始します。
int main(void) は、フォルダ Core/Src/main.c にあります。
STM32CubeIDEでビルドされたプログラムは、自動的にCPUの初期化を
行った後、int main(void) を呼び出します。
ユーザーコード(記述したプログラム)は、
int main(void) の先頭から実行されます。
N446RE_WiFi_HTTP の main() の説明
サンプルプログラム N446RE_WiFi_HTTP の main() の記述は、
以下のとおりです。
/**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */
uint8_t uint8_JobNum_LED = 0;
uint8_t uint8_JobNum_HTTP = 0;
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
/* USER CODE BEGIN 2 */
//------------------------------------------------
// Status LED(緑) : 点灯1000mSec / 消灯2000mSec
//------------------------------------------------
GLB_uint16_Time_LED_Stat_ON = (uint16_t)1000;
GLB_uint16_Time_LED_Stat_OFF = (uint16_t)2000;
//------------------------------------------------
//------------------------------------------------
// Status LEDのGPIO初期化
//------------------------------------------------
Init_LED_Stat();
//-------------------------------------------------------------
// IP and Portパラメータ設定
//-------------------------------------------------------------
// 戻り値:
// 0 : OK
// 1以上 : NG
//-------------------------------------------------------------
Set_Net_Param_IP();
//-------------------------------------------------------------
// WiFiパラメータ設定
//-------------------------------------------------------------
// 戻り値:
// 0 : OK
// 1以上 : NG
//-------------------------------------------------------------
Set_Net_Param_WiFi();
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
//------------------------------------------------------
// Status LED点滅
//------------------------------------------------------
// 引数:
// uint8_t *puint8_JobNum : 処理番号を格納する変数のポインタ
// uint16_t uint16_Time_ON : 点灯時間
// uint16_t uint16_Time_OFF : 消灯時間
// 戻り値:
// -1 : 処理中
// 0 : OK終了
// 1 : NG
//------------------------------------------------------
Blk_LED_Stat(&uint8_JobNum_LED,
GLB_uint16_Time_LED_Stat_ON, GLB_uint16_Time_LED_Stat_OFF);
//--------------------------------------------------------------
// HTTPの通信と処理 : Local Network : IPアドレス と Port番号 によりアクセスする。
//--------------------------------------------------------------
// 引数:
// uint8_t *puint8_JobNum : 処理番号のポインタ
// 戻り値:
// -1 : 処理中
// 0 : OK終了
// 1 : NG
//--------------------------------------------------------------
Access_HTTP_Local(&uint8_JobNum_HTTP);
}
/* USER CODE END 3 */
}
1) 初期化の部分
a) CPUとPeripheral初期化
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
により、CPUとPeripheralなどの基本的な初期化を行います。
PeripheralとはCPUの周辺インターフェースなどのことを言います。
HAL_Init はプロジェクト構築時に自動的に組み込まれる、
HAL Drivers(フォルダ Drivers/STM32F4xx_HAL_Drivers) 内に記述されています。
b) CPU動作クロックの設定
/* Configure the system clock */
SystemClock_Config();
CPUの動作クロックとPeripheralの動作クロックを設定します。
SystemClock_Config(); の設定内容は、
int main(void)
{
.
.
.
}
の、すぐ下に記述されています。
c) Status LEDの初期化
初期の点滅時間をセットした後、Init_LED_Stat(); を呼び出して
LEDが接続されているピンを出力に設定しています。
//------------------------------------------------
// Status LED(緑) : 点灯1000mSec / 消灯2000mSec
//------------------------------------------------
GLB_uint16_Time_LED_Stat_ON = (uint16_t)1000;
GLB_uint16_Time_LED_Stat_OFF = (uint16_t)2000;
//------------------------------------------------
//------------------------------------------------
// Status LEDのGPIO初期化
//------------------------------------------------
Init_LED_Stat();
d) Networkパラメータの初期化
IPアドレスとWi-Fiのパラメータを設定します。
//-------------------------------------------------------------
// IP and Portパラメータ設定
//-------------------------------------------------------------
// 戻り値:
// 0 : OK
// 1以上 : NG
//-------------------------------------------------------------
Set_Net_Param_IP();
//-------------------------------------------------------------
// WiFiパラメータ設定
//-------------------------------------------------------------
// 戻り値:
// 0 : OK
// 1以上 : NG
//-------------------------------------------------------------
Set_Net_Param_WiFi();
2) LED点滅 と HTTPの通信と処理 の部分
永久ループ部分の記述を以下に示します。
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
//------------------------------------------------------
// Status LED点滅
//------------------------------------------------------
// 引数:
// uint8_t *puint8_JobNum : 処理番号を格納する変数のポインタ
// uint16_t uint16_Time_ON : 点灯時間
// uint16_t uint16_Time_OFF : 消灯時間
// 戻り値:
// -1 : 処理中
// 0 : OK終了
// 1 : NG
//------------------------------------------------------
Blk_LED_Stat(&uint8_JobNum_LED,
GLB_uint16_Time_LED_Stat_ON, GLB_uint16_Time_LED_Stat_OFF);
//--------------------------------------------------------------
// HTTPの通信と処理 : Local Network : IPアドレス と Port番号 によりアクセスする。
//--------------------------------------------------------------
// 引数:
// uint8_t *puint8_JobNum : 処理番号のポインタ
// 戻り値:
// -1 : 処理中
// 0 : OK終了
// 1 : NG
//--------------------------------------------------------------
Access_HTTP_Local(&uint8_JobNum_HTTP);
}
/* USER CODE END 3 */
Status LED点滅処理 Blk_LED_Stat と
HTTPの通信と処理 Access_HTTP_Local を呼び出しています。
HTTP処理 の説明
IPアドレスとPort番号によるWeb Serverのアクセス
PC上のWebブラウザからアクセスされて、
Web ServerとしてHTTP動作を行う処理について説明します。
IPアドレスとPort番号によるWeb Serverのアクセス を、ご覧ください。
LED点滅時間選択の処理
PC上のWebブラウザからアクセスされて、CPU基板がWeb ServerとしてHTTP動作を行い
LED点滅コマンドを受信してLED点滅を行う処理について説明します。
HTMLによるLED点滅時間の選択 を、ご覧ください。
A+-2C (ええ加減にC) のページに戻る
メールアドレス: apm2c.sumi@gmail.com
なんでも、気軽に ご相談ください。
担当:おの
えがおのでんし 案内