Microchip ATWINC1500-IC Handleiding


Lees hieronder de 📖 handleiding in het Nederlandse voor Microchip ATWINC1500-IC (71 pagina's) in de categorie Niet gecategoriseerd. Deze handleiding was nuttig voor 32 personen en werd door 2 gebruikers gemiddeld met 4.5 sterren beoordeeld

Pagina 1/71
AN5305
ATWINC15x0/ATWINC3400 Wi-Fi® Network Controller
Software Programming Guide
Introduction
This software programming guide describes the use of the ATWINC15x0/ATWINC3400 Wi-Fi Network Controller to
build state-of-the-art Internet of Things (IoT) applications.
The following topics will be covered:
How examples are organized
Target board information
Instruction for each example
Note:  All the listed examples and folder structure/files are similar for both WINC15x0 and ATWINC3400. The
diagrams and console logs in this document refer to ATWINC15x0.
Prerequisites
Hardware Prerequisites:
SAM D21 Xplained Pro Evaluation Kit
ATWINC15x0 extension (For more details, refer to ATWINC15x0 user guide)
ATWINC3400 extension (For more details, refer to ATWINC3400 user guide)
IO1 extension
Micro-USB Cable (Micro-A/Micro-B)
Software Prerequisites:
Atmel Studio 7.0 (For more details, refer to )user guide
Wi-Fi IoT Examples (for more details, refer to )application notes
Figure 1. SAM D21 XSTK Board Demo Setup
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 1
Table of Contents
Introduction.....................................................................................................................................................1
Prerequisites.................................................................................................................................................. 1
1. How the Examples are Organized.......................................................................................................... 4
2. Source Organization............................................................................................................................... 5
3. Basic Operation Code............................................................................................................................. 6
3.1. Basic Examples............................................................................................................................6
4. Protocol Examples................................................................................................................................ 28
4.1. UDP Client..................................................................................................................................28
4.2. UDP Server................................................................................................................................ 29
4.3. TCP Client.................................................................................................................................. 31
4.4. TCP Server.................................................................................................................................32
4.5. NTP Time Client......................................................................................................................... 34
4.6. SMTP Send Email...................................................................................................................... 36
5. Advanced Examples............................................................................................................................. 39
5.1. Exosite Cloud............................................................................................................................. 39
5.2. Growl Notification....................................................................................................................... 43
5.3. HTTP File Downloader............................................................................................................... 45
5.4. IoT Temperature and Qtouch Sensor Demo.............................................................................. 47
5.5. MQTT Chat.................................................................................................................................49
5.6. OTA Firmware Upgrade............................................................................................................. 52
5.7. PubNub Cloud............................................................................................................................ 55
5.8. Serial Bridge...............................................................................................................................57
5.9. SSL Client Connection............................................................................................................... 57
5.10. Weather Client............................................................................................................................59
5.11. Wi-Fi Serial.................................................................................................................................61
5.12. ALPN Client Connection.............................................................................................................63
6. Reference Documentation.................................................................................................................... 66
7. Document Revision History...................................................................................................................67
The Microchip Website.................................................................................................................................68
Product Change Notification Service............................................................................................................68
Customer Support........................................................................................................................................ 68
Microchip Devices Code Protection Feature................................................................................................ 68
Legal Notice................................................................................................................................................. 69
Trademarks.................................................................................................................................................. 69
Quality Management System....................................................................................................................... 70
AN5305
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 2
Worldwide Sales and Service.......................................................................................................................71
AN5305
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 3
1. How the Examples are Organized
This example package consists of several projects containing code examples. These examples are organized in a
way that provides a wide coverage of the ATWINC15x0/ATWINC3400 API usage – from basic Wi-Fi operation to
advanced topics. These examples are categorized as:
• Basic
• Protocol
• Advanced
AN5305
How the Examples are Organized
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 4
2. Source Organization
There are some folders automatically allocated according to user configurations. The example source consists of
main.c main.h and . The application source files are structured as follows:
• ./src/ASF
All ASF modules' source files are located in this folder. You can select various modules with the ASF wizard
and it will configure the content in this folder.
• ./src/config
This folder consists of configuration header files for the SAM D21 and extension boards.
• ./src/iot
Some protocol/advanced examples include this folder. It contains source code to make use of certain
protocols (for example, HTTP, MQTT, and so on), typically needed in IoT applications.
• ./src/ASF/common/components/wifi/winc1500
This is the folder which contains the driver source for the ATWINC15x0 Wi-Fi module.
• ./src/ASF/common/components/wifi/winc3400
This is the folder which contains the driver source for the ATWINC3400 Wi-Fi module.
Figure 2-1. ATWINC1500 Application Solution Explorer
Note:  Some examples may have additional source files, but the structure is similar across these examples.
AN5305
Source Organization
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 5
3. Basic Operation Code
This section explains the basic code for using the SAM D21 and ATWINC15x0/ATWINC3400. The use of the
ATWINC API may differ according to the purpose of your actual application.
3.1 Basic Examples
These examples describe basic Wi-Fi operation in a ‘how-to’ manner:
How to read the Chip ID (to identify WINC15x0/ATWINC3400 H/W revision differences)
How to set/get the MAC address of the Wi-Fi module
How to start Wi-Fi in a specific operation mode, such as:
STA Mode (Station mode, known as a Wi-Fi client)
AP mode (Access Point mode)
How to switch mode between the STA and AP modes at runtime
How to scan for nearby APs
How to set Deep Sleep mode
How to connect to a secure Wi-Fi network using WEP/WPA/WPA2 security
How to connect to an enterprise security network
How to connect via Wi-Fi Protected Setup (WPS)
How to get an RF signal status by reading the RSSI value
How to set AP provision using Android App
How to set HTTP provision
3.1.1 How to Read the Chip ID
This example demonstrates how to retrieve the chip information of the ATWINC15x0/ATWINC3400 using the SAM
D21 Xplained Pro board. This is a basic operation to identify which HW version is used.
It is based on the following hardware:
The SAM D21 Xplained Pro board
The ATWINC15x0/ATWINC3400 on the EXT1 header
Figure 3-1. Get Chip ID Demo Setup
3.1.1.1 Execution
main.c - Initialize the ATWINC15x0/ATWINC3400 and retrieve information.
AN5305
Basic Operation Code
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 6
1. Code summary:
function returns the chip ID of the ATWINC15x0/ATWINC3400.nmi_get_chipid()
function returns the RF revision ID.nmi_get_rfrevid()
/* Display WINC1500 chip information. */
printf("Chip ID : \r\t\t\t%x\r\n", (unsigned int)nmi_get_chipid());
printf("RF Revision ID : \r\t\t\t%x\r\n", (unsigned int)nmi_get_rfrevid());
2. Build the program and download it into the board.
3. Start the application.
3.1.1.2 Get Chip ID Demo Console Log
Note:  When the application executes successfully it provides the version information in the console.
-- WINC1500 chip information example --
-- XXXXX_XPLAINED_PRO --
-- Compiled: xxx x xxxx xx:xx:xx --
(APP)(INFO)Chip ID 1503a0
(APP)(INFO)Firmware ver : xx.x.x Svnrev xxxxx
(APP)(INFO)Firmware Build xxx x xxxx Time xx:xx:xx
(APP)(INFO)Firmware Min driver ver : xx.x.x
(APP)(INFO)Driver ver: xx.x.x
(APP)(INFO)Driver built at xxx x xxxx xx:xx:xx
Chip ID : 1503a0
RF Revision ID : 1
Done.
Note:  ATWINC15x0/ATWINC3400 behavior and corresponding log messages can be different depending upon the
revision.
The following are the details of the ATWINC3400 chip ID for reference.
Chip ID – 3400d1
RF Revision ID – 6
3.1.2 How to Set/Get the MAC Address
This example demonstrates the use of the ATWINC15x0/ATWINC3400 with the SAM D21 Xplained Pro board to
retrieve and set the MAC address of the Wi-Fi module.
The example is based on the following hardware:
The SAM D21 Xplained Pro
The ATWINC15x0/ATWINC3400 on the EXT1 header
Figure 3-2. Demo Setup
AN5305
Basic Operation Code
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 7
3.1.2.1 Execution
Initialize the ATWINC15x0/ATWINC3400 and retrieve information.
1. Code summary:
The MAC address is typically stored in the OTP-ROM. You can get it via the
m2m_wifi_get_otp_mac_address() function.
/* Get MAC Address from OTP. */
m2m_wifi_get_otp_mac_address(mac_addr, &u8IsMacAddrValid);
To set the user defined MAC address in the program memory, the m2m_wifi_set_mac_address()
function is used. This API needs to be called whenever the system resets. This API overwrites the
program memory MAC address, which is loaded from the OTP memory during the initialization process.
/** User defined MAC Address. */
const char main_user_defined_mac_address[] = {0xf8, 0xf0, 0x05, 0x20, 0x0b,
0x09};
/* Cannot find MAC Address from OTP. Set user defined MAC address. */
m2m_wifi_set_mac_address((uint8_t *)main_user_defined_mac_address);
The API is used to read the program memory MAC address. It ism2m_wifi_get_mac_address()
currently used by the WLAN device.
/* Get MAC Address. */
m2m_wifi_get_mac_address(mac_addr);
printf("%02X:%02X:%02X:%02X:%02X:%02X\r\n",
mac_addr[0], mac_addr[1], mac_addr[2],
mac_addr[3], mac_addr[4], mac_addr[5]);
2. Build the program and download it into the board.
3. Start the application.
3.1.2.2 Get MAC Address Demo Console Log
The application should now be programmed and running. The following information will be displayed on the terminal
window.
-- WINC1500 MAC Address example --
-- XXXXX_XPLAINED_PRO --
-- Compiled: xxx x xxxx xx:xx:xx --
(APP)(INFO)Chip ID 1503a0
(APP)(INFO)Firmware ver : xx.x.x Svnrev xxxxx
(APP)(INFO)Firmware Build xxx x xxxx Time xx:xx:xx
(APP)(INFO)Firmware Min driver ver : xx.x.x
(APP)(INFO)Driver ver: xx.x.x
(APP)(INFO)Driver built at xxx x xxxx xx:xx:xx
OTP MAC Address : F8:F0:05:F2:5F:62
Notes: 
The default MAC address is stored in One-Time-Programmable ROM (OTP ROM).
The output of this example should display the OTP MAC address or USER MAC address.
User defined MAC address: If you want to use a custom MAC address, there is an API available which allows
for setting a user defined MAC address.
3.1.3 How to Get the Wi-Fi Network Signal Strength
This example demonstrates the use of the ATWINC15x0/ATWINC3400 with the SAM D21 Xplained Pro board to
check signal strength, such as RSSI.
It is based on the following hardware:
The SAM D21 Xplained Pro
The ATWINC15x0/ATWINC3400 on the EXT1 header
Figure 3-3. Get the Signal Status Demo Setup
AN5305
Basic Operation Code
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 8
3.1.3.1 Execution
main.c - Initialize the ATWINC15x0/ATWINC3400 and connect to the AP as a station.
1. Code summary:
Configure the network parameters in .main.h
/** Wi-Fi Settings */
#define MAIN_WLAN_SSID "DEMO_AP" /* < Destination SSID */
#define MAIN_WLAN_AUTH M2M_WIFI_SEC_WPA_PSK /* < Security type */
#define MAIN_WLAN_PSK "12345678" /* < Password for Destination SSID */
Connect the ATWINC15x0/ATWINC3400 to the AP via the function.m2m_wifi_connect()
/* Connect to defined AP. */
m2m_wifi_connect((char *)MAIN_WLAN_SSID, sizeof(MAIN_WLAN_SSID),
MAIN_WLAN_AUTH, (void *)MAIN_WLAN_PSK, M2M_WIFI_CH_ALL);
Call to request the current RSSI.m2m_wifi_req_curr_rssi()
static void wifi_cb(uint8_t u8MsgType, void *pvMsg)
{
case M2M_WIFI_REQ_DHCP_CONF:
{
/* Request RSSI for the connected AP. */
m2m_wifi_req_curr_rssi();
The application will get the RSSI value when the function is called with awifi_cb()
M2M_WIFI_RESP_CURRENT_RSSI message.
static void wifi_cb(uint8_t u8MsgType, void *pvMsg)
{
case M2M_WIFI_RESP_CURRENT_RSSI:
{
/* This message type is triggered by "m2m_wifi_req_curr_rssi()" function. */
int8_t *rssi = (int8_t *)pvMsg;
printf("RSSI for the current connected AP (%d)\r\n", (int8_t)(*rssi));
2. Build the program and download it into the board.
3. Start the application.
3.1.3.2 Signal Status Demo Console Log
The application should now be programmed and running. The following information will be displayed on the terminal
window.
-- WINC1500 signal statistics example --
-- XXXXX_XPLAINED_PRO --
-- Compiled: xxx x xxxx xx:xx:xx --
(APP)(INFO)Chip ID 1503a0
(APP)(INFO)Firmware ver : xx.x.x Svnrev xxxxx
(APP)(INFO)Firmware Build xxx x xxxx Time xx:xx:xx
(APP)(INFO)Firmware Min driver ver : xx.x.x
(APP)(INFO)Driver ver: xx.x.x
(APP)(INFO)Driver built at xxx x xxxx xx:xx:xx
Wi-Fi connected
Wi-Fi IP is 192.168.1.46
RSSI for the current connected AP (-37)
3.1.4 How to Run STA Mode
This example demonstrates the use of the ATWINC15x0/ATWINC3400 with the SAM D21 Xplained Pro board to
behave as a station.
The example is based on the following hardware:
The SAM D21 Xplained Pro
The ATWINC15x0/ATWINC3400 on the EXT1 header
AN5305
Basic Operation Code
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 9
Figure 3-4. Demo Setup
3.1.4.1 Execution
main.c – Initialize the ATWINC15x0/ATWINC3400 and get the RSSI for the connected AP.
1. Code summary:
Configure the network parameters in .main.h
/** Wi-Fi Settings */
#define MAIN_WLAN_SSID "DEMO_AP" /* < Destination SSID */
#define MAIN_WLAN_AUTH M2M_WIFI_SEC_WPA_PSK /* < Security manner */
#define MAIN_WLAN_PSK "12345678" /* < Password for Destination SSID */
Connect to the AP with the given information.
/* Connect to defined AP. */
m2m_wifi_connect((char *)MAIN_WLAN_SSID, sizeof(MAIN_WLAN_SSID),
MAIN_WLAN_AUTH, (void *)MAIN_WLAN_PSK, M2M_WIFI_CH_ALL);
Note:  The WINC1500 stores the last successful connection in its memory by default, so if the user
disconnects from the AP, the user can call ; instead of callingm2m_wifi_default_connect()
m2m_wifi_connect() with the same credentials again.
The function is called with the message, where anwifi_cb() M2M_WIFI_RESP_CON_STATE_CHANGED
appropriate action can be executed as a response. The new Wi-Fi state is passed onto the callback as
part of the message.
static void wifi_cb(uint8_t u8MsgType, void *pvMsg)
{
switch (u8MsgType) {
case M2M_WIFI_RESP_CON_STATE_CHANGED:
{
...
tstrM2mWifiStateChanged *pstrWifiState = (tstrM2mWifiStateChanged *)pvMsg;
if (pstrWifiState->u8CurrState == M2M_WIFI_CONNECTED){
/* Take action on connection successful */
...
The function is called with the message. If successful, thewifi_cb() M2M_WIFI_REQ_DHCP_CONF
DHCP assigned IP address is passed to the application.
static void wifi_cb(uint8_t u8MsgType, void *pvMsg)
{
case M2M_WIFI_REQ_DHCP_CONF:
{
...
uint8_t *pu8IPAddress = (uint8_t *)pvMsg;
printf("Wi-Fi connected\r\n");
printf("Wi-Fi IP is %u.%u.%u.%u\r\n",
pu8IPAddress[0], pu8IPAddress[1], pu8IPAddress[2], pu8IPAddress[3]);
...
After the IP is assigned, the next time the DHCP client running on WINC wants the IP, it can start the
process with the DHCP request packet straight instead of the DHCP Discovery packet. It has been
observed that, some DHCP servers do not respond to the DHCP REQ packet as the first packet but
expect the DHCP Discovery to come in from the DHCP client. Ensure that WINC sends a DHCP
Discovery packet every time an IP needs to be configured. It is recommended that the user call
m2m_wifi_disconnect() m2m_wifi_connect() just before , which confirms that the DHCP
exchange starts from the Discovery packet.
2. Build the program and download it into the board.
3. Start the application.
AN5305
Basic Operation Code
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 10
3.1.4.2 Station Mode Demo Console Log
Note:  The application must be programmed and running. The following information is displayed on the terminal
window.
-- WINC1500 station mode example --
-- XXXXX_XPLAINED_PRO --
-- Compiled: xxx x xxxx xx:xx:xx --
(APP)(INFO)Chip ID 1503a0
(APP)(INFO)Firmware ver : xx.x.x Svnrev xxxxx
(APP)(INFO)Firmware Build xxx x xxxx Time xx:xx:xx
(APP)(INFO)Firmware Min driver ver : xx.x.x
(APP)(INFO)Driver ver: xx.x.x
(APP)(INFO)Driver built at xxx x xxxx xx:xx:xx
Connecting to DEMO_AP.
Wi-Fi connected
Wi-Fi IP is xxx.xxx.xxx.xxx
3.1.5 How to Run AP Mode
This example demonstrates the use of the ATWINC15x0/ATWINC3400 with the SAM D21 Xplained Pro board to
behave as an AP.
It is based on the following hardware:
The SAM D21 Xplained Pro
The ATWINC15x0/ATWINC3400 on the EXT1 header
Figure 3-5. Demo Setup
3.1.5.1 Execution
main.c - Initialize the ATWINC15x0/ATWINC3400 and act as an AP.
1. Code summary:
Configure the network parameters in .main.h
/** Security mode Supported */
#define USE_WPAPSK 1 /* WPA/WPA2 PSK Security Mode*/
// #define USE_WEP 2 /* WEP Security Mode*/
// #define USE_OPEN 3 /* No Security or OPEN Authentication Mode*/
/** AP mode Settings */
#define MAIN_WLAN_SSID "WINC1500_AP" /* < SSID */
#if (defined USE_WPAPSK)
#define MAIN_WLAN_AUTH M2M_WIFI_SEC_WPA_PSK /* < Security type */
#define MAIN_WLAN_WPA_PSK "1234567890" /* < Security Key in WPA PSK Mode */
#elif (defined USE_WEP)
#define MAIN_WLAN_AUTH M2M_WIFI_SEC_WEP /* < Security type */
#define MAIN_WLAN_WEP_KEY "1234567890" /* < Security Key in WEP Mode */
#define MAIN_WLAN_WEP_KEY_INDEX (0)
#elif (defined USE_OPEN)
#define MAIN_WLAN_AUTH M2M_WIFI_SEC_OPEN /* < Security type */
#endif
#define MAIN_WLAN_CHANNEL (M2M_WIFI_CH_6) /* < Channel number */
In the function, initializes the AP mode configuration structure ( ) , see themain() strM2MAPConfig
following example. User can enable the AP mode via function. Users maym2m_wifi_enable_ap()
choose any of the available security methods according to the requirements.
/* Initialize AP mode parameters structure with SSID, channel and OPEN security
type. */
memset(&strM2MAPConfig, 0x00, sizeof(tstrM2MAPConfig));
strcpy((char *)&strM2MAPConfig.au8SSID, MAIN_WLAN_SSID);
strM2MAPConfig.u8ListenChannel = MAIN_WLAN_CHANNEL;
strM2MAPConfig.u8SecType = MAIN_WLAN_AUTH;
strM2MAPConfig.au8DHCPServerIP[0] = 192;
AN5305
Basic Operation Code
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 11
strM2MAPConfig.au8DHCPServerIP[1] = 168;
strM2MAPConfig.au8DHCPServerIP[2] = 1;
strM2MAPConfig.au8DHCPServerIP[3] = 1;
#if USE_WEP
strcpy((char *)&strM2MAPConfig.au8WepKey, MAIN_WLAN_WEP_KEY);
strM2MAPConfig.u8KeySz = strlen(MAIN_WLAN_WEP_KEY);
strM2MAPConfig.u8KeyIndx = MAIN_WLAN_WEP_KEY_INDEX;
#endif
#if USE_WPAPSK
strcpy((char *)&strM2MAPConfig.au8Key, MAIN_WLAN_WPA_PSK);
strM2MAPConfig.u8KeySz = strlen(MAIN_WLAN_WPA_PSK);
#endif
/* Bring up AP mode with parameters structure. */
ret = m2m_wifi_enable_ap(&strM2MAPConfig);
printf("AP mode started. You can connect to %s.\r\n", (char *)MAIN_WLAN_SSID);
2. Build the program and download it into the board.
3. Start the application.
3.1.5.2 AP Mode Demo Console Log
Note:  The application must be programmed and running. The following information is displayed on the terminal
window.
-- WINC1500 AP mode example --
-- XXXXX_XPLAINED_PRO --
-- Compiled: xxx x xxxx xx:xx:xx --
(APP)(INFO)Chip ID 1503a0
(APP)(INFO)Firmware ver : xx.x.x Svnrev xxxxx
(APP)(INFO)Firmware Build xxx x xxxx Time xx:xx:xx
(APP)(INFO)Firmware Min driver ver : xx.x.x
(APP)(INFO)Driver ver: xx.x.x
(APP)(INFO)Driver built at xxx x xxxx xx:xx:xx
AP mode started. You can connect to WINC1500_AP.
Station connected
Station IP is xxx.xxx.xxx.xxx
Note:  The ATWINC15x0/ATWINC3400 supports AP mode with the following limitations:
1. Only one associated station is supported. After a connection is established with a station, further connections
are rejected.
2. The device cannot work as a station in this mode (STA/AP concurrency is not supported).
3.1.6 How to Change Modes
This example demonstrates how to use the ATWINC15x0/ATWINC3400 with the SAM D21 Xplained Pro board as a
station, and change it to AP.
Note:  This example application is not available in ASF for ATWINC3400.
It is based on the following hardware:
The SAM D21 Xplained Pro
The ATWINC15x0 on the EXT1 header
Figure 3-6. Demo Setup
3.1.6.1 Execution
main.c - Initialize the ATWINC15x0. By default, the device starts in station mode, then switches to AP mode. For
details on each mode, refer to the MODE_STA, MODE_AP example.
1. Code summary:
AN5305
Basic Operation Code
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 12
Configure the network parameters in .main.h
/** Security mode Supported */
#define USE_WPAPSK 1 /* WPA/WPA2 PSK Security Mode*/
// #define USE_WEP 2 /* WEP Security Mode*/
// #define USE_OPEN 3 /* No Security or OPEN Authentication Mode*/
/** AP mode Settings */
#define MAIN_WLAN_SSID "WINC1500_AP" /* < SSID */
#if (defined USE_WPAPSK)
#define MAIN_WLAN_AUTH M2M_WIFI_SEC_WPA_PSK /* < Security type */
#define MAIN_WLAN_WPA_PSK "1234567890" /* < Security Key in WPA PSK Mode */
#elif (defined USE_WEP)
#define MAIN_WLAN_AUTH M2M_WIFI_SEC_WEP /* < Security type */
#define MAIN_WLAN_WEP_KEY "1234567890" /* < Security Key in WEP Mode */
#define MAIN_WLAN_WEP_KEY_INDEX (0)
#elif (defined USE_OPEN)
#define MAIN_WLAN_AUTH M2M_WIFI_SEC_OPEN /* < Security type */
#endif
#define MAIN_WLAN_CHANNEL (M2M_WIFI_CH_6) /* < Channel number */
AP mode gets enabled in the function. For more details, refer to the “How to Run AP mode”main()
example.
enable_disable_ap_mode();
nm_bsp_sleep(DELAY_FOR_MODE_CHANGE);
2. Build the program and download it into the board.
3. Start the application.
3.1.6.2 Mode Change Demo Console Log
The application must be programmed and running. The following information is displayed on the terminal window.
-- WINC1500 mode change example --
-- XXXXX_XPLAINED_PRO --
-- Compiled: xxx x xxxx xx:xx:xx --
(APP)(INFO)Chip ID 1503a0
(APP)(INFO)Firmware ver : xx.x.x Svnrev xxxxx
(APP)(INFO)Firmware Build xxx x xxxx Time xx:xx:xx
(APP)(INFO)Firmware Min driver ver : xx.x.x
(APP)(INFO)Driver ver: xx.x.x
(APP)(INFO)Driver built at xxx x xxxx xx:xx:xx
AP mode, start
AP mode, end
3.1.7 How to Scan for APs
This example demonstrates the use of the ATWINC15x0/ATWINC3400 with the SAM D21 Xplained Pro board to
explain how to scan for an AP when running as a station.
It is based on the following hardware:
The SAM D21 Xplained Pro
The ATWINC15x0/ATWINC3400 on EXT1 header
Figure 3-7. Scan APs Demo Setup
3.1.7.1 Execution
main.c - Initialize the ATWINC15x0/ATWINC3400 and scan for APs until the defined AP is found.
1. Code summary:
Configure the network parameters in .main.h
/** Wi-Fi Settings */
#define MAIN_WLAN_SSID "DEMO_AP" /* < Destination SSID */
#define MAIN_WLAN_AUTH M2M_WIFI_SEC_WPA_PSK /* < Security type */
#define MAIN_WLAN_PSK "12345678" /* < Password for Destination SSID */
AN5305
Basic Operation Code
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 13
Request to scan in all channels.
/* Request scan. */
m2m_wifi_request_scan(M2M_WIFI_CH_ALL);
The function is called with the message when scanning iswifi_cb() M2M_WIFI_RESP_SCAN_DONE
done. At this point, a specific scan result can be requested by calling the
m2m_wifi_req_scan_result() API with a specific index.
static void wifi_cb(uint8_t u8MsgType, void *pvMsg)
{
case M2M_WIFI_RESP_SCAN_DONE:
{
tstrM2mScanDone *pstrInfo = (tstrM2mScanDone *)pvMsg;
scan_request_index = 0;
if (pstrInfo->u8NumofCh >= 1) {
m2m_wifi_req_scan_result(scan_request_index);
scan_request_index++;
}
The function will be called again with the message. Thewifi_cb() M2M_WIFI_RESP_SCAN_RESULT
application will get the AP information for the specific result index requested. If the scan result is the
same as the AP information in , then the device will connect to the AP.main.h
static void wifi_cb(uint8_t u8MsgType, void *pvMsg)
{
case M2M_WIFI_RESP_SCAN_RESULT:
{
tstrM2mWifiscanResult *pstrScanResult = (tstrM2mWifiscanResult *)pvMsg;
uint16_t demo_ssid_len;
uint16_t scan_ssid_len = strlen((const char *)pstrScanResult->au8SSID);
/* display AP found. */
printf("[%d] SSID:%s\r\n", scan_request_index, pstrScanResult->au8SSID);
num_found_ap = m2m_wifi_get_num_found_ap();
if (scan_ssid_len) {
/* check same SSID. */
demo_ssid_len = strlen((const char *)MAIN_WLAN_SSID);
if((demo_ssid_len == scan_ssid_len) &&
(!memcmp(pstrScanResult->au8SSID, (uint8_t *)MAIN_WLAN_SSID,
demo_ssid_len))) {
printf("Found %s \r\n", MAIN_WLAN_SSID);
m2m_wifi_connect((char *)MAIN_WLAN_SSID,
sizeof(MAIN_WLAN_SSID),
MAIN_WLAN_AUTH,
(void *)MAIN_WLAN_PSK,
M2M_WIFI_CH_ALL);
2. Build the program and download it into the board.
3. Start the application.
3.1.7.2 Scan APs Demo Console Log
The application must be programmed and running. The following information is displayed on the terminal window.
-- WINC1500 AP scan example --
-- XXXXX_XPLAINED_PRO --
-- Compiled: xxx x xxxx xx:xx:xx --
(APP)(INFO)Chip ID 1503a0
(APP)(INFO)Firmware ver : xx.x.x Svnrev xxxxx
(APP)(INFO)Firmware Build xxx x xxxx Time xx:xx:xx
(APP)(INFO)Firmware Min driver ver : xx.x.x
(APP)(INFO)Driver ver: xx.x.x
(APP)(INFO)Driver built at xxx x xxxx xx:xx:xx
[1] SSID:DEMO_AP1
[2] SSID:DEMO_AP2
[3] SSID:DEMO_AP
Found DEMO_AP
Wi-Fi connected
Wi-Fi IP is xxx.xxx.xxx.xxx
AN5305
Basic Operation Code
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 14
3.1.8 How to Set Power Save Mode
This example demonstrates the use of the ATWINC15x0/ATWINC3400 with the SAM D21 Xplained Pro board to
check the PS (Power Save) mode.
Note:  This example application is not available in ASF for ATWINC3400.
It is based on the following hardware:
The SAM D21 Xplained Pro
The ATWINC15x0 on the EXT1
Figure 3-8. Power Save Mode Demo Setup
3.1.8.1 Execution
main.c - Initialize the ATWINC15x0, set PS Mode and get the RSSI for the connected AP.
1. Code summary:
Configure the network parameters in .main.h
/** Wi-Fi Settings */
#define MAIN_WLAN_SSID "DEMO_AP" /* < Destination SSID */
#define MAIN_WLAN_AUTH M2M_WIFI_SEC_WPA_PSK /* < Security manner */
#define MAIN_WLAN_PSK "12345678" /* < Password for Destination SSID */
Configure the Power Save parameters in .main.h
/** PowerSave mode Settings */
#define MAIN_PS_SLEEP_MODE M2M_PS_MANUAL /* M2M_NO_PS /
M2M_PS_DEEP_AUTOMATIC / M2M_PS_MANUAL */
In the function, set the Power Save mode, based on the define above.main()
/* Set defined sleep mode */
if (MAIN_PS_SLEEP_MODE == M2M_PS_MANUAL) {
printf("M2M_PS_MANUAL\r\n");
m2m_wifi_set_sleep_mode(MAIN_PS_SLEEP_MODE, 1);
} else if (MAIN_PS_SLEEP_MODE == M2M_PS_DEEP_AUTOMATIC) {
printf("M2M_PS_DEEP_AUTOMATIC\r\n");
tstrM2mLsnInt strM2mLsnInt;
m2m_wifi_set_sleep_mode(M2M_PS_DEEP_AUTOMATIC, 1);
strM2mLsnInt.u16LsnInt = M2M_LISTEN_INTERVAL;
m2m_wifi_set_lsn_int(&strM2mLsnInt);
}
Connect to the AP.
/* Connect to defined AP. */
m2m_wifi_connect((char *)MAIN_WLAN_SSID, sizeof(MAIN_WLAN_SSID),
MAIN_WLAN_AUTH, (void *)MAIN_WLAN_PSK, M2M_WIFI_CH_ALL);
The ATWINC15x0 goes to Sleep automatically if Power Save is configured for the
M2M_PS_DEEP_AUTOMATIC mode. The ATWINC15x0 will wake up upon any request/callback (Wi-Fi/
SOCKET) and the host driver will allow the SoC to sleep again after handling the request. However, if
Power Save is configured for the mode, then the application is responsible for explicitlyM2M_PS_MANUAL
requesting the ATWINC15x0 to enter sleep while specifying the expected sleep time.
/* Request sleep mode */
if (gu8SleepStatus == MAIN_PS_REQ_SLEEP) {
if (MAIN_PS_SLEEP_MODE == M2M_PS_MANUAL) {
m2m_wifi_request_sleep(MAIN_REQUEST_SLEEP_TIME);
gu8SleepStatus = MAIN_PS_SLEEP;
}
}
2. Build the program and download it into the board.
3. Start the application.
AN5305
Basic Operation Code
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 15
3.1.8.2 Power Save Mode Demo Console Log
The application must be programmed and running. The following information will be displayed on the terminal
window.
-- WINC1500 Power Save Mode example --
-- XXXXX_XPLAINED_PRO --
-- Compiled: xxx x xxxx xx:xx:xx --
(APP)(INFO)Chip ID 1503a0
(APP)(INFO)Firmware ver : xx.x.x Svnrev xxxxx
(APP)(INFO)Firmware Build xxx x xxxx Time xx:xx:xx
(APP)(INFO)Firmware Min driver ver : xx.x.x
(APP)(INFO)Driver ver: xx.x.x
(APP)(INFO)Driver built at xxx x xxxx xx:xx:xx
Connecting to DEMO_AP.
Wi-Fi connected
Wi-Fi IP is xxx.xxx.xxx.xxx
RSSI for the current connected AP (-xx)
3.1.9 HTTP Provision Mode
This example demonstrates the use of the ATWINC15x0 with the SAM D21 Xplained Pro board to start Provision
Mode.
Note:  This example application is not available in ASF for ATWINC3400
It is based on the following hardware:
The SAM D21 Xplained Pro
The ATWINC15x0 on the EXT1 header
Figure 3-9. HTTP Provision Mode Demo Setup
3.1.9.1 Execution
main.c - Initialize the ATWINC15x0 and start Provision Mode until one of the various APs is selected.
1. Code summary:
Configure the network parameters in .main.h
#define MAIN_HTTP_PROV_SERVER_DOMAIN_NAME "atmelconfig.com"
#define MAIN_M2M_DEVICE_NAME "WINC1500_00:00"
Start provision mode before entering the main loop.
m2m_wifi_start_provision_mode((tstrM2MAPConfig *)&gstrM2MAPConfig, (char
*)gacHttpProvDomainName, 1);
When your mobile device sends configuration information, the function will be called with thewifi_cb()
M2M_WIFI_RESP_PROVISION_INFO message and you can connect to the AP with the given
information.
static void wifi_cb(uint8_t u8MsgType, void *pvMsg)
{
case M2M_WIFI_RESP_PROVISION_INFO:
{
tstrM2MProvisionInfo *pstrProvInfo = (tstrM2MProvisionInfo *)pvMsg;
printf("wifi_cb: M2M_WIFI_RESP_PROVISION_INFO.\r\n");
if (pstrProvInfo->u8Status == M2M_SUCCESS) {
m2m_wifi_connect((char *)pstrProvInfo->au8SSID, strlen((char *)pstrProvInfo-
>au8SSID), pstrProvInfo->u8SecType,
pstrProvInfo->au8Password, M2M_WIFI_CH_ALL);
2. Build the program and download it into the board.
AN5305
Basic Operation Code
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 16
3. Start the application.
3.1.9.2 HTTP Provision Mode Demo Console Log
The application must be programmed and running. The following information is displayed on the terminal window.
-- WINC1500 HTTP provision example --
-- XXXXX_XPLAINED_PRO --
-- Compiled: xxx x xxxx xx:xx:xx --
(APP)(INFO)Chip ID 1503a0
(APP)(INFO)Firmware ver : xx.x.x Svnrev xxxxx
(APP)(INFO)Firmware Build xxx x xxxx Time xx:xx:xx
(APP)(INFO)Firmware Min driver ver : xx.x.x
(APP)(INFO)Driver ver: xx.x.x
(APP)(INFO)Driver built at xxx x xxxx xx:xx:xx
Provision Mode started.
Connect to [atmelconfig.com] via AP[WINC1500_2F:55] and fill up the page.
1. Connect your mobile device to ATWINC15x0 (ATWINC1500_xx:xx).
Figure 3-10. ATWINC1500 Provision AP
2. Browse to (www.microchip.com) to setup the AP, populate the page, and then press Connect.
AN5305
Basic Operation Code
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 17
Figure 3-11. HTTP Provisioning Web Page
3. If configured correctly, the ATWINC15x0 will connect to the specified AP.
wifi_cb: M2M_WIFI_RESP_CON_STATE_CHANGED: CONNECTED.
wifi_cb: M2M_WIFI_REQ_DHCP_CONF: IP is xxx.xxx.xxx.xxx
wifi_cb: M2M_WIFI_RESP_CON_STATE_CHANGED: DISCONNECTED.
wifi_cb: M2M_WIFI_RESP_PROVISION_INFO.
wifi_cb: M2M_WIFI_RESP_CON_STATE_CHANGED: CONNECTED.
wifi_cb: M2M_WIFI_REQ_DHCP_CONF: IP is xxx.xxx.xxx.xxx
Note:  Refer to the application note for more details.HTTP Provision Mode
3.1.10 AP Provision Mode
This example demonstrates the use of the ATWINC15x0 with the SAM D21 Xplained Pro board to start Provision
mode.
Note:  This example application is not available in ASF for ATWINC3400.
It is based on the following hardware:
The SAM D21 Xplained Pro
The ATWINC15x0 on the EXT1 header
Figure 3-12. AP Provision Demo Setup
3.1.10.1 Execution
main.c - Initialize the ATWINC15x0 and start Provision mode until one of various APs is selected.
1. Code summary:
Initialize the socket module and create the TCP server socket.
/* Initialize socket address structure. */
addr.sin_family = AF_INET;
addr.sin_port = _htons((MAIN_WIFI_M2M_SERVER_PORT));
addr.sin_addr.s_addr = 0;
/* Initialize Socket module */
socketInit();
AN5305
Basic Operation Code
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 18
registerSocketCallback(socket_cb, NULL);
while (1) {
m2m_wifi_handle_events(NULL);
if (tcp_server_socket < 0) {
/* Open TCP server socket */
if ((tcp_server_socket = socket(AF_INET, SOCK_STREAM, 0)) < 0)
/* Bind service*/
bind(tcp_server_socket, (struct sockaddr *)&addr, sizeof(struct sockaddr_in));
Enable AP mode before the main loop. (Refer to the “How to Run AP Mode” example.)
/* Initialize AP mode parameters structure with SSID, channel and OPEN security
type. */
memset(&strM2MAPConfig, 0x00, sizeof(tstrM2MAPConfig));
strcpy((char *)&strM2MAPConfig.au8SSID, MAIN_WLAN_SSID);
strM2MAPConfig.u8ListenChannel = MAIN_WLAN_CHANNEL;
strM2MAPConfig.u8SecType = MAIN_WLAN_AUTH;
strM2MAPConfig.au8DHCPServerIP[0] = 0xC0; /* 192 */
strM2MAPConfig.au8DHCPServerIP[1] = 0xA8; /* 168 */
strM2MAPConfig.au8DHCPServerIP[2] = 0x01; /* 1 */
strM2MAPConfig.au8DHCPServerIP[3] = 0x01; /* 1 */
/* Bring up AP mode with parameters structure. */
ret = m2m_wifi_enable_ap(&strM2MAPConfig);
After your Android device is connected to the ATWINC15x0 and sends the AP configuration, disable AP
mode and connect to the AP with the given information.
static void socket_cb(SOCKET sock, uint8_t u8Msg, void *pvMsg)
{
case SOCKET_MSG_RECV:
{
printf("Disable to AP.\r\n");
m2m_wifi_disable_ap();
nm_bsp_sleep(500);
printf("Connecting to %s.\r\n", (char *)str_ssid);
m2m_wifi_connect((char *)str_ssid, strlen((char *)str_ssid), sec_type, str_pw,
M2M_WIFI_CH_ALL);
The function is called with the message and then receives anwifi_cb() M2M_WIFI_REQ_DHCP_CONF
IP address.
static void wifi_cb(uint8_t u8MsgType, void *pvMsg)
{
case M2M_WIFI_REQ_DHCP_CONF:
{
uint8_t *pu8IPAddress = (uint8_t *)pvMsg;
printf("Wi-Fi connected\r\n");
printf("Wi-Fi IP is %u.%u.%u.%u\r\n",
pu8IPAddress[0], pu8IPAddress[1], pu8IPAddress[2], pu8IPAddress[3]);
2. Build the program and download it into the board.
3. Start the application.
3.1.10.2 Android App Connection Process
1. Install in your Android device. You can also build the Android application source and install it.provision_ap.apk
2. Connect your Android device to the ATWINC15x0.
AN5305
Basic Operation Code
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 19
Figure 3-13. ATWINC1500 AP Connection
3. Launch the Android application to configure AP, press the Connect button, and the SSID button will then be
available.
AN5305
Basic Operation Code
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 20
Figure 3-14. Connect to TCP Server and Enter Credentials
4. Input the connection information, and then press the Apply button.
Figure 3-15. Entering AP Credentials
5. If configured correctly, the ATWINC15x0 will connect to the specified AP.
AN5305
Basic Operation Code
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 21
3.1.10.3 AP Provision Mode Demo Console Log
The application must be programmed and running. The following information is displayed on the terminal window.
-- WINC1500 AP provision example --
-- XXXXX_XPLAINED_PRO --
-- Compiled: xxx x xxxx xx:xx:xx --
(APP)(INFO)Chip ID 1503a0
(APP)(INFO)Firmware ver : xx.x.x Svnrev xxxxx
(APP)(INFO)Firmware Build xxx x xxxx Time xx:xx:xx
(APP)(INFO)Firmware Min driver ver : xx.x.x
(APP)(INFO)Driver ver: xx.x.x
(APP)(INFO)Driver built at xxx x xxxx xx:xx:xx
AP Provision mode started.
On the android device, connect to WINC1500_PROVISION_AP then run setting app.
(APP)(INFO)Socket 0 session ID = 1
socket_cb: Ready to listen.
Wi-Fi connected. IP is xxx.xxx.xxx.xxx
socket_cb: Client socket is created.
Disable to AP
Connecting to XXXXXX.
wifi_cb: DISCONNECTED
wifi_cb: CONNECTED
Wi-Fi connected. IP is xxx.xxx.xxx.xxx
Note:  Refer to the application note for more details.AP Provision Mode
3.1.11 Connection to WPS Security
This example demonstrates how to connect the ATWINC15x0 Wi-Fi device to an AP with WPS Security with the SAM
D21 Xplained Pro board as the host MCU.
Note:  This example application is not available in ASF for ATWINC3400.
It is based on the following hardware:
The SAM D21 Xplained Pro
The ATWINC15x0 on the EXT1
Figure 3-16. Demo Setup
3.1.11.1 Execution
main.c - Initialize the ATWINC15x0 and connect to the AP using WPS.
1. Code summary:
Case 1: Push Button Method
To test the WPS button method, configure the WPS push button feature in as below and usemain.h
case 1 in the function.main()
/** WPS Push Button Feature */
#define MAIN_WPS_PUSH_BUTTON_FEATURE true
/* Device name must be set before enabling WPS mode. */
m2m_wifi_set_device_name((uint8 *)devName, strlen(devName));
if (MAIN_WPS_PUSH_BUTTON_FEATURE) {
/* case 1 WPS Push Button method. */
if (!gbPressButton){
btn_init();
}
}
AN5305
Basic Operation Code
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 22
When pressing the SW0 button on the SAMD21, it will trigger WPS in the function.btn_press()
/* Connect to defined AP. */
m2m_wifi_connect((char *)MAIN_WLAN_SSID, sizeof(MAIN_WLAN_SSID),
MAIN_WLAN_AUTH, (void *)MAIN_WLAN_PSK, M2M_WIFI_CH_ALL);
The will receive the message and it can connect to the AP with thewifi_cb() M2M_WIFI_REQ_WPS
given information.
static void wifi_cb(uint8_t u8MsgType, void *pvMsg)
{
case M2M_WIFI_REQ_WPS:
{
tstrM2MWPSInfo *pstrWPS = (tstrM2MWPSInfo *)pvMsg;
printf("Wi-Fi request WPS\r\n");
printf("SSID : %s, authtyp : %d pw : %s\n", pstrWPS->au8SSID, pstrWPS-
>u8AuthType, pstrWPS->au8PSK);
if (pstrWPS->u8AuthType == 0) {
printf("WPS is not enabled OR Timedout\r\n");
m2m_wifi_request_scan(M2M_WIFI_CH_ALL);
/* WPS is not enabled by firmware OR WPS monitor timeout.*/
} else{
printf("Request Wi-Fi connect\r\n");
m2m_wifi_connect((char *)pstrWPS->au8SSID, (uint8)m2m_strlen(pstrWPS-
>au8SSID),
pstrWPS->u8AuthType, pstrWPS->au8PSK, pstrWPS->u8Ch);
}
Case 2: PIN Method
To test the WPS PIN method, configure the WPS PIN number and WPS push button feature in main.h
as below and use case 2 in the function.main()
/** WPS PIN number */
#define MAIN_WPS_PIN_NUMBER "12345670"
/** WPS Push Button Feature */
#define MAIN_WPS_PUSH_BUTTON_FEATURE false
/* Device name must be set before enabling WPS mode. */
m2m_wifi_set_device_name((uint8 *)devName, strlen(devName));
if (!MAIN_WPS_PUSH_BUTTON_FEATURE) {
/* case 2 WPS PIN method */
m2m_wifi_wps(WPS_PIN_TRIGGER, (const char *)MAIN_WPS_PIN_NUMBER);
}
When pressing the SW0 button on the SAMD21, it will trigger WPS in the function.btn_press()
/* Connect to defined AP. */
m2m_wifi_connect((char *)MAIN_WLAN_SSID, sizeof(MAIN_WLAN_SSID),
MAIN_WLAN_AUTH, (void *)MAIN_WLAN_PSK, M2M_WIFI_CH_ALL);
The will receive the message and it can connect to the AP with thewifi_cb() M2M_WIFI_REQ_WPS
given information.
static void wifi_cb(uint8_t u8MsgType, void *pvMsg)
{
case M2M_WIFI_REQ_WPS:
{
tstrM2MWPSInfo *pstrWPS = (tstrM2MWPSInfo *)pvMsg;
printf("Wi-Fi request WPS\r\n");
printf("SSID : %s, authtyp : %d pw : %s\n", pstrWPS->au8SSID, pstrWPS-
>u8AuthType, pstrWPS->au8PSK);
if (pstrWPS->u8AuthType == 0) {
printf("WPS is not enabled OR Timedout\r\n");
m2m_wifi_request_scan(M2M_WIFI_CH_ALL);
/* WPS is not enabled by firmware OR WPS monitor timeout.*/
} else{
printf("Request Wi-Fi connect\r\n");
m2m_wifi_connect((char *)pstrWPS->au8SSID, (uint8)m2m_strlen(pstrWPS-
>au8SSID),
pstrWPS->u8AuthType, pstrWPS->au8PSK, pstrWPS->u8Ch);
}
2. Prepare an AP that supports Wi-Fi Protected Setup (WPS).
AN5305
Basic Operation Code
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 23
3. Press the WPS button on the AP when using the WPS button method or enter the WPS PIN number in the AP
setup menu and start the AP. (For more information, refer to the AP product documentation.)
4. Run the application. Press the SW0 button on the SAM D21 when using the WPS button method. The
ATWINC15x0 will be connected to the AP automatically without security information.
5. Build the program and download it into the board.
6. Start the application.
3.1.11.2 WPS Mode Demo Console Log
Note:  In the WPS button method, the following information will be displayed on the terminal window.
-- WINC1500 security connection with Wi-Fi Protected Setup(WPS) example --
-- XXXXX_XPLAINED_PRO --
-- Compiled: xxx x xxxx xx:xx:xx --
(APP)(INFO)Chip ID 1503a0
(APP)(INFO)Firmware ver : xx.x.x Svnrev xxxxx
(APP)(INFO)Firmware Build xxx x xxxx Time xx:xx:xx
(APP)(INFO)Firmware Min driver ver : xx.x.x
(APP)(INFO)Driver ver: xx.x.x
(APP)(INFO)Driver built at xxx x xxxx xx:xx:xx
SW0 button pressed
Device is connecting using WPS Push Button option
Wi-Fi request WPS
SSID : xxxxxx, AuthType : x, PW : xxxxxxxx
Request Wi-Fi connect
Wi-Fi connected
Wi-Fi IP is xxx.xxx.xxx.xxx
Note:  In the WPS PIN method, the following information will be displayed on the terminal window.
-- WINC1500 security connection with Wi-Fi Protected Setup(WPS) example --
-- XXXXX_XPLAINED_PRO --
-- Compiled: xxx x xxxx xx:xx:xx --
(APP)(INFO)Chip ID 1503a0
(APP)(INFO)Firmware ver : xx.x.x Svnrev xxxxx
(APP)(INFO)Firmware Build xxx x xxxx Time xx:xx:xx
(APP)(INFO)Firmware Min driver ver : xx.x.x
(APP)(INFO)Driver ver: xx.x.x
(APP)(INFO)Driver built at xxx x xxxx xx:xx:xx
Wi-Fi request WPS
SSID : xxxxxx, AuthType : x, PW : xxxxxxxx
Request Wi-Fi connect
Wi-Fi connected
Wi-Fi IP is xxx.xxx.xxx.xxx
3.1.12 Security with WEP/WPA
This example demonstrates how to connect the ATWINC15x0 Wi-Fi device to an AP with WEP or WPA security using
the SAM D21 Xplained Pro board as the host MCU.
Note:  This example application is not available in ASF for ATWINC3400.
It is based on the following hardware:
The SAM D21 Xplained Pro
The ATWINC15x0 on EXT1 header
Figure 3-17. Demo Setup
3.1.12.1 Execution
main.c - Initialize the ATWINC15x0 and connect to the AP using WPS.
1. Code summary:
Case 1: WEP Security Method
AN5305
Basic Operation Code
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 24
To test WEP security, modify , andMAIN_WLAN_DEVICE_NAME MAIN_WLAN_WEP_KEY_INDEX
MAIN_WLAN_WEP_KEY_40 MAIN_WLAN_WEP_KEY_104 main.h or in .
/** security information for Wi-Fi connection */
#define MAIN_WLAN_DEVICE_NAME "DEMO_AP" /**< Destination SSID */
#define MAIN_WLAN_WEP_KEY_INDEX 1 /**< WEP key index */
/**< 64 bit WEP key. In case of WEP64, 10 hexadecimal (base 16) characters (0-9 and
A-F) ) */
#define MAIN_WLAN_WEP_KEY_40 "1234567890"
/**< 128 bit WEP key. In case of WEP128, 26 hexadecimal (base 16) characters (0-9
and A-F) ) */
#define MAIN_WLAN_WEP_KEY_104 "1234567890abcdef1234567890"
When pressing the SW0 button on the SAM D21, it will trigger WPS in the function.btn_press()
/** Security parameters for 64 bit WEP Encryption @ref m2m_wifi_connect */
tstrM2mWifiWepParams wep64_parameters = { MAIN_WLAN_WEP_KEY_INDEX,
sizeof(MAIN_WLAN_WEP_KEY_40),
MAIN_WLAN_WEP_KEY_40};
/** Security parameters for 128 bit WEP Encryption @ref m2m_wifi_connect */
tstrM2mWifiWepParams wep128_parameters = { MAIN_WLAN_WEP_KEY_INDEX,
sizeof(MAIN_WLAN_WEP_KEY_104),
MAIN_WLAN_WEP_KEY_104};
/* Case 1. Connect to AP with security type WEP. */
m2m_wifi_connect((char *)MAIN_WLAN_DEVICE_NAME, strlen((char
*)MAIN_WLAN_DEVICE_NAME),
M2M_WIFI_SEC_WEP, &wep64_parameters, M2M_WIFI_CH_ALL);
Case 2: WPA-PSK Security Method
To test WPA security, use case 2 in the function and modify in .main() MAIN_WLAN_PSK main.h
#define MAIN_WLAN_PSK "12345678" /**< Password for Destination SSID */
Connect to the AP with the given information.
/* Case 2. Connect to AP with security type WPA. */
m2m_wifi_connect((char *)MAIN_WLAN_DEVICE_NAME, strlen((char
*)MAIN_WLAN_DEVICE_NAME),
M2M_WIFI_SEC_WPA_PSK, (char *)MAIN_WLAN_PSK, M2M_WIFI_CH_ALL);
2. Prepare an AP that supports WEP and WPA/WPA2 Security and configure its Wi-Fi Security. For more
information, refer to the AP manufacturer's manual.
3. Run the application. If the device connected successfully, the IP address assigned by DHCP will be displayed
on the terminal program.
3.1.12.2 WEP/WPA Security Mode Demo Console Log
The application must be programmed and running. The following information is displayed on the terminal window.
-- WINC1500 security connection with WEP,WPA security example --
-- XXXXX_XPLAINED_PRO --
-- Compiled: xxx x xxxx xx:xx:xx --
(APP)(INFO)Chip ID 1503a0
(APP)(INFO)Firmware ver : xx.x.x Svnrev xxxxx
(APP)(INFO)Firmware Build xxx x xxxx Time xx:xx:xx
(APP)(INFO)Firmware Min driver ver : xx.x.x
(APP)(INFO)Driver ver: xx.x.x
(APP)(INFO)Driver built at xxx x xxxx xx:xx:xx
Connecting to XXXXXX.
Wi-Fi connected
Wi-Fi IP is xxx.xxx.xxx.xxx
3.1.13 Connection to an Enterprise Security Network
This example demonstrates how to connect the ATWINC15x0 Wi-Fi device to an AP with WPA/WPA2 enterprise
security with the SAM D21 Xplained board as the host MCU.
Note:  This example application is not available in ASF for ATWINC3400.
It is based on the following hardware:
AN5305
Basic Operation Code
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 25
The SAM D21 Xplained Pro
The ATWINC15x0 on the EXT1 header
Figure 3-18. Enterprise Mode Demo Setup
3.1.13.1 Execution
main.c - Initialize the ATWINC15x0 and connect to the AP with WPA/WPA2 enterprise security.
1. Code summary:
Modify , to hold the appropriate usernameMAIN_WLAN_802_1X_USR_NAME MAIN_WLAN_802_1X_PWD
and password, respectively. Modify to hold the desired wireless networkMAIN_WLAN_DEVICE_NAME
name.
/** security information for Wi-Fi connection */
#define MAIN_WLAN_DEVICE_NAME "DEMO_AP" /**< Destination SSID */
#define MAIN_WLAN_802_1X_USR_NAME "atmeluser" /**< RADIUS user account name */
#define MAIN_WLAN_802_1X_PWD "12345678" /**< RADIUS user account password
*/
Connect to the AP with the given information.
/* Connect to the enterprise network. */
m2m_wifi_connect((char *)MAIN_WLAN_DEVICE_NAME, sizeof(MAIN_WLAN_DEVICE_NAME),
M2M_WIFI_SEC_802_1X, (char *)&gstrCred1x, M2M_WIFI_CH_ALL);
The function is called with the message, where anwifi_cb() M2M_WIFI_RESP_CON_STATE_CHANGED
appropriate action can be executed as a response. The new Wi-Fi state is passed onto the callback as
part of the message.
static void wifi_cb(uint8_t u8MsgType, void *pvMsg)
{
switch (u8MsgType) {
case M2M_WIFI_RESP_CON_STATE_CHANGED:
{
tstrM2mWifiStateChanged *pstrWifiState = (tstrM2mWifiStateChanged *)pvMsg;
if (pstrWifiState->u8CurrState == M2M_WIFI_CONNECTED) {
/* Take action on connection successful */
Once the DHCP negotiation completes, the function is called with thewifi_cb()
M2M_WIFI_REQ_DHCP_CONF message.
static void wifi_cb(uint8_t u8MsgType, void *pvMsg)
{
case M2M_WIFI_REQ_DHCP_CONF:
{
uint8_t *pu8IPAddress = (uint8_t *)pvMsg;
printf("Wi-Fi connected\r\n");
printf("Wi-Fi IP is %u.%u.%u.%u\r\n",
pu8IPAddress[0], pu8IPAddress[1], pu8IPAddress[2], pu8IPAddress[3]);
2. Prepare an AP that supports WPA/WPA2 enterprise security. Before configuring the RADIUS server settings in
the AP, you will need to know certain parameters. Ask your network administrator for this information and
configure it in the AP.
– Username
– Password
Name of wireless network
Root certificate file
3. Download the root certificate generated from the previous step to the ATWINC15x0/ATWINC3400 using the
RootCertDownload.bat file.
4. Build and run the application. If the device has connected successfully, the IP address assigned by DHCP will
be displayed on the terminal program.
Note:  To connect to the enterprise security network, the root certificate must be installed.
AN5305
Basic Operation Code
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 26
Figure 3-19. Supported 802.1x EAP (Extensible Authentication Protocol)
3.1.13.2 Enterprise Security Network Mode Demo Console Log
The application must be programmed and running. The following information is displayed on the terminal window.
-- WINC1500 security connection with WPA/WPA2 enterprise example --
-- XXXXX_XPLAINED_PRO --
-- Compiled: xxx x xxxx xx:xx:xx --
(APP)(INFO)Chip ID 1503a0
(APP)(INFO)Firmware ver : xx.x.x Svnrev xxxxx
(APP)(INFO)Firmware Build xxx x xxxx Time xx:xx:xx
(APP)(INFO)Firmware Min driver ver : xx.x.x
(APP)(INFO)Driver ver: xx.x.x
(APP)(INFO)Driver built at xxx x xxxx xx:xx:xx
Wi-Fi connected
Wi-Fi IP is xxx.xxx.xxx.xxx
Connection successfully completed.
AN5305
Basic Operation Code
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 27
4. Protocol Examples
This chapter describes protocol examples in detail. These protocol examples can also be used for IoT applications.
UDP protocol example:
– Client
– Server
TCP protocol example:
– Client
– Server
NTP time client – retrieves the network time for the IoT application
Send email – send an email from an SMTP server
4.1 UDP Client
This example demonstrates the use of the ATWINC15x0/ATWINC3400 with the SAM D21 Xplained Pro board to test
the UDP socket.
It is based on the following hardware:
The SAM D21 Xplained Pro
The ATWINC15x0/ATWINC3400 on the EXT1 header
Figure 4-1. UDP Client Demo Setup
4.1.1 Execution
main.c - Initialize the Wi-Fi module and test with the UDP server.
1. Code summary.
Configure the network parameters in .main.h
/** Wi-Fi Settings */
#define MAIN_WLAN_SSID "DEMO_AP" /**< Destination SSID */
#define MAIN_WLAN_AUTH M2M_WIFI_SEC_WPA_PSK /**< Security manner
*/
#define MAIN_WLAN_PSK "12345678" /**< Password for Destination
SSID */
#define MAIN_WIFI_M2M_PRODUCT_NAME "NMCTemp"
#define MAIN_WIFI_M2M_SERVER_IP 0xFFFFFFFF /* 255.255.255.255 */
#define MAIN_WIFI_M2M_SERVER_PORT (6666)
#define MAIN_WIFI_M2M_REPORT_INTERVAL (1000)
Initialize the socket module.
/* Initialize socket address structure. */
addr.sin_family = AF_INET;
addr.sin_port = _htons(MAIN_WIFI_M2M_SERVER_PORT);
addr.sin_addr.s_addr = _htonl(MAIN_WIFI_M2M_SERVER_IP);
/* Initialize socket module */
socketInit();
Connect to the AP.
/* Connect to router. */
m2m_wifi_connect((char *)MAIN_WLAN_SSID, sizeof(MAIN_WLAN_SSID),
MAIN_WLAN_AUTH, (char *)MAIN_WLAN_PSK, M2M_WIFI_CH_ALL);
After the device is connected to the AP, create a TX socket in the main loop.
/* Create socket for Tx UDP */
if (tx_socket < 0) {
AN5305
Protocol Examples
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 28
if ((tx_socket = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
printf("main : failed to create TX UDP client socket error!\r\n");
continue;
}
}
Send data from the UDP client TX socket to the UDP server RX socket.
ret = sendto(tx_socket, &msg_wifi_product_main, sizeof(t_msg_wifi_product_main),
0, (struct sockaddr *)&addr, sizeof(addr));
2. Build the program and download it into the board.
3. Start the application.
4.1.2 UDP Client Demo Console Log
The application must be programmed and running. The following information is displayed on the terminal window.
-- WINC1500 UDP Client example --
-- XXXXX_XPLAINED_PRO --
-- Compiled: xxx x xxxx xx:xx:xx --
(APP)(INFO)Chip ID 1503a0
(APP)(INFO)Firmware ver : xx.x.x Svnrev xxxxx
(APP)(INFO)Firmware Build xxx x xxxx Time xx:xx:xx
(APP)(INFO)Firmware Min driver ver : xx.x.x
(APP)(INFO)Driver ver: xx.x.x
(APP)(INFO)Driver built at xxx x xxxx xx:xx:xx
Connecting to DEMO_AP.
wifi_cb: M2M_WIFI_RESP_CON_STATE_CHANGED : CONNECTED
wifi_cb: M2M_WIFI_REQ_DHCP_CONF : IP is xxx.xxx.xxx.xxx
main: message sent
. . .
main: message sent
UDP client test Complete!
4.2 UDP Server
This example demonstrates the use of the ATWINC15x0/ATWINC3400 with the SAM D21 Xplained Pro board to test
the UDP socket.
It is based on the following hardware:
The SAM D21 Xplained Pro
The ATWINC15x0/ATWINC3400 on the EXT1 header
Figure 4-2. UDP Server Demo Setup
4.2.1 Execution
main.c - Initialize the Wi-Fi module and test with the UDP client.
1. Code summary.
Configure the network parameters in .main.h
/** Wi-Fi Settings */
#define MAIN_WLAN_SSID "DEMO_AP" /**< Destination SSID */
#define MAIN_WLAN_AUTH M2M_WIFI_SEC_WPA_PSK /**< Security manner
*/
#define MAIN_WLAN_PSK "12345678" /**< Password for Destination
SSID */
#define MAIN_WIFI_M2M_PRODUCT_NAME "NMCTemp"
#define MAIN_WIFI_M2M_SERVER_IP 0xFFFFFFFF /* 255.255.255.255 */
#define MAIN_WIFI_M2M_SERVER_PORT (6666)
#define MAIN_WIFI_M2M_REPORT_INTERVAL (1000)
AN5305
Protocol Examples
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 29
Initialize the socket module and create the UDP server socket.
/* Initialize socket address structure. */
addr.sin_family = AF_INET;
addr.sin_port = _htons(MAIN_WIFI_M2M_SERVER_PORT);
addr.sin_addr.s_addr = _htonl(MAIN_WIFI_M2M_SERVER_IP);
/* Initialize socket module */
socketInit();
registerSocketCallback(socket_cb, NULL);
Connect to the AP.
/* Connect to router. */
m2m_wifi_connect((char *)MAIN_WLAN_SSID, sizeof(MAIN_WLAN_SSID),
MAIN_WLAN_AUTH, (char *)MAIN_WLAN_PSK, M2M_WIFI_CH_ALL);
After the device is connected to the AP, create an RX socket and bind it in the main loop.
if (rx_socket < 0) {
if ((rx_socket = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
printf("main : failed to create RX UDP Client socket error!\r\n");
continue;
}
/* Socket bind */
bind(rx_socket, (struct sockaddr *)&addr, sizeof(struct sockaddr_in));
}
In the function, prepare a buffer to receive data.socket_cb()
static void socket_cb(SOCKET sock, uint8_t u8Msg, void *pvMsg)
{
if (u8Msg == SOCKET_MSG_BIND) {
recvfrom(sock, gau8SocketTestBuffer, MAIN_WIFI_M2M_BUFFER_SIZE, 0);
You can receive data in the function with the message when asocket_cb() SOCKET_MSG_RECVFROM
client device sends data. (Use “UDP Client” example.)
static void socket_cb(SOCKET sock, uint8_t u8Msg, void *pvMsg)
{
...
} else if (u8Msg == SOCKET_MSG_RECVFROM) {
tstrSocketRecvMsg *pstrRx = (tstrSocketRecvMsg *)pvMsg;
if (pstrRx->pu8Buffer && pstrRx->s16BufferSize) {
printf("socket_cb: received app message.(%u)\r\n", packetCnt);
/* Prepare next buffer reception. */
recvfrom(sock, gau8SocketTestBuffer, MAIN_WIFI_M2M_BUFFER_SIZE, 0);
2. Build the program and download it into the board.
3. Start the application.
4.2.2 UDP Server Demo Console Log
The application must be programmed and running. The following information is displayed on the terminal window.
-- WINC1500 UDP Server example --
-- XXXXX_XPLAINED_PRO --
-- Compiled: xxx x xxxx xx:xx:xx --
(APP)(INFO)Chip ID 1503a0
(APP)(INFO)Firmware ver : xx.x.x Svnrev xxxxx
(APP)(INFO)Firmware Build xxx x xxxx Time xx:xx:xx
(APP)(INFO)Firmware Min driver ver : xx.x.x
(APP)(INFO)Driver ver: xx.x.x
(APP)(INFO)Driver built at xxx x xxxx xx:xx:xx
Connecting to DEMO_AP.
wifi_cb: M2M_WIFI_RESP_CON_STATE_CHANGED : CONNECTED
wifi_cb: M2M_WIFI_REQ_DHCP_CONF : IP is xxx.xxx.xxx.xxx
socket_cb: bind success!
socket_cb: received app message.(1)
. . .
socket_cb: received app message.(10)
UDP server test Complete!
AN5305
Protocol Examples
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 30
4.3 TCP Client
This example demonstrates the use of the ATWINC15x0/ATWINC3400 with the SAM D21 Xplained Pro board to test
the TCP client.
It is based on the following hardware:
The SAM D21 Xplained Pro
The ATWINC15x0/ATWINC3400 on the EXT1 header
Figure 4-3. TCP Client Demo Setup
4.3.1 Execution
main.c – Initialize the Wi-Fi module and test the TCP client.
1. Code summary:
Configure the network parameters in .main.h
/** Wi-Fi Settings */
#define MAIN_WLAN_SSID "DEMO_AP" /**< Destination SSID */
#define MAIN_WLAN_AUTH M2M_WIFI_SEC_WPA_PSK /**< Security manner
*/
#define MAIN_WLAN_PSK "12345678" /**< Password for Destination
SSID */
#define MAIN_WIFI_M2M_PRODUCT_NAME "NMCTemp"
#define MAIN_WIFI_M2M_SERVER_IP 0xc0a80164 //0xFFFFFFFF /* 255.255.255.255
*/
#define MAIN_WIFI_M2M_SERVER_PORT (6666)
#define MAIN_WIFI_M2M_REPORT_INTERVAL (1000)
Initialize the socket module and register the socket callback function.
/* Initialize socket address structure. */
addr.sin_family = AF_INET;
addr.sin_port = _htons(MAIN_WIFI_M2M_SERVER_PORT);
addr.sin_addr.s_addr = _htonl(MAIN_WIFI_M2M_SERVER_IP);
/* Initialize socket module */
socketInit();
registerSocketCallback(socket_cb, NULL);
Note:  The Server IP address in this example is 0xc0a80164, which translates to 192.168.1.100.
Connect to the AP.
/* Connect to router. */
m2m_wifi_connect((char *)MAIN_WLAN_SSID, sizeof(MAIN_WLAN_SSID),
MAIN_WLAN_AUTH, (char *)MAIN_WLAN_PSK, M2M_WIFI_CH_ALL);
After the device is connected to the AP, create a TCP client socket and connect to the server in the main
loop.
/* Open client socket. */
if (tcp_client_socket < 0) {
if ((tcp_client_socket = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
printf("main: failed to create TCP client socket error!\r\n");
continue;
}
/* Connect server */
ret = connect(tcp_client_socket, (struct sockaddr *)&addr, sizeof(struct
sockaddr_in));
AN5305
Protocol Examples
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 31
Requests to connect, send and recv can be executed sequentially in the function. Also,socket_cb()
while using the send operation, the maximum data that can be transmitted using socket API send()
is 1400 bytes.
static void socket_cb(SOCKET sock, uint8_t u8Msg, void *pvMsg)
{
...
case SOCKET_MSG_CONNECT:
{
if (pstrConnect && pstrConnect->s8Error >= 0)
send(tcp_client_socket, &msg_wifi_product, ...);
}
...
case SOCKET_MSG_SEND:
{
recv(tcp_client_socket, gau8SocketTestBuffer, ...);
}
...
case SOCKET_MSG_RECV:
{
tstrSocketRecvMsg *pstrRecv = (tstrSocketRecvMsg *)pvMsg;
if (pstrRecv && pstrRecv->s16BufferSize > 0) {
printf("socket_cb: recv success!\r\n");
printf("TCP Client Test Complete!\r\n");
}
}
2. Build the program and download it into the board.
3. Start the application.
4.3.2 TCP Client Demo Console Log
The application must be programmed and running. The following information is displayed on the terminal window.
-- WINC1500 TCP client example --
-- XXXXX_XPLAINED_PRO --
-- Compiled: xxx x xxxx xx:xx:xx --
(APP)(INFO)Chip ID 1503a0
(APP)(INFO)Firmware ver : xx.x.x Svnrev xxxxx
(APP)(INFO)Firmware Build xxx x xxxx Time xx:xx:xx
(APP)(INFO)Firmware Min driver ver : xx.x.x
(APP)(INFO)Driver ver: xx.x.x
(APP)(INFO)Driver built at xxx x xxxx xx:xx:xx
Connecting to DEMO_AP.
wifi_cb: M2M_WIFI_RESP_CON_STATE_CHANGED : CONNECTED
wifi_cb: M2M_WIFI_REQ_DHCP_CONF : IP is xxx.xxx.xxx.xxx
socket_cb: connect success!
socket_cb: send success!
socket_cb: recv success!
TCP Client Test Complete!
4.4 TCP Server
This example demonstrates the use of the ATWINC15x0/ATWINC3400 with the SAM D21 Xplained Pro board to test
the TCP server.
It is based on the following hardware:
The SAM D21 Xplained Pro
The ATWINC15x0/ATWINC3400 on the EXT1 header
Figure 4-4. TCP Server Demo Setup
AN5305
Protocol Examples
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 32
4.4.1 Execution
main.c – Initialize the Wi-Fi module and test the TCP server.
1. Code summary.
Configure the network parameters in .main.h
/** Wi-Fi Settings */
#define MAIN_WLAN_SSID "DEMO_AP" /**< Destination SSID */
#define MAIN_WLAN_AUTH M2M_WIFI_SEC_WPA_PSK /**< Security manner
*/
#define MAIN_WLAN_PSK "12345678" /**< Password for Destination
SSID */
#define MAIN_WIFI_M2M_PRODUCT_NAME "NMCTemp"
#define MAIN_WIFI_M2M_SERVER_IP 0xFFFFFFFF /* 255.255.255.255 */
#define MAIN_WIFI_M2M_SERVER_PORT (6666)
#define MAIN_WIFI_M2M_REPORT_INTERVAL (1000)
Initialize the socket module and register the socket callback function.
/* Initialize socket address structure. */
addr.sin_family = AF_INET;
addr.sin_port = _htons(MAIN_WIFI_M2M_SERVER_PORT);
addr.sin_addr.s_addr = _htonl(MAIN_WIFI_M2M_SERVER_IP);
/* Initialize socket module */
socketInit();
registerSocketCallback(socket_cb, NULL);
Connect to the AP.
/* Connect to router. */
m2m_wifi_connect((char *)MAIN_WLAN_SSID, sizeof(MAIN_WLAN_SSID),
MAIN_WLAN_AUTH, (char *)MAIN_WLAN_PSK, M2M_WIFI_CH_ALL);
After the device is connected to the AP, create a TCP server socket and bind it in the main loop.
if (tcp_server_socket < 0) {
/* Open TCP server socket */
if ((tcp_server_socket = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
printf("main: failed to create TCP server socket error!\r\n");
continue;
}
/* Bind service*/
bind(tcp_server_socket, (struct sockaddr *)&addr, sizeof(struct sockaddr_in));
}
Five operations (bind/listen/accept/recv/send) must be executed sequentially in the socket_cb()
function.
static void socket_cb(SOCKET sock, uint8_t u8Msg, void *pvMsg)
{
...
case SOCKET_MSG_BIND:
{
tstrSocketBindMsg *pstrBind = (tstrSocketBindMsg *)pvMsg;
if (pstrBind && pstrBind->status == 0)
listen(tcp_server_socket, 0);
}
case SOCKET_MSG_LISTEN:
{
tstrSocketListenMsg *pstrListen = (tstrSocketListenMsg *)pvMsg;
if (pstrListen && pstrListen->status == 0)
accept(tcp_server_socket, NULL, NULL);
}
case SOCKET_MSG_ACCEPT:
{
tstrSocketAcceptMsg *pstrAccept = (tstrSocketAcceptMsg *)pvMsg;
if (pstrAccept) {
tcp_client_socket = pstrAccept->sock;
recv(tcp_client_socket, gau8SocketTestBuffer, ..., 0);
}
}
case SOCKET_MSG_RECV:
{
tstrSocketRecvMsg *pstrRecv = (tstrSocketRecvMsg *)pvMsg;
if (pstrRecv && pstrRecv->s16BufferSize > 0)
AN5305
Protocol Examples
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 33
Figure 4-5. NTP Time Client Demo Setup
4.5.1 Execution
main.c - Initialize the socket and get the time from the NTP server.
1. Code summary.
Configure the network parameters in .main.h
/** Wi-Fi Settings */
#define MAIN_WLAN_SSID "DEMO_AP" /**< Destination SSID */
#define MAIN_WLAN_AUTH M2M_WIFI_SEC_WPA_PSK /**< Security
manner */
#define MAIN_WLAN_PSK "12345678" /**< Password for
Destination SSID */
Initialize the socket module and register the socket callback function.
/* Initialize Socket module */
socketInit();
/* Register socket handler, resolve handler */
registerSocketCallback(socket_cb, resolve_cb);
Connect to the AP.
/* Connect to router. */
m2m_wifi_connect((char *)MAIN_WLAN_SSID, sizeof(MAIN_WLAN_SSID),
MAIN_WLAN_AUTH, (char *)MAIN_WLAN_PSK, M2M_WIFI_CH_ALL);
After the device is connected to the AP, create a UDP socket and bind it in the main loop.
if (udp_socket < 0) {
udp_socket = socket(AF_INET, SOCK_DGRAM, 0);
if (udp_socket < 0) {
printf("main: UDP Client Socket Creation Failed.\r\n");
continue;
}
/* Initialize default socket address structure. */
addr_in.sin_family = AF_INET;
addr_in.sin_addr.s_addr = _htonl(MAIN_DEFAULT_ADDRESS);
addr_in.sin_port = _htons(MAIN_DEFAULT_PORT);
bind(udp_socket, (struct sockaddr *)&addr_in, sizeof(struct sockaddr_in));
Initialize the socket module and send an NTP time query to the NTP server in the resolve_cb()
function
static void resolve_cb(uint8_t *pu8DomainName, uint32_t u32ServerIP)
{
...
if (udp_socket >= 0) {
addr.sin_family = AF_INET;
addr.sin_port = _htons(MAIN_SERVER_PORT_FOR_UDP);
addr.sin_addr.s_addr = u32ServerIP;
ret = sendto(udp_socket, (int8_t *)&cDataBuf, ...);
}
Receive the NTP time from the server and convert it in the function.socket_cb()
static void resolve_cb(uint8_t *pu8DomainName, uint32_t u32ServerIP)
{
...
if (udp_socket >= 0) {
addr.sin_family = AF_INET;
addr.sin_port = _htons(MAIN_SERVER_PORT_FOR_UDP);
addr.sin_addr.s_addr = u32ServerIP;
ret = sendto(udp_socket, (int8_t *)&cDataBuf, ...);
}
AN5305
Protocol Examples
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 35
Parse the time from the received server response.
static void socket_cb(SOCKET sock, uint8_t u8Msg, void *pvMsg)
{
...
case SOCKET_MSG_RECVFROM:
{
/* printf("socket_cb: socket_msg_recvfrom!\r\n"); */
tstrSocketRecvMsg *pstrRx = (tstrSocketRecvMsg *)pvMsg;
if (pstrRx->pu8Buffer && pstrRx->s16BufferSize) {
uint8_t packetBuffer[48];
memcpy(&packetBuffer, pstrRx->pu8Buffer, sizeof(packetBuffer));
...
uint32_t secsSince1900 = packetBuffer[40] << 24 |
packetBuffer[41] << 16 |
packetBuffer[42] << 8 |
packetBuffer[43];
/* Now convert NTP time into everyday time.
* Unix time starts on Jan 1 1970. In seconds, that's 2208988800.
* Subtract seventy years. */
const uint32_t seventyYears = 2208988800UL;
uint32_t epoch = secsSince1900 - seventyYears;
/* Print the hour, minute and second. GMT is the time at Greenwich Meridian.
*/
printf("socket_cb: The GMT time is %lu:%02lu:%02lu\r\n",
(epoch % 86400L) / 3600, /* hour (86400 equals
secs per day) */
(epoch % 3600) / 60, /* minute (3600 equals
secs per minute) */
epoch % 60); /* second */
2. Build the program and download it into the board.
3. Start the application.
4.5.2 NTP Time Client Demo Console Log
The application must be programmed and running. The following information is displayed on the terminal window.
-- WINC1500 time client example --
-- XXXXX_XPLAINED_PRO --
-- Compiled: xxx x xxxx xx:xx:xx --
(APP)(INFO)Chip ID 1503a0
(APP)(INFO)Firmware ver : xx.x.x Svnrev xxxxx
(APP)(INFO)Firmware Build xxx x xxxx Time xx:xx:xx
(APP)(INFO)Firmware Min driver ver : xx.x.x
(APP)(INFO)Driver ver: xx.x.x
(APP)(INFO)Driver built at xxx x xxxx xx:xx:xx
Connecting to DEMO_AP.
wifi_cb: M2M_WIFI_RESP_CON_STATE_CHANGED : CONNECTED
wifi_cb: M2M_WIFI_REQ_DHCP_CONF : IP is xxx.xxx.xxx.xxx
m2m_ip_resolve_handler : DomainName pool.ntp.org
socket_cb: The GMT time is xx:xx:xx
Note:  If the server connection is unstable, this example may not operate normally.
4.6 SMTP Send Email
This example demonstrates the use of the ATWINC15x0/ATWINC3400 with the SAM D21 Xplained Pro board to
send email for an SMTP server.
It is based on the following hardware:
The SAM D21 Xplained Pro
The ATWINC15x0/ATWINC3400 on the EXT1 header
Figure 4-6. SMTP Send Email Demo Setup
AN5305
Protocol Examples
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 36
case SMTP_AUTH_PASSWORD:
...
case SMTP_FROM:
...
case SMTP_RCPT:
...
case SMTP_DATA:
...
case SMTP_MESSAGE_DATAEND:
...
}
}
2. Build the program and download it into the board.
3. Start the application.
Notes: 
To use Gmail, the root certificate must be installed. For more details about downloading the root certificate, refer
to the “Atmel-42417-SAMD21-ATWINC1500-Platform_Getting_Started_Guide” document.
If the server connection is unstable, this example may not operate normally.
Limitations:
1. Email is sent to only one recipient.
2. Only plain text email is supported.
4.6.2 SMTP Demo Console Log
The application must be programmed and running. The following information is displayed on the terminal window.
-- WINC1500 send email example --
-- XXXXX_XPLAINED_PRO --
-- Compiled: xxx x xxxx xx:xx:xx --
(APP)(INFO)Chip ID 1503a0
(APP)(INFO)Firmware ver : xx.x.x Svnrev xxxxx
(APP)(INFO)Firmware Build xxx x xxxx Time xx:xx:xx
(APP)(INFO)Firmware Min driver ver : xx.x.x
(APP)(INFO)Driver ver: xx.x.x
(APP)(INFO)Driver built at xxx x xxxx xx:xx:xx
Connecting to DEMO_AP.
wifi_cb: M2M_WIFI_RESP_CON_STATE_CHANGED : CONNECTED
wifi_cb: M2M_WIFI_REQ_DHCP_CONF : IP is xxx.xxx.xxx.xxx
Host IP is xxx.xxx.xxx.xxx
Host Name is smtp.gmail.com
Recipient email address is recipient@gmail.com
main: Email was successfully sent.
AN5305
Protocol Examples
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 38
The WiFi initialization and any other configurations required should be done before the super loop function
for(;;system_sleep()):
/* Initialize WINC1500 Wi-Fi driver with data and status callbacks. */
param.pfAppWifiCb = wifi_cb;
ret = m2m_wifi_init(&param);
if (M2M_SUCCESS != ret) {
DEBUG(DEBUG_CONF_WIFI "m2m_wifi_init call error!(%d)" DEBUG_EOL, ret);
while (1) {
}
}
m2m_wifi_set_sleep_mode(M2M_PS_AUTOMATIC, 1);
/* Initialize socket. */
socketInit();
registerSocketCallback(http_client_socket_event_handler,
http_client_socket_resolve_handler);
/* Connect using stored SSID and Password. */
m2m_wifi_default_connect();
ap_exosite_connection_state = MAIN_CHECKING_AP_INFORMATION;
for(;;system_sleep())
{
/* Handle pending events from network controller. */
ret = m2m_wifi_handle_events(NULL);
The first step is to initialize the Exosite client module by calling function . This functionExosite_example_init()
receives one parameter, which is a function pointer to the callback of the http module. The role of this function is to
initialize the http_module and also initialize a timer_module for it. Add the following code just before the
for(;;system_sleep()) main() inside the function.
/* Initialize Exosite. */
exosite_example_init(main_http_client_callback);
main_http_client_callback() Exosite_example_init() will be registered by and will receive and process
all socket events. This function can be located in the file or in a separate file as shown below:main.c
/** brief Callback to get the Data from socket.*/
static void main_http_client_callback(struct http_client_module *module_list, int type,
union http_client_data *data)
{
Switch(type)
{
case HTTP_CLIENT_CALLBACK_SOCK_CONNECTED: break;
case HTTP_CLIENT_CALLBACK_REQUESTED: break;
case HTTP_CLIENT_CALLBACK_RECV_RESPONSE: break;
case HTTP_CLIENT_CALLBACK_DISCONNECTED: break;
}
}
Register the callback function for the sockets by calling the following function in :main()
/* Initialize socket. */
socketInit();
registerSocketCallback(http_client_socket_event_handler, http_client_socket_resolve_handler);
The above function receives two parameters. The first one is a function pointer to deliver socket messages from the
socket. The other one is a function pointer that is used for resolving DNS. The two parameters are located in
http_client.h.
/**
* \brief Event handler of socket event.
*
* \param[in] sock Socket descriptor.
* \param[in] msg_type Event type.
* \param[in] msg_data Structure of socket event.
*/
void http_client_socket_event_handler(SOCKET sock, uint8_t msg_type, void *msg_data);
/**
* \brief Event handler of gethostbyname.
*
* \param[in] domain_name Domain name.
AN5305
Advanced Examples
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 40
5.2 Growl Notification
This example demonstrates the use of the ATWINC15x0 with the SAM D21 Xplained Pro.
This example transmits a notification from the ATWINC15x0 device (based on a certain trigger) to a public remote
server which in turn sends it to a phone application.
The initiated notification from the ATWINC15x0 device is directed to a certain subscriber on the server. The
supported applications are PROWL (for iPhone notifications) and NMA (for ANDROID notifications).
Note:  This example application is not available in ASF for ATWINC3400.
It is based on the following hardware:
The SAM D21 Xplained Pro
The ATWINC15x0 on the EXT1 header
Figure 5-6. Demo Setup
5.2.1 Execution
main.c - Initialize Growl and send a notification message.
1. Code summary:
Configure the Growl parameters for your account in .main.h
/** Growl Options */
#define PROWL_API_KEY "6ce3b9ff6c29e5c5b8960b28d9e987aec5ed603a"
#define NMA_API_KEY "91787604ed50a6cfc2d3f83d1ee196cbc30a3cb08a7e69a0"
Get the MAC address and set the device name with the MAC address.
m2m_wifi_get_mac_address(gau8MacAddr);
set_dev_name_to_mac((uint8_t *)gacDeviceName, gau8MacAddr);
set_dev_name_to_mac((uint8_t *)gstrM2MAPConfig.au8SSID, gau8MacAddr);
m2m_wifi_set_device_name((uint8_t *)gacDeviceName, ...);
Start Provision mode.
m2m_wifi_start_provision_mode((tstrM2MAPConfig *)&gstrM2MAPConfig,
(char *)gacHttpProvDomainName, 1);
When your mobile device sends the configuration information, the function will be called withwifi_cb()
the message and you can connect to the AP with the givenM2M_WIFI_RESP_PROVISION_INFO
information.
static void wifi_cb(uint8_t u8MsgType, void *pvMsg)
{
case M2M_WIFI_RESP_PROVISION_INFO:
tstrM2MProvisionInfo *pstrProvInfo = (tstrM2MProvisionInfo *)pvMsg;
if (pstrProvInfo->u8Status == M2M_SUCCESS) {
m2m_wifi_connect((char *)pstrProvInfo->au8SSID,
strlen((char *)pstrProvInfo->au8SSID),
pstrProvInfo->u8SecType,
pstrProvInfo->au8Password, M2M_WIFI_CH_ALL);
}
After the device is connected to the AP, initialize the Growl key and execute the message handler.
static void wifi_cb(uint8_t u8MsgType, void *pvMsg)
{
...
case M2M_WIFI_REQ_DHCP_CONF:
{
AN5305
Advanced Examples
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 43
(APP)(INFO)Driver built at xxx x xxxx xx:xx:xx
Provision Mode started.
Connect to [atmelconfig.com] via AP[WINC1500_XX:XX] and fill up the page.
Wi-Fi connected
Wi-Fi IP is xxx.xxx.xxx.xxx
wifi_cb: M2M_WIFI_RESP_PROVISION_INFO.
Wi-Fi connected
Wi-Fi IP is xxx.xxx.xxx.xxx
send Growl message
Growl CB : 20
5.3 HTTP File Downloader
This example demonstrates the use of the ATWINC15x0 with the SAM D21 Xplained Pro board to download the file
in the SD card connected to the IO1 Xplained Pro board.
Note:  This example application is not available in ASF for ATWINC3400.
It is based on the following hardware:
The SAM D21 Xplained Pro
The ATWINC15x0 on the EXT1 header
The IO1 XPRO board on the EXT2 header
Figure 5-8. HTTP File Downloader Demo Setup
5.3.1 Execution
main.c – Initialize the ATWINC15x0 and download the file from the URL.
1. Code summary:
Configure the network parameters in .main.h
/** Wi-Fi Settings */
#define MAIN_WLAN_SSID "DEMO_AP" /**< Destination SSID */
#define MAIN_WLAN_AUTH M2M_WIFI_SEC_WPA_PSK /**< Security manner
*/
#define MAIN_WLAN_PSK "12345678" /**< Password for Destination
SSID */
Configure the HTTP URL file to be downloaded into the SD card.
/** Content URI for download. */
#define MAIN_HTTP_FILE_URL "http://www.atmel.com/Images/Atmel-42502-
SmartConnect-WINC1500-MR210PB_Datasheet.pdf"
Configure the HTTP client.
configure_http_client();
Get the default config data and specify the user configuration. The andhttp_client_init()
http_client_register_callback() functions execute sequentially.
static void configure_http_client(void)
{
...
http_client_get_config_defaults(&httpc_conf);
httpc_conf.recv_buffer_size = MAIN_BUFFER_MAX_SIZE;
httpc_conf.timer_inst = &swt_module_inst;
ret = http_client_init(&http_client_module_inst, &httpc_conf);
if (ret < 0) {
while (1) {
} /* Loop forever. */
}
AN5305
Advanced Examples
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 45
Notes: 
If the disconnect reason is equal to -ECONNRESET(-104), it means the server disconnected your connection
due to the keep alive timeout. This operation is normal.
If the server connection is unstable, this example may not operate normally.
5.3.2 HTTP File Downloader Demo Console Log
The application must be programmed and running. The following information is displayed on the terminal window.
-- WINC1500 HTTP file downloader example --
-- XXXXX_XPLAINED_PRO --
-- Compiled: xxx x xxxx xx:xx:xx --
(APP)(INFO)Chip ID 1503a0
(APP)(INFO)Firmware ver : xx.x.x Svnrev xxxxx
(APP)(INFO)Firmware Build xxx x xxxx Time xx:xx:xx
(APP)(INFO)Firmware Min driver ver : xx.x.x
(APP)(INFO)Driver ver: xx.x.x
(APP)(INFO)Driver built at xxx x xxxx xx:xx:xx
This example requires the AP to have internet access.
init_storage: please plug an SD/MMC card in slot...
init_storage: mounting SD card...
init_storage: SD card mount OK.
main: connecting to WiFi AP DEMO_AP...
wifi_cb: M2M_WIFI_CONNECTED
wifi_cb: IP address is xxx.xxx.xxx.xxx
start_download: sending HTTP request...
resolve_cb: www.microchip.com IP address is xxx.xxx.xxx.xxx
http_client_callback: HTTP client socket connected.
http_client_callback: request completed.
http_client_callback: received response 200 data size 1147097
store_file_packet: creating file [0:WINC1500-MR210PB_Datasheet.pdf]
store_file_packet: received[xxx], file size[1147097]
...
store_file_packet: received[1147097], file size[1147097]
store_file_packet: file downloaded successfully.
main: please unplug the SD/MMC card.
main: done.
5.4 IoT Temperature and Qtouch Sensor Demo
The purpose of this demo is to connect various kinds of sensors to your home network using a Wi-Fi access point
and remotely access the sensors' information via an Android device.
A sensor typically implements a basic discovery system where UDP broadcast frames are sent each second to
advertise the sensor presence on the network. The Android app can then detect such packets and communicate with
the sensor to receive the sensor data stream.
These are implemented in a similar way and use a similar communication protocol with the Android application. Both
can work at the same time and report sensor information to the same “Atmel IoT Sensor” Android application.
Note:  This example application is not available in ASF for ATWINC3400.
The Temperature Sensor Demo is based on the following hardware:
The SAM D21 Xplained Pro
The ATWINC15x0 on EXT1 header
The IO1 XPRO board on the EXT2
The QT1 XPRO board on the EXT1 and EXT2
The Qtouch Sensor Demo is based on the following hardware:
The SAM D21 Xplained Pro
The ATWINC15x0/ATWINC3400 on the EXT3 header
The QT1 XPRO board on the EXT1 and EXT2
AN5305
Advanced Examples
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 47
{
...
case MQTT_CALLBACK_SOCK_CONNECTED:
{
mqtt_connect_broker(module_inst, 1, NULL, NULL, mqtt_user, NULL, NULL, 0, 0, 0);
The MQTT callback will receive the message and then register aMQTT_CALLBACK_CONNECTED
subscription for a specific topic. Each subscription has a separate callback function which is registered
along with the subscribe call.
static void mqtt_callback(struct mqtt_module *module_inst, int type, union mqtt_data
*data)
{
...
case MQTT_CALLBACK_CONNECTED:
{
mqtt_subscribe(module_inst, MAIN_CHAT_TOPIC "#", 0, SubscribeHandler)
If another device sends a message with this topic, then the corresponding subscribe callback is called.
void SubscribeHandler(MessageData *msgData)
{
...
}
If the user inputs a string via a terminal, the MQTT will publish the following message:
static void check_usart_buffer(char *topic)
{
if (uart_buffer_written >= MAIN_CHAT_BUFFER_SIZE) {
mqtt_publish(&mqtt_inst, topic, uart_buffer,
MAIN_CHAT_BUFFER_SIZE, 0, 0);
uart_buffer_written = 0;
}
To poll for a message in any of the subscribed topic, mqtt_yield must be called. This function must be
called frequently.
while (1) {
/* Handle pending events from network controller. */
m2m_wifi_handle_events(NULL);
...
if(mqtt_inst.isConnected)
mqtt_yield(&mqtt_inst, 0);
}
2. Build the program and download it into the board.
3. Start the application.
4. On the terminal window, enter the username through the terminal window.
5. After the initialization completes, you can chat.
Note: 
Initialization may take up to a few minutes depending on the network environment.
The application must be programmed and running. The following information will be displayed on the
terminal window.
Note:  The maximum message length should be shorter than 128 bytes. If the server connection is unstable, this
example may not operate normally.
5.5.2 Demo Console Log
-- WINC1500 Wi-Fi MQTT chat example --
-- XXXXX_XPLAINED_PRO --
-- Compiled: xxx x xxxx xx:xx:xx --
(APP)(INFO)Chip ID 1503a0
(APP)(INFO)Firmware ver : xx.x.x Svnrev xxxxx
(APP)(INFO)Firmware Build xxx x xxxx Time xx:xx:xx
(APP)(INFO)Firmware Min driver ver : xx.x.x
(APP)(INFO)Driver ver: xx.x.x
(APP)(INFO)Driver built at xxx x xxxx xx:xx:xx
Preparation of the chat has been completed.
AN5305
Advanced Examples
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 51
Enter the user name (Max 64 characters)
User : demo_user
Wi-Fi connected
Wi-Fi IP is xxx.xxx.xxx.xxx
Preparation of the chat has been completed.
atmel/sample/chat_demo/demo_user >> hi!
atmel/sample/chat_demo/demo_user >> anybody there?
atmel/sample/chat_demo/demo_user >> I'm here
atmel/sample/chat_demo/demo_user >> hi
Note:  The username should not contain any blank spaces.
Note:  This demo is currently supported for WINC15x0 only.
5.6 OTA Firmware Upgrade
This example demonstrates how to upgrade the ATWINC15x0/ATWINC3400 firmware via OTA. It downloads the
ATWINC15x0/ATWINC3400 firmware from an OTA download server, which is a web server. You can upload a new
firmware image and download it to your device.
It is based on the following hardware:
The SAM D21 Xplained Pro
The ATWINC15x0/ATWINC3400 on the EXT1 header
Figure 5-14. OTA Firmware Upgrade Demo Setup
5.6.1 Execution
main.c - Initialize the device and set the server information. It then connects to the OTA download server.
1. Set your OTA download server.
2. Upload the OTA firmware binary to the root folder in your server. (ATWINC15x0: e.g. http://
192.168.0.137/m2m_ota.bin, ATWINC3400: e.g. ).http://192.168.1.11/m2m_ota_3400.bin
3. Code summary:
Configure the network and OTA parameters in . The default port number is 80. If the usermain.h
application uses a different port number, update it in the URL. "http://192.168.0.137/
m2m_ota.bin".
#define MAIN_WLAN_SSID "DEMO_AP"
#define MAIN_WLAN_AUTH M2M_WIFI_SEC_WPA_PSK
#define MAIN_WLAN_PSK "12345678"
#define MAIN_OTA_URL "http://192.168.0.137/m2m_ota.bin"
Connect to the AP.
/* Connect to router. */
m2m_wifi_connect((char *)MAIN_WLAN_SSID, sizeof(MAIN_WLAN_SSID),
MAIN_WLAN_AUTH, (char *)MAIN_WLAN_PSK, M2M_WIFI_CH_ALL);
Initialize the OTA function.
m2m_ota_init(OtaUpdateCb, OtaNotifCb);
After the device is connected to the AP, the function will be executed in them2m_ota_start_update()
wifi_cb() function.
static void wifi_cb(uint8_t u8MsgType, void *pvMsg)
{
...
case M2M_WIFI_REQ_DHCP_CONF:
m2m_ota_start_update((uint8_t *)MAIN_OTA_URL);
AN5305
Advanced Examples
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 52


Product specificaties

Merk: Microchip
Categorie: Niet gecategoriseerd
Model: ATWINC1500-IC

Heb je hulp nodig?

Als je hulp nodig hebt met Microchip ATWINC1500-IC stel dan hieronder een vraag en andere gebruikers zullen je antwoorden




Handleiding Niet gecategoriseerd Microchip

Handleiding Niet gecategoriseerd

Nieuwste handleidingen voor Niet gecategoriseerd