3: 2025-04-24 (木) 10:06:18 yuji ![]() |
現: 2025-05-15 (木) 10:36:59 yuji ![]() Deleted an attach file: esp8266_nonos_sdk-3.0.6yu.zip at 2025-05-18 (日) 07:24:38 |
||
---|---|---|---|
Line 1: | Line 1: | ||
* WeMos D1 [#r801e7a3] | * WeMos D1 [#r801e7a3] | ||
- | WeMos D1((改良版はWeMos D1 R2))は,[[中国WEMOS社>https://www.wemos.cc/]]からリリースされていたArduino UNO R3形状の小型ボード。~ | + | WeMos D1((改良版はWeMos D1 R2))は,[[中国WEMOS>https://www.wemos.cc/]]社からリリースされていたArduino UNO R3形状の小型ボード。~ |
このWeMos D1の互換ボードの[[HiLetgo OTA WeMos D1 CH340 WiFi 開発ボード ESP8266 ESP-12F Arduino IDE UNO R3>https://amzn.to/3Rnozo7]]((HiletGO製のはもう販売されていないのでこれは似たようにボード))が非常に安価でAmazonで500円程度で購入できた :) ~ | このWeMos D1の互換ボードの[[HiLetgo OTA WeMos D1 CH340 WiFi 開発ボード ESP8266 ESP-12F Arduino IDE UNO R3>https://amzn.to/3Rnozo7]]((HiletGO製のはもう販売されていないのでこれは似たようにボード))が非常に安価でAmazonで500円程度で購入できた :) ~ | ||
&ref(HiLetgo_D1.png,,50%);~ | &ref(HiLetgo_D1.png,,50%);~ | ||
- | ボードには中国[[Espressif Systems社>https://www.espressif.com/]]の[[ESP8266>https://www.espressif.com/en/products/modules/esp8266]]を使ったCPU Module(AI-Thinker製ESP-12F)が使われている。~ | + | ボードには中国[[Espressif Systems社>https://www.espressif.com/]]の[[ESP8266EX>https://www.espressif.com/en/products/modules/esp8266]]を使ったCPU Module([[Ai-Thinker:https://en.ai-thinker.com/]]製ESP-12F)が使われている。~ |
#ref(esp8266.png,,60%) | #ref(esp8266.png,,60%) | ||
Line 18: | Line 18: | ||
- 16個のレジスタ~ | - 16個のレジスタ~ | ||
- 4MB Flash Memoryの搭載~ | - 4MB Flash Memoryの搭載~ | ||
- | AI-Thinker製ESP-12Fのシールド内部に,SPI接続されているFlash ROM FM25Q16が実装されている。~ | + | AI-Thinker製ESP-12Fのシールド内部に,SPI接続されているFlash ROMが実装されている。~ |
ただし,CPUのMemory Map上には最大1MBまでしかマッピングできない。~ | ただし,CPUのMemory Map上には最大1MBまでしかマッピングできない。~ | ||
製品によっては2MBのFlash ROMが実装されているのもあるようだ。~ | 製品によっては2MBのFlash ROMが実装されているのもあるようだ。~ | ||
Line 37: | Line 37: | ||
WeMos D1クローンボードの[[HiLetgo OTA WeMos D1>http://www.hiletgo.com/ProductDetail/1997650.html]]は,CPU ModuleにAI-Thinker製ESP-12Fを使用しており,これは改良版のWeMos D1 R2と同じ。~ | WeMos D1クローンボードの[[HiLetgo OTA WeMos D1>http://www.hiletgo.com/ProductDetail/1997650.html]]は,CPU ModuleにAI-Thinker製ESP-12Fを使用しており,これは改良版のWeMos D1 R2と同じ。~ | ||
- | AI-Thinker製ESP-12Fは技術基準適合しているようなので,HiLetgo OTA WeMos D1も技術基準適合しているということなのかな? | + | Ai-Thinker製ESP-12Fは技術基準適合しているようなので,HiLetgo OTA WeMos D1も技術基準適合しているということなのかな? |
- | [[WeMos D1 mini>https://www.wemos.cc/en/latest/d1/d1_mini.html#]]という同じAI-Thinker製ESP-12Fを搭載した[[NodeMCU Development Kit:https://www.nodemcu.com/index_en.html#fr_54747661d775ef1a3600009e]]と互換の小型ボードも販売されている。~ | + | [[WeMos D1 mini>https://www.wemos.cc/en/latest/d1/d1_mini.html#]]という同じAi-Thinker製ESP-12Fを搭載した[[NodeMCU Development Kit:https://www.nodemcu.com/index_en.html#fr_54747661d775ef1a3600009e]]と互換の小型ボードも販売されている。~ |
この小さなボードも安価だったので後で購入してみた。~ | この小さなボードも安価だったので後で購入してみた。~ | ||
* スペック [#f55144e9] | * スペック [#f55144e9] | ||
- | WeMos D1のスペック。~ | + | WeMos D1互換ボードのスペック。~ |
- | |CPU |ESP-8266EX(Cadence Tensilica LX106 32bit RISC Processor)| | + | |CPU |ESP-8266EX(Cadence Tensilica Xtensa LX106 32bit RISC Processor)| |
- | |CPU Module |AI-Thinker ESP-12F(シールド)| | + | |CPU Module |Ai-Thinker ESP-12F(シールド)| |
|クロックスピード |80MHz(O.C.160MHz)| | |クロックスピード |80MHz(O.C.160MHz)| | ||
- | |WLAN |IEEE 802.11 b/g/n, RTOS/Wifi stack内蔵 ATコマンド, オンボード・アンテナ| | + | |WLAN |IEEE 802.11 b/g/n, Wifi stack内蔵 ATコマンド, オンボード・アンテナ| |
|RAM |命令 64KB SRAM / データ 96KB DRAM| | |RAM |命令 64KB SRAM / データ 96KB DRAM| | ||
|Boot ROM |内蔵 64KB| | |Boot ROM |内蔵 64KB| | ||
- | |Flash Memory |4MB FM25Q16(CPU Module内 SPI接続)| | + | |Flash Memory |4MB [[FM25Q32:https://www.fm-chips.com/spi-nor-flash.html]](CPU Module内 SPI接続)| |
|デジタルI/O |11(SPI, I2C, I2S)| | |デジタルI/O |11(SPI, I2C, I2S)| | ||
|アナログ入力 |1(10bit)| | |アナログ入力 |1(10bit)| | ||
Line 76: | Line 76: | ||
また,esptoolを使う場合も同様にReset時に自動的にbootloaderモードになる。~ | また,esptoolを使う場合も同様にReset時に自動的にbootloaderモードになる。~ | ||
- | 直接ESP8266ボードをbootloaderモードで起動させるには,GPIO0(D8)をGNDとジャンパーしてボードをResetする。~ | + | ESP8266ボードをbootloaderモードで起動させるには,GPIO0(D8)をGNDとジャンパーしてボードをResetする。~ |
詳しくは[[Boot ROMのリバース解析>https://github.com/trebisky/esp8266/tree/master/reverse/bootrom]]ページを参照。~ | 詳しくは[[Boot ROMのリバース解析>https://github.com/trebisky/esp8266/tree/master/reverse/bootrom]]ページを参照。~ | ||
Line 149: | Line 149: | ||
** Flash ROMのMemory空間へのマッピング [#ced1fb73] | ** Flash ROMのMemory空間へのマッピング [#ced1fb73] | ||
- | 購入したWeMos D1互換ボード(ESP8266ボード)は,SPIインターフェースで接続されている4MBのFlash ROM FM25Q16が実装されているのだが,CPUのMemory空間のユーザープログラム領域としてはMMUの機能により1MBのサイズ(Memoryアドレス:''0x40200000-0x402fffff'')までしかマッピング出来ないようだ。~ | + | 購入したWeMos D1互換ボード(ESP8266ボード)には,SPIインターフェースで接続されている4MBのFlash ROM [[FM25Q32>https://www.fm-chips.com/spi-nor-flash.html]]が実装されている。このSPIのFlash ROMをCPUのMemory空間にユーザープログラム領域としてMMUによりマッピングされるのだが,どうも1MBのサイズ(Memoryアドレス:''0x40200000-0x402fffff'')までしかマッピング出来ないようだ。~ |
- | しかし1MB境界を超えなければ,Flash ROMを小さいブロックサイズに区切って,複数ブロックを組み合わせてマッピングすることはできるようだ。~ | + | OTA機能を使う場合はOTA処理時に一時的に受信したプログラムを格納する領域が必要になるので,そのサイズ分Flash ROMにOTA用に領域が必要になる。つまりプログラム領域としては2倍の領域が必要になる。~ |
- | なので512KBを8個とか1MBを4個とかにあらかじめ分割して,その一部をプログラム領域として1MB範囲内で配置することが出来る。~ | + | |
- | OTA機能を使う場合はOTA処理時に一時的に受信したプログラムを格納するFlash ROM領域が必要になるので,そのぶん空きサイズが必要になる。つまりプログラム領域としては2倍の領域が必要になる。~ | + | Flash ROMの2nd Bootloaderとプログラム領域,パラメーター領域などをMemory空間にマッピングして,残った未使用SPI Flash ROMの領域は,専用のプログラムが必要ではあるが仮想ファイルシステムや仮想EEPROMなどとして使用することが出来る。~ |
- | + | ||
- | Memory空間にマッピングされない余ったSPI Flash ROMのスペースは,専用のプログラムが必要ではあるが,仮想ファイルシステムや仮想EEPROMなどとして使用することが出来る。~ | + | |
Espressif社のATコマンドのfirmwareでは,プログラム領域として512KBや1024KBのサイズ(実装している機能により分けられている)が使われている。~ | Espressif社のATコマンドのfirmwareでは,プログラム領域として512KBや1024KBのサイズ(実装している機能により分けられている)が使われている。~ | ||
** 出荷時のfirmware [#lae06eb1] | ** 出荷時のfirmware [#lae06eb1] | ||
- | WeMos D1互換ボードというかESP8266が実装されているボード出荷時のFlash ROMには,懐かしいATコマンド(Espressif社)が使えるfirmwareが書き込まれているようだ。~ | + | WeMos D1互換ボード/D1 miniボードというかESP8266が実装されているボード出荷時には,Flash ROMに懐かしいATコマンド(Espressif社)が使えるfirmwareが書き込まれている。~ |
- | PCとボードをUSBで接続して仮想COMポートのシリアルコンソール(PuTTYなど)で接続すると,電源On(またはReset)後のBoot ROMプログラムが出力するメッセージを確認することが出来る。~ | + | PCとWeMos D1互換ボード/D1 miniボードをUSBで接続して,仮想COMポートのシリアルコンソール(PuTTYなど)を使うと,電源On(またはReset)後のBoot ROMプログラムが出力するメッセージを確認することが出来る。~ |
この時,シリアルポートのbaudrateは''74880''と変な値になっている。~ | この時,シリアルポートのbaudrateは''74880''と変な値になっている。~ | ||
ets Jan 8 2013,rst cause:2, boot mode:(3,6) | ets Jan 8 2013,rst cause:2, boot mode:(3,6) | ||
+ | |||
load 0x40100000, len 2592, room 16 | load 0x40100000, len 2592, room 16 | ||
tail 0 | tail 0 | ||
Line 177: | Line 174: | ||
chksum 0x22 | chksum 0x22 | ||
csum 0x22 | csum 0x22 | ||
+ | |||
2nd boot version : 1.7(5d6f877) | 2nd boot version : 1.7(5d6f877) | ||
SPI Speed : 40MHz | SPI Speed : 40MHz | ||
SPI Mode : DIO | SPI Mode : DIO | ||
- | SPI Flash Size & Map: 32Mbit(1024K+1024KB) | + | SPI Flash Size & Map: 32Mbit(1024KB+1024KB) |
jump to run user1 @ 1000 | jump to run user1 @ 1000 | ||
- | + | ||
- | rf cal sector: 1019 | + | flash_id=0x164068 |
- | freq trace enable 1 | + | ret=2147483647 |
- | rf[112] : 03 | + | V2 |
+ | Mo | ||
+ | rf cal sector: 1019 | ||
+ | freq trace enable 0 | ||
+ | rf[112] : 00 | ||
rf[113] : 00 | rf[113] : 00 | ||
rf[114] : 01 | rf[114] : 01 | ||
+ | |||
+ | SDK ver: 3.0.6-dev(072755c) compiled @ Apr 6 2023 03:06:03 | ||
+ | phy ver: 1156_0, pp ver: 10.2 | ||
+ | |||
+ | @J剏 | ||
- | SDK ver: 2.2.1(6ab97e9) compiled @ Jun 7 2018 13:59:14 | + | ''boot mode:(3,6)''と表示される場合の''3''は,通常モードでブートしたことを意味している。~ |
- | phy ver: 1136_0, pp ver: 10.2 | + | bootloaderモードだと''boot mode:(1,6)''と表示され,''1''がbootloaderモードの意味になる。~ |
+ | これはブートオプションのbit構成そのまま。~ | ||
+ | 6はおそらくSPI Flash ROMが32Mbit=4MBだと''6''になるのだと思う。~ | ||
- | ⸮⸮j⸮l | + | その後,''2nd boot version : 1.7(5d6f877)''と表示されるので,SPI Flash ROMの先頭に書き込んだboot_v1.7.binを2nd Bootプログラムとして起動しているのがわかる。~ |
- | ''boot mode:(3,6)''と表示される場合は通常モードでブートしたことを意味しているようだ。~ | + | |
- | bootloaderモードだと''boot mode:(1,6)''になる。~ | + | |
- | その後,''2nd boot version : 1.7(5d6f877)''と表示されているので,SPI Flash ROMの先頭に書き込んだboot_v1.7.binを2nd Bootプログラムとして起動しているのがわかる。~ | + | 2nd Bootプログラムが,Flash ROMに書き込んだuser1.4096.new.6.bin(最近,自前でビルドしたATコマンドのfirmware)をRAMにコピーした後,RAM上のエントリアドレスにジャンプしてユーザープログラムとして起動している。~ |
- | 2nd BootプログラムはFlash ROMに書き込んだuser1.2048.new.5.bin(ATコマンドのfirmware)を起動している。~ | + | |
これで,baudrateが''115200''に変更されて,ATコマンド待ちのプロンプトReady(上で文字化けしている部分)が表示される。~ | これで,baudrateが''115200''に変更されて,ATコマンド待ちのプロンプトReady(上で文字化けしている部分)が表示される。~ | ||
Line 204: | Line 209: | ||
ATコマンドで確認してみる。改行コードはCRLF。~ | ATコマンドで確認してみる。改行コードはCRLF。~ | ||
AT | AT | ||
+ | |||
OK | OK | ||
AT+GMR | AT+GMR | ||
- | AT version:1.6.2.0(Apr 13 2018 11:10:59) | + | AT version:1.7.6.0(Jan 24 2022 08:56:02) |
- | SDK version:2.2.1(6ab97e9) | + | SDK version:3.0.6-dev(072755c) |
- | compile time:Jun 7 2018 19:34:26 | + | compile time:May 17 2025 10:10:06 |
- | Bin version(Wroom 02):1.6.2 | + | Bin version(Wroom 02):1.7.6 |
OK | OK | ||
- | |||
注意することとして,プログラムを作成してオブジェクトをボードのFlash ROMに書き込むと,このATコマンドが利用できるfirmwareは上書きされてしまう。~ | 注意することとして,プログラムを作成してオブジェクトをボードのFlash ROMに書き込むと,このATコマンドが利用できるfirmwareは上書きされてしまう。~ | ||
なので,WeMos D1(ESP8266ボード)を購入したら,firmwareのバックアップをしておいたほうが良いと思う。~ | なので,WeMos D1(ESP8266ボード)を購入したら,firmwareのバックアップをしておいたほうが良いと思う。~ | ||
- | WeMos D1互換ボード購入時にこのようなことは知らなかったので,firmwareのバックアップはしていない ;( ~ | + | WeMos D1互換ボード購入時にこんなことは知らなかったので,firmwareのバックアップはしていない ;( ~ |
- | ATコマンドが使えるfirmwareに下記に記載しているようにして戻した後に確認している。なので元々書き込まれていたfirmwareとは違うかも。~ | + | 最新バージョンのATコマンドfirmwareに下記のようにしてFlash ROMに書いた後に確認している。なので元々書き込まれていたfirmwareとは違う。~ |
//WiFi通信が出来るか確認してみる。~ | //WiFi通信が出来るか確認してみる。~ | ||
Line 243: | Line 247: | ||
*** Flash ROMを読み書きするツール [#p91742c8] | *** Flash ROMを読み書きするツール [#p91742c8] | ||
- | [[esptool.py>https://github.com/espressif/esptool]]はESP8266ボードに実装されているSPI Flash ROMを読んだり,firmwareを書いたりすることが出来る出来るPythonで動作するツール。~ | + | [[esptool.py>https://github.com/espressif/esptool]]は,ESP8266ボードに実装されているSPI Flash ROMを読んだりfirmwareを書いたりすることが出来るPythonで動作するツール。~ |
- | Pythonが使えるようになっていれば,以下のようにpipコマンドでインストール出来る。~ | + | Pythonが使える環境であれば,pipコマンドでインストール出来る。~ |
> pip install esptool | > pip install esptool | ||
Line 259: | Line 263: | ||
{load_ram,dump_mem,read_mem,write_mem,write_flash,run,image_info,make_image,elf2image,read_mac,chip_id,flash_id,read_flash_status,write_flash_status,read_flash,verify_flash,erase_flash,erase_region,read_flash_sfdp,merge_bin,get_security_info,version} | {load_ram,dump_mem,read_mem,write_mem,write_flash,run,image_info,make_image,elf2image,read_mac,chip_id,flash_id,read_flash_status,write_flash_status,read_flash,verify_flash,erase_flash,erase_region,read_flash_sfdp,merge_bin,get_security_info,version} | ||
... | ... | ||
+ | |||
esptool.py v4.8.1 - Espressif chips ROM Bootloader Utility | esptool.py v4.8.1 - Espressif chips ROM Bootloader Utility | ||
: | : | ||
Line 275: | Line 279: | ||
SPI Flash frequency: 40m, 26m, 20m, 80m | SPI Flash frequency: 40m, 26m, 20m, 80m | ||
: --flash_size(-fs) | | : --flash_size(-fs) | | ||
- | SPI Flash size:1MB, 2MB, 4MB, 8MB, 16MB, 256KB, 512KB, 2MB-c1, 4MB-C1 | + | SPI Flash size:1MB, 2MB, 4MB, 8MB, 16MB, 256KB, 512KB, 2MB-c1, 4MB-c1 |
: --flash_mode(-fm) | | : --flash_mode(-fm) | | ||
SPI Flash mode:qio, qout, dio, dout | SPI Flash mode:qio, qout, dio, dout | ||
Line 287: | Line 291: | ||
*** バックアップしていない場合でfirmwareを戻す [#nf88fb2b] | *** バックアップしていない場合でfirmwareを戻す [#nf88fb2b] | ||
- | firmwareを前もってバックアップしていなかった場合,Espressif社のATコマンドのfirmwareに戻したい場合,以下のようにする。~ | + | firmwareを前もってバックアップしていなかった場合,AI-Thinker社またはEspressif社で提供されているATコマンドのfirmwareをダウンロードして,WeMos D1互換/D1 miniボードのFlash ROMに書き込むことで,ATコマンドが使える状態に戻すことが出来る。~ |
- | ESP8266_NONOS_SDKを[[ここのGitHub>https://github.com/espressif/ESP8266_NONOS_SDK/tags]]から[[v2.2.1>https://github.com/espressif/ESP8266_NONOS_SDK/archive/refs/tags/v2.2.1.zip]]をダウンロードして,任意のディレクトリに解凍した。~ | + | Espressif社のfirmwareは,[[ここのGitHub>https://github.com/espressif/ESP8266_NONOS_SDK/tags]]から[[v2.2.1>https://github.com/espressif/ESP8266_NONOS_SDK/archive/refs/tags/v2.2.1.zip]]や[[v3.0.6>https://github.com/espressif/ESP8266_NONOS_SDK/archive/refs/tags/v3.0.6.zip]]なんかをダウンロードする。~ |
+ | ダウンロードしたファイルを任意のディレクトリに解凍する。~ | ||
bin\atディレクトリに2種類のMemory Map(512+512,1024+1024)のfirmwareが用意されている。~ | bin\atディレクトリに2種類のMemory Map(512+512,1024+1024)のfirmwareが用意されている。~ | ||
+ | v2.2.1: SDK version:2.2.1, AT version:1.6.2.0 | ||
+ | v3.0.6: SDK version:3.0.6, AT version:1.7.6.0 | ||
+ | 購入したWeMos D1互換/D1 miniボードだと,SDK v2.2.1の512+512,1024+1024のどちらののATコマンドfirmwareでも動作した。~ | ||
- | 購入したWeMos D1/D1 miniだと,v2.2.1(512+512,1024+1024)のATコマンドのfirmwareをFlash ROMに書き込んだらうまく動作した。最新のv3.0.6だとうまく動作しなかった。~ | + | SDK v3.0以降のバージョンも提供されているが,WeMos D1互換/D1 miniボードに使われているESP-12Fではビルド済みオブジェクトではうまく動作しなかった。v3.0以降だとFlash ROM領域がPartition定義され,実際のFlash ROMのサイズと合っていないと正常に動作しない。ビルド済みのものは2MBのFlash ROMようにビルドされているため,4MBのWeMos D1互換/D1 miniボードでは動かないのだと思う。~ |
+ | しょうがないので自分で4MB用にビルドし直して&ref(esp8266_nonos_sdk-3.0.6yu.zip);,Flash ROMに書き込んだらうまく動作した。~ | ||
+ | |||
+ | 以下のようにして書き込んだ。~ | ||
v2.2.1 4MB(512KB+512KB)~ | v2.2.1 4MB(512KB+512KB)~ | ||
- | > esptool -c esp8266 -p COMx -b 115200 write_flash -fs 4MB -fm dio 0x0000 boot_v1.7.bin 0x01000 at\512+512\user1.1024.new.2.bin 0x7e000 blank.bin 0x3fc000 esp_init_data_default_v08.bin 0x3fe000 blank.bin | + | > esptool -c esp8266 -p COMx -b 115200 write_flash -fs 4MB -fm dio 0x00000 boot_v1.7.bin 0x01000 at\512+512\user1.1024.new.2.bin 0x7e000 blank.bin 0x3fc000 esp_init_data_default_v08.bin 0x3fe000 blank.bin |
+ | |||
+ | v2.2.1 4MB-c1(1024KB+1024KB)~ | ||
+ | > esptool -c esp8266 -p COMx -b 115200 write_flash -fs 4MB-c1 -fm dio 0x00000 boot_v1.7.bin 0x01000 at\1024+1024\user1.2048.new.5.bin 0xfe000 blank.bin 0x3fc000 esp_init_data_default_v08.bin 0x3fe000 blank.bin | ||
+ | |||
+ | v3.0.6 4MB-c1(1024KB+1024KB) 自前ビルド~ | ||
+ | > esptool -c esp8266 -p COMx -b 115200 write_flash -fs 4MB-c1 -fm dio 0x00000 boot_v1.7.bin 0x01000 at\1024+1024\user1.4096.new.6.bin 0xfe000 blank.bin 0x3fc000 esp_init_data_default_v08.bin 0x3fe000 blank.bin | ||
+ | |||
+ | esp_init_data_default_v08.binには,WLANのSTA/APモードそれぞれのMAC AddressとSSID,RF出力設定値が入っているようだ。~ | ||
+ | 本来これらの設定はボード事に設定しなくてはいけないので,前もってATコマンドを使って確認した設定値を使う必要があると思う・・・~ | ||
- | v2.2.1 4MB-c1(1024KB+1024KB) | + | Ai-Thinker社からリリースされているfirmwareは&ref(AiThinker_ESP8266_20160615_1.5.4.zip,AiThinker_ESP8266_20160615_1.5.4);をダウンロードして,任意のディレクトリに解凍する。~ |
- | > esptool -c esp8266 -p COMx -b 115200 write_flash -fs 4MB-c1 -fm dio 0x0000 boot_v1.7.bin 0x01000 at\1024+1024\user1.2048.new.5.bin 0xfe000 blank.bin 0x3fc000 esp_init_data_default_v08.bin 0x3fe000 blank.bin | + | SDK version:1.5.4, AT version:1.1.0 |
- | // v3.0.6 4MB-c1(1024KB+1024KB,nonOTA 2048KB) | + | とEspressif社のものより古いバージョンみたいだ。~ |
- | // > esptool -c esp8266 -p COMx -b 115200 write_flash -fs 4MB-c1 0x0000 boot_v1.7.bin 0x01000 at\1024+1024\user1.2048.new.5.bin 0xfe000 blank.bin 0x1fc000 esp_init_data_default_v08.bin 0x1fe000 blank.bin | + | > esptool -c esp8266 -p COMx -b 115200 write_flash -fs 4MB -fm dio 0x00000 AiThinker_ESP8266_DIO_32M_32M_20160615_V1.5.4.bin |
* ソフトウェア開発環境 [#f82d07d1] | * ソフトウェア開発環境 [#f82d07d1] | ||
Line 321: | Line 341: | ||
Ardduino Unoなどで使用するArduino IDEがESP8266ボードのプログラム開発環境にも使用できる。~ | Ardduino Unoなどで使用するArduino IDEがESP8266ボードのプログラム開発環境にも使用できる。~ | ||
ボードマネージャーでハードウェアパッケージをインストールすると,ToolChainもインストールされる。~ | ボードマネージャーでハードウェアパッケージをインストールすると,ToolChainもインストールされる。~ | ||
- | Arduinoボードでプログラム開発するのと同じ感覚で,ESP8266のプログラムを作成して動かすことが出来る。~ | + | Arduinoボードでプログラム開発するのと同じ手順で,ESP8266のプログラムを作成して動かすことが出来る。~ |
- [[PlatformIO IDE>https://platformio.org/platformio-ide]]~ | - [[PlatformIO IDE>https://platformio.org/platformio-ide]]~ | ||
platform IDEはESP8266のプログラムを開発する時に無料で使用できる統合開発環境。~ | platform IDEはESP8266のプログラムを開発する時に無料で使用できる統合開発環境。~ | ||
フレームワークとしてArduino Frameworkが使用できるみたいで,Visual Studio Code上に環境を構築して使用するようなIDE環境。~ | フレームワークとしてArduino Frameworkが使用できるみたいで,Visual Studio Code上に環境を構築して使用するようなIDE環境。~ | ||
Arduino IDEでプログラム開発するのと同じ感覚で,ESP8266のプログラムを作成して動かすことが出来る。~ | Arduino IDEでプログラム開発するのと同じ感覚で,ESP8266のプログラムを作成して動かすことが出来る。~ | ||
- | - [[ESP8266_RTOS_SDK>https://github.com/espressif/ESP8266_RTOS_SDK]]~ | + | - [[ESP8266_RTOS_SDK>https://github.com/espressif/ESP8266_RTOS_SDK]]/[[ESP8266_NONOS_SDK>https://github.com/espressif/ESP8266_NONOS_SDK]]~ |
- | WeMos D1に使われているSoCのメーカー[[Espressif Systems>https://www.espressif.com/]]社からリリースされているRTOSとその開発環境。~ | + | WeMos D1に使われているSoCのメーカー[[Espressif Systems>https://www.espressif.com/]]社からリリースされているRTOS環境とスタンドアローン環境用のSDK。~ |
- | ビルドするためのToolChainも用意されている。~ | + | ESP8266ボードでRTOSを動かし,その環境下で動作するプログラムを作成することが出来る。~ |
- | ボードでRTOSを動かし,その環境下で動作するプログラムを作成することが出来る。~ | + | プログラムをビルドするための[[ToolChain>https://docs.espressif.com/projects/esp8266-rtos-sdk/en/latest/get-started/windows-setup.html]]や,Flash ROMに転送するための[[Flash Download Tools>https://www.espressif.com/en/support/download/other-tools]]も別途用意されている。~ |
これ以外の開発環境もあるようだ。~ | これ以外の開発環境もあるようだ。~ | ||
Line 346: | Line 366: | ||
*** ハードウェアパッケージのインストール [#l51e57d4] | *** ハードウェアパッケージのインストール [#l51e57d4] | ||
- | ハードウェアパッケージをインストールする方法は,パッケージを直接ダウンロードして配置する方法と,Arduino IDEのボードマネージャーを使用する方法がある。~ | + | ハードウェアパッケージをインストールする方法は,Arduino IDEのボードマネージャーを使用する方法と,パッケージを直接ダウンロードして配置する方法とがある。~ |
+ | |||
+ | - Arduino IDEのボードマネージャーを使用する場合~ | ||
+ | Arduino IDEを起動し,ファイル>環境設定>追加のボードマネージャーに, | ||
+ | http://arduino.esp8266.com/stable/package_esp8266com_index.json | ||
+ | を追加する。~ | ||
+ | ~ | ||
+ | ツール>ボード>ボードマネージャーから''esp8266 by ESP8266 Community''を選んで,最新バージョンをインストールする。~ | ||
+ | ~ | ||
+ | インストールが終了したら,Arduino IDEを再起動する。~ | ||
- パッケージをダウンロードしてインストールする場合~ | - パッケージをダウンロードしてインストールする場合~ | ||
- | パッケージファイルはgitを使ってダウンロードするのが便利。~ | + | https://github.com/wemos/Arduino_D1.gitが消滅?しているので,代わりに[[別のサイト>https://github.com/esp8266/Arduino.git]]からダウンロードする。~ |
- | https://github.com/wemos/Arduino_D1.git が消滅しているので,代わりに[[別のサイト>https://github.com/esp8266/Arduino.git]]からダウンロードする。~ | + | |
> cd <arduino IDEインストール>\hardware | > cd <arduino IDEインストール>\hardware | ||
> md esp8266com | > md esp8266com | ||
Line 358: | Line 386: | ||
これで,以下のようなディレクトリ構成になる。 | これで,以下のようなディレクトリ構成になる。 | ||
─┬ Arduino | ─┬ Arduino | ||
- | └─┬ hardware | + | └─┬ hardware |
- | └─┬ esp8266com | + | └─┬ esp8266com |
- | └─┬ esp8266 | + | └─┬ esp8266 |
- | ├── bootloaders | + | ├── bootloaders |
- | ├── cores | + | ├── cores |
- | ├── doc | + | ├── doc |
- | ├── libraries | + | ├── libraries |
- | ├── package | + | ├── package |
- | ├── tests | + | ├── tests |
- | ├── tools | + | ├── tools |
- | ├── variants | + | ├── variants |
- | ├── platform.txt | + | ├── platform.txt |
- | ├── programmers.txt | + | ├── programmers.txt |
- | ├── README.md | + | ├── README.md |
- | ├── boards.txt | + | ├── boards.txt |
- | ├── LICENSE | + | ├── LICENSE |
バイナリツールをダウンロード(要Python2.7)~ | バイナリツールをダウンロード(要Python2.7)~ | ||
> cd esp8266/tools | > cd esp8266/tools | ||
> python get.py | > python get.py | ||
Arduino IDEを再起動する。~ | Arduino IDEを再起動する。~ | ||
- | - Arduino IDEのボードマネージャーを使用する場合~ | ||
- | Arduino IDEを起動し,ファイル>環境設定>追加のボードマネージャーに, | ||
- | http://arduino.esp8266.com/stable/package_esp8266com_index.json | ||
- | を,追加する。~ | ||
- | ~ | ||
- | ツール>ボード>ボードマネージャーから,「esp8266 by ESP8266 Community」を選んで,最新バージョンをインストールする。~ | ||
- | ~ | ||
- | インストールが終了したら,Arduino IDEを再起動する。~ | ||
*** ボードの設定 [#hacc8d02] | *** ボードの設定 [#hacc8d02] | ||
上記のようにしてハードウェアパッケージがインストールできたら,Wemos D1(ESP8266)互換ボードを使用するのに以下のようにボードの選択・設定をした。~ | 上記のようにしてハードウェアパッケージがインストールできたら,Wemos D1(ESP8266)互換ボードを使用するのに以下のようにボードの選択・設定をした。~ | ||
- ボード~ | - ボード~ | ||
- | WeMos D1 R2&miniを選択する。~ | + | WeMos D1 R2&miniを選択した。~ |
- CPU周波数~ | - CPU周波数~ | ||
80MHzが標準クロックだが,O.C.で160MHzでも動作する場合があるらしい。~ | 80MHzが標準クロックだが,O.C.で160MHzでも動作する場合があるらしい。~ | ||
- | なので,160MHzを選択してみた。~ | + | 80MHzを選択した。~ |
- Flashサイズ~ | - Flashサイズ~ | ||
4M(FS:2MB OTA:~1019KB)を選択してみた。~ | 4M(FS:2MB OTA:~1019KB)を選択してみた。~ | ||
Line 453: | Line 473: | ||
Arduino IDEを再起動すると,ボードのシリアルポートの設定に無線LANでアクセスできるように設定できる。~ | Arduino IDEを再起動すると,ボードのシリアルポートの設定に無線LANでアクセスできるように設定できる。~ | ||
- | プログラムを変更してプログラムの更新をする時に,無線LANを使って更新ができるようになった。~ | + | |
+ | これで,プログラムを変更してプログラムの更新をする時に,無線LANを使って更新ができるようになって便利になった。~ | ||
*** WatchDog Timerの注意 [#qd28ac50] | *** WatchDog Timerの注意 [#qd28ac50] | ||
Line 492: | Line 513: | ||
[[こちらのページ>/開発/AVR/開発環境/PlatformIO]]のようにして,インストールする。~ | [[こちらのページ>/開発/AVR/開発環境/PlatformIO]]のようにして,インストールする。~ | ||
- | ** ESP8266_RTOS_SDK [#afe3d166] | + | ** ESP8266_RTOS_SDK/ESP8266_NONOS_SDK [#afe3d166] |
- | SoCメーカーの[[Espressif Systems社>https://www.espressif.com/en/products/socs/esp8266]]から,[[ESP8266_RTOS_SDK>https://github.com/espressif/ESP8266_RTOS_SDK]]がリリースされている。~ | + | SoCメーカーの[[Espressif Systems社>https://www.espressif.com/en/products/socs/esp8266]]から,[[ESP8266_RTOS_SDK>https://github.com/espressif/ESP8266_RTOS_SDK]]や[[ESP8266_NONOS_SDK>https://github.com/espressif/ESP8266_NONOS_SDK/releases]]がリリースされている。~ |
+ | スタンドアローンのプログラム開発の場合は,ESP8266_NONOS_SDKが使用できる。~ | ||
- | ダウンロードは,上記のGitHubからダウンロードできる。 | + | 上記のGitHubからダウンロードできる。 |
- | また,このESP8266_RTOS_SDKをビルドするには,[[Windows用のToolChain>https://dl.espressif.com/dl/xtensa-lx106-elf-gcc8_4_0-esp-2020r3-win32.zip]]が必要になる。 | + | > md esp8266 |
> cd ~/esp8266 | > cd ~/esp8266 | ||
- | > git clone https://github.com/espressif/ESP8266_RTOS_SDK.git | + | > git clone https://github.com/espressif/ESP8266_NONOS_SDK.git |
- | 環境変数を設定する。~ | + | //環境変数を設定する。~ |
- | IDF_PATH=<HOME>\esp8266\ESP8266_RTOS_SDK | + | // IDF_PATH=<HOME>\esp8266\ESP8266_RTOS_SDK |
+ | |||
+ | また,ESP8266_NONOS_SDKを使ってプログラムをビルドするには,[[Windows用のToolChain>https://docs.espressif.com/projects/esp8266-rtos-sdk/en/latest/get-started/windows-setup.html]]と[[Python2>/開発/Python]]が必要になる。~ | ||
+ | |||
+ | Espressif社が提供している[[toolchain>https://docs.espressif.com/projects/esp8266-rtos-sdk/en/latest/get-started/windows-setup.html]]があるので[[v8.4.0>https://dl.espressif.com/dl/xtensa-lx106-elf-gcc8_4_0-esp-2020r3-win32.zip]]をダウンロードして,以下のディレクトリを作成してそこに解凍した。~ | ||
+ | C:\espgcc\esp8266 | ||
+ | 実行PATHに,C:\espgcc\esp8266\xtensa-lx106-elf\binを追加すればインストールできる。~ | ||
+ | |||
+ | [[SysPPROGS>https://sysprogs.com/]]が提供している[[toolchain>https://gnutoolchains.com/esp8266/]]もある。~ | ||
+ | こちらを使う場合は,''esp8266-gcc8.4.0.exe''をダウンロードしてクリックすればインストールできる。~ | ||
** MicroPython [#ha7ec5d5] | ** MicroPython [#ha7ec5d5] | ||
Line 600: | Line 631: | ||
// ヘッダー | // ヘッダー | ||
#include <ESP8266IFTTT.h> | #include <ESP8266IFTTT.h> | ||
+ | |||
// IFTTT_WEBHOOK_NAMEのところにIFTTT Webhook's name,IFTTT_KEYにIFTTT Webhook api keyを入れる | // IFTTT_WEBHOOK_NAMEのところにIFTTT Webhook's name,IFTTT_KEYにIFTTT Webhook api keyを入れる | ||
// IFTTT Webhook api keyは,IFTTT>My Applets>Web Hooks>Web Hooksのロゴ>Documentation またはhttps://ifttt.com/maker_webhooksのDocumentationで表示される | // IFTTT Webhook api keyは,IFTTT>My Applets>Web Hooks>Web Hooksのロゴ>Documentation またはhttps://ifttt.com/maker_webhooksのDocumentationで表示される | ||
+ | |||
// もしトリガーだけなら・・・ | // もしトリガーだけなら・・・ | ||
IFTTT.trigger(IFTTT_WEBHOOK_NAME, IFTTT_KEY); | IFTTT.trigger(IFTTT_WEBHOOK_NAME, IFTTT_KEY); | ||
+ | |||
// もしvalueがあれば・・・(但しvalueは文字列に限る。) | // もしvalueがあれば・・・(但しvalueは文字列に限る。) | ||
IFTTT.trigger(IFTTT_WEBHOOK_NAME, IFTTT_KEY, value1, value2, value3); | IFTTT.trigger(IFTTT_WEBHOOK_NAME, IFTTT_KEY, value1, value2, value3); |