Wi-Fi 라이브러리 - FreeRTOS

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Wi-Fi 라이브러리

중요

이 라이브러리는 더 이상 사용되지 않는 Amazon-FreeRTOS 리포지토리에서 호스팅됩니다. 새 프로젝트를 생성할 때는 여기서 시작하는 것이 좋습니다. 현재 사용되지 않는 Amazon-FreeRTOS 리포지토리를 기반으로 하는 기존 FreeRTOS 프로젝트가 이미 있는 경우에는 Amazon-FreeRTOS Github 리포지토리 마이그레이션 가이드 섹션을 참조하세요.

개요

FreeRTOS Wi-Fi 라이브러리는 포트별 Wi-Fi 구현을 공통 API로 추상화하여 Wi-Fi 기능을 갖춘 모든 FreeRTOS 적격 보드의 애플리케이션 개발 및 이식을 간소화합니다. 애플리케이션은 이 공통 API를 사용하여 공통 인터페이스를 통해 하위 수준의 무선 스택과 통신할 수 있습니다.

종속성 및 요구 사항

FreeRTOS Wi-Fi 라이브러리에는 FreeRTOS+TCP 코어가 필요합니다.

특성

Wi-Fi 라이브러리에는 다음 기능이 있습니다.

  • WEP, WPA, WPA2 및 WPA3 인증 지원

  • 액세스 포인트 검색

  • 전력 관리

  • 네트워크 프로파일링

Wi-Fi 라이브러리의 기능에 대한 자세한 내용은 아래를 참조하십시오.

Wi-Fi 모드

Wi-Fi 디바이스는 스테이션, 액세스 포인트 또는 P2P 등의 세 가지 모드 중 하나일 수 있습니다. WIFI_GetMode를 호출하여 Wi-Fi 디바이스의 현재 모드를 가져올 수 있습니다. WIFI_SetMode를 호출하여 디바이스의 Wi-Fi 모드를 설정할 수 있습니다. WIFI_SetMode를 호출하여 모드를 전환하면 네트워크에 이미 연결된 디바이스의 연결이 해제됩니다.

스테이션 모드

보드를 기존 액세스 포인트에 연결하려면 디바이스를 스테이션 모드로 설정합니다.

액세스 포인트(AP) 모드

디바이스를 다른 디바이스를 연결하기 위한 액세스 포인트로 만들려면 디바이스를 AP 모드로 설정합니다. 디바이스가 AP 모드에 있는 경우, 다른 디바이스를 FreeRTOS 디바이스에 연결하고 새 Wi-Fi 자격 증명을 구성할 수 있습니다. AP 모드를 구성하려면 WIFI_ConfigureAP를 호출합니다. 디바이스를 AP 모드로 전환하려면 WIFI_StartAP를 호출합니다. AP 모드를 끄려면 WIFI_StopAP를 호출합니다.

참고

FreeRTOS 라이브러리는 AP 모드에서 Wi-Fi 프로비저닝을 제공하지 않습니다. AP 모드를 완벽하게 지원하려면 DHCP 및 HTTP 서버 기능을 비롯한 추가 기능을 제공해야 합니다.

P2P 모드

액세스 포인트 없이 여러 디바이스가 서로 직접 연결할 수 있게 하려면 디바이스를 P2P 모드로 설정합니다.

보안

Wi-Fi API는 WEP, WPA, WPA2 및 WPA3 보안 유형을 지원합니다. 디바이스가 스테이션 모드에 있는 경우, WIFI_ConnectAP 함수를 호출할 때 네트워크 보안 유형을 지정해야 합니다. 디바이스가 AP 모드에 있는 경우 지원되는 보안 유형을 사용하도록 디바이스를 구성할 수 있습니다.

  • eWiFiSecurityOpen

  • eWiFiSecurityWEP

  • eWiFiSecurityWPA

  • eWiFiSecurityWPA2

  • eWiFiSecurityWPA3

검색 및 연결

인근의 액세스 포인트를 검색하려면 디바이스를 스테이션 모드로 설정하고 WIFI_Scan 함수를 호출합니다. 스캔에서 원하는 네트워크를 찾은 경우 WIFI_ConnectAP를 호출하고 네트워크 자격 증명을 제공하여 네트워크에 연결할 수 있습니다. WIFI_Disconnect를 호출하여 네트워크에서 Wi-Fi 디바이스를 연결 해제할 수 있습니다. 검색 및 연결에 대한 자세한 내용은 사용 예API 참조를 참조하십시오.

전력 관리

애플리케이션과 사용 가능한 전원에 따라 Wi-Fi 디바이스마다 전력 요구 사항이 다릅니다. 디바이스를 항상 켜서 지연 시간을 줄이거나, 디바이스를 간헐적으로 연결한 후 Wi-Fi가 필요하지 않을 때 저전력 모드로 전환할 수 있습니다. 인터페이스 API는 항상 연결, 저전력, 일반 모드 등 다양한 전력 관리 모드를 지원합니다. WIFI_SetPMMode 함수를 사용하여 디바이스에 대한 전력 모드를 설정합니다. WIFI_GetPMMode 함수를 호출하여 디바이스의 현재 전력 모드를 가져올 수 있습니다.

네트워크 프로필

Wi-Fi 라이브러리를 사용하여 네트워크 프로필을 디바이스의 비휘발성 메모리에 저장할 수 있습니다. 따라서 디바이스가 Wi-Fi 네트워크에 다시 연결될 때 검색할 수 있도록 네트워크 설정을 저장할 수 있습니다. 그러면 네트워크에 연결된 이후에 디바이스를 다시 프로비저닝할 필요가 없습니다. WIFI_NetworkAdd는 네트워크 프로필을 추가하고, WIFI_NetworkGet은 네트워크 프로필을 검색하고, WIFI_NetworkDel은 네트워크 프로필을 삭제합니다. 저장할 수 있는 프로필 수는 플랫폼에 따라 다릅니다.

구성

Wi-Fi 라이브러리를 사용하려면 구성 파일에서 여러 식별자를 정의해야 합니다. 이러한 식별자에 대한 자세한 내용은 API 참조를 참조하십시오.

참고

이 라이브러리에는 필요한 구성 파일이 포함되어 있지 않으므로 하나를 생성해야 합니다. 구성 파일을 생성할 때 보드에 필요한 보드 관련 구성 식별자를 포함시켜야 합니다.

Initialization(초기화)

Wi-Fi 라이브러리를 사용하기 전에 FreeRTOS 구성 요소 외에도 일부 보드 관련 구성 요소를 초기화해야 합니다. vendors/vendor/boards/board/aws_demos/application_code/main.c 파일을 초기화를 위한 템플릿으로 사용하여 다음을 수행합니다.

  1. 애플리케이션이 Wi-Fi 연결을 처리하는 경우 main.c에서 샘플 Wi-Fi 연결 로직을 제거합니다. 다음 DEMO_RUNNER_RunDemos() 함수 호출을

    if( SYSTEM_Init() == pdPASS ) { ... DEMO_RUNNER_RunDemos(); ... }

    자체 애플리케이션 호출로 바꿉니다.

    if( SYSTEM_Init() == pdPASS ) { ... // This function should create any tasks // that your application requires to run. YOUR_APP_FUNCTION(); ... }
  2. WIFI_On()을 호출하여 Wi-Fi 칩을 초기화하고 전원을 켭니다.

    참고

    일부 보드에는 추가 하드웨어 초기화가 필요할 수 있습니다.

  3. 구성된 WIFINetworkParams_t 구조를 WIFI_ConnectAP()로 전달하여 보드를 사용 가능한 Wi-Fi 네트워크에 연결합니다. WIFINetworkParams_t 구조에 대한 자세한 내용은 사용 예API 참조를 참조하세요.

API 참조

전체 API 참조는 Wi-Fi API 참조를 참조하십시오.

사용 예

알려진 AP에 연결

#define clientcredentialWIFI_SSID "MyNetwork" #define clientcredentialWIFI_PASSWORD "hunter2" WIFINetworkParams_t xNetworkParams; WIFIReturnCode_t xWifiStatus; xWifiStatus = WIFI_On(); // Turn on Wi-Fi module // Check that Wi-Fi initialization was successful if( xWifiStatus == eWiFiSuccess ) { configPRINT( ( "WiFi library initialized.\n") ); } else { configPRINT( ( "WiFi library failed to initialize.\n" ) ); // Handle module init failure } /* Setup parameters. */ xNetworkParams.pcSSID = clientcredentialWIFI_SSID; xNetworkParams.ucSSIDLength = sizeof( clientcredentialWIFI_SSID ); xNetworkParams.pcPassword = clientcredentialWIFI_PASSWORD; xNetworkParams.ucPasswordLength = sizeof( clientcredentialWIFI_PASSWORD ); xNetworkParams.xSecurity = eWiFiSecurityWPA2; // Connect! xWifiStatus = WIFI_ConnectAP( &( xNetworkParams ) ); if( xWifiStatus == eWiFiSuccess ) { configPRINT( ( "WiFi Connected to AP.\n" ) ); // IP Stack will receive a network-up event on success } else { configPRINT( ( "WiFi failed to connect to AP.\n" ) ); // Handle connection failure }

인근 AP 검색

WIFINetworkParams_t xNetworkParams; WIFIReturnCode_t xWifiStatus; configPRINT( ("Turning on wifi...\n") ); xWifiStatus = WIFI_On(); configPRINT( ("Checking status...\n") ); if( xWifiStatus == eWiFiSuccess ) { configPRINT( ("WiFi module initialized.\n") ); } else { configPRINTF( ("WiFi module failed to initialize.\n" ) ); // Handle module init failure } WIFI_SetMode(eWiFiModeStation); /* Some boards might require additional initialization steps to use the Wi-Fi library. */ while (1) { configPRINT( ("Starting scan\n") ); const uint8_t ucNumNetworks = 12; //Get 12 scan results WIFIScanResult_t xScanResults[ ucNumNetworks ]; xWifiStatus = WIFI_Scan( xScanResults, ucNumNetworks ); // Initiate scan configPRINT( ("Scan started\n") ); // For each scan result, print out the SSID and RSSI if ( xWifiStatus == eWiFiSuccess ) { configPRINT( ("Scan success\n") ); for ( uint8_t i=0; i<ucNumNetworks; i++ ) { configPRINTF( ("%s : %d \n", xScanResults[i].cSSID, xScanResults[i].cRSSI) ); } } else { configPRINTF( ("Scan failed, status code: %d\n", (int)xWifiStatus) ); } vTaskDelay(200); }

이식

iot_wifi.c 구현은 iot_wifi.h에 정의된 함수를 구현해야 합니다. 적어도 이 구현은 필수적이지 않거나 지원되지 않는 함수에 대해 eWiFiNotSupported를 반환해야 합니다.

Wi-Fi 라이브러리 이식에 대한 자세한 내용은 FreeRTOS 이식 안내서의 Wi-Fi 라이브러리 이식을 참조하세요.