
{"id":7266,"date":"2018-05-14T17:54:16","date_gmt":"2018-05-14T08:54:16","guid":{"rendered":"https:\/\/okiraku-camera.tokyo\/blog\/?page_id=7266"},"modified":"2018-05-17T12:20:00","modified_gmt":"2018-05-17T03:20:00","slug":"esp32-usr-es1%e3%81%ae%e8%aa%bf%e6%9f%bb","status":"publish","type":"page","link":"https:\/\/okiraku-camera.tokyo\/blog\/?page_id=7266","title":{"rendered":"ESP32 + USR-ES1\u306e\u8abf\u67fb"},"content":{"rendered":"<h1>ESP32\u306bSPI to Ethernet \u30e2\u30b8\u30e5\u30fc\u30eb USR-ES1\u3092\u63a5\u7d9a\u3057\u305f\u8a71<\/h1>\n<p>ESP32 + USR-ES1\u304b\u3089\u540c\u4e00LAN\u5185\u306ePC\u306bTCP\u3067\u30c7\u30fc\u30bf\u8ee2\u9001\u3092\u884c\u3063\u305f\u3068\u304d\u3001\u3069\u308c\u304f\u3089\u3044\u306e\u6027\u80fd\u304c\u51fa\u308b\u306e\u304b\u3092\u8abf\u3079\u308b\u306e\u306b\u4f7f\u3063\u305f\u30d7\u30ed\u30b0\u30e9\u30e0\u3084\u30b9\u30b1\u30c3\u30c1\u3068\u3001\u6e2c\u5b9a\u6642\u306e\u753b\u9762\u30b3\u30d4\u30fc\u306a\u3069\u3092\u63b2\u8f09\u3057\u305f\u3002<a href=\"\/blog\/?p=7220\" target=\"_blank\" rel=\"noopener\">\u30d6\u30ed\u30b0\u3068\u3057\u3066\u306e\u672c\u6587\u306f\u3053\u3061\u3089<\/a>\u3002USR-ES1(W5500)\u306e\u30b3\u30f3\u30c8\u30ed\u30fc\u30eb\u306b\u306f\u3001Arduino IDE\u3067\u5bb9\u6613\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3067\u304d\u308bEthernet2\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u305d\u306e\u307e\u307e\u4f7f\u3063\u3066\u3044\u308b\u3002<\/p>\n<p>\u672c\u6587\u5074\u306b\u3082\u66f8\u3044\u305f\u304c\u3001\u6709\u7ddaLAN\u3067\u63a5\u7d9a\u3059\u308b\u969b\u306b\u306f\u9001\u4fe1\u5074\u3068\u53d7\u4fe1\u5074\u306f\u540c\u3058\u30b9\u30a4\u30c3\u30c1\u30f3\u30b0\u30cf\u30d6(1000BASE-T) \u306b\u63a5\u7d9a\u3057\u3066\u3044\u308b\u3002\u53d7\u4fe1(TCP\u306eaccept() )\u5074\u306f\u3001\u540c\u3058Windows 7 \u306e\u30ce\u30fc\u30c8PC\u3092\u4f7f\u3063\u3066\u3044\u3066 tcp\/8888 \u3067listen() \u3057\u3066\u3044\u308b\u3002<\/p>\n<h2 id=\"1\">Windows\u7528\u30d7\u30ed\u30b0\u30e9\u30e0<\/h2>\n<p>Windows\u3067\u306f\u9001\u4fe1\u5074\u3068\u53d7\u4fe1\u5074\u53cc\u65b9\u3068\u3082\u540c\u3058\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u4f7f\u3046\u3002\u4ee5\u4e0b\u306e\u30bd\u30fc\u30b9\u3092Visual Studio 2017 (Community\u7248)\u3092\u4f7f\u3063\u3066\u30d3\u30eb\u30c9\u3057\u305f\u3002\u518d\u73fe\u3059\u308b\u969b\u306b\u306f\u3001WIN32\u30b3\u30f3\u30bd\u30fc\u30eb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3068\u3057\u3066\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u65b0\u898f\u4f5c\u6210\u3057\u3001\u597d\u307f\u306e\u540d\u524d\u3067C++\u30bd\u30fc\u30b9\u3092\u65b0\u898f\u8ffd\u52a0\u3057\u3066\u4ee5\u4e0b\u3092\u8cbc\u308a\u4ed8\u3051\u3066\u4fdd\u5b58\u3059\u308c\u3070\u3088\u3044\u306f\u305a\u3002<\/p>\n<pre class=\"lang:c++ decode:true\">#include \"stdafx.h\"\r\n#include &lt;stdio.h&gt;\r\n#include &lt;winsock2.h&gt;\r\n\r\n#pragma warning(disable:4996)\r\n#pragma comment(lib, \"Ws2_32.lib\")\r\n#pragma comment(lib, \"winmm.lib\")\r\n\r\n#define LISTEN_PORT\t8888\r\n#define MEGA\t(1024 * 1024)\r\n\r\nstatic void setup_buffer(char* p, int sz) {\r\n\tmemset(p, 0, sz);\r\n\tfor (int i = 0; i &lt; sz; i++)\r\n\t\t*p++ = i % 256;\r\n}\r\n\r\nstatic bool check_buffer(char* p, int sz) {\r\n\tfor (int i = 0; i &lt; sz; i++) {\r\n\t\tif (*p++ != (char)(i % 256))\r\n\t\t\treturn false;\r\n\t}\r\n\treturn true;\r\n}\r\n\r\nint main(int ac, char* av[]) {\r\n\tSOCKET work_socket;\r\n\tWSADATA wsaData;\r\n\tchar dest_ip[20] = \"\";\r\n\tint megas = 1;\r\n\tint buf_size = 1024;\r\n\tif (ac &lt; 2) {\r\n\t\tprintf(\" -M megas -B buffer_size [dest_ip_address]\");\r\n\t\treturn 1;\r\n\t}\r\n\tchar last = 0;\r\n\tfor (int i = 1; i &lt; ac; i++) {\r\n\t\tchar* p = av[i];\r\n\t\tif (*p == '-')\r\n\t\t\tlast = *++p;\r\n\t\telse if (*p) {\r\n\t\t\tif (last == 'M')\r\n\t\t\t\tmegas = atoi(p);\r\n\t\t\tif (last == 'B')\r\n\t\t\t\tbuf_size = atoi(p);\r\n\t\t\telse if (!last)\r\n\t\t\t\tstrncpy(dest_ip, p, sizeof(dest_ip));\r\n\t\t\tlast = 0;\r\n\t\t}\r\n\t}\r\n\tdouble factor = 1024.0 \/ (double)buf_size;\r\n\tLONGLONG transfer_size = buf_size * 1024 * (megas * factor);\r\n\tprintf(\"transfer_size=%lld bytes, dest=%s\\n\", transfer_size, dest_ip);\r\n\r\n\tchar* pBuffer = (char*)malloc(buf_size);\r\n\tif (!pBuffer) {\r\n\t\tprintf(\"buffer alloc failed.\");\r\n\t\treturn -1;\r\n\t}\r\n\tif (WSAStartup(MAKEWORD(2, 2), &amp;wsaData) != NO_ERROR) {\r\n\t\tprintf(\"WSAStartup() failed. %d\\n\", WSAGetLastError());\r\n\t\treturn 1;\r\n\t}\r\n\tif (!*dest_ip) {\r\n\t\tSOCKET listen_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);\r\n\t\tsockaddr_in listen_addr;\r\n\t\tmemset((void*)&amp;listen_addr, 0, sizeof(sockaddr_in));\r\n\t\tlisten_addr.sin_port = htons(LISTEN_PORT);\r\n\t\tlisten_addr.sin_family = AF_INET;\r\n\t\tlisten_addr.sin_addr.s_addr = htonl(INADDR_ANY);\r\n\t\tif (bind(listen_socket, (SOCKADDR *)&amp;listen_addr, sizeof(sockaddr_in)) != NO_ERROR) {\r\n\t\t\tprintf(\"bind() failed. %d\\n\", WSAGetLastError());\r\n\t\t\treturn 2;\r\n\t\t}\r\n\t\tfor (;;) {\r\n\t\t\tprintf(\"Listen start...\");\r\n\t\t\tif (listen(listen_socket, 3) != NO_ERROR) {\r\n\t\t\t\tprintf(\"listen() failed. %d\\n\", WSAGetLastError());\r\n\t\t\t\tclosesocket(listen_socket);\r\n\t\t\t\tWSACleanup();\r\n\t\t\t\treturn 3;\r\n\t\t\t}\r\n\t\t\twork_socket = accept(listen_socket, NULL, NULL);\r\n\t\t\tif (work_socket == INVALID_SOCKET) {\r\n\t\t\t\tprintf(\"accept failed. %d\\n\", WSAGetLastError());\r\n\t\t\t\tclosesocket(listen_socket);\r\n\t\t\t\tWSACleanup();\r\n\t\t\t\treturn 4;\r\n\t\t\t}\r\n\t\t\tprintf(\"\\naccept socket\\n\");\r\n\t\t\tDWORD start = timeGetTime();\r\n\t\t\tLONGLONG byte_transed = 0;\r\n\t\t\tint cur = 0;\r\n\t\t\twhile (byte_transed &lt; transfer_size) {\r\n\t\t\t\tif (cur == 0)\r\n\t\t\t\t\tmemset(pBuffer, 0, buf_size);\r\n\t\t\t\tint n = recv(work_socket, &amp;pBuffer[cur], buf_size - cur, 0);\r\n\t\t\t\tif (n == SOCKET_ERROR) {\r\n\t\t\t\t\tprintf(\"recv failed. %d\\n\", WSAGetLastError());\r\n\t\t\t\t\tclosesocket(work_socket);\r\n\t\t\t\t\tclosesocket(listen_socket);\r\n\t\t\t\t\tWSACleanup();\r\n\t\t\t\t\treturn 5;\r\n\t\t\t\t}\r\n\t\t\t\telse if (n == 0) {\r\n\t\t\t\t\tprintf(\"connection closed.\\n\");\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tbyte_transed += n;\r\n\t\t\t\tif (n != buf_size) {\r\n\t\t\t\t\tcur += n;\r\n\t\t\t\t\tif (cur == buf_size) {\r\n\t\t\t\t\t\tcur = 0;\r\n\t\t\t\t\t\tn = buf_size;\r\n\t\t\t\t\t}\r\n\t\t\t\t}  else\r\n\t\t\t\t\tcur = 0;\r\n\t\t\t\tif ( n == buf_size &amp;&amp; !check_buffer(pBuffer, buf_size)) {\r\n\t\t\t\t\tprintf(\"recv data mismatch.\\n\");\r\n\t\t\t\t\tclosesocket(work_socket);\r\n\t\t\t\t\tclosesocket(listen_socket);\r\n\t\t\t\t\tWSACleanup();\r\n\t\t\t\t\treturn 6;\r\n\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tclosesocket(work_socket);\r\n\t\t\tDWORD elapsed = timeGetTime() - start;\r\n\t\t\tdouble mbps = (double)(byte_transed  \/ (elapsed \/ 1000.0)) \/ MEGA;\r\n\t\t\tprintf(\"receive %lld bytes in %d msec. %.2f MBytes \/sec\\n\", byte_transed, elapsed, mbps);\r\n\t\t}\r\n\t}\r\n\telse {\r\n\t\tunsigned long addr = inet_addr(dest_ip);\r\n\t\tif (addr == INADDR_NONE) {\r\n\t\t\tprintf(\"invalid destination address.\\n\");\r\n\t\t\treturn 10;\r\n\t\t}\r\n\t\tsockaddr_in dest_addr;\r\n\t\tmemset((void*)&amp;dest_addr, 0, sizeof(sockaddr_in));\r\n\t\tdest_addr.sin_port = htons(LISTEN_PORT);\r\n\t\tdest_addr.sin_family = AF_INET;\r\n\t\tdest_addr.sin_addr.s_addr = addr;\r\n\t\tdouble acc_mbps = 0.0;\r\n\t\tint count = 0;\r\n\t\twhile(count &lt; 10) {\r\n\t\t\tprintf(\"start %d : \", ++count);\r\n\t\t\tSOCKET send_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);\r\n\t\t\tsetup_buffer(pBuffer, buf_size);\r\n\t\t\tDWORD start = timeGetTime();\r\n\t\t\tLONGLONG byte_transed = 0;\r\n\t\t\tif (connect(send_socket, (SOCKADDR*)&amp;dest_addr, sizeof(dest_addr)) != NO_ERROR) {\r\n\t\t\t\tprintf(\"connect failed. %d\\n\", WSAGetLastError());\r\n\t\t\t\tclosesocket(send_socket);\r\n\t\t\t\tWSACleanup();\r\n\t\t\t\treturn 11;\r\n\t\t\t}\r\n\t\t\tint send_size = buf_size;\r\n\t\t\twhile (byte_transed &lt; transfer_size) {\r\n\t\t\t\tint n = send(send_socket, &amp;pBuffer[buf_size - send_size], send_size, 0);\r\n\t\t\t\tif (n == SOCKET_ERROR) {\r\n\t\t\t\t\tprintf(\"send failed. %d\\n\", WSAGetLastError());\r\n\t\t\t\t\tclosesocket(send_socket);\r\n\t\t\t\t\tWSACleanup();\r\n\t\t\t\t\treturn 12;\r\n\t\t\t\t}\r\n\t\t\t\tbyte_transed += n;\r\n\t\t\t\tsend_size = buf_size;\r\n\t\t\t\tif (n &lt; buf_size)\r\n\t\t\t\t\tsend_size -= n;\r\n\t\t\t}\r\n\t\t\tshutdown(send_socket, SD_SEND);\r\n\t\t\tclosesocket(send_socket);\r\n\t\t\tDWORD elapsed = timeGetTime() - start;\r\n\t\t\tdouble mbps = (double)(byte_transed \/ (elapsed \/ 1000.0)) \/ MEGA;\r\n\t\t\tacc_mbps += mbps;\r\n\t\t\tprintf(\"send %lld bytes completed. %d msec. %.2f MBytes\/sec\\n\", byte_transed, elapsed, mbps);\r\n\t\t}\r\n\t\tprintf(\"average = %.2f MBytes\/sec\\n\", acc_mbps \/ count);\r\n\r\n\t}\r\n\tWSACleanup();\r\n\tfree(pBuffer);\r\n\treturn 0;\r\n}<\/pre>\n<h3>\u4f7f\u3044\u65b9\u304a\u3088\u3073\u52d5\u4f5c<\/h3>\n<p>Windows\u306e\u30b3\u30de\u30f3\u30c9\u30d7\u30ed\u30f3\u30d7\u30c8\u3092\u958b\u304d\u3001\u5b9f\u884c\u30d5\u30a1\u30a4\u30eb\u540d\u3068\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u6307\u5b9a\u3057\u3066\u5b9f\u884c\u3059\u308b\u3002<br \/>\n\u30aa\u30d7\u30b7\u30e7\u30f3 -B \u3067\u30d0\u30c3\u30d5\u30a1\u30b5\u30a4\u30ba\u3092\u30d0\u30a4\u30c8\u5358\u4f4d\u3067\u3001-M \u30671\u56de\u3054\u3068\u306e\u8ee2\u9001\u30d0\u30a4\u30c8\u6570\u3092\u30e1\u30ac\u30d0\u30a4\u30c8\u5358\u4f4d\u3067\u6307\u5b9a\u3059\u308b\u3002\u30d0\u30c3\u30d5\u30a1\u30b5\u30a4\u30ba\u306f256\u306e\u6574\u6570\u500d(256, 512, 1024, 2048, 4096, &#8230;) \u3092\u6307\u5b9a\u3059\u308b\u3053\u3068\u3002<br \/>\n\u30aa\u30d7\u30b7\u30e7\u30f3\u6587\u5b57\u7121\u3057\u306e\u5f15\u6570\u304c\u3042\u3063\u305f\u5834\u5408\u3001\u9001\u4fe1\u5148IP\u30a2\u30c9\u30ec\u30b9\u3068\u3057\u3066\u4f7f\u3046\u3002\u9001\u4fe1\u5148IP\u30a2\u30c9\u30ec\u30b9\u304c\u3042\u308c\u3070\u9001\u4fe1\u5074\u3001\u306a\u3051\u308c\u3070\u53d7\u4fe1\u5074\u3068\u3057\u3066\u52d5\u4f5c\u3059\u308b\u3002<\/p>\n<p>\u9001\u4fe1\u5074\u3068\u53d7\u4fe1\u5074\u3068\u3067\u30d0\u30c3\u30d5\u30a1\u30b5\u30a4\u30ba\u3084\u8ee2\u9001\u30d0\u30a4\u30c8\u6570\u306f\u540c\u3058\u306b\u3057\u3066\u304a\u304f\u3002\u9001\u4fe1\u5074\u306f-M\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u6307\u5b9a\u3059\u308b\u8ee2\u9001\u30d0\u30a4\u30c8\u6570\u306e\u9001\u4fe1\u309210\u56de\u7e70\u308a\u8fd4\u3057\u8ee2\u9001\u30ec\u30fc\u30c8\u306e\u5e73\u5747\u5024\u3092\u8868\u793a\u3059\u308b\u3002\u53d7\u4fe1\u5074\u306f\u8ee2\u9001\u30d0\u30a4\u30c8\u6570\u3092\u53d7\u4fe1\u3059\u308b\u3054\u3068\u306b\u8ee2\u9001\u30ec\u30fc\u30c8\u3092\u8868\u793a\u3057\u5b9f\u884c\u3092\u7d9a\u3051\u308b\u3002<\/p>\n<p>\u9001\u4fe1\u5074\u306e\u8ee2\u9001\u30d0\u30c3\u30d5\u30a1\u306b\u306f\u3001<em>setup_buffer()<\/em> \u306b\u3088\u3063\u3066\u5148\u982d\u304b\u3089\u9806\u306b0\u304b\u3089255 \u307e\u3067\u306e\u5024\u304c\u7e70\u308a\u8fd4\u3057\u3066\u683c\u7d0d\u3055\u308c\u3066\u304a\u308a\u3001\u53d7\u4fe1\u5074\u306f\u30d0\u30c3\u30d5\u30a1\u30b5\u30a4\u30ba\u5206\u53d7\u4fe1\u3059\u308b\u305f\u3073\u3054\u3068\u306b<em>check_buffer()<\/em> \u306b\u3088\u3063\u3066\u5185\u5bb9\u3092\u30c1\u30a7\u30c3\u30af\u3059\u308b\u3002\u305d\u306e\u3068\u304d\u60f3\u5b9a\u3057\u3066\u3044\u306a\u3044\u30d0\u30a4\u30c8\u304c\u898b\u3064\u304b\u308c\u3070\u3001\u305d\u306e\u6642\u70b9\u3067\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u7d42\u4e86\u3059\u308b\u3002<\/p>\n<p>\u4f8b\u3048\u3070\u5b9f\u884c\u30d5\u30a1\u30a4\u30eb\u540d\u304c SockTest.exe\u3001\u53d7\u4fe1\u5074\u304c 192.168.1.100 \u3001\u30d0\u30c3\u30d5\u30a1\u30b5\u30a4\u30ba2048\u30d0\u30a4\u30c8\u3001\u8ee2\u9001\u30d0\u30a4\u30c8\u6570\u3092100(\u30e1\u30ac\u30d0\u30a4\u30c8)\u3068\u3059\u308b\u3068\u304d\u306b\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u5b9f\u884c\u3059\u308b\u3002<\/p>\n<pre class=\"nums:false lang:default decode:true\">\u53d7\u4fe1\u5074 SocketTest.exe -B 2048 -M 100\r\n\u9001\u4fe1\u5074 SocketTest.exe -B 2048 -M 100 192.168.1.100<\/pre>\n<p>\u30b3\u30de\u30f3\u30c9\u306e\u5b9f\u884c\u3084ESP32\u306e\u30ea\u30bb\u30c3\u30c8\u306b\u3088\u3063\u3066\u65b0\u898f\u306b\u9001\u4fe1\u3092\u958b\u59cb\u3059\u308b\u3068\u304d\u306b\u306f\u3001\u3042\u3089\u304b\u3058\u3081\u53d7\u4fe1\u5074\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u8d77\u52d5\u3057\u76f4\u3057\u3066\u304a\u304f\u5fc5\u8981\u304c\u3042\u308b\u3002\u53d7\u4fe1\u5074\u3092\u505c\u6b62\u3059\u308b\u305f\u3081\u306b\u306f\u3001\u30b3\u30de\u30f3\u30c9\u30d7\u30ed\u30f3\u30d7\u30c8\u306b\u5bfe\u3057\u3066Ctrl+C \u3092\u6253\u3061\u8fbc\u3080\u3002<\/p>\n<h3>WindowsPC &#8211; \u30ce\u30fc\u30c8PC\u9593\u306e\u5b9f\u884c\u6642\u8868\u793a(\u9001\u4fe1\u5074)<\/h3>\n<p>\u9001\u4fe1\u5074\u306b\u306fWindows 10\u306e\u30c7\u30b9\u30af\u30c8\u30c3\u30d7PC\u3092\u4f7f\u3063\u305f\u3002<\/p>\n<pre class=\"lang:default decode:true\">...\\Release&gt;SocketApp1.exe -B 2048 -M 100 192.168.1.100\r\ntransfer_size=104857600 bytes, dest=192.168.1.100\r\nstart 1 : send 104857600 bytes completed. 900 msec. 111.11 MBytes\/sec\r\nstart 2 : send 104857600 bytes completed. 1014 msec. 98.62 MBytes\/sec\r\nstart 3 : send 104857600 bytes completed. 1012 msec. 98.81 MBytes\/sec\r\nstart 4 : send 104857600 bytes completed. 1074 msec. 93.11 MBytes\/sec\r\nstart 5 : send 104857600 bytes completed. 857 msec. 116.69 MBytes\/sec\r\nstart 6 : send 104857600 bytes completed. 894 msec. 111.86 MBytes\/sec\r\nstart 7 : send 104857600 bytes completed. 1132 msec. 88.34 MBytes\/sec\r\nstart 8 : send 104857600 bytes completed. 850 msec. 117.65 MBytes\/sec\r\nstart 9 : send 104857600 bytes completed. 839 msec. 119.19 MBytes\/sec\r\nstart 10 : send 104857600 bytes completed. 907 msec. 110.25 MBytes\/sec\r\naverage = 106.56 MBytes\/sec\r\n\r\n...\\Release&gt;\r\n\r\n<\/pre>\n<p><span style=\"text-decoration: underline;\">\u8ee2\u9001\u30ec\u30fc\u30c8\u306f\u6bce\u79d2106\u30e1\u30ac\u30d0\u30a4\u30c8<\/span>\u3068\u3044\u3063\u305f\u3068\u3053\u308d\u3060\u3063\u305f\u3002\u6bce\u56de\u306e\u8ee2\u9001\u30ec\u30fc\u30c8\u306b\u3070\u3089\u3064\u304d\u304c\u3042\u308b\u306e\u306f\u3001\u9001\u4fe1\u5074\u306eWindows PC\u3067\u5c71\u306e\u3088\u3046\u306b\u30d7\u30ed\u30bb\u30b9\u304c\u52d5\u3044\u3066\u3044\u308b\u305f\u3081\u3068\u601d\u308f\u308c\u308b\u3002\u307e\u3042\u30011\u79d2\u9593\u306b100\u30e1\u30ac\u30d0\u30a4\u30c8\u3082\u8ee2\u9001\u3067\u304d\u3066\u3044\u308c\u3070\u3044\u3044\u3060\u308d\u3046\u3002<\/p>\n<h2 id=\"2\">ESP32 + USR-ES1\u7528\u30c6\u30b9\u30c8\u30b9\u30b1\u30c3\u30c1(\u6709\u7dda\u63a5\u7d9a)<\/h2>\n<p>ESP32 + USR-ES1\u306e\u8abf\u67fb\u306b\u306f\u9001\u4fe1\u5074\u3068\u3057\u3066\u4ee5\u4e0b\u306e\u30b9\u30b1\u30c3\u30c1\u3092\u4f7f\u3063\u305f\u3002\u53d7\u4fe1\u5074\u306f\u4e0a\u3068\u540c\u3058Windows\u7528\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u5229\u7528\u3002Windows PC\u9593\u306e\u8ee2\u9001\u306b\u6bd4\u3079\u308b\u3068\u3068\u3066\u3082\u9045\u304f\u3066\u6642\u9593\u304c\u304b\u304b\u308b\u306e\u3067\u3001\u8ee2\u9001\u30d0\u30a4\u30c8\u6570\u306f10\u30e1\u30ac\u30d0\u30a4\u30c8\u3068\u3057\u305f\u3002<\/p>\n<pre class=\"lang:c++ decode:true\">#if defined(WIZ550io_WITH_MACADDRESS)\r\n#undef WIZ550io_WITH_MACADDRESS\r\n#endif\r\n#include &lt;Ethernet2.h&gt;\r\n\r\n#define LED 2\r\n#define ETH_RESET 4\r\n#define SPI_SS  5\r\nbyte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };\r\nIPAddress s_ip(192,168,1,100);\r\nIPAddress myip(192, 168, 1, 123);\r\nIPAddress mydns(192, 168, 1, 1);\r\nIPAddress mygateway(192, 168, 1, 1);\r\nIPAddress mysubnet(255, 255, 255, 0);\r\n\r\n#define DEST_PORT 8888\r\n#define MEGA  1024 * 1024\r\n#define BUFFER_SIZE 2048\r\n#define TRANSFER_BYTES 10 * MEGA\r\n\r\nchar buffer[BUFFER_SIZE];\r\nEthernetClient client;\r\n\r\nvoid die() {\r\n  digitalWrite(LED, 1);\r\n  delay(500);\r\n  digitalWrite(LED, 0);\r\n  delay(500);\r\n}\r\n\r\nvoid setup_buffer(char* p, int sz) {\r\n  for(int i = 0; i &lt; sz; i++)\r\n    *p++ = (char)i % 256;\r\n}\r\n\r\nvoid setup() {\r\n  delay(10);\r\n  Serial.begin(115200);\r\n  pinMode(LED, OUTPUT);\r\n  pinMode(ETH_RESET, OUTPUT);\r\n  digitalWrite(ETH_RESET, 0);\r\n  delay(1);\r\n  digitalWrite(ETH_RESET, 1);\r\n  delay(50);\r\n  Ethernet.init(SPI_SS);\r\n  Ethernet.begin(mac, myip, mydns, mygateway, mysubnet);\r\n}\r\n\r\nint loop_count = 0;\r\nfloat total_mbps = 0.0;\r\nvoid loop() {\r\n  unsigned long start = millis();\r\n  Serial.printf(\"start %d : \", loop_count++ + 1);\r\n  if (client.connect(s_ip, DEST_PORT) != 1) {\r\n    Serial.printf(\"connection failed. status = %d\\n\", client.status());\r\n    die();\r\n  }\r\n  setup_buffer(buffer, sizeof(buffer));\r\n  int transed_bytes = 0;\r\n  while(transed_bytes &lt; TRANSFER_BYTES) {\r\n    size_t n = client.write(buffer, sizeof(buffer));\r\n    if (n == 0) {\r\n      Serial.printf(\"connection closed or send failed. status = %d\\n\", client.status());\r\n      die();\r\n    }\r\n    transed_bytes += n;\r\n  }  \r\n  client.flush();\r\n  client.stop();\r\n  unsigned long elapsed =  millis() - start;\r\n  float mbps = (float)(transed_bytes \/ MEGA) \/ elapsed \/ 1000.0;\r\n  total_mbps += mbps;\r\n  Serial.printf(\"send %d bytes completed. %d msec. %.2f MBytes\/sec\\n\", transed_bytes, elapsed,  mbps);\r\n  if (loop_count == 10) {\r\n    Serial.printf(\"average = %.2f MBytes\/sec\\n\\n\", total_mbps \/ loop_count);\r\n    loop_count = 0;\r\n    total_mbps = 0.0;\r\n  }\r\n  delay(10);\r\n}<\/pre>\n<p><em>Ethernet.init(SPI_SS);<\/em> \u306b\u3088\u308a\u30b9\u30ec\u30fc\u30d6\u30bb\u30ec\u30af\u30c8\u306bSPI_SS ( == 5) \u3092\u4f7f\u3063\u3066\u3044\u308b\u3053\u3068\u3092\u6559\u3048\u3066\u3044\u308b\u3002GPIO10\u3092\u4f7f\u3046\u306a\u3089\u3070\u7701\u7565\u53ef\u80fd\u306a\u306e\u3060\u304c\u3001ESP-WROOM-32\u3067\u306fGPIO10\u306f\u5185\u8535\u30d5\u30e9\u30c3\u30b7\u30e5\u306b\u63a5\u7d9a\u3055\u308c\u3066\u3044\u308b\u306e\u3067\u4f7f\u3048\u306a\u3044\u3002<\/p>\n<p>Ethernet2\u30e9\u30a4\u30d6\u30e9\u30ea\u306b\u542b\u307e\u308c\u3066\u3044\u308b <em>EthernetClient<\/em>\u30af\u30e9\u30b9\u306e <em>write()<\/em> \u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u3063\u3066\u9001\u4fe1\u30d0\u30c3\u30d5\u30a1\u306e\u5185\u5bb9\u3092\u9001\u308a\u51fa\u3057\u3066\u3044\u308b\u304c\u3001\u3053\u306e\u30e1\u30bd\u30c3\u30c9\u306b\u5bfe\u3057\u3066W5500\u306e\u9001\u4fe1\u30d0\u30c3\u30d5\u30a1\u306e\u6700\u5927\u5024(2048\u30d0\u30a4\u30c8)\u3092\u8d85\u3048\u308b\u30d0\u30a4\u30c8\u6570\u3092\u6307\u5b9a\u3057\u305f\u5834\u5408\u3001\u5148\u982d\u306e2048\u30d0\u30a4\u30c8\u3057\u304b\u9001\u4fe1\u3055\u308c\u305a\u3001\u5b9f\u884c\u4e0a\u306f\u30a8\u30e9\u30fc\u306b\u3082\u306a\u3089\u306a\u3044\u3053\u3068\u306b\u6ce8\u610f\u304c\u5fc5\u8981\u3060\u308d\u3046\u3002<br \/>\n2048\u30d0\u30a4\u30c8\u4ee5\u4e0b\u306e\u5834\u5408\u3001send() \u306e\u5f15\u6570\u3068\u3057\u3066\u6307\u5b9a\u3057\u305f\u30d0\u30a4\u30c8\u6570\u306f\u3059\u3079\u3066\u9001\u4fe1\u3067\u304d\u307e\u3059\u3088\u3001\u3068\u3044\u3046\u30b3\u30fc\u30c9\u306b\u306a\u3063\u3066\u3044\u308b\u306e\u3067\u623b\u308a\u5024\u306e\u8a55\u4fa1\u306f\u30a8\u30e9\u30fc\u306e\u6709\u7121\u306e\u307f\u3068\u3057\u3066\u3044\u308b\u3002<\/p>\n<p>\u305d\u306e\u3042\u305f\u308a\u306e\u5b9f\u88c5\u306f\u3001Ethernet2\u30e9\u30a4\u30d6\u30e9\u30ea\u306eutility\/socket.cpp\u306esend() \u3092\u53c2\u7167\u3002<\/p>\n<h3>ESP32 + USR-ES1 &#8211; \u30ce\u30fc\u30c8PC\u9593\u306e\u5b9f\u884c\u6642\u8868\u793a<\/h3>\n<p>\u30ea\u30bb\u30c3\u30c8\u30dc\u30bf\u30f3(EN-SW)\u3092\u62bc\u3059\u3068\u30b7\u30ea\u30a2\u30eb\u30e2\u30cb\u30bf\u306b\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u8868\u793a\u3055\u308c\u305f\u3002<\/p>\n<pre class=\"lang:default decode:true\">ets Jun  8 2016 00:22:57\r\n\r\nrst:0x1 (POWERON_RESET),boot:0x17 (SPI_FAST_FLASH_BOOT)\r\nconfigsip: 0, SPIWP:0xee\r\nclk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00\r\nmode:DIO, clock div:1\r\nload:0x3fff0018,len:4\r\nload:0x3fff001c,len:956\r\nload:0x40078000,len:0\r\nload:0x40078000,len:13256\r\nentry 0x40078a90\r\nstart 1 : send 10485760 bytes completed. 23945 msec. 0.44 MBytes\/sec\r\nstart 2 : send 10485760 bytes completed. 23336 msec. 0.45 MBytes\/sec\r\nstart 3 : send 10485760 bytes completed. 23335 msec. 0.45 MBytes\/sec\r\nstart 4 : send 10485760 bytes completed. 23330 msec. 0.45 MBytes\/sec\r\nstart 5 : send 10485760 bytes completed. 23337 msec. 0.45 MBytes\/sec\r\nstart 6 : send 10485760 bytes completed. 23334 msec. 0.45 MBytes\/sec\r\nstart 7 : send 10485760 bytes completed. 23341 msec. 0.45 MBytes\/sec\r\nstart 8 : send 10485760 bytes completed. 23338 msec. 0.45 MBytes\/sec\r\nstart 9 : send 10485760 bytes completed. 23325 msec. 0.45 MBytes\/sec\r\nstart 10 : send 10485760 bytes completed. 23330 msec. 0.45 MBytes\/sec\r\naverage = 0.45 MBytes\/sec\r\n\r\nstart 1 : send 10485760 bytes completed. 23327 msec. 0.45 MBytes\/sec\r\n...<\/pre>\n<p><span style=\"text-decoration: underline;\">\u8ee2\u9001\u30ec\u30fc\u30c8\u306f\u6bce\u79d20.45\u30e1\u30ac\u30d0\u30a4\u30c8<\/span>\u3068\u3044\u3063\u305f\u3068\u3053\u308d\u3060\u3063\u305f\u3002\u30b7\u30ea\u30a2\u30eb\u901a\u4fe1\u3088\u308a\u306f\u683c\u6bb5\u306b\u9ad8\u901f\u306a\u3053\u3068\u306f\u9593\u9055\u3044\u306a\u3044\u304c\u3001\u3061\u3087\u3063\u3068\u7269\u8db3\u308a\u306a\u3044\u304b\u3089\u3001\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u66f8\u304d\u63db\u3048\u3066\u9ad8\u901f\u5316\u3092\u8a66\u307f\u3066\u307f\u305f\u3002\u305d\u308c\u306b\u3064\u3044\u3066\u306f\u672c\u6587\u5074\u3067\u89e6\u308c\u3066\u3044\u308b\u3002<\/p>\n<h2 id=\"3\">ESP32 WiFi\u4f7f\u7528\u6642\u306e\u30c6\u30b9\u30c8\u30b9\u30b1\u30c3\u30c1<\/h2>\n<p>\u53c2\u8003\u7528\u306bESP32\u3092WIFI_STA\u3068\u3057\u3066\u4f7f\u3063\u305f\u5834\u5408\u306e\u8ee2\u9001\u30ec\u30fc\u30c8\u3092\u5f97\u3066\u307f\u305f\u3002\u53d7\u4fe1\u5074\u30ce\u30fc\u30c8PC\u306f\u3001WiFi\u30eb\u30fc\u30bf\u30fc\u306e\u30ed\u30fc\u30ab\u30eb\u5074\u30cf\u30d6\u30682\u53f0\u306e\u30b9\u30a4\u30c3\u30c1\u30f3\u30b0\u30cf\u30d6\u3092\u4ecb\u3057\u3066LAN\u30b1\u30fc\u30d6\u30eb\u3067\u63a5\u7d9a\u3055\u308c\u3066\u3044\u308b\u3002\u306a\u304a\u3001\u3046\u3061\u306eWiFi\u30eb\u30fc\u30bf\u30fc\u306f\u53e4\u3044\u306e\u3067\u6709\u7dda\u5074\u30ea\u30f3\u30af\u901f\u5ea6\u306f100Mbps\u3067\u3042\u308b\u3002<\/p>\n<p>\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30b9\u30b1\u30c3\u30c1\u3092\u4f7f\u3063\u305f\u3002<\/p>\n<pre class=\"lang:c++ decode:true\" title=\"esp32_sta_speed1.ino\">#include &lt;WiFi.h&gt;\r\n#define LED 2\r\n\/\/ wifi\r\nconst char* ssid = \"ssid\";\r\nconst char* password = \"password\";\r\n\r\n#define DEST_PORT 8888\r\n\/\/ destination\r\nconst IPAddress s_ip(192,168,1,100);\r\n\/\/ static ip info\r\nconst IPAddress myip(192,168,1,99);\r\nconst IPAddress gwip(192,168,1,1);\r\nconst IPAddress mask(255,255,255,0);\r\n\r\nWiFiClient client;\r\n\r\nvoid die() {\r\n  digitalWrite(LED, 1);\r\n  delay(500);\r\n  digitalWrite(LED, 0);\r\n  delay(500);\r\n}\r\n\r\n#define MEGA  1024 * 1024\r\n#define BUFFER_SIZE 2048\r\n#define TRANSFER_BYTES 10 * MEGA\r\nchar buffer[BUFFER_SIZE];\r\n\r\nvoid setup_buffer(char* p, int sz) {\r\n  for(int i = 0; i &lt; sz; i++)\r\n    *p++ = (char)i % 256;\r\n}\r\n\r\n#define WAIT_MS 50\r\n#define WAIT_LIMIT  (int)(15000 \/ WAIT_MS)\r\nbool ap_connect() {\r\n  int n;\r\n  int count = 0;\r\n  int retry = 0;\r\n  Serial.printf(\"\\nstart ap_connect()\\n\");\r\n  WiFi.config(myip, gwip, mask, gwip);\r\n  WiFi.mode(WIFI_STA);\r\n  WiFi.disconnect();\r\n  delay(10);\r\n  WiFi.begin(ssid, password); \r\n  while ((n = WiFi.status()) != WL_CONNECTED) {\r\n    Serial.print(n);\r\n    delay(WAIT_MS);\r\n    if (n == WL_NO_SSID_AVAIL || n == WL_CONNECT_FAILED) {\r\n      WiFi.reconnect();\r\n      Serial.print(\"+\");\r\n      count = 0;\r\n      retry++;\r\n    }\r\n    if (count++ &gt; WAIT_LIMIT || retry &gt; 3) {\r\n      Serial.print(\"\\nap_connect() failed\\n\");\r\n      return false;\r\n    }\r\n  }\r\n  Serial.print(\"\\nap_connect() done.\\n\");\r\n  return true;\r\n}\r\n\r\nvoid setup() {\r\n  delay(1);\r\n  pinMode(LED, OUTPUT);\r\n  digitalWrite(LED, 0);\r\n  Serial.begin(115200);\r\n  Serial.println(\"esp32_sta_speed1 start.\");\r\n  if (!ap_connect()) {\r\n    Serial.print(\"wifi connect failed.\\n\");\r\n    die();\r\n  }\r\n}\r\n\r\nint loop_count = 0;\r\nfloat total_mbps = 0.0;\r\nvoid loop() {\r\n  unsigned long start = millis();\r\n  Serial.printf(\"start %d\\n\", loop_count++ + 1);\r\n  if (client.connect(s_ip, DEST_PORT) != 1) {\r\n    Serial.printf(\"connection failed. errno = %d\\n\", errno);\r\n    die();\r\n  }\r\n  setup_buffer(buffer, sizeof(buffer));\r\n  int transed_bytes = 0;\r\n  int left = sizeof(buffer);\r\n  int n = 0;\r\n  while(transed_bytes &lt; TRANSFER_BYTES) {\r\n    size_t n = client.write(&amp;buffer[n], left);\r\n    if (n == 0) {\r\n      Serial.printf(\"connection closed or send failed. errno = %d\\n\", errno);\r\n      die();\r\n    }\r\n    transed_bytes += n;\r\n    left -= n;\r\n    if (left != 0)\r\n      continue;        \r\n    n = 0;\r\n    left = sizeof(buffer);\r\n  }  \r\n  client.flush();\r\n  client.stop();\r\n  unsigned long elapsed =  millis() - start;\r\n  float mbps = (float)(transed_bytes \/ MEGA) \/ elapsed \/ 1000.0;\r\n  total_mbps += mbps;\r\n  Serial.printf(\"send %d bytes completed. %d msec. %.2f MBytes\/sec\\n\", transed_bytes, elapsed,  mbps);\r\n  if (loop_count == 10) {\r\n    Serial.printf(\"average = %.2f MBytes\/sec\\n\\n\", total_mbps \/ loop_count);\r\n    loop_count = 0;\r\n    total_mbps = 0.0;\r\n  }\r\n  delay(10);\r\n}<\/pre>\n<p>\u3044\u3064\u3082\u66f8\u3044\u3066\u3044\u308b\u3088\u3046\u306a\u5178\u578b\u7684\u306aWIFI_STA\u30b9\u30b1\u30c3\u30c1\u3067\u3042\u308b\u3002<\/p>\n<p><em>WiFiClient<\/em>\u306e <em>write();<\/em> \u306e\u5b9f\u88c5\u3067\u306f\u3001\u6307\u5b9a\u306e\u8ee2\u9001\u30d0\u30a4\u30c8\u6570\u309210\u56de\u307e\u308f\u308b\u30eb\u30fc\u30d7\u5185\u3067\u9001\u4fe1\u3057\u7d42\u308f\u3089\u306a\u3051\u308c\u3070\u3001\u9001\u4fe1\u3067\u304d\u305f\u30d0\u30a4\u30c8\u6570\u3092\u8fd4\u3059\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u308b(\u3053\u308c\u304c\u666e\u901a\u3060\u3068\u601d\u3046\u304c)\u3002\u305d\u306e\u305f\u3081\u3001\u4e00\u5ea6\u306b\u9001\u4fe1\u3067\u304d\u306a\u304b\u3063\u305f\u6b8b\u308a\u306b\u3064\u3044\u3066\u3082\u8003\u616e\u3057\u3066\u3044\u308b\u3002<\/p>\n<h2>ESP32 WiFi-\u30ce\u30fc\u30c8PC\u9593\u306e\u5b9f\u884c\u7d50\u679c<\/h2>\n<pre class=\"lang:default decode:true \">start ap_connect()\r\n666666666666666666666666666666666666666666666666666666666666666\r\nap_connect() done.\r\nstart 1 : send 10485760 bytes completed. 11791 msec. 0.89 MBytes\/sec\r\nstart 2 : send 10485760 bytes completed. 8475 msec. 1.24 MBytes\/sec\r\nstart 3 : send 10485760 bytes completed. 8572 msec. 1.22 MBytes\/sec\r\nstart 4 : send 10485760 bytes completed. 8392 msec. 1.25 MBytes\/sec\r\nstart 5 : send 10485760 bytes completed. 8077 msec. 1.30 MBytes\/sec\r\nstart 6 : send 10485760 bytes completed. 8170 msec. 1.28 MBytes\/sec\r\nstart 7 : send 10485760 bytes completed. 8154 msec. 1.29 MBytes\/sec\r\nstart 8 : send 10485760 bytes completed. 8238 msec. 1.27 MBytes\/sec\r\nstart 9 : send 10485760 bytes completed. 8037 msec. 1.30 MBytes\/sec\r\nstart 10 : send 10485760 bytes completed. 8071 msec. 1.30 MBytes\/sec\r\naverage = 1.23 MBytes\/sec\r\n...<\/pre>\n<p><span style=\"text-decoration: underline;\">\u8ee2\u9001\u30ec\u30fc\u30c8\u306f\u6bce\u79d2\u7d041.23\u30e1\u30ac\u30d0\u30a4\u30c8<\/span>\u3060\u3063\u305f\u3002\u306a\u3093\u304b\u9045\u3044\u6c17\u3082\u3059\u308b\u304c\u3001USR-ES1\u3067\u306e\u6709\u7dda\u63a5\u7d9a\u3088\u308a\u306f\u901f\u304b\u3063\u305f\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>ESP32\u306bSPI to Ethernet \u30e2\u30b8\u30e5\u30fc\u30eb USR-ES1\u3092\u63a5\u7d9a\u3057\u305f\u8a71 ESP32 + USR-ES1\u304b\u3089\u540c\u4e00LAN\u5185\u306ePC\u306bTCP\u3067\u30c7\u30fc\u30bf\u8ee2\u9001\u3092\u884c\u3063\u305f\u3068\u304d\u3001\u3069\u308c\u304f\u3089\u3044\u306e\u6027\u80fd\u304c\u51fa\u308b\u306e\u304b\u3092\u8abf\u3079\u308b\u306e\u306b\u4f7f\u3063\u305f\u30d7\u30ed\u30b0 &hellip; <a href=\"https:\/\/okiraku-camera.tokyo\/blog\/?page_id=7266\" class=\"more-link\">\u7d9a\u304d\u3092\u8aad\u3080 <span class=\"screen-reader-text\">ESP32 + USR-ES1\u306e\u8abf\u67fb<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-7266","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/okiraku-camera.tokyo\/blog\/index.php?rest_route=\/wp\/v2\/pages\/7266","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/okiraku-camera.tokyo\/blog\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/okiraku-camera.tokyo\/blog\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/okiraku-camera.tokyo\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/okiraku-camera.tokyo\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=7266"}],"version-history":[{"count":0,"href":"https:\/\/okiraku-camera.tokyo\/blog\/index.php?rest_route=\/wp\/v2\/pages\/7266\/revisions"}],"wp:attachment":[{"href":"https:\/\/okiraku-camera.tokyo\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=7266"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}