Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: DnsQuery ESP8266Interface NetworkSocketAPI mbed
Fork of HelloESP8266Interface by
Revision 24:2b91c0e2067b, committed 2015-11-10
- 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
--- 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) {
+ }
}
