XBeeWiFi (S6) with SPI connection.

Dependencies:   XBeeWiFi_common XBee_with_SPI mbed

Fork of XBee_wifi_sample by Suga koubou

Committer:
ban4jp
Date:
Sat Jan 04 16:58:46 2014 +0000
Revision:
3:67a2c13289ad
Parent:
1:27bf8d24244b
Add SPI connection support.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okini3939 0:a566d771935a 1 #include "mbed.h"
okini3939 0:a566d771935a 2 #include "XBeeWiFi.h"
okini3939 1:27bf8d24244b 3 #include "EthernetNetIf.h"
okini3939 1:27bf8d24244b 4 #include "TCPSocket.h"
okini3939 0:a566d771935a 5
okini3939 1:27bf8d24244b 6
okini3939 0:a566d771935a 7 #define SECURITY SECURITY_WPA2
okini3939 0:a566d771935a 8 #define SSID "XBEEWIFI"
okini3939 0:a566d771935a 9 #define PASSPHRASE "PASSWORD"
okini3939 1:27bf8d24244b 10 /*
okini3939 0:a566d771935a 11 #define SECURITY SECURITY_OPEN
okini3939 0:a566d771935a 12 #define SSID "XBEEWIFI"
okini3939 0:a566d771935a 13 #define PASSPHRASE ""
okini3939 1:27bf8d24244b 14 */
okini3939 1:27bf8d24244b 15 #define HTTP_PORT 80
okini3939 1:27bf8d24244b 16 #define HTTP_SRC_PORT 10080
okini3939 1:27bf8d24244b 17 #define HTTP_TIMEOUT 5000 // ms
okini3939 1:27bf8d24244b 18 #define METHOD_GET 0
okini3939 1:27bf8d24244b 19 #define METHOD_POST 1
okini3939 0:a566d771935a 20
okini3939 0:a566d771935a 21 DigitalOut myled(LED1);
okini3939 0:a566d771935a 22 Serial pc(USBTX, USBRX);
okini3939 0:a566d771935a 23
ban4jp 3:67a2c13289ad 24 #if defined(TARGET_LPC1768) || defined(TARGET_LPC11U24)
ban4jp 3:67a2c13289ad 25 XBeeWiFi xbee(p11, p12, p13, p14, p15, p16); // mosi, miso, sclk, ssel, attn, reset
ban4jp 3:67a2c13289ad 26 #elif defined(TARGET_LPC1114)
ban4jp 3:67a2c13289ad 27 XBeeWiFi xbee(dp2, dp1, dp6, dp9, dp10, dp11); // mosi, miso, sclk, ssel, attn, reset
ban4jp 3:67a2c13289ad 28 #endif
okini3939 0:a566d771935a 29
okini3939 0:a566d771935a 30 int init_wifi (int timeout) {
okini3939 0:a566d771935a 31 int i, r;
okini3939 0:a566d771935a 32
okini3939 1:27bf8d24244b 33 pc.printf("reset\r\n");
okini3939 0:a566d771935a 34 r = xbee.reset();
okini3939 1:27bf8d24244b 35 if (r < 0) {
okini3939 1:27bf8d24244b 36 pc.printf("error reset %d\r\n", r);
okini3939 0:a566d771935a 37 return -1;
okini3939 0:a566d771935a 38 }
okini3939 1:27bf8d24244b 39
okini3939 0:a566d771935a 40 xbee.getWiResponse(MODEM_STATUS_RESPONSE, 5000);
okini3939 0:a566d771935a 41
okini3939 1:27bf8d24244b 42 r = xbee.setup(SECURITY, SSID, PASSPHRASE);
okini3939 1:27bf8d24244b 43 if (r < 0) {
okini3939 1:27bf8d24244b 44 pc.printf("error setup %d\r\n", r);
okini3939 1:27bf8d24244b 45 return -1;
okini3939 1:27bf8d24244b 46 }
okini3939 0:a566d771935a 47
okini3939 0:a566d771935a 48 for (i = 0; i < timeout; i ++) {
okini3939 0:a566d771935a 49 wait(1);
okini3939 0:a566d771935a 50 r = xbee.getStatus();
okini3939 0:a566d771935a 51 pc.printf("status %02x: ", r);
okini3939 0:a566d771935a 52 switch (r) {
okini3939 0:a566d771935a 53 case JOINED_AP:
okini3939 0:a566d771935a 54 pc.printf("Successfully joined an access point.\r\n");
okini3939 0:a566d771935a 55 return 0;
okini3939 0:a566d771935a 56 case INITIALIZATION:
okini3939 0:a566d771935a 57 pc.printf("WiFi initialization in progress.\r\n");
okini3939 0:a566d771935a 58 break;
okini3939 0:a566d771935a 59 case SSID_NOT_FOUND:
okini3939 0:a566d771935a 60 pc.printf("SSID not found.\r\n");
okini3939 0:a566d771935a 61 return -1;
okini3939 0:a566d771935a 62 case SSID_NOT_CONFIGURED:
okini3939 0:a566d771935a 63 pc.printf("SSID not configured.\r\n");
okini3939 0:a566d771935a 64 return -1;
okini3939 0:a566d771935a 65 case JOIN_FAILED:
okini3939 0:a566d771935a 66 pc.printf("SSID join failed.\r\n");
okini3939 0:a566d771935a 67 return -1;
okini3939 0:a566d771935a 68 case WAITING_IPADDRESS:
okini3939 0:a566d771935a 69 pc.printf("Waiting for IP configuration.\r\n");
okini3939 0:a566d771935a 70 break;
okini3939 0:a566d771935a 71 case WAITING_SOCKETS:
okini3939 0:a566d771935a 72 pc.printf("Listening sockets are being set up.\r\n");
okini3939 0:a566d771935a 73 break;
okini3939 0:a566d771935a 74 case SCANNING_SSID:
okini3939 0:a566d771935a 75 pc.printf("Currently scanning for SSID.\r\n");
okini3939 0:a566d771935a 76 break;
okini3939 0:a566d771935a 77 default:
okini3939 0:a566d771935a 78 pc.printf("\r\n");
okini3939 0:a566d771935a 79 break;
okini3939 0:a566d771935a 80 }
okini3939 0:a566d771935a 81 }
okini3939 0:a566d771935a 82 return -1;
okini3939 0:a566d771935a 83 }
okini3939 0:a566d771935a 84
okini3939 0:a566d771935a 85
okini3939 1:27bf8d24244b 86 int httpRequest (int method, Host *host, char *uri, char *head, char *body) {
okini3939 1:27bf8d24244b 87 Timer timeout;
okini3939 1:27bf8d24244b 88 char buf[1500], tmp[40];
okini3939 1:27bf8d24244b 89 int r, len;
okini3939 1:27bf8d24244b 90 IPv4TransmitRequest httpRequest;
okini3939 1:27bf8d24244b 91 AtCommandRequest atRequest;
okini3939 1:27bf8d24244b 92 AtCommandResponse atResponse;
okini3939 1:27bf8d24244b 93 IPV4RxFrame httpResponse;
okini3939 1:27bf8d24244b 94 IpAddr ipaddr;
okini3939 1:27bf8d24244b 95
okini3939 1:27bf8d24244b 96 // connect
okini3939 1:27bf8d24244b 97 if (host->getIp().isNull()) {
okini3939 1:27bf8d24244b 98 return -1;
okini3939 1:27bf8d24244b 99 }
okini3939 1:27bf8d24244b 100 if (! host->getPort()) {
okini3939 1:27bf8d24244b 101 host->setPort(HTTP_PORT);
okini3939 1:27bf8d24244b 102 }
okini3939 1:27bf8d24244b 103
okini3939 1:27bf8d24244b 104 // create request
okini3939 1:27bf8d24244b 105 if (method == METHOD_POST) {
okini3939 1:27bf8d24244b 106 strcpy(buf, "POST ");
okini3939 1:27bf8d24244b 107 } else {
okini3939 1:27bf8d24244b 108 strcpy(buf, "GET ");
okini3939 1:27bf8d24244b 109 }
okini3939 1:27bf8d24244b 110 strcat(buf, uri);
okini3939 1:27bf8d24244b 111 strcat(buf, " HTTP/1.1\r\nHost: ");
okini3939 1:27bf8d24244b 112 strcat(buf, host->getName());
okini3939 1:27bf8d24244b 113 strcat(buf, "\r\n");
okini3939 1:27bf8d24244b 114 strcat(buf, "Connection: close\r\n");
okini3939 1:27bf8d24244b 115 if (head) {
okini3939 1:27bf8d24244b 116 strcat(buf, head);
okini3939 1:27bf8d24244b 117 }
okini3939 1:27bf8d24244b 118 if (method == METHOD_POST) {
okini3939 1:27bf8d24244b 119 sprintf(tmp, "Content-Length: %d\r\n", strlen(body));
okini3939 1:27bf8d24244b 120 strcat(buf, tmp);
okini3939 1:27bf8d24244b 121 }
okini3939 1:27bf8d24244b 122 strcat(buf, "\r\n");
okini3939 1:27bf8d24244b 123
okini3939 1:27bf8d24244b 124 // send HTTP request
okini3939 1:27bf8d24244b 125 len = strlen(buf);
okini3939 1:27bf8d24244b 126 ipaddr = host->getIp();
okini3939 1:27bf8d24244b 127 httpRequest.setAddress(ipaddr);
okini3939 1:27bf8d24244b 128 httpRequest.setDstPort(host->getPort());
okini3939 1:27bf8d24244b 129 httpRequest.setSrcPort(HTTP_SRC_PORT);
okini3939 1:27bf8d24244b 130 httpRequest.setProtocol(PROTOCOL_TCP);
okini3939 1:27bf8d24244b 131 httpRequest.setPayload((uint8_t*)buf);
okini3939 1:27bf8d24244b 132 httpRequest.setPayloadLength(len);
okini3939 1:27bf8d24244b 133 httpRequest.setFrameId(xbee.getNextFrameId());
okini3939 1:27bf8d24244b 134 xbee.send(httpRequest);
okini3939 1:27bf8d24244b 135 r = xbee.getWiResponse(TX_STATUS_RESPONSE, httpRequest.getFrameId());
okini3939 1:27bf8d24244b 136 pc.printf("wifi TX: %d\r\n", r);
okini3939 1:27bf8d24244b 137 if (r < 0) return -1;
okini3939 1:27bf8d24244b 138
okini3939 1:27bf8d24244b 139 // wait responce
okini3939 1:27bf8d24244b 140 timeout.reset();
okini3939 1:27bf8d24244b 141 timeout.start();
okini3939 1:27bf8d24244b 142 while (timeout.read_ms() < HTTP_TIMEOUT) {
okini3939 1:27bf8d24244b 143 // recv HTTP request
okini3939 1:27bf8d24244b 144 r = xbee.getWiResponse(IPv4_RX_FRAME, 0, 3000);
okini3939 1:27bf8d24244b 145 pc.printf("wifi RX: %d\r\n", r);
okini3939 1:27bf8d24244b 146 if (r >= 0) {
okini3939 1:27bf8d24244b 147 timeout.reset();
okini3939 1:27bf8d24244b 148 xbee.getResponse().getAtCommandResponse(httpResponse);
okini3939 1:27bf8d24244b 149 pc.printf("\r\n--- recv %d ---\r\n", httpResponse.getDataLength());
okini3939 1:27bf8d24244b 150 strncpy(buf, (char*)httpResponse.getData(), httpResponse.getDataLength());
okini3939 1:27bf8d24244b 151 buf[httpResponse.getDataLength()] = 0;
okini3939 1:27bf8d24244b 152 pc.printf(buf);
okini3939 1:27bf8d24244b 153 }
okini3939 1:27bf8d24244b 154 }
okini3939 1:27bf8d24244b 155 timeout.stop();
okini3939 1:27bf8d24244b 156 return 0;
okini3939 1:27bf8d24244b 157 }
okini3939 1:27bf8d24244b 158
okini3939 0:a566d771935a 159 int main() {
ban4jp 3:67a2c13289ad 160 // int i;
okini3939 0:a566d771935a 161 IpAddr ipaddr, netmask, gateway, nameserver;
okini3939 1:27bf8d24244b 162 Host host;
okini3939 0:a566d771935a 163
ban4jp 3:67a2c13289ad 164 // xbee.begin(115200);
okini3939 1:27bf8d24244b 165 // xbee.baud(921000);
ban4jp 3:67a2c13289ad 166 pc.baud(9600);
okini3939 0:a566d771935a 167 pc.printf("XBee WiFi test\r\n");
okini3939 0:a566d771935a 168
okini3939 1:27bf8d24244b 169 if (init_wifi(20)) {
okini3939 0:a566d771935a 170 pc.printf("XBee error\r\n");
okini3939 0:a566d771935a 171 return -1;
okini3939 0:a566d771935a 172 }
okini3939 0:a566d771935a 173
okini3939 0:a566d771935a 174 xbee.getAddress(ipaddr, netmask, gateway, nameserver);
okini3939 0:a566d771935a 175 pc.printf("IP address %d.%d.%d.%d\r\n", ipaddr[0], ipaddr[1], ipaddr[2], ipaddr[3]);
ban4jp 3:67a2c13289ad 176 if (ipaddr.isNull()) {
okini3939 1:27bf8d24244b 177 pc.printf("not configure\r\n");
okini3939 1:27bf8d24244b 178 return -1;
okini3939 1:27bf8d24244b 179 }
okini3939 0:a566d771935a 180
okini3939 1:27bf8d24244b 181 /*
okini3939 1:27bf8d24244b 182 // DNS lookup
okini3939 1:27bf8d24244b 183 // *** Note: wifi is turned off when XBee send/recv the port 53 udp packet.
okini3939 1:27bf8d24244b 184 // XBee wifi --> request --> DNS server (wifi OK)
okini3939 1:27bf8d24244b 185 // DNS server --> responce --> XBee wifi (wifi turned off)
okini3939 1:27bf8d24244b 186 // why ??
okini3939 0:a566d771935a 187 nameserver = gateway;
okini3939 1:27bf8d24244b 188 // nameserver = IpAddr(12,34,56,78);
okini3939 1:27bf8d24244b 189 pc.printf("resolver %d.%d.%d.%d\r\n", nameserver[0], nameserver[1], nameserver[2], nameserver[3]);
okini3939 0:a566d771935a 190 xbee.setNameserver(nameserver);
okini3939 0:a566d771935a 191 i = xbee.getHostByName("mbed.org", ipaddr);
okini3939 0:a566d771935a 192 if (i) {
okini3939 0:a566d771935a 193 pc.printf("error resolv %d\r\n", i);
okini3939 0:a566d771935a 194 } else {
okini3939 0:a566d771935a 195 pc.printf("resolv address %d.%d.%d.%d\r\n", ipaddr[0], ipaddr[1], ipaddr[2], ipaddr[3]);
okini3939 0:a566d771935a 196 }
okini3939 1:27bf8d24244b 197 */
okini3939 1:27bf8d24244b 198 // HTTP request
okini3939 1:27bf8d24244b 199 wait(1);
ban4jp 3:67a2c13289ad 200 host.setIp(IpAddr(54,243,166,106));
ban4jp 3:67a2c13289ad 201 host.setName("httpbin.org");
ban4jp 3:67a2c13289ad 202 httpRequest(METHOD_GET, &host, "/get", "", "");
okini3939 0:a566d771935a 203
ban4jp 3:67a2c13289ad 204 pc.printf("done.\r\n");
ban4jp 3:67a2c13289ad 205 while(1);
okini3939 0:a566d771935a 206
okini3939 0:a566d771935a 207 }