サンプルプログラム 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-V1_Dim

  基板については、
 Base-N446RE基板 の説明 をご覧ください。



動作試験用基板 IF-N446RE-WiFi の説明

IF-N446RE-WiFi-V1_Dim

  基板については、
 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上には以下のようなページが表示されます。

Ajax_LED_Start



サンプルプログラム N446RE_WiFi_HTTP のソース
 STMicroelectronics社製のfreeの開発環境 STM32CubeIDE 1.7.0 を使用して作成しました。

 ここからサンプルプログラム R_N446RE_WiFi_HTTP.zip をダウンロードしてください。



ST(Station)モード接続
  PCとESP-WROOM-02をST(Station)モードで接続する場合の様子を
 以下に示します。

Connect_WiFi_ST



Wi-Fiルーターのポートマッピング設定
  ESP-WROOM-02をST(Station)モードで使用し、PCと接続する場合、
 ESP-WROOM-02を特定するためにWi-Fiルータのポートマッピング設定が
 必要になります。

  ポートマッピング設定の一例を紹介します。

 Wi-Fiルーターのポートマッピング設定 を、ご覧ください。

  使用しているWi-Fiルーターに合わせて設定してください。



Wi-Fi選択画面
icon_WiFi

  PCの画面の右下のタスクバー上のWi-Fiのアイコンをクリックすると、
 Wi-Fi接続のダイアログが開きます。

Dialog_WiFi_ST



Wi-Fi接続画面
  使用しているWi-Fiルーターに接続していることを確認します。

Connect_WiFi_router



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_Scrn_First

 以下、サンプルプログラム N446RE_WiFi_HTTP について説明していきます。



N446RE_WiFi_HTTP の構成
  STM32CubeIDEの画面左側、Project Explorerの
 N446RE_WiFi_HTTP を展開した画面は以下のようになります。

N446RE_WiFi_HTTP_Tree

  サンプルプログラム 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 にあります。

N446RE_WiFi_HTTP_main

  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

 なんでも、気軽に ご相談ください。
 担当:おの

マスコット
  えがおのでんし 案内