学習日記-ESP 8266をAPモードに設定する方法(2020.7.1)

23642 ワード

一、WIFIインタフェース
  • wifi_station_set_config機能:Wi-Fi Stationインタフェースの構成パラメータを設定し、Flash注意:•ESP 8266 Stationで使用可能な場合は、本インタフェースを呼び出してください.•wifi_station_set_configはuser_にありますInitで呼び出すと、ESP 8266 Stationインタフェースはシステムの初期化が完了すると、wifi_を呼び出す必要がなくなり、AP(ルーティング)に接続します.station_接続•そうでない場合は、wifiを使用する必要があります.station_接続AP(ルーティング).•station_config.bssid_setは1つずつ0に設定され、APのMACアドレスをチェックする必要がある場合(重複APが多い場合)のみ1に設定されます.•この設定が元の設定と異なる場合は、Flashシステムパラメータ領域に更新保存されます.関数定義:bool wifi_station_set_config (struct station_config *config)パラメータ:struct station_config *config:Wi-Fi Station接続設定パラメータポインタ戻り:true:成功false:失敗例:
  • void	ICACHE_FLASH_ATTR
    user_set_station_config(void)
    {
     	 char	ssid[32]	=	SSID;	
     	 char	password[64]	=	PASSWORD;	
     	 struct	station_config	stationConf;	
     	 stationConf.bssid_set	=	0;		//need	not	check	MAC	address	of	AP
     	 
    
     	 os_memcpy(&stationConf.ssid,	ssid,	32);	
     	 os_memcpy(&stationConf.password,	password,	64);	
     	 wifi_station_set_config(&stationConf);	
    
    }
    
    void	user_init(void)
    {
     	 wifi_set_opmode(STATIONAP_MODE);	//Set	softAP	+	station	mode
    
     	 	user_set_station_config();
    
    }
    
  • wifi_station_set_config_Current機能:Wi-Fi Stationインタフェースの構成パラメータを設定し、Flash注意:•ESP 8266 Stationで使用可能な場合は、本インタフェースを呼び出してください.•wifi_station_set_configuser_initで呼び出されると、ESP 8266 Stationインタフェースは、システムの初期化が完了すると自動的にAP(ルーティング)に接続され、wifi_station_connectを呼び出す必要がなくなります.そうでなければ、wifi_station_connect接続AP(ルーティング)を呼び出す必要があります.station_config.bssid_setは1つに0に設定されており、APのMACアドレスをチェックする必要がある場合(複数の重複APがある場合)のみ1に設定されている.•この設定が元の設定と異なる場合は、Flashシステムパラメータ領域に更新保存されます.関数定義bool wifi_station_set_config_current (struct station_config *config)パラメータstruct station_config *config:Wi-Fi Station接続設定パラメータポインタ戻りtrue:成功false:失敗
  • wifi_station_接続機能:ESP 8266 Wi-Fi Stationインタフェース接続AP注意:user_Initで本インタフェースを適用し、ESP 8266 Stationでイネーブルして初期化が完了した後に呼び出してください.ESP 8266がAPに接続されている場合は、まずwifi_を呼び出します.station_disconnectは前の接続を切断します.関数定義:bool wifi_station_connect (void)パラメータ:戻りなし:true:成功false:失敗
  • wifi_station_disconnect機能:ESP 8266 Wi-Fi StationインタフェースAPから接続解除注意:user_Initでは本インタフェースを適用し,本インタフェースはシステム初期化が完了し,ESP 8266 Stationインタフェースがイネーブルされた場合に呼び出さなければならない.関数定義:bool wifi_station_disconnect (void)パラメータ:戻りなし:true:成功false:失敗
  • wifi_station_get_connect_status機能:ESP 8266 Wi-Fi Station接続APの状態を問い合わせる.注意:wifi_station_set_reconnect_policyを呼び出して再接続機能をオフにし、wifi_set_event_handler_cbを呼び出してWi-Fiイベントコールバックを登録していない場合、本インタフェースは失効し、接続状態を正確に取得できません.関数定義:uint8 wifi_station_get_connect_status (void)パラメータ:なし
  • enum{
    				STATION_IDLE	=	0,
    				STATION_CONNECTING,
    				STATION_WRONG_PASSWORD,
    				STATION_NO_AP_FOUND,
    				STATION_CONNECT_FAIL,
    				STATION_GOT_IP
    };
    
  • wifi_station_scan機能:APの情報を取得する注意:user_initに本インタフェースを適用しないでください.本インタフェースはシステムの初期化が完了した後、ESP 8266 Stationインタフェースが使用可能になった場合に呼び出さなければなりません.関数定義:bool wifi_station_scan (struct scan_config *config, scan_done_cb_t cb);構造体:
  • struct	scan_config	{
    				uint8	*ssid;							//	AP’s	ssid
    				uint8	*bssid;						//	AP’s	bssid
    				uint8	channel;					//scan	a	specific	channel
    				uint8	show_hidden;	//scan	APs	of	which	ssid	is	hidden.
    				wifi_scan_type_t	scan_type;	//	scan	type,	active	or	passive
    				wifi_scan_time_t	scan_time;	//	scan	time	per	channel
    
    };
    

    パラメータ:•struct scan_config*config:APの構成パラメータをスキャンする
  • config==null:スキャンしてすべての適用可能なAPの情報
  • を取得する.
  • config.ssidnull && config.bssidnull && config.channel!=null:ESP 8266 Stationインタフェーススキャンは、特定のチャネル上のAP情報を取得する.
  • config.ssid!=null && config.bssidnull && config.channelnull:ESP 8266 Stationインタフェーススキャンは、すべてのチャネル上の特定の名前APの情報を取得します.•scan_done_cb_t cb:スキャンが完了したcallbackはtrueを返します:成功false:失敗
  • scan_done_cb_t機能:wifi_station_scanのコールバック関数注意:user_initに本インタフェースを適用しないでください.本インタフェースはシステム初期化が完了した後、ESP 8266 Stationインタフェースが機能している場合に呼び出さなければなりません.関数定義void scan_done_cb_t (void *arg, STATUS status)パラメータ:•void *arg:取得したAP情報ポインタをスキャンし、チェーンテーブル形式で格納し、データ構造struct bss_infoSTATUS status:スキャン結果は例なし:
  • を返す.
    wifi_station_scan(&config,	scan_done);
    static	void	ICACHE_FLASH_ATTR	scan_done(void	*arg,	STATUS	status)	{
    				if	(status	==	OK)	{
    								struct	bss_info	*bss_link	=	(struct	bss_info	*)arg;
    								...
    				}
    }
    
  • wifi_station_ap_number_set機能:ESP 8266 Stationが最大で1 APの情報を記録できるように設定する.注意:ESP 8266 Stationが1つのAPに成功した場合、APのSSIDとpasswordレコードを保存できます.この設定が元の設定と異なる場合は、Flashシステムパラメータ領域に更新保存されます.関数定義:bool wifi_station_ap_number_set (uint8 ap_number)パラメータ:uint8 ap_number:AP情報を記録する最大数プロジェクト(最大値5)戻り値:true:成功false:失敗
  • wifi_station_get_ap_info機能:ESP 8266 Stationに保存されているAP情報を取得し、最大5個まで記録する.関数定義:uint8 wifi_station_get_ap_info(struct station_config config[])パラメータ:struct station_config config[]:APの情報、配列サイズは5でなければならない:APを記録する数プロジェクトの例:
  •  struct	station_config	config[5];
    int	i	=	wifi_station_get_ap_info(config);
    
  • wifi_station_get_current_ap_id機能:現在接続されているAPを取得して記録ID値を保存します.ESP 8266は、各構成接続のAPを記録し、0からカウントを開始することができる.関数定義:uint8 wifi_station_get_current_ap_id ();パラメータ:戻りなし:現在接続されているAPは、レコードのID値を保存します.
  • wifi_station_get_auto_接続機能:ESP 8266 Stationに接続されているAP(ルーティング)が動作するかどうかを問い合わせる.関数定義:uint 8 wifi_station_get_auto_connect(void)パラメータ:戻りなし:0:非自動接続AP⾮0:自動接続AP
  • wifi_station_set_auto_接続機能:ESP 8266 Stationに記録されているAP(ルーティング)を電源投入するかどうかを設定し、デフォルトでは接続を停止します.注:•このインタフェースがuser_にある場合Initで使用すると、現在今回の電源投入が有効になります.他の場所で使用する場合は、次の1回の電源投入が有効になります.•この設定が元の設定と異なる場合は、Flashシステムパラメータ領域に更新保存されます.関数定義:bool wifi_station_set_auto_connect(uint8 set)パラメータuint 8 set:オン/オフ接続AP•0:オフ接続AP•1:オフ接続AP戻りtrue:成功false:失敗
  • 二、ルーチン
  • は、user initにおいて、まず初期化動作
  • を実行する.
    // OLED   
    OLED_ Init();
    OLED_ ShowStr ing(0, 0, "ESP8266 = AP") ;
    OLED_ ShowString(0, 2, "IP:") ;
    
  • ESP 8266_を呼び出すAP_ Init_ JX()関数ESP 8266 APモードを設定する相関パラメータ
  • void ICACHE_ FLASH_ ATTR ESP8266 AP Init JX()
    {
    struct softap_ config AP_ Config;// AP     
    wifi_ set_ opmode (0x02) ;//   AP  ,    Flash
    //     (  : [       /  ]        )
    os_ memset (&AP_ Config, 0sizeof (struct softap_ config)); // AP     = 0
    os_ strcpy (AP_ Config. ssid, ESP8266_ AP_ SSID); //   SSID (       ssid  )
    os_ strcpy (AP_ Conf ig. password, ESP8266_ AP_ PASS); //     (       passwor d  )
    AP_ Config. ssid_ len=os_ str len (ESP8266_ AP_ SSID); //   ss id  ( SS ID     )
    AP_ Config. channel=1;//   1~13
    AP_ Config. authmode=AUTH WPA2_ PSK;//   1~13
    AP_ Config. ssid_ bidden=0;//   SSID
    AP_ Conf ig. max_ cmnnection=4;//     
    AP_ Conf ig. beacon_ interval=100;//      100~60000 ms
    wifi_ softap_ set_ config (&AP_ Config) ;//  soft-AP,    Flash
    }
    
  • 注意&AP_ConfigこのパラメータはAPパラメータ構造体ポインタであり,関数の最初の場所でパラメータ構造体を定義する必要がある.

  • 構造体のメンバー:
    struct softap config
    {
    uint8 ssid[32]//  wifi 
    uint8 password [64] ;//wifi  
    uint8 ssid_len;//wifi   
    uint8 channel ;//   
    AUTH_ MODE authmode ;//    
    uint8 ssid_ hidden;//    wifi 
    uint8 max_ connection;//     
    uint16 beacon_ interval ;//      
    }
    

    注意:wifi名とwifiパスワードマクロ定義sizeof(...):戻りパラメータが占める空間のサイズ(バイト単位)os memset(void*s,int ch,size_t n)指定値void*sメモリブロックポインタint chをメモリブロックに入力size_t n.充填サイズchar os_strcpy(char*s 1,const char*s 2)パラメータ2が指す「文字列」をパラメータ1が指すアドレスにコピー
  • AP関連パラメータを設定後、タイミングコールバック関数を実行し、user init関数のタイミングのコールバック関数
  • を終了する方法
    void ICACHE_ FLASH_ ATTR 0S_ Timer_ 1_ cb(void) 
    {
       struct ip_ info ST_ ESP8266_ IP; // IP     
       u8 ESP8266_ IP[4]; //         IP 
       //     ESP8266     
       switch (wifi_ get_ _opmode()) //       
       {
            case 0x01: os_ pr intf ("
    ESP8266_ Mode = Stat ion
    "
    ) ; case 0x02: os_ _pr intf ("
    ESP8266_ Mode = SoftAP
    "
    ) ; case 0x03: os_ pr intf ("
    ESP8266_ Mode = Stat i on+SoftAP
    "
    ) ; break; } // ESP8266_ AP IP // [AP , DHCP ( ), IP ,ESP8266 IP =192.168.4.1] wifi_ get_ ip_ info (SOFTAP_ IF, &ST_ ESP8266_ IP); // 2: IP // ESP8266_ AP_ IP. ip. addr==32 IP , 。 ESP8266_ IP[0] = ST_ ESP8266_ IP. ip. addr ;// IP - - <==> addr ESP8266_ IP[1] = ST_ ESP8266_ IP. ip. addr>>8;// IP <==> addr ESP8266_ IP[2] = ST_ ESP8266_ IP. ip. addr>>16;// IP <==> addr ESP8266_ IP[3] = ST_ ESP8266_ IP. ip. addr>>24;// IP <==> addr // ESP8266 IP os_ pr intf ("ESP8266_ IP = %d. %d. %d. %d
    "
    , ESP8266_ IP[0], ESP8266_ IP[1], ESP8266_ IP[2], ESP8266_ IP[3]); OLED_ ShowIP (24, 2, ESP8266_ IP);// ESP8266 IP // WIFI os_ pr intf ("Number of devices connected to this WIFI = %d
    "
    ,wifi_ softap_ get_ stat ion_ num()) ;