上野家のホームページ
ナーマル,マリン,ココ
[
新規
|
一覧
|
検索
|
最新
|
ヘルプ
]
開発/WeMos D1
のソース
資料室
開発
/
WeMos D1
のソース
[
差分
|
バックアップ
|
リロード
]
[ ]
差分
を表示
開発/WeMos D1
へ行く。
« Prev
* WeMos D1 [#r801e7a3] 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円程度で購入できた :) ~ &ref(HiLetgo_D1.png,,50%);~ ボードには中国[[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%) ホストPCとはUSBで接続して仮想シリアルポートとして機能する,CH340 USBシリアル変換チップが実装されている。~ 以下のような特徴がある。~ - CPUチップにWifi機能を統合~ - 動作温度が広い~ -40°C~+125°Cに対応。 - 80MHzのシステムクロックで動作~ O.C.160MHzでも動作する場合もあるようだ。~ - 16個のレジスタ~ - 4MB Flash Memoryの搭載~ AI-Thinker製ESP-12Fのシールド内部に,SPI接続されているFlash ROMが実装されている。~ ただし,CPUのMemory Map上には最大1MBまでしかマッピングできない。~ 製品によっては2MBのFlash ROMが実装されているのもあるようだ。~ - Boot ROMの搭載~ 書き換え不可ではあるが64KBのBoot ROMがチップ内に内蔵されている。~ このためボードが文鎮化することはないようだ。~ - 11個のデジタル入出力ピン~ すべてのピンは,割り込み/PWM/I2C/1線式シリアルをサポート(D0を除く)。~ 入出力電圧は3.3V系となる。~ - 10bit ADC x 1~ - WDT内蔵~ - MicroUSBコネクタ~ - 電源入力ジャック DC9-24V~ - [[Arduino Uno>https://store.arduino.cc/products/arduino-uno-rev3]]互換レイアウト~ Boot ROMに搭載されているbootloader機能は,Arduinoボードと同様にDTR="Low"で動作するようだ。~ - [[NodeMcu>https://www.nodemcu.com/index_en.html]]互換機能~ 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も技術基準適合しているということなのかな? [[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] WeMos D1互換ボードのスペック。~ |CPU |ESP-8266EX(Cadence Tensilica Xtensa LX106 32bit RISC Processor)| |CPU Module |Ai-Thinker ESP-12F(シールド)| |クロックスピード |80MHz(O.C.160MHz)| |WLAN |IEEE 802.11 b/g/n, Wifi stack内蔵 ATコマンド, オンボード・アンテナ| |RAM |命令 64KB SRAM / データ 96KB DRAM| |Boot ROM |内蔵 64KB| |Flash Memory |4MB [[FM25Q32:https://www.fm-chips.com/spi-nor-flash.html]](CPU Module内 SPI接続)| |デジタルI/O |11(SPI, I2C, I2S)| |アナログ入力 |1(10bit)| |RTC |1(7.45hでオーバーフローする)| |WatchDog |内蔵(timer=3s) | |ボード動作電圧 |DC 3.3V| |電源 |Jack 9-24VDC/USB MicroB| |サイズ |68.6mm x 53.4mm(Arduino Unoと同サイズ)| |重量 |25g| - [[WeMos D1 R2(WeMos D1の改良版)とD1 miniの回路図>./回路図]]~ - [[ESP8266 Datasheet>./ESP-8266]]~ ** ブートオプション [#q414977e] ESP8266EXには書き換え不可の64KBのBoot ROM(メモリアドレス:''0x40000000-0x4000ffff'')が内蔵されている。~ このBoot ROMはFlash ROM上のユーザープログラムを起動するモードと,Flash ROMを書き換えることが出来るbootloaderモードとを,GPIOの端子により選択できる。~ |GPIO15|GPIO0|GPIO2|Boot Mode |説明 |h |L |H |H |通常モード |Flash ROM上のユーザープログラムを起動 | |L |L |H |bootloaderモード |シリアルポートからFlash ROM書き換え時に使用する| //|H |x |x |SDカードモード |SDカードからブートできる? | Arduino IDEではプログラムをFlash ROMに書き込む場合,USB-Serialコンバーター経由でシリアル通信を始めるとのDTR出力=0にするが,ESP8266ボードのハードウェアでそのDTR出力がGPIO0に反映されるようになっているので,これによりReset時は自動的にbootloaderモードになる。~ また,esptoolを使う場合も同様にReset時に自動的にbootloaderモードになる。~ ESP8266ボードをbootloaderモードで起動させるには,GPIO0(D8)をGNDとジャンパーしてボードをResetする。~ 詳しくは[[Boot ROMのリバース解析>https://github.com/trebisky/esp8266/tree/master/reverse/bootrom]]ページを参照。~ Boot ROMは書き換えできないので意味はないがdumpできた :) ~ > esptool -p COMx dump_mem 0x40000000 65536 esp8266bootrom.bin ** コネクタ [#h7729a1a] WeMos D1ボードのコネクタ。([[WeMos D1 miniのコネクタ>./ESP8266ボードのピン配置]])~ |BGCOLOR(Gray):DIGITAL1 headerピン |BGCOLOR(Gray):ファンクション|BGCOLOR(Gray):ESP-8266| |RX |RX0, IO |GPIO3/RXD | |TX |TX0, IO |GPIO1/TXD | |D2 |IO(no interrupt/no PWM), WAKE |GPIO16 | |D3 |IO, SCL, IRRx |GPIO5 | |D4 |IO, SDA, PWM3 |GPIO4 | |D5 |IO, HSPICLK, ONB_LED, PWM2 |GPIO14 | |D6 |IO, HSPIMISO |GPIO12 | |D7 |IO, HSPIMOSI, CTS0 |GPIO13 | |BGCOLOR(Gray):DIGITAL2 header ピン |BGCOLOR(Gray):ファンクション|BGCOLOR(Gray):ESP-8266| |D8 |IO, 10k Pull-up |GPIO0 | |D9 |IO, 10k Pull-up, TX1, ONB_LED2|GPIO2 | |D10 |IO, 10k Pull-down, HSPICS. RTS0, PWM1|GPIO15 | |D11 |IO, MOSI |GPIO13 | |D12 |IO, MISO, PWM0 |GPIO12 | |D13 |IO, SCK, ONB_LED, IR Tx |GPIO14 | |GND |GND |GND | |- |- |- | |D14 |IO, SDA |GPIO4 | |D15 |IO, SCL, IRRx |GPIO5 | |BGCOLOR(Gray):ANALOG header ピン |BGCOLOR(Gray):ファンクション|BGCOLOR(Gray):ESP-8266| |A0 |Analog input, max 3.3V, TOUT |ADC0 | |- |- |- | |- |- |- | |- |- |- | |- |- |- | |- |- |- | |BGCOLOR(Gray):Power header ピン|BGCOLOR(Gray):ファンクション|BGCOLOR(Gray):ESP-8266| |- |- |- | |5V |5V |- | |RESET|RESET |RST | |3V3 |3.3V |3.3V | |5V |5V |- | |GND |GND |GND | |GND |GND |GND | |VIN |External Power |- | ''J1 USB Micro B''~ |1|VBUS | |2|D- | |3|D+ | |4|ID | |5|GND | |Shell|Shield| ''J2 Power Jack''~ |1|GND| |2|PWRIN| |3|GND| - 全IOピン:割り込み/PWM/I2C/1-wireシリアル対応(D2除く)~ - 全IOピン:''3.3V系''~ - ドライブ電流(ソース・シンク):''12mA''~ ドライブ能力が小さいので注意する。~ - 内臓のプルアップ/プルダウン機能~ GPIOにはCPU内臓のプルアップ/プルダウン機能がある。~ - オンボードLEDはD5(GPIO14)に接続されている~ - CPU Moduleに実装されているLEDはD9(GPIO2)に接続されている~ - D8(GPIO0),D9(GPIO2)は10Kでプルアップされている(ブートモード選択用)~ - D10(GPIO15)は10Kでプルダウンされている(ブートモード選択用)~ - アナログ入力:入力範囲''0〜1V''(220Kと100Kで分圧し100K側でADC0に接続されている)~ - いくつかのコネクタピンは別のピンと接続されている(Arduino Unoに合わせるため?)~ ** Flash ROMのMemory空間へのマッピング [#ced1fb73] 購入した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'')までしかマッピング出来ないようだ。~ OTA機能を使う場合はOTA処理時に一時的に受信したプログラムを格納する領域が必要になるので,そのサイズ分Flash ROMにOTA用に領域が必要になる。つまりプログラム領域としては2倍の領域が必要になる。~ Flash ROMの2nd Bootloaderとプログラム領域,パラメーター領域などをMemory空間にマッピングして,残った未使用SPI Flash ROMの領域は,専用のプログラムが必要ではあるが仮想ファイルシステムや仮想EEPROMなどとして使用することが出来る。~ Espressif社のATコマンドのfirmwareでは,プログラム領域として512KBや1024KBのサイズ(実装している機能により分けられている)が使われている。~ ** 出荷時のfirmware [#lae06eb1] WeMos D1互換ボード/D1 miniボードというかESP8266が実装されているボード出荷時には,Flash ROMに懐かしいATコマンド(Espressif社)が使えるfirmwareが書き込まれている。~ PCとWeMos D1互換ボード/D1 miniボードをUSBで接続して,仮想COMポートのシリアルコンソール(PuTTYなど)を使うと,電源On(またはReset)後のBoot ROMプログラムが出力するメッセージを確認することが出来る。~ この時,シリアルポートのbaudrateは''74880''と変な値になっている。~ ets Jan 8 2013,rst cause:2, boot mode:(3,6) load 0x40100000, len 2592, room 16 tail 0 chksum 0xf3 load 0x3ffe8000, len 764, room 8 tail 4 chksum 0x92 load 0x3ffe82fc, len 676, room 4 tail 0 chksum 0x22 csum 0x22 2nd boot version : 1.7(5d6f877) SPI Speed : 40MHz SPI Mode : DIO SPI Flash Size & Map: 32Mbit(1024KB+1024KB) jump to run user1 @ 1000 flash_id=0x164068 ret=2147483647 V2 Mo rf cal sector: 1019 freq trace enable 0 rf[112] : 00 rf[113] : 00 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剏 ''boot mode:(3,6)''と表示される場合の''3''は,通常モードでブートしたことを意味している。~ bootloaderモードだと''boot mode:(1,6)''と表示され,''1''がbootloaderモードの意味になる。~ これはブートオプションのbit構成そのまま。~ 6はおそらくSPI Flash ROMが32Mbit=4MBだと''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上のエントリアドレスにジャンプしてユーザープログラムとして起動している。~ これで,baudrateが''115200''に変更されて,ATコマンド待ちのプロンプトReady(上で文字化けしている部分)が表示される。~ ATコマンドで確認してみる。改行コードはCRLF。~ AT OK AT+GMR AT version:1.7.6.0(Jan 24 2022 08:56:02) SDK version:3.0.6-dev(072755c) compile time:May 17 2025 10:10:06 Bin version(Wroom 02):1.7.6 OK 注意することとして,プログラムを作成してオブジェクトをボードのFlash ROMに書き込むと,このATコマンドが利用できるfirmwareは上書きされてしまう。~ なので,WeMos D1(ESP8266ボード)を購入したら,firmwareのバックアップをしておいたほうが良いと思う。~ WeMos D1互換ボード購入時にこんなことは知らなかったので,firmwareのバックアップはしていない ;( ~ 最新バージョンのATコマンドfirmwareに下記のようにしてFlash ROMに書いた後に確認している。なので元々書き込まれていたfirmwareとは違う。~ //WiFi通信が出来るか確認してみる。~ //PCで[[NetCat>https://www.google.co.jp/search?q=NetCat+for+windows]]を起動する。~ // nc.exe -L -p 1000 // port1000を使った。~ // ESP8266ボードのコンソールでATコマンドを使う。~ // AT+CIPSTART="TCP","192.168.24.201",1000 // CONNECT // OK // AT+CIPMODE=1 // // OK // AT+CIPSEND // // OK // > //プロンプト>が表示される。~ //送信してみる。~ // Hello, Yuji! //NetCatコンソールで受信出来た。~ // Hello, Yuji! // +++で通信を終了する。~ // +++ *** Flash ROMを読み書きするツール [#p91742c8] [[esptool.py>https://github.com/espressif/esptool]]は,ESP8266ボードに実装されているSPI Flash ROMを読んだりfirmwareを書いたりすることが出来るPythonで動作するツール。~ Pythonが使える環境であれば,pipコマンドでインストール出来る。~ > pip install esptool インストールできたか確認してみる。~ > esptool esptool.py v4.8.1 usage: esptool [-h] [--chip {auto,esp8266,esp32,esp32s2,esp32s3beta2,esp32s3,esp32c3,esp32c6beta,esp32h2beta1,esp32h2beta2,esp32c2,esp32c6,esp32c61,esp32c5,esp32c5beta3,esp32h2,esp32p4}] [--port PORT] [--baud BAUD] [--port-filter PORT_FILTER] [--before {default_reset,usb_reset,no_reset,no_reset_no_sync}] [--after {hard_reset,soft_reset,no_reset,no_reset_stub}] [--no-stub] [--trace] [--override-vddsdio [{1.8V,1.9V,OFF}]] [--connect-attempts CONNECT_ATTEMPTS] {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でボードの情報を確認する。~ > esptool flash_id 搭載しているFlash ROMのサイズなんかが確認出来る。~ ヘルプ表示されないオプションとして以下がある。~ : --flash_freq(-ff) | SPI Flash frequency: 40m, 26m, 20m, 80m : --flash_size(-fs) | SPI Flash size:1MB, 2MB, 4MB, 8MB, 16MB, 256KB, 512KB, 2MB-c1, 4MB-c1 : --flash_mode(-fm) | SPI Flash mode:qio, qout, dio, dout *** firmwareをバックアップする [#l1117540] Flash ROMが4MB(32Mbit)の場合は,以下のようにしてバックアップ出来る。~ > esptool -c esp8266 -p COMx -b 115200 read_flash 0x0000 0x400000 esp8266_backup4M.bin もし,バックアップしたfirmwareに戻したいときは以下のようにする。~ > esptool -c esp8266 -p COMx -b 115200 write_flash 0x0000 esp8266_backup4M.bin *** バックアップしていない場合でfirmwareを戻す [#nf88fb2b] firmwareを前もってバックアップしていなかった場合,AI-Thinker社またはEspressif社で提供されているATコマンドのfirmwareをダウンロードして,WeMos D1互換/D1 miniボードのFlash ROMに書き込むことで,ATコマンドが使える状態に戻すことが出来る。~ 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が用意されている。~ 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でも動作した。~ 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)~ > 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コマンドを使って確認した設定値を使う必要があると思う・・・~ Ai-Thinker社からリリースされているfirmwareは&ref(AiThinker_ESP8266_20160615_1.5.4.zip,AiThinker_ESP8266_20160615_1.5.4);をダウンロードして,任意のディレクトリに解凍する。~ SDK version:1.5.4, AT version:1.1.0 とEspressif社のものより古いバージョンみたいだ。~ > 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] このWeMos D1互換ボード/D1 miniボードのソフトウェア開発環境として,いくつかのツールや開発環境やfirmwareが利用できる。~ ボード自体にPythonやLuaなどのインタープリター言語のランタイムのfirmwareを搭載して,電源Onですぐにボード上でプログラム開発が行えるような製品もあるようだ。~ - [[MicroPython>https://micropython.org]]~ MicroPythonはPython 3互換のランタイム環境。~ [[MicroPythonのダウンロードページ>http://micropython.org/download/#esp8266]]からダウンロードしてボードに書き込むことで使用できる。~ 電源OnするとすぐPythonが使用でき,昔のBasicマシンのような使い勝手。~ - [[NodeMCU>https://www.nodemcu.com/index_en.html]]~ NodeMCUは,[[Lua>https://ja.wikipedia.org/wiki/Lua]]ベースのランタイム環境を持ったオープンソースハードウェア用のfirmware。~ これを書き込んで出荷している製品に,[[NodeMCU Development Kit>https://github.com/nodemcu/nodemcu-devkit]]がある。~ WeMos D1の小型版ボードの[[WeMos D1 mini>https://www.wemos.cc/en/latest/d1/d1_mini.html#]]は,NodeMCU Development Kitの互換品でもあるらしい。~ [[ESPlorer>https://github.com/4refr0nt/ESPlorer]]という統合開発環境も用意されている。~ 電源Onするとすぐ使用でき,昔のBasicマシンのような使い勝手。~ - [[Arduino IDE>https://www.arduino.cc/en/software/]]~ Ardduino Unoなどで使用するArduino IDEがESP8266ボードのプログラム開発環境にも使用できる。~ ボードマネージャーでハードウェアパッケージをインストールすると,ToolChainもインストールされる。~ Arduinoボードでプログラム開発するのと同じ手順で,ESP8266のプログラムを作成して動かすことが出来る。~ - [[PlatformIO IDE>https://platformio.org/platformio-ide]]~ platform IDEはESP8266のプログラムを開発する時に無料で使用できる統合開発環境。~ フレームワークとしてArduino Frameworkが使用できるみたいで,Visual Studio Code上に環境を構築して使用するようなIDE環境。~ Arduino IDEでプログラム開発するのと同じ感覚で,ESP8266のプログラムを作成して動かすことが出来る。~ - [[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環境とスタンドアローン環境用のSDK。~ ESP8266ボードで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]]も別途用意されている。~ これ以外の開発環境もあるようだ。~ ** 仮想COMドライバーのインストール [#y2948b5b] WeMOs D1互換ボードは,中華製CH340がUSB-Serialコンバーターとしてボードに実装されているので,USBでPCとして接続して仮想COMポートを使ってボードと通信出来る。~ このCH340用のデバイスドライバーのインストールが必要。~ Windows10以降ではPlug&Playで自動的にインストールされるようになっているので手動でのインストールは必要ないのだが,Windows Updateでデバイスドライバーが最新バージョンに更新されてしまうと,なぜか最新バージョンではうまく動作しなくなってしまうので注意する。~ なので,Windows 7やPlug&Playでデバイスドライバーがインストールされない場合や最新バージョンに更新されてしまった場合は,この&ref(ch341ser.zip,,デバイスドライバー);を手動でインストールする。~ ** Arduino IDE [#nff0b1a9] Arduino IDEは[[こちらのページ>/開発/AVR/Arduino#l10a36d2]]のようにしてインストールできる。 *** ハードウェアパッケージのインストール [#l51e57d4] ハードウェアパッケージをインストールする方法は,Arduino IDEのボードマネージャーを使用する方法と,パッケージを直接ダウンロードして配置する方法とがある。~ - Arduino IDEのボードマネージャーを使用する場合~ Arduino IDEを起動し,ファイル>環境設定>追加のボードマネージャーに, http://arduino.esp8266.com/stable/package_esp8266com_index.json を追加する。~ ~ ツール>ボード>ボードマネージャーから''esp8266 by ESP8266 Community''を選んで,最新バージョンをインストールする。~ ~ インストールが終了したら,Arduino IDEを再起動する。~ - パッケージをダウンロードしてインストールする場合~ https://github.com/wemos/Arduino_D1.gitが消滅?しているので,代わりに[[別のサイト>https://github.com/esp8266/Arduino.git]]からダウンロードする。~ > cd <arduino IDEインストール>\hardware > md esp8266com > cd esp8266com > git clone https://github.com/esp8266/Arduino.git esp8266 ~ これで,以下のようなディレクトリ構成になる。 ─┬ Arduino └─┬ hardware └─┬ esp8266com └─┬ esp8266 ├── bootloaders ├── cores ├── doc ├── libraries ├── package ├── tests ├── tools ├── variants ├── platform.txt ├── programmers.txt ├── README.md ├── boards.txt ├── LICENSE バイナリツールをダウンロード(要Python2.7)~ > cd esp8266/tools > python get.py Arduino IDEを再起動する。~ *** ボードの設定 [#hacc8d02] 上記のようにしてハードウェアパッケージがインストールできたら,Wemos D1(ESP8266)互換ボードを使用するのに以下のようにボードの選択・設定をした。~ - ボード~ WeMos D1 R2&miniを選択した。~ - CPU周波数~ 80MHzが標準クロックだが,O.C.で160MHzでも動作する場合があるらしい。~ 80MHzを選択した。~ - Flashサイズ~ 4M(FS:2MB OTA:~1019KB)を選択してみた。~ この設定の場合,プログラムなどに使えるFlash ROMのサイズは1019KBに制限され(OTA対応にしているので実際は2048KBを使う),残りの2MBはSPIFFS(SPI Flash File System)としてファイルシステムとして使用する。~ 4M(FS:3MB OTA:~512KB)を選択すると,プログラム用に512KBに制限され(OTA対応にしているので実際は1024KBを使う),残りの3MBはファイルシステムとして使用する設定になる。~ - アップロードスピード~ 921600bpsを選択する。うまくいかない場合は,115200bpsにする。~ - LWIP Variant~ Networkスタックの機能を選択する。~ TCPのMSSを設定できるようだ。Higher Bandwidh(MSS=1460, IPv6=off)を選択した。~ Lower Memoryに設定するとMSS=536, IPv6=offになる。~ no featuresにすると以下の設定(RAM使用がセーブできる)になる。~ -- IP Forwarding/NATを使わない。~ -- AutoIP(192.254.x.x)を使わない。~ -- IPフラグメンテーションと再構成なし。~ -- Selective ACKなし。~ -- listen backlogなし。~ - シリアルポート~ PCに認識されたCOMxポートを選択する。~ 他の設定はそのまま。 *** ArduinoOTA [#jd58cb36] Arduino IDEを使ってESP8266のボード用のプログラムを作成して書き込む場合,PCとボードをUSB(仮想COMポート)で接続して,bootloaderの機能を使ってプログラムの書き込みを行う。~ プログラム作成時はこれで問題無いが,機器として設置した後にそのプログラムを更新しようとすると,設置しているところからボードを外してきて,PCとUSBで接続して・・・,と作業が面倒になってしまう。~ こんな時,ESP8266ボードの無線LANを使ってPCと接続しプログラムを更新する事が出来れば,手間も少なくなり便利になる。~ このような機能をOTA(Over The Air)と呼んでいるようで,市販の機器だと大抵はこのような機能が実装されている。~ Arduino IDEでボードマネージャーを使ってESP8266ボードを使えるようにしていると,OTA用のライブラリ(ArduinoOTAなど)もインストールされている。OTAを利用するサンプルプログラムが用意される。~ ArduinoOTAは以下の手順でプログラムを更新する。~ - ESP8266ボードのユーザープログラムのOTA機能で,無線LANに接続する。~ - Arduino IDEから無線LANを使ってプログラムを送信する。~ - ボードで無線LANを使ってプログラムを受信して,Flash ROMの空きエリアにプログラムを書き込む。~ このためOTA対応にすると,プログラムサイズの2倍のFlash ROMが必要となる。~ 空きエリアに書き込んだOTA対応プログラムを起動するようにReset Vectorを設定する。 - ボードをResetする。 - OTA対応プログラムが,プログラムをFlash ROMの先頭に移動する。~ - ボードをResetする。~ - ユーザープログラムが再度起動する。~ このような仕組みなので,更新するプログラムは常にOTA対応コードを実装しておく必要がある。~ また,更新プログラムをダウンロードして一時保存するためのFlash ROMスペースを確保しておく必要がある。これは,Arduino IDEのボードマネージャーでの設定でサイズを設定できる。~ ArduinoOTAの機能設定は以下のようになっている。~ - Port番号の設定~ デフォルトのPortは8266番。~ - アップロードする時のESP8266ボードのホスト名の設定~ デフォルトは,ESP8266のチップIDになる。~ - アップロード時のパスワード設定~ - アップロード開始・終了・アップロード中・エラー時のコールバック関数の指定~ ''OTA対応のLED点滅プログラムの例''~ おなじみのLED点滅プログラムをOTA対応にしてみた。~ #code(c,,nonumber,Blink.ino) Arduino IDEを再起動すると,ボードのシリアルポートの設定に無線LANでアクセスできるように設定できる。~ これで,プログラムを変更してプログラムの更新をする時に,無線LANを使って更新ができるようになって便利になった。~ *** WatchDog Timerの注意 [#qd28ac50] ESP8266のボードには内蔵WDT(WatchDog Timer)がある。~ これは,プログラムが暴走した時などに強制的にResetをかける機能で,ハードウェアで実装されている。((これとは別に,ソフトウェアで実装するWatchDog TimerもArduno IDEでは用意されている。))~ Arduino IDEを使う場合,frameworkの以下のタイミングでWDTのタイマーがリセットされるようだ。~ - loop()の終了・再呼出時~ - delay()の実行時~ - yield()の実行時~ WDTが''6秒''に相当するカウント値を超えてしまうとCPUを強制的にリセットするので,loop()内で時間がかかる処理や長時間の入力待ちなんかがある場合は,適当な箇所にdelay(0)やyield()を入れて,WatchDogタイマーをリセットするようにする。~ ただし,delayMicroseconds()ではWDTを叩かないので,この目的には使用できない。~ WDTはハードウェアで実装されているのだが,動作しないようにすることは可能。~ I/Oアドレス0x60000900を0にすると,WDTの動作を停止することが出来ると思われる。~ //void hw_wdt_disable(){ // *((volatile uint32_t*) 0x60000900) &= ~(1); // Hardware WDT OFF //} // //void hw_wdt_enable(){ // *((volatile uint32_t*) 0x60000900) |= 1; // Hardware WDT ON //} ** Platform IDE [#ee2daa9c] [[PlatformIO IDE>https://platformio.org/]]は,ATMEL AVRやESPRESSIF ESP8266/ESP32など各社のいろいろなマイクロプロセッサーを搭載したIoT向けのボードのプログラムを開発する時に,無料で使用することが出来る統合開発環境。~ 各CPU用のフレームワークに対応していて,ESP82666の場合Arduino IDEに似たような使い勝手で,プログラムの編集・ビルド・Flash ROMへの書き込みなどが効率的に行える。~ またフレームワークは,Arduino IDEとほぼ同じ物が使われているように思える。~ Microsoft製のテキストエディターVisual Studio Codeの拡張機能としても提供されているので,Visual Studio Codeに慣れている人は便利な機能を使え,プログラムの編集が効率的に行える。~ またデバッグ機能が搭載されていて,CPUによってはデバッグする時に利用できる。~ また,PlatformIO CoreというCLIツールをEclipseやCodeBlocks,Visual Studioといった他のIDEに統合化することもできて,EclipseやCodeBlocksなどのIDEで各社のCPUのフレームワークでプログラム開発が行えることになる。~ [[こちらのページ>/開発/AVR/開発環境/PlatformIO]]のようにして,インストールする。~ ** 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]]や[[ESP8266_NONOS_SDK>https://github.com/espressif/ESP8266_NONOS_SDK/releases]]がリリースされている。~ スタンドアローンのプログラム開発の場合は,ESP8266_NONOS_SDKが使用できる。~ 上記のGitHubからダウンロードできる。 > md esp8266 > cd ~/esp8266 > git clone https://github.com/espressif/ESP8266_NONOS_SDK.git //環境変数を設定する。~ // 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は,マイクロコントローラーで動作するPython 3互換およびそのランタイム。~ マイクロコントローラーをリセット後すぐにPythonが動作する環境となる。なので比較的手軽にプログラムを試すことが出来る。~ MicroPythonはESP8266チップをサポートしているので,MicroPythonをボードに書き込んで使用することができる。 ダウンロードは,[[こちら>https://micropython.org/download/esp8266/]]から最新バージョンがダウンロード出来る。~ ボードにMicroPythonを書き込むためにesptoolが必要なのでPCにインストールする。~ > pip install esptool MicroPythonをボードに書き込む。~ > esptool -p COMx erase_flash > esptool -p COMx write_flash --flash_size=detect 0x0000 esp8266-20220618-v1.19.1.bin PCとボードをUSBケーブルで接続しPuTTY等で接続する。~ - baudrateは115200~ - 改行はCR~ ボードをResetする。そうすると,対話型Pythonで操作できる。~ MicroPython v1.19.1 on 2022-06-18; ESP module with ESP8266 Type "help()" for more information. >>> print("Hello Yuji Ueno") Hello Yuji Ueno >>> となれば動作している。 *** 無線LANを使って接続する [#q8cdc9b2] WebREPLを使用すると無線LANで通信できる。~ 作成したプログラムをボードにアップロードしたりダウンロードしたり出来る。~ 上記のシリアルポートで接続して,~ >>> import webrepl_setup とする。いくつか質問されるので,''E''と任意のPassを設定して,''Y''でリブートする。~ 一度ボードをResetして,さらに >>> import network >>> sta = network.WLAN(network.STA_IF) >>> sta.active(True) >>> sta.scan() >>> sta.connect('<SSID>', '<PASS>') >>> while not sta.isconnected() : time.sleep(0.1) >>> conf = sta.ifconfig() >>> print(conf) これでボードのIP Addressがわかる。 PCに[[WebREPLコンソール>https://github.com/micropython/webrepl]]をインストールする。~ > git clone https://github.com/micropython/webrepl.git webreplディレクトリにあるwebrepl.htmlをダブルクリックする。''ws://<IP Address>:8266''と入れて,Connectボタンを押す。~ これで無線LANで接続して,操作することが出来る。~ ボードがResetした後に自動的にWLAN接続できるように''boot.py''を書き込んでおく。~ #code(python,,nonumber){{ import network import webrepl import utime sta = network.WLAN(network.STA_IF) sta.active(True) sta.connect('<SSID>', '<PASS>') start_time = utime.time() while utime.time() - start_time < 10: if sta.isconnected(): print("connect") webrepl.start() break else: print("Timeout") sta.active(False) ap = network.WLAN(network.AP_IF) ap.active(True) webrepl.start() }} WebREPLコンソールの右にあるsend a fileでboot.pyを指定してsend to deviceボタンで書き込む。~ これで,最初からWLAN接続できるようになった。~ * スマートスピーカーと連携させる [#dccb1df6] ** Google home mini [#i33bcb96] スケッチ>Include Library>Manage Libraries...で空欄にgoogleと入れる。~ esp8266-google-home-notifier 1.0.6とesp8266-google-home-tts 1.0.7をInstallする。 これでWeMos D1ボードからGoogle home miniにしゃべらせることができる。 ** Amazon Alexa [#b18ee335] https://github.com/witnessmenow/esp8266-alexa-wemo-emulatorからzipファイルをダウンロードする。~ スケッチ>Include Library>Add ZIP Libraries...>esp8266-alexa-wemo-emulator-master.zipを選択する。 これでWeMos D1ボードから,IFTTTを使わなくても家の電気をつけたり消したり出来るようになる。 ** IFTTTと連携 [#v46958c9] WeMos D1ボードとIFTTTとの連動は,[[ESP8266IFTTT>https://github.com/pokiiio/ESP8266IFTTT]]を使う。~ zipファイルをダウンロードする。 スケッチ>Include Library>Add ZIP Libraries...>ESP8266IFTTT-master.zipを選択する。 ESP8266IFTTTのスケッチの例 // ヘッダー #include <ESP8266IFTTT.h> // 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.trigger(IFTTT_WEBHOOK_NAME, IFTTT_KEY); // もしvalueがあれば・・・(但しvalueは文字列に限る。) IFTTT.trigger(IFTTT_WEBHOOK_NAME, IFTTT_KEY, value1, value2, value3); これで準備完了。~ ファイル>スケッチの例 から,いろいろ試すことが出来る。 Google home miniやAlexaから,IFTTTを使って家の電気をつけたり消したり出来る。もちろんリモコンもコントロール出来る。
« Prev
開発/WeMos D1 のバックアップ一覧
開発/WeMos D1 のバックアップソース(No. All)
1: 2022-10-01 (土) 09:25:26
yuji
Deleted an attach file: d1_v2.0.0.pdf at 2022-10-01 (土) 10:13:17, Deleted an attach file: esp8266-technical_reference_en.pdf at 2022-10-01 (土) 10:13:30
2: 2022-10-07 (金) 13:24:28
yuji
Deleted an attach file: hiletgo_wemosd1.png at 2022-10-07 (金) 14:59:33, Deleted an attach file: HiLetgo_D1.png at 2022-10-07 (金) 14:59:44
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
Counter: 1409, today: 3, yesterday: 5
Copyright©2008 Yuji Ueno All Rights Reserved.
ログイン
ユーザ名:
パスワード:
IDとパスワードを記憶
パスワード紛失
メインメニュー
ホーム
でぶlog
資料室
最新ページ一覧
全ページ一覧
ヘルプ
» 関連ページ
» Wikiソース
» 編集履歴
» バックアップ一覧
» 添付ファイル一覧
フォーラム
お問い合わせ