ESP8266 Arduino Example を試す

﻿# ESP8266 Arduino の [Example](https://github.com/esp8266/Arduino/tree/master/libraries/esp8266/examples) を試す
書きかけ

### スケッチ例
#### ESP8266<br>

- [Blink](https://github.com/esp8266/Arduino/blob/master/libraries/esp8266/examples/Blink/Blink.ino)
LED_BUILTINは<b>1番ピン</b>にアサインされています。（[pins_arduino.h](https://github.com/esp8266/Arduino/blob/master/variants/generic/pins_arduino.h#L38)で定義されています。ボード設定を変更すると定義も応じて変わる）1番ピンにLEDをつなぐと点灯２秒、消灯１秒でブリンクします。<br><br>

- [BlinkWithoutDelay](https://github.com/esp8266/Arduino/blob/master/libraries/esp8266/examples/BlinkWithoutDelay/BlinkWithoutDelay.ino)
 LED Blink ですが、Delayではなく、<b>millis()</b>なる関数を使って時間を計っています。 millis()はボードがプログラムの実行を開始した時から現在までの時間をミリ秒単位で返します。<br><br>

- [CallSDKFunctions](https://github.com/esp8266/Arduino/blob/master/libraries/esp8266/examples/CallSDKFunctions/CallSDKFunctions.ino)
シリアルポートを使います。baudレート115,200でwifi_station_get_hostname:を出力します。シリアルは、[これ](http://qiita.com/YumeYakata/items/01ace8a588bb58bc0bc5)をつかいました。<br>

```
wifi_station_get_hostname()
```
で、ホスト名が取れます。<br><br>

- [CheckFlashConfig](https://github.com/esp8266/Arduino/blob/master/libraries/esp8266/examples/CheckFlashConfig/CheckFlashConfig.ino)
<br><br>IDEのEEPROM設定とハードウェアの一致<br>
ESPのリファレンスは[ここ](https://techtutorialsx.com/2017/04/26/esp8266-flash-chip-information-functions/)がわかりやすいか？<br>

 ```CheckFlashConfig.ino
 ESP.getFlashChipId();        //Flash real id:   001640A1H
 ESP.getFlashChipRealSize();  //Flash real size: 4194304
 ESP.getFlashChipSize();      //Flash ide  size: 524288
 ESP.getFlashChipSpeed();     //Flash ide speed: 40000000
 ESP.getFlashChipMode();      //Flash ide mode:  DIO
 Flash Chip configuration wrong! //ideSize != realSize
 ```

- [ConfigFile](https://github.com/esp8266/Arduino/blob/master/libraries/esp8266/examples/ConfigFile/ConfigFile.ino)
ArduinoJson.h: No such file or directory
と表示が出てコンパイルできませんでした。

[ArduinoJson](https://github.com/bblanchon/ArduinoJson/releases)はここからダウンロードできます。私はArduinoJson-v5.10.0.zipをダウンロードしました。このファイルをC:\Program Files\Arduinoにおきました。その上で、
Arduino IDE にインストールします。<br><b>スケッチ＞ライブラリをインクルード＞.ZIP形式のライブラリをインストール</B>
ここまでくればコンパイルすることができます。
このサンプルはESP-WROOM-02の<b>SPIFFS</b>とういう領域のファイルを作って、読み書きをしています。

ESP-WROOM-02 の取り説によると、SPI Flash が4MB 搭載されているとのこと。
This module is mounted with an 4 MB external SPI flash to store user programs. 

<br>

- [RTCUserMemory](https://github.com/esp8266/Arduino/blob/master/libraries/esp8266/examples/RTCUserMemory/RTCUserMemory.ino)
[RTCMemoryのついて調べてみた]
(http://qiita.com/YumeYakata/items/c8db045c48dc3ebd0b24)
<br>
<b>このプログラムを動作させるときは、GPI16 とRESETをショートさせておく。</b>

このプログラムはsetup で
1. RTC Memory を読み込んでプリント
2. RTC Memory へ乱数を書き込んで、
3. メモリーの先頭のCRC32 (巡回冗長検査)でメモリーの中身が正しいかどうかを判断
4. 5 秒のDeep Sleep に入る。
5. 5秒後、Deep Sleep から起き、リセットが発生しる。
setupが再起動する。先に書き込んだ乱数がプリントされる。

```RTCUserMemory.ino
// uint32_t --- 4byteアラインのポインタ
// sizeof(rtcData)は 512 になるので、RTCMemory の全領域のメモリにアクセスするための構造体
struct {
  uint32_t crc32;　// ---Cyclic Redundancy Check
  byte data[508];
} rtcData;

//RTC Memory から読み込む
ESP.rtcUserMemoryRead(0, (uint32_t*) &rtcData, sizeof(rtcData))
//RTC Memory へ書き込む
ESP.rtcUserMemoryWrite(0, (uint32_t*) &rtcData, sizeof(rtcData))
// 5秒のDeepSleep Mode へ
  ESP.deepSleep(5e6);
```


- [TestEspAps](https://github.com/esp8266/Arduino/blob/master/libraries/esp8266/examples/TestEspApi/TestEspApi.ino)

ESP8266 Non-OS APIの情報表示　[programming_guide]
(http://www.espressif.com/sites/default/files/20a-esp8266_rtos_sdk_programming_guide_en_v1.4.0.pdf)に記載がある。
このサンプルプログラムだけ<b>Serial.begin(74880);</b>となっているので注意が必要。</b>

ESP starting.
'--------------------

system_get_time(): 275065
system_get_rst_info() reset reason: REASON_EXT_SYS_RST
system_get_free_heap_size(): 47888
system_get_os_print(): 0
system_get_os_print(): 1
system_get_chip_id(): 0x84D533
system_get_sdk_version(): 1.5.3(aec24ac9)
system_get_boot_version(): 5
system_get_userbin_addr(): 0x0
system_get_boot_mode(): SYS_BOOT_ENHANCE_MODE
system_get_cpu_freq(): 160
system_get_flash_size_map(): FLASH_SIZE_4M_MAP_256_256
wifi_get_opmode(): 1 - STATION_MODE
wifi_get_opmode_default(): 1 - STATION_MODE
wifi_get_broadcast_if(): 1

SoftAP Configuration

'--------------------
ssid:            TestAP
password:        testtesttest
ssid_len:        6
channel:         1
authmode:        AUTH_WPA2_PSK
ssid_hidden:     0
max_connection:  4
beacon_interval: 34476ms
'--------------------

wifi_get_channel(): 1
wifi_get_phy_mode(): PHY_MODE_11N
system_get_time(): 342587