10.picoでwifiサンプル動作 Arduino
10.picoでwifiサンプル動作 Arduino
ESP8266を使用してArduinoでwifi接続をし、指定ホームページの最初の2000文字程度を読取ります。しかし、まだ不明点があります。
・httpsが読めるか。
・日本語の文字化けは直せるか。
ESP8266基板
Pico ESP8266https://www.waveshare.com/wiki/Pico-ESP8266
・ESP-12F (ESP8266の小さいパッケージ)
・UART通信 115200 bps
・GP0 UART Tx0
・GP1 UART Rx0
・動作電圧 3.3V
ライブラリ
Arduino-IDE のライブリマネージャ検索欄にて "wifi esp8266 pico"で検索すると、11件ヒットしました。全てKhoi Hoang氏のライブラリです。全てインストールしてみました。1.Blynk_Esp8266AT_WM
[Blynk]マルチWiFiクレデンシャルを備えたBlynk用のシンプルなWiFiManager、RP2040ベースなどのESP8266ATシールドを実行するボード用。EEPROM、SAMD EEPROMでエミュレートされたFlashStorage、SAM-DUEDueFlashStorageまたはnRF52/RP2040LittleFSに保存された構成データ
https://github.com/khoih-prog/Blynk_Esp8266AT_WM
RP2040_ESP8266Shield.ino
2.DDNS_Generic
[DDNS]ESP8266-ATを使用して、ESP8266、RP2040ベースのRASPBERRY_PI_PICOなどの自動DDNS更新クライアントを実装するシンプルなライブラリ/ ESP32-AT WiFi、WiFiNINA、イーサネットW5x00、ENC28J60またはLAN8742A。軽量になるように設計されており、現在DuckDNS、No-ip、…をサポートしています。
https://github.com/khoih-prog/DDNS_Generic
3.ESP_AT_Lib
[ラッパー]Arduino用のESP8266/ESP32ラッパーライブラリは、ESP8266/ESP32-ATシールドを操作するための使いやすい方法を提供します。
https://github.com/khoih-prog/ESP_AT_Lib
4.ESP_AT_WiFiManager
ESP8266/ESP32-ATコマンドシールドを使用して、RP2040ベースのボードなどの実行時にWiFi/クレデンシャルを構成するライブラリ。静的APおよびSTAIPを指定することもできます。https://github.com/khoih-prog/ESP_AT_WiFiManager
5.ESP_AT_WM_Lite
[4のLite版]RP2040ベースのRASPBERRY_PI_PICOなどの軽量WiFi/ Credentials Managerは、Web構成ポータルでESP8266/ESP32-ATコマンドシールドを実行します。動的なカスタムパラメータの追加を可能にする、強力でありながら使いやすい機能。静的APおよびSTAIPを指定することもできます。使用するメモを大幅に減らします…
https://github.com/khoih-prog/ESP_AT_WM_Lite
RPi_Pico_ESP8266Shield.ino
6.Ethernet_Manager
[有線LAN]ESP8266などのボード用のシンプルなイーサネットマネージャー。SSLの有無にかかわらず、構成データはESP8266 LittleFS、SPIFFS、nRF52 LittleFS / InternalFS、EEPROM、DueFlashStorage、またはSAMDFlashStorageに保存されます。
https://github.com/khoih-prog/Ethernet_Manager
Ethernet_RP2040.ino, MQTT_ThingStream_Ethernet_RP2040.ino
7.FTPClient_Generic
[FTP]RP2040ベースRASPBERRY_PI_PICO等の汎用ボード用のFTPクライアント/ESP8266など)。FTPクライアントはWiFi(ESP82662-AT等)、イーサネット…を使用できます
https://github.com/khoih-prog/FTPClient_Generic
8.NTPClient_Generic
[NTP]NTPClientがNTPタイムサーバーに接続するためのライブラリ。NTPタイムサーバーから時間を取得し、同期を維持します。AVR以外のESP8266などの場合、ESP8266ATコマンドWiFiを使用。
https://github.com/khoih-prog/NTPClient_Generic
9.Timezone_Generic
[夏時間]タイムゾーンの変換と自動夏時間の調整を容易にするライブラリ。ESP8266、RP2040ベースRASPBERRY_PI_PICO等を使用するイーサネットまたはWiFiボードなど…
https://github.com/khoih-prog/Timezone_Generic
10.WiFiMulti_Generic
[Multi]ESP32/ESP8266のWiFiライブラリのMultiWiFiを他のすべてのWiFiモジュールおよびライブラリに適合させるためのシンプルなMultiWiFiライブラリ。現在、ESP8266、RP2040ベース(RASPBERRY_PI_PICOなど)のボードをサポートしています。...
https://github.com/khoih-prog/WiFiMulti_Generic
WiFiMulti.ino
11.WiFiWebServer
[WebServer]WiFiモジュール/シールドを実行するRP2040ベースなどのボード用のシンプルでありながら完全なWebServerライブラリです。これらの関数はESP8266/ESP32 WebServerライブラリと類似しており、互換性があるため、ESP8266/ESP32からスケッチを移植するのがはるかに簡単になります。現在WiFiMultを使用しています…
https://github.com/khoih-prog/WiFiWebServer
WiFiManager_Generic_Lite
番外 HPよりRP2040ベースRASPBERRY_PI_PICOなどのボードの実行時にMultiWiFi/クレデンシャルを構成するライブラリ、汎用WiFi(ESP8266-ATなど)モジュール/シールドを使用します。DHCPホスト名、静的AP、およびSTAIPを指定することもできます。…
https://github.com/khoih-prog/WiFiManager_Generic_Lite
RP2040_WiFi.ino, RP2040_WiFi_MQTT.ino
API集
3.ESP_AT_Libhttps://github.com/khoih-prog/ESP_AT_Lib
の頁中頃に30以上のAPIの説明があります。また、
9.Timezone_Generic
https://github.com/khoih-prog/Timezone_Generic
の頁中頃にTimezone_Genericライブラリがあります。
サンプル動作
3.ESP_AT_Libのexamples\HTTPGET\HTTPGET.inoのスケッチを一部修正して動作させます。
・ESP8266/Arduinoに基づいています。
https://github.com/esp8266/Arduino/releases
・ESP8266 Arduinoの解説
https://arduino-esp8266.readthedocs.io/en/latest/
HTTP
・Web(サーバー)と、ブラウザ(クライアント)間で、Webページを送受信するためのプロトコルです。・日本の文字コードは、UTF-8、Shift_JIS、EUC-JPがよく使われています。
・CR LF は \r\n です。
1.Arduino日本語リファレンスの例
1.1 HTTPの要求送信
Arduino日本語リファレンスのSerial.begin(speed)についてスケッチに書く内容です。GET /arduino/ref/index.php?f=0&pos=3185 HTTP/1.1
↑リクエスト ブラウザはサーバにページ取得を要求 特定リソースをリクエスト
Host: www.musashinodenpa.com
↑ブラウザからサーバにサーバ名を送信 必須 空白行までヘッダ
Accept-Charset: EUC-JP
↑受信可能なエンコード
Connection: close
↑接続を閉じる意思有り
空白行
よって、
"GET /arduino/ref/index.php?f=0&pos=3185 HTTP/1.1\r\nHost: www.musashinodenpa.com\r\nAccept-Charset: EUC-JP\r\nConnection: close\r\n\r\n"
となります。
1.2 webページ
Arduino日本語リファレンスのSerial.begin(speed)http://www.musashinodenpa.com/arduino/ref/index.php?f=0&pos=3185
読込先の頁のソースです。
<html>
<head>
<title>Arduino 日本語リファレンス</title>
</dead>
<style TYPE="text/css">
<!--
BODY { margin:3em 6em 3em 6em; background:white; }
H1 { font-size:110%; margin:1.5em 0.2em 0.5em 0em; border-bottom:1px solid #808080; }
PRE { margin:10px 20px 10px 10px; }
-->
</style>
<body>
<div style="text-align:center">
<font size=+1><b>Arduino 日本語リファレンス</b></font><br>
<hr size=1 noshade>
<br>
<table width=100% cellspacing=9>
<tr>
<td><h2>Serial.begin(speed) </h2> <a href=http://www.arduino.cc/en/Reference/Serial/Begin
>原文</a><br />
<br />シリアル通信のデータ転送レートをbps(baud)で指定します。bpsはビット/秒です。コンピュータと通信する際は、次のレートから1つを選びます。
<br />300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, 115200
<br />他の転送レートを必要とするコンポーネントをピン0と1につないで使う場合、上記以外の値を指定することも可能です。
<br />
<br />
<br />【パラメータ】
<br />
<br />speed: 転送レート (int)
<br />
<br />【戻り値】
<br />
<br />なし
<br />
<br />【例】
<br />
<br /><pre style="border:2px dotted tomato; padding:10px 10px 10px">void setup() {
Serial.begin(9600); // 9600bpsでポートを開く
}
void loop() {}
</pre>
<br />次に示すのはArduino Megaでの使用例です。4つのシリアルポート(Serial, Serial1, Serial2, Serial3)を異なる転送レートで初期化しています。
以下略1.3 シリアルモニタ出力
実際の出力内容です。ホームページの受信で、文字コードを EUC-JP に合わせても、日本語が文字化けしています。
HTTPGET.ino 開始
ボード名: RASPBERRY_PI_PICO
ESP_AT_Lib v1.4.1
ATコマンドのVer: AT+GMR
AT version:1.2.0.0(Jul 1 2016 20:04:45)
SDK version:1.5.4.1(39cb9a32)
Ai-Thinker Technology Co. Ltd.
v1.5.4.1-a Nov 30 2017 15:54:29
OK
AP+STA両モードに設定: 成功
WiFiに接続: 成功
IP:
+CIFSR:APIP,"192.168.4.1"
+CIFSR:APMAC,"46:17:93:04:8c:ae"
+CIFSR:STAIP,"192.168.68.61"
+CIFSR:STAMAC,"44:17:93:04:8c:ae"
単一接続モードに設定: 成功
設定終了
TCP作成: 成功
========================= 受信 ============================
HTTP/1.1 200 OK
Date: Wed, 06 Jul 2022 05:52:50 GMT
Server: Apache/2.2.15 (FreeBSD) DAV/2 PHP/7.3.9
X-Powered-By: PHP/7.3.9
Content-Length: 2472
Connection: close
Content-Type: text/html; charset=EUC-JP
<html>
<head>
<title>Arduino ⸮⸮⸮ܸ⸮⸮ե⸮⸮⸮⸮</title>
</dead>
<style TYPE="text/css">
<!--
BODY { margin:3em 6em 3em 6em; background:white; }
H1 { font-size:110%; margin:1.5em 0.2em 0.5em 0em; border-bottom:1px solid #808080; }
PRE { margin:10px 20px 10px 10px; }
-->
</style>
<body>
<div style="text-align:center">
<font size=+1><b>Arduino ⸮⸮⸮ܸ⸮⸮ե⸮⸮⸮⸮</b></font><br>
<hr size=1 noshade>
<br>
<table width=100% cellspacing=9>
<tr>
<td><h2>Serial.begin(speed) </h2> <a href=http://www.arduino.cc/en/Reference/Serial/Begin
>⸮⸮ʸ</a><br />
<br />⸮⸮⸮ꥢ⸮⸮⸮̿⸮⸮Υǡ⸮⸮⸮ž⸮⸮⸮졼⸮Ȥ⸮bps(baud)⸮ǻ⸮⸮ꤷ⸮ޤ⸮⸮⸮bps⸮ϥӥå⸮/⸮äǤ⸮⸮⸮⸮⸮⸮⸮ԥ塼⸮⸮⸮⸮⸮̿⸮⸮⸮⸮⸮ݤϡ⸮⸮⸮⸮Υ졼⸮Ȥ⸮⸮⸮1⸮Ĥ⸮⸮⸮⸮Ӥޤ⸮⸮⸮
<br />300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, 115200
<br />¾⸮⸮ž⸮⸮⸮졼⸮Ȥ⸮ɬ⸮פȤ⸮⸮륳⸮⸮ݡ⸮⸮ͥ⸮Ȥ⸮ԥ⸮0⸮⸮1⸮ˤĤʤ⸮⸮ǻȤ⸮⸮⸮硢⸮嵭⸮ʳ⸮⸮⸮⸮ͤ⸮⸮⸮ꤹ⸮뤳⸮Ȥ⸮⸮ǽ⸮Ǥ⸮⸮⸮
<br />
<br />
<br />⸮ڥѥ⸮⸮⸮⸮⸮
<br />
<br />speed: ž⸮⸮⸮졼⸮⸮ (int)
<br />
<br />⸮⸮⸮⸮⸮⸮͡⸮
<br />
<br />⸮ʤ⸮
<br />
<br />⸮⸮⸮⸮⸮
<br />
<br /><pre style="border:2px dotted tomato; padding:10px 10px 10px">void setup() {
Serial.begin(9600); // 9600bps⸮ǥݡ⸮⸮Ȥ⸮
}
void loop() {}
</pre>
<br />⸮⸮⸮˼⸮⸮⸮⸮Τ⸮Arduino Mega⸮Ǥλ⸮⸮⸮⸮⸮Ǥ⸮⸮⸮4⸮ĤΥ⸮⸮ꥢ⸮⸮ݡ⸮⸮⸮(Seri
============================================================
2.arduinoロゴについて
2.1 HTTPの要求送信
スケッチに書く内容です。GET /asciilogo.txt HTTP/1.1
↑上(1.1)と同じ
Host: arduino.tips
↑上(1.1)と同じ
Connection: close
↑上(1.1)と同じ
空白行
よって、
"GET /asciilogo.txt HTTP/1.1\r\nHost: arduino.tips\r\nConnection: close\r\n\r\n"
となります。
2.2 webページ
http://arduino.tips/asciilogo.txt読込先の頁のソースです。
`:;;;,` .:;;:.
.;;;;;;;;;;;` :;;;;;;;;;;: TM
`;;;;;;;;;;;;;;;` :;;;;;;;;;;;;;;;
:;;;;;;;;;;;;;;;;;; `;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;; .;;;;;;;;;;;;;;;;;;;;
;;;;;;;;:` `;;;;;;;;; ,;;;;;;;;.` .;;;;;;;;
.;;;;;;, :;;;;;;; .;;;;;;; ;;;;;;;
;;;;;; ;;;;;;; ;;;;;;, ;;;;;;.
,;;;;; ;;;;;;.;;;;;;` ;;;;;;
;;;;;. ;;;;;;;;;;;` ``` ;;;;;`
;;;;; ;;;;;;;;;, ;;; .;;;;;
`;;;;: `;;;;;;;; ;;; ;;;;;
,;;;;` `,,,,,,,, ;;;;;;; .,,;;;,,, ;;;;;
:;;;;` .;;;;;;;; ;;;;;, :;;;;;;;; ;;;;;
:;;;;` .;;;;;;;; `;;;;;; :;;;;;;;; ;;;;;
.;;;;. ;;;;;;;. ;;; ;;;;;
;;;;; ;;;;;;;;; ;;; ;;;;;
;;;;; .;;;;;;;;;; ;;; ;;;;;,
;;;;;; `;;;;;;;;;;;; ;;;;;
`;;;;;, .;;;;;; ;;;;;;; ;;;;;;
;;;;;;: :;;;;;;. ;;;;;;; ;;;;;;
;;;;;;;` .;;;;;;;, ;;;;;;;; ;;;;;;;:
;;;;;;;;;:,:;;;;;;;;;: ;;;;;;;;;;:,;;;;;;;;;;
`;;;;;;;;;;;;;;;;;;;. ;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;; :;;;;;;;;;;;;;;;;:
,;;;;;;;;;;;;;, ;;;;;;;;;;;;;;
.;;;;;;;;;` ,;;;;;;;;:
;;; ;;;;;` ;;;;: .;; ;; ,;;;;;, ;;. `;, ;;;;
;;; ;;:;;; ;;;;;; .;; ;; ,;;;;;: ;;; `;, ;;;:;;
,;:; ;; ;; ;; ;; .;; ;; ,;, ;;;,`;, ;; ;;
;; ;: ;; ;; ;; ;; .;; ;; ,;, ;;;;`;, ;; ;;.
;: ;; ;;;;;: ;; ;; .;; ;; ,;, ;;`;;;, ;; ;;`
,;;;;; ;;`;; ;; ;; .;; ;; ,;, ;; ;;;, ;; ;;
;; ,;, ;; .;; ;;;;;: ;;;;;: ,;;;;;: ;; ;;, ;;;;;;
;; ;; ;; ;;` ;;;;. `;;;: ,;;;;;, ;; ;;, ;;;;
2.3 シリアルモニタ出力
実際の出力内容です。
HTTPGET.ino 開始
ボード名: RASPBERRY_PI_PICO
ESP_AT_Lib v1.4.1
ATコマンドのVer: AT+GMR
AT version:1.2.0.0(Jul 1 2016 20:04:45)
SDK version:1.5.4.1(39cb9a32)
Ai-Thinker Technology Co. Ltd.
v1.5.4.1-a Nov 30 2017 15:54:29
OK
AP+STA両モードに設定: 成功
WiFiに接続: 成功
IP:
+CIFSR:APIP,"192.168.4.1"
+CIFSR:APMAC,"46:17:93:04:8c:ae"
+CIFSR:STAIP,"192.168.68.61"
+CIFSR:STAMAC,"44:17:93:04:8c:ae"
単一接続モードに設定: 成功
設定終了
TCP作成: 成功
========================= 受信 ============================
HTTP/1.1 200 OK
Date: Thu, 07 Jul 2022 14:00:33 GMT
Content-Type: text/plain
Content-Length: 2263
Connection: close
x-amz-id-2: owrfm/mRP7c9GUnqtGYVU5rkFVJ3o7vIx6kCpajR5An6xF8HiacwNTyPDqeDh3ulKO0fDRarRuM=
x-amz-request-id: BQGVJAAS6HW9RHMR
Last-Modified: Wed, 23 Feb 2022 14:56:42 GMT
ETag: "667cf48afcc12c38c8c1637947a04224"
CF-Cache-Status: DYNAMIC
Report-To: {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=cdr7tnDp5aJmcXsPFIb6uE1QAUVUVUufdsOrvi%2FpP0IDMC9SeCc0chptmKtU2ocYQzVA8u2i6Ptrh%2BPsXoEdj6TZZHxRgM%2FeRmIpBPRuZiAbdIqG2OA7%2Bh0O0GRwtDU%3D"}],"group":"cf-nel","max_age":604800}
NEL: {"success_fraction":0,"report_to":"cf-nel","max_age":604800}
Server: cloudflare
CF-RAY: 72711b64ea5d80a1-NRT
alt-svc: h3=":443"; ma=86400, h3-29=":443"; ma=86400
`:;;;,` .:;;:.
.;;;;;;;;;;;` :;;;;;;;;;;: TM
`;;;;;;;;;;;;;;;` :;;;;;;;;;;;;;;;
:;;;;;;;;;;;;;;;;;; `;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;; .;;;;;;;;;;;;;;;;;;;;
;;;;;;;;:` `;;;;;;;;; ,;;;;;;;;.` .;;;;;;;;
.;;;;;;, :;;;;;;; .;;;;;;; ;;;;;;;
;;;;;; ;;;;;;; ;;;;;;, ;;;;;;.
,;;;;; ;;;;;;.;;;;;;` ;;;;;;
;;;;;. ;;;;;;;;;;;` ``` ;;;;;`
;;;;; ;;;;;;;;;, ;;; .;;;;;
`;;;;: `;;;;;;
============================================================
スケッチ
2つの*****には、wifiのssidとそのパスワードを記入してください。
// HTTPGET.ino ESP_AT_Libでweb頁取得
// https://github.com/khoih-prog/ESP_AT_Lib/tree/master/examples/HTTPGET/HTTPGET.ino
#include "ESP_AT_Lib.h" // ATコマンドライブラリ使用
#define SSID "*****" // 自分のssid
#define PASSWORD "*****" // そのパスワード
////////// 下の要求内容のhello[]も変更
#define HOST_NAME "www.musashinodenpa.com" // 接続先1
//#define HOST_NAME "arduino.tips" // 接続先2 arduino.ccから変更
//#define HOST_NAME "www.yahoo.com" // 接続先 ng
//////////
#define HOST_PORT (80) // ポート番号
#define ESP_AT_DEBUG_OUTPUT Serial // 定義する シリアルモニタ
#define EspSerial Serial1 // 定義する ESP8266
#define _ESP_AT_LOGLEVEL_ 4 // 定義する デバッグレベル(0-4)
#define BOARD_TYPE "RASPBERRY_PI_PICO" // 定義する ボードtype
#define BOARD_NAME BOARD_TYPE // 定義する ボード名
ESP8266 wifi(&EspSerial); //
void setup(void){
EspSerial.begin(115200); // ESPモジュールのシリアルを初期化
Serial.begin(115200); // シリアルモニタを初期化
while (!Serial); // シリアルモニタが開くまで待つ
delay(1000); // 1秒待つ
Serial.println("\nHTTPGET.ino 開始"); // 表示
Serial.println("ボード名: " + String(BOARD_NAME));//"RASPBERRY_PI_PICO"と表示
Serial.println(ESP_AT_LIB_VERSION);//"ESP_AT_Lib v1.4.1"と表示 ライブラリのVer
Serial.print("ATコマンドのVer: "); // 表示
Serial.println(wifi.getVersion().c_str()); // AT+GMR ATコマンドのVer
// "AT version:1.2.0.0(Jul 1 2016 20:04:45)" "SDK version:1.5.4.1(39cb9a32)"
// "Ai-Thinker Technology Co. Ltd." "v1.5.4.1-a Nov 30 2017 15:54:29" "OK"と表示
Serial.print("AP+STA両モードに設定: "); // 表示
if (wifi.setOprToStationSoftAP()){ // 動作モードをSTA+softAPに設定出来たら
Serial.println("成功"); // こちらを表示
} else {
Serial.println("失敗"); // 表示
}
Serial.print("WiFiに接続: "); // 表示
if (wifi.joinAP(SSID, PASSWORD)){ // APに接続出来たら
Serial.println("成功\nIP: "); // 表示
Serial.println(wifi.getLocalIP().c_str()); //ESP8266のIPアドレスを取得
// +CIFSR:APIP,"192.168.4.1" +CIFSR:APMAC,"46:17:93:04:8c:ae"
// +CIFSR:STAIP,"192.168.68.61" +CIFSR:STAMAC,"44:17:93:04:8c:ae"と表示
} else {
Serial.println("失敗"); // 表示
}
Serial.print("単一接続モードに設定: "); // 表示
if (wifi.disableMUX()){ // 単一接続モードなら
Serial.println("成功"); // こちらを表示
} else {
Serial.println("失敗"); // 表示
}
Serial.println("設定終了"); // 表示
}
uint8_t buffer[2048] = {0}; // bufferの初期化 1パケットmax2048byte
void loop(void){
Serial.print("TCP作成: "); // 表示
if (wifi.createTCP(HOST_NAME, HOST_PORT)){ // シングルモードでTCP接続が出来たら
Serial.println("成功"); // こちらを表示
} else {
Serial.println("失敗"); // 表示
}
//////////
char hello[] = "GET /arduino/ref/index.php?f=0&pos=3185 HTTP/1.1\r\nHost: www.musashinodenpa.com\r\nAccept-Charset: EUC-JP\r\nConnection: close\r\n\r\n";
//char hello[] = "GET /asciilogo.txt HTTP/1.1\r\nHost: arduino.tips\r\nConnection: close\r\n\r\n";
//char hello[] = "GET / HTTP/1.1\r\nHost: www.yahoo.com\r\nConnection: close\r\n\r\n";
//////////
wifi.send((const uint8_t*)hello, strlen(hello)); // シングルモードで要求送信
uint32_t len = wifi.recv(buffer, sizeof(buffer), 10000); // bufferに応答受信
if (len > 0){ // 受信データがあれば
Serial.println("========================= 受信 ============================");
for (uint32_t i = 0; i < len; i++){ // 1文字ずつ
Serial.print((char) buffer[i]); // 1文字表示
}
Serial.println("\n============================================================");
}
if (wifi.releaseTCP()){ // シングルモードでTCP接続を解放
Serial.println("TCPを解放"); // 表示
}
delay(60000); // 1分待つ
}
* フラッシュメモリ(2Mbyte)を、スケッチが2%使用。RAM(262kbyte)を、グローバル変数が3%使用、ローカル変数で252kbyte使用可能。(1kbyte=1000byteで計算)