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 31 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
send(tcp_client_socket, &msg_wifi_product, ..., 0);
}
case SOCKET_MSG_SEND:
{
printf("socket_cb: send success!\r\n");
printf("TCP Server Test Complete!\r\n");
printf("close socket\n");
}
2. Build the program and download it into the board.
3. Start the application.
Note:  In case the Peer (TCP client) closes the socket, the only way for the application running on the MCU to
find out about the closure of the socket is in the socket_cb() function in the recv operation, which returns an
error -12 (SOCK_ERR_CONN_ABORTED) indicating the socket is closed by the peer.
static void socket_cb(SOCKET sock, uint8_t u8Msg, void *pvMsg)
{
...
SOCKET_MSG_RECV:
{
tstrSocketRecvMsg *pstrRecv = (tstrSocketRecvMsg *)pvMsg;
if (pstrRecv && pstrRecv->s16BufferSize > 0) {
printf("r %s\r\n",gau8SocketTestBuffer);
recv(tcp_client_socket, gau8SocketTestBuffer, sizeof(gau8SocketTestBuffer), 0);
} else {
printf("socket_cb: recv error! %d\r\n",pstrRecv->s16BufferSize);
// Prints the error value in the receive callback.
close(tcp_server_socket);
tcp_server_socket = -1;
}
...
}
4.4.2 TCP Server Demo Console Log
The application must be programmed and running. The following information is displayed on the terminal window.
-- WINC1500 TCP 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.xxxsocket_cb: bind success!
socket_cb: listen success!
socket_cb: accept success!
socket_cb: recv success!
socket_cb: send success!
TCP Server Test Complete!
close socket
4.5 NTP Time Client
This example demonstrates the use of the ATWINC15x0/ATWINC3400 with the SAM D21 Xplained Pro board to
retrieve time information from the time server.
It is based on the following hardware:
The SAM D21 Xplained Pro
The ATWINC15x0/ATWINC3400 on the EXT1 header
AN5305
Protocol Examples
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 34
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
* \param[in] server_ip Server IP.
*/
void http_client_socket_resolve_handler(uint8_t *domain_name, uint32_t server_ip);
In order to send the data from the temperature and light sensors on the IO1 to the Exosite cloud, the function
exosite_example_read_and_write() must be used.
/* publish the temp measurements every interval */
if (tick_counter_check_timer())
{
Char send_buf[100]; int dTemp = 0;
int dLight = 0;
/* prepare to sensor data in the I/o1 Board */ io1_board_prepare_to_get_info();
dTemp = io1_board_get_temperature(); dLight = io1_board_get_lightvalue();
sprintſsend_buf,”degree=%d&voltage=%d”, ſintƀdTemp, ſintƀdLightƀ;
if( exosite_example_read_and_write(send_buf, (char*)p_board_info->cik))
...
}
The function sends the data to the cloud continuously at regular intervals.
In order to receive the response messages from Exosite, the function must bemain_http_client_callback()
used.
/** 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)
{
case HTTP_CLIENT_CALLBACK_RECV_RESPONSE:
parsing_http_response_data( data->recv_response.response_code,
data->recv_response.content,
data->recv_response.content_length);
break;
}
Then you can add the relevant code to process the received messages without the
parsing_http_response_data() function.
Note:  This function is required to receive the CIK from Exosite.
Figure 5-1. Exosite Application Flow Chart
5.1.2 How to Set the Exosite Cloud to View the Published Data
1. Open a free account on the Exosite Portal.
Go to the Exosite Portal web site http://atmel.exosite.com
Click on “Create an Account” and then log in
AN5305
Advanced Examples
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 41
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
...
NMI_GrowlInit((uint8_t *)PROWL_API_KEY, (uint8_t *)NMA_API_KEY);
growl_send_message_handler();
}
...
}
The notification message will be sent through the function shown below.
static int growl_send_message_handler(void)
{
...
NMI_GrowlSendNotification(NMA_CLIENT, (uint8_t *)"Growl_Sample",
(uint8_t *)"Growl_Event", (uint8_t *)"growl_test", NMA_CONNECTION_TYPE);
return 0;
}
2. Build the program and download it into the board.
3. Start the application.
4. Connect your mobile device to ATWINC15x0/ATWINC3400 AP [WINC1500_08:CA].
5. Browse to the webpage (www.microchip.com) to setup AP, populate the page, then press Connect.
6. The ATWINC15x0/ATWINC3400 will be connected to the AP that you entered.
7. The Growl message will be sent.
This example supports sending growl notifications to the following servers:
Prowl for iOS push notifications (https://www.prowlapp.com/)
NMD for Android push notifications (www.notifymydevice.com/)
In order to enable the Growl application (for sending notifications), you need to set your own API key to represent
your account. Create your own by:
Create an NMD account at www.notifymydevice.com/ and create an API key. Copy the obtained key string to the
NMA_API_KEY macro in the as follows:main.h
#define NMA_API_KEY "f8bd3e7c9c5c10183751ab010e57d8f73494b32da73292f6"
Create a Prowl account at https://www.prowlapp.com/ and create an API key. Copy the obtained API key string to the
PROWL_API_KEY macro in the file as follows:main.h
#define PROWL_API_KEY "117911f8a4f2935b2d84abc934be9ff77d883678"
Note:  For using Growl, the root certificate must be installed.
Figure 5-7. Launch the Growl or NMA application to receive notification
5.2.2 Growl Demo Console Log
The application must be programmed and running. The following information is displayed on the terminal window.
-- WINC1500 simple growl 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
AN5305
Advanced Examples
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 44
Note:  The Qtouch mutual capacitance QT1 XPRO board needs to be connected to EXT1 and EXT2 header
together.
Figure 5-9. IoT Demo Setup
5.4.1 Execution
main.c - Initialize the board, connect to an AP and communicate using the Android App.
Configure AP SSID in for the demo.h Temperature Sensor Demo.
#define DEMO_WLAN_AP_NAME "WINC1500_MyAP"// Access Point Name.
Configure AP SSID in for the .demo.h Qtouch Sensor Demo
#define DEMO_WLAN_AP_NAME "WINC1500_TOUCH_MyAP"// Access Point Name.
Refer to the for more details.Note:  HTTP provision mode application note
Once your sensor Wi-Fi module is provisioned, connect your Android device to the same Access Point and open the
Atmel IoT Sensor Application. Your sensor will display on the Android application’s main screen as shown below:
Figure 5-10. Demo Android App
By tapping the sensor’s name, you will be able to access the real time data flow. In the case of a temperature sensor,
you can see the real time temperature data in the graph. The “LED Toggle” button toggles the LED status. A green or
red light next to the “LED Toggle” button gives the current status of the LED.
Note:  If your Android device is not connected to the same Access Point as the sensor, you will not be able see any
device.
5.4.2 Install the IoT Sensor Android Application
To Install the IoT Sensor APK located in the android_app folder of your ASF project, do the following:
Connect your Android device to your Windows laptop
Open the start menu and double click on “Computer”
Your phone will be listed under the “Portable Devices” list
Open and browse the existing folders
Locate the “Download” folder, then simply drag and drop the provided “Atmel_IOT_Sensor_v2.10.18.apk”
application
Go to your Android phone settings and allow unknown application sources
AN5305
Advanced Examples
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 48
/** A MQTT broker server which was connected.
* test.mosquitto.org is public MQTT broker.*/
static const char main_mqtt_broker[] = "test.mosquitto.org";
/** 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 MQTT module. When calling the function, several parameters likeconfigure_mqtt()
read/write buffers and buffer size are configured along with the callback function.
/* Initialize the MQTT service. */
configure_mqtt();
static void configure_mqtt(void)
{
...
mqtt_get_config_defaults(&mqtt_conf);
/* To use the MQTT service, it is necessary to always set the buffer and the
timer. */
mqtt_conf.read_buffer = mqtt_read_buffer;
mqtt_conf.read_buffer_size = MAIN_MQTT_BUFFER_SIZE;
mqtt_conf.send_buffer = mqtt_send_buffer;
mqtt_conf.send_buffer_size = MAIN_MQTT_BUFFER_SIZE;
result = mqtt_init(&mqtt_inst, &mqtt_conf);
result = mqtt_register_callback(&mqtt_inst, mqtt_callback);
The Paho MQTT platform implementation uses SysTick for timing. Therefore, systick must be configured
before using any part of the library.
if (SysTick_Config(system_cpu_clock_get_hz() / 1000))
{
puts("ERR>> Systick configuration error\r\n");
while (1);
}
Setup the username first and then the topic value will be set with MAIN_CHAT_TOPIC and username.
/* Setup username first */
printf("Enter the username (Max %d characters)\r\n", MAIN_CHAT_USER_NAME_SIZE);
scanf("%64s", mqtt_user);
printf("User : %s\r\n", mqtt_user);
sprintf(topic, "%s%s", MAIN_CHAT_TOPIC, mqtt_user);
Initialize the socket module and register the socket callback function.
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, call the function to connect the socket.mqtt_connect()
static void wifi_callback(uint8 msg_type, void *msg_data)
{
...
case M2M_WIFI_REQ_DHCP_CONF:
...
/* Try to connect to MQTT broker when Wi-Fi was connected. */
mqtt_connect(&mqtt_inst, main_mqtt_broker);
}
The MQTT callback will receive the message and then startMQTT_CALLBACK_SOCK_CONNECTED
sending a CONNECT message to the MQTT broker.
static void mqtt_callback(struct mqtt_module *module_inst, int type, union mqtt_data
*data)
AN5305
Advanced Examples
© 2020 Microchip Technology Inc. Application Note DS70005305D-page 50


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