XPicoWiFi/ModemEmulation

From Lantronix Wiki!
Revision as of 16:16, 6 April 2015 by Ltrxmg42 (talk | contribs) (Created page with "== Overview == The Modem Emulation feature allows you to use familiar AT commands from an attached microcontroller to control the connections of the xPico Wi-Fi. The document...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Overview

The Modem Emulation feature allows you to use familiar AT commands from an attached microcontroller to control the connections of the xPico Wi-Fi.

The documentation for Modem Emulation can be found in the User Guide on Chapter 10.

Example: Send HTTP data, decide server at run-time

The following example sends HTTP data to a server. While it could use the Tunnel if the server was known ahead of time, there are two reasons to use Modem Emulation in this example:

  • Use ATD0 to enter the Command Line Interface to get status data to send to the server
  • Decide on the server address at run-time, rather than having to pre-configure it

This example reads an accelerometer on a Freescale FRDM-26 board, then sends the three axis data to dweet.io with the name of the "thing" being the MAC address of the xPico Wi-Fi.

The code is tested on the FRDM-26 board running the MQX-LITE RTOS with CodeWarrior 10.6.

void runApp(void) { char buffer[1024]; LEDG_On(); serialInit(); InitAccelMagnetometer(); WAIT1_Waitms(3000); // Use ATD0 to get into CLI and put the serial number of the xPico Wi-Fi // into buffer getXSR(buffer); while (TRUE) { FX1_GetRaw8XYZ(&xyz[0]); // Make a connection to dweet.io and port 80 for the HTTP packet snprintf(buffer, 200, "ATD dweet.io:80\r"); SendString(buffer, &deviceData); waitPostResponse(10,500, buffer, 1024); if (strstr(buffer,"CONNECT") != NULL) { LEDG_Off(); LEDR_On(); createDweetMessage(buffer); SendString(buffer, &deviceData); waitPostResponse(10,500, buffer, 1024); WAIT1_Waitms(500); // Use +++ to switch to command mode snprintf(buffer, 200, "+++"); SendString(buffer, &deviceData); FlushBuf(); waitPostResponse(3,100, buffer, 1024); if (strstr(buffer, "NO CARRIER") != NULL) { LEDR_Off(); LEDG_On(); } // Hangup the connection snprintf(buffer, 200, "ATH\r"); SendString(buffer, &deviceData); FlushBuf(); waitPostResponse(3,50, buffer, 1024); if (strstr(buffer, "NO CARRIER") != NULL) { LEDR_Off(); LEDG_On(); } } WAIT1_Waitms(100); } } int waitPostResponse(int interchar, int totalTO, char buffer[], int size) { int timeout = 0; int received = 0; unsigned char c; while(TRUE) { if (RxBuf_NofElements()!=0) { timeout = 0; (void)RxBuf_Get(&c); if (received < size) { snprintf(buffer,size,"%s%c",buffer,c); } received += 1; } else { if ( (received == 0 && timeout > totalTO) || (received != 0 && timeout > interchar)) { break; } else { timeout += 1; WAIT1_Waitms(20); } } } return received; } int createDweetMessage(char postBuffer[]) { char headerString[] = "GET /dweet/for/%s?x_axis=%d&y_axis=%d&z_axis=%d HTTP/1.1\r\n" "Host: dweet.io\r\n" "Connection: keep-alive\r\n" "Accept: */*\r\n" "\r\n"; return snprintf(postBuffer, 1024, headerString, uid, xyz[0],xyz[1],xyz[2]); }