Takehisa Oneta / Mbed 2 deprecated HelloESP8266Interface_mine

Dependencies:   DnsQuery ESP8266Interface NetworkSocketAPI mbed

Fork of HelloESP8266Interface by NetworkSocketAPI

Files at this revision

API Documentation at this revision

Comitter:
ohneta
Date:
Tue Nov 10 14:58:47 2015 +0000
Parent:
23:9ca7d3d1a2df
Child:
25:8536695a236d
Commit message:
ESP8226?HTTP????????????; HelloESP8226Interface????????????????????????????????

Changed in this revision

DnsQuery.lib Show annotated file Show diff for this revision Revisions of this file
ESP8266Interface.lib Show annotated file Show diff for this revision Revisions of this file
NetworkSocketAPI.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/DnsQuery.lib	Thu Aug 13 15:50:46 2015 +0000
+++ b/DnsQuery.lib	Tue Nov 10 14:58:47 2015 +0000
@@ -1,1 +1,1 @@
-http://developer.mbed.org/users/sarahmarshy/code/DnsQuery/#12d08f0f20cf
+http://developer.mbed.org/users/sarahmarshy/code/DnsQuery/#7e64d099f63e
--- a/ESP8266Interface.lib	Thu Aug 13 15:50:46 2015 +0000
+++ b/ESP8266Interface.lib	Tue Nov 10 14:58:47 2015 +0000
@@ -1,1 +1,1 @@
-https://developer.mbed.org/teams/NetworkSocketAPI/code/ESP8266Interface/#6426873b21bd
+https://developer.mbed.org/teams/NetworkSocketAPI/code/ESP8266Interface/#fd77d067f5ab
--- a/NetworkSocketAPI.lib	Thu Aug 13 15:50:46 2015 +0000
+++ b/NetworkSocketAPI.lib	Tue Nov 10 14:58:47 2015 +0000
@@ -1,1 +1,1 @@
-http://developer.mbed.org/teams/NetworkSocketAPI/code/NetworkSocketAPI/#412be55c4ee8
+http://developer.mbed.org/teams/NetworkSocketAPI/code/NetworkSocketAPI/#efe7e291422b
--- a/main.cpp	Thu Aug 13 15:50:46 2015 +0000
+++ b/main.cpp	Tue Nov 10 14:58:47 2015 +0000
@@ -17,39 +17,202 @@
 #include "mbed.h"
 #include "ESP8266Interface.h"
 
-DigitalOut myled(LED1);
-void flash(){myled = !myled;}
+#define     RESPOSE_BUFFER_SIZE     1024
+
+
+Serial pc(USBTX, USBRX);
+DigitalOut led1(LED1);
+DigitalOut led2(LED2);
+
+uint32_t    _tickCount = 0L;
+void flash()
+{
+    led1 = !led1;
+    _tickCount++;
+}
+
+ESP8266Interface wifi(p9, p10);
+
+/**
+ *
+ */   
+bool parseURL(const char *url, char *scheme, char *host, uint16_t *port, char *path)
+{
+    *port = 0;
+
+    char *schemePtr = (char *)url;
+    char *hostPtr = (char *)strstr(url, "://");
+    if (hostPtr == NULL) {
+        pc.printf("Could not find host");
+        return false;
+    }
+
+    memcpy(scheme, schemePtr, hostPtr - schemePtr);
+    scheme[hostPtr - schemePtr] = '\0';
+
+    if (strcmp(scheme, "http") == 0) {
+        *port = 80;
+    } else if(strcmp(scheme, "https") == 0) {
+        *port = 433;
+    }
+            
+    hostPtr += 3;
+    size_t hostLen = 0;
+
+    char *portPtr = strchr(hostPtr, ':');
+    if (portPtr != NULL) {
+        hostLen = portPtr - hostPtr;
+        portPtr++;
+        if (sscanf(portPtr, "%hu", port) != 1) {
+            pc.printf("Could not find port");
+            return false;
+        }
+    }
+
+    char* pathPtr = strchr(hostPtr, '/');
+    if( hostLen == 0 ) {
+        hostLen = pathPtr - hostPtr;
+    }
+
+    memcpy(host, hostPtr, hostLen);
+    host[hostLen] = '\0';
+
+    size_t pathLen;
+    char *fragmentPtr = strchr(hostPtr, '#');
+    if(fragmentPtr != NULL) {
+        pathLen = fragmentPtr - pathPtr;
+    } else {
+        pathLen = strlen(pathPtr);
+    }
+
+    memcpy(path, pathPtr, pathLen);
+    path[pathLen] = '\0';
+
+    return true;
+}
+
+
+
+bool getHttpDebug(SocketInterface *socket, const char *urlStr)
+{
+    char scheme[8];
+    char host[32];
+    uint16_t port;
+    char path[256];
 
-ESP8266Interface wifi(D1, D0);
+    bool res = parseURL(urlStr, scheme, host, &port, path);
+pc.printf("%lu:parseURL=%d:  %s -->  %s, %s, %d, %s  \n", _tickCount, res, urlStr, scheme, host, port, path);
+#if 1
+    char host_ip[16];
+    wifi.getHostByName(host, host_ip);
+#else
+    char *host_ip = "54.249.236.250";
+#endif
+pc.printf("%lu:host IP address : %s\n", _tickCount, host_ip);
+uint32_t ret;
+
+_tickCount = 0;
+    socket->setAddressPort(host_ip, port);
+    ret = socket->open();
+led2 = 1;
+pc.printf("%d:opend : %d: %s:%d\n", _tickCount, ret, host_ip, port);
+
+    char str[512] = {0};
+    sprintf(str, "GET %s HTTP/1.1\r\nHost: %s\r\n\r\n", path, host);
+pc.printf("%lu: REQUEST:\n%s\n------\n", _tickCount, str);
+
+    // Send Data
+pc.printf("%lu:Sending GET data...\n", _tickCount);
+    socket->send(str, strlen(str));
+
+    static char retBuf[512] = {0};
+pc.printf("%lu:Waiting on reply ... \n", _tickCount);
+    int revLen = socket->recv(retBuf, 512, 10000);
+    retBuf[revLen] = 0;
+pc.printf("%lu:Received String : (%d) : \n%s\n", _tickCount, revLen, retBuf);
+ 
+    socket->close();
+led2 = 0;
+pc.printf("%lu:socket closed\n", _tickCount);
+
+    return true;
+}
+
+
+bool getHttp(SocketInterface *socket, const char *urlStr, char *rsponse)
+{
+    uint32_t ret;
+
+    char scheme[8];
+    char host[32];
+    uint16_t port;
+    char path[256];
+    int res = parseURL(urlStr, scheme, host, &port, path);
+
+    char host_ip[16];
+    wifi.getHostByName(host, host_ip);
+
+
+    socket->setAddressPort(host_ip, port);
+    ret = socket->open();
+
+led2 = 1;
+    char str[512] = {0};
+    sprintf(str, "GET %s HTTP/1.1\r\nHost: %s\r\n\r\n", path, host);    // HTTP/1.1の最低限なリクエスト
+
+    // Send Data
+    socket->send(str, strlen(str));
+
+    // Receive Data
+    int revLen = socket->recv(rsponse, RESPOSE_BUFFER_SIZE, 10000);
+    rsponse[revLen] = 0;
+pc.printf("%lu:Received String : (%d) : \n%s\n", _tickCount, revLen, rsponse);
+    socket->close();
+led2 = 0;
+
+    // retBufを httpプロトコルで分解しようか?
+    {
+        // 最低限でもresult codeくらい調べたい
+
+        // 必要なヘッダだけ取り出す
+        //  Date-xx: xxxxxx
+    }
+
+    return true;
+}
+
+
+
 
 int main()
 {
+    pc.baud(115200);
+    
+    
     Ticker t;
-    t.attach(flash, 0.2f);
-    printf("NetworkSocketAPI Example\r\n");
+    t.attach(flash, 0.1f);
+    pc.printf("NetworkSocketAPI TEST by ohneta.\r\n");
 
-    wifi.init();
-    wifi.connect("iotlab", "42F67YxLX4AawRdcj");
-    
+    int32_t ret = wifi.init();
+    pc.printf("wifi.init() : %d\n", ret);
+
+    ret = wifi.connect("elecom2g-15BEAC", "2903851513877");     // SSID-name, SSID-passPhase
+    pc.printf("wifi.connect() : %d\n", ret);
+
+    wifi.setPreferredDns("192.168.2.1");        // Preferred DNS IP-address
+
     char* ip;
     ip = wifi.getIPAddress();
-    printf("IP Address is: %s\n", (ip) ? ip : "No IP");
-    char host_ip[50];
-    wifi.getHostByName("google.com",host_ip);
-    printf("Google.com resolved to: %s\n",host_ip);
-    
+    pc.printf("IP Address is: %s\n", (ip) ? ip : "No IP");
+
+
+    SocketInterface *socket = wifi.allocateSocket(SOCK_TCP);
 
-    SocketInterface* mySocket = wifi.allocateSocket(SOCK_TCP);
-    char recieved[100];
-    int recv_amnt = 0;
+    char responseBuffer[RESPOSE_BUFFER_SIZE] = {0};
+    getHttp(socket, "http://iina.ohneta.net/iinalab_office/api/inout_status.php?person=0&inout=0", responseBuffer);
+
+    wifi.disconnect();
     
-    //Sending and receiving from echo server 
-    mySocket->setAddressPort("192.168.13.8", 7);
-    mySocket->open();
-    mySocket->send("Hello",5, 10000);
-    recieved[5] = 0;
-    recv_amnt = mySocket->recv(recieved, 5, 10000);
-    printf("Recieved: %d, %s\n",recv_amnt, recieved);
-    mySocket->close();
-    wifi.disconnect();
+    while(1) {
+    }
 }