electronicsgadget

sonoffにESPEasyを入れてみる

sonoffというESP8266が乗ったいわゆるIoTスイッチにESPEasyというファームを入れて,家の中の色々なものをコントロールしようというプロジェクト

sonoffとは,要するにESP8266(ESP-WROOM-02)と250V 10Aのリレースイッチとが付いている基板で,
Wifiに繋いであげることで,スマホのアプリやAlexaとかGoogleホームからコントロールできるらしい。
アマゾンでも1500円くらいで売ってるはず。

自分の場合は,謎の純正ファームを使う気はなく,
ESPEasyというESP8266用のArduinoっぽいファームを使って,部屋の換気ファンの制御に使いたい。
というわけで,買ってみた。

早速開けてみると,基板の表側はAC-DCとリレー,裏側はESP8266が乗ってるという非常にシンプルな構造。
要するにESP8266が乗ってるArduino(WemosD1)とかと一緒。

真ん中5つはシリアルが出てるらしく,ここからESPEasyを焼けるらしい。
ということで,適当にピンヘッダをはんだ付けして,RPi用のシリアルケーブルでPCと接続してみる。

ESPEasyのファームウェアを落としてくると,Windows用のフラッシュツールが付いてくるのだが,
Windows機がないので,Linuxから書き込む方法をググる。

で,LinuxからESPEasyを焼く場合はesptoolが必要らしいのでgithubから落としてくる。


$:~/Desktop/ESPEasy$ git clone https://github.com/igrr/esptool-ck.git
Cloning into 'esptool-ck'...
remote: Counting objects: 689, done.
remote: Total 689 (delta 0), reused 0 (delta 0), pack-reused 689
Receiving objects: 100% (689/689), 256.68 KiB | 0 bytes/s, done.
Resolving deltas: 100% (405/405), done.
$:~/Desktop/ESPEasy$ ls
ESPEasy_R120 ESPEasy_R120.zip esptool-ck
$:~/Desktop/ESPEasy$ cd esptool-ck/
$:~/Desktop/ESPEasy/esptool-ck$ ls
argparse binimage _config.yml elf espcomm infohelper LICENSE main.c Makefile README.md serialport test_failure_rate.sh TODO
$:~/Desktop/ESPEasy/esptool-ck$ make
cc -std=gnu99 -Os -Wall -Iinfohelper -Ielf -Ibinimage -Iargparse -Iserialport -Iespcomm -DVERSION=\"0.4.13\" -c -o argparse/argparse.o argparse/argparse.c
cc -std=gnu99 -Os -Wall -Iinfohelper -Ielf -Ibinimage -Iargparse -Iserialport -Iespcomm -DVERSION=\"0.4.13\" -c -o argparse/argparse_binimagecmd.o argparse/argparse_binimagecmd.c
cc -std=gnu99 -Os -Wall -Iinfohelper -Ielf -Ibinimage -Iargparse -Iserialport -Iespcomm -DVERSION=\"0.4.13\" -c -o argparse/argparse_commcmd.o argparse/argparse_commcmd.c
cc -std=gnu99 -Os -Wall -Iinfohelper -Ielf -Ibinimage -Iargparse -Iserialport -Iespcomm -DVERSION=\"0.4.13\" -c -o argparse/argparse_elfcmd.o argparse/argparse_elfcmd.c
cc -std=gnu99 -Os -Wall -Iinfohelper -Ielf -Ibinimage -Iargparse -Iserialport -Iespcomm -DVERSION=\"0.4.13\" -c -o binimage/esptool_binimage.o binimage/esptool_binimage.c
cc -std=gnu99 -Os -Wall -Iinfohelper -Ielf -Ibinimage -Iargparse -Iserialport -Iespcomm -DVERSION=\"0.4.13\" -c -o elf/esptool_elf.o elf/esptool_elf.c
cc -std=gnu99 -Os -Wall -Iinfohelper -Ielf -Ibinimage -Iargparse -Iserialport -Iespcomm -DVERSION=\"0.4.13\" -c -o elf/esptool_elf_object.o elf/esptool_elf_object.c
cc -std=gnu99 -Os -Wall -Iinfohelper -Ielf -Ibinimage -Iargparse -Iserialport -Iespcomm -DVERSION=\"0.4.13\" -c -o espcomm/delay.o espcomm/delay.c
cc -std=gnu99 -Os -Wall -Iinfohelper -Ielf -Ibinimage -Iargparse -Iserialport -Iespcomm -DVERSION=\"0.4.13\" -c -o espcomm/espcomm.o espcomm/espcomm.c
cc -std=gnu99 -Os -Wall -Iinfohelper -Ielf -Ibinimage -Iargparse -Iserialport -Iespcomm -DVERSION=\"0.4.13\" -c -o espcomm/espcomm_boards.o espcomm/espcomm_boards.c
cc -std=gnu99 -Os -Wall -Iinfohelper -Ielf -Ibinimage -Iargparse -Iserialport -Iespcomm -DVERSION=\"0.4.13\" -c -o infohelper/infohelper.o infohelper/infohelper.c
cc -std=gnu99 -Os -Wall -Iinfohelper -Ielf -Ibinimage -Iargparse -Iserialport -Iespcomm -DVERSION=\"0.4.13\" -c -o serialport/serialport.o serialport/serialport.c
cc -std=gnu99 -Os -Wall -Iinfohelper -Ielf -Ibinimage -Iargparse -Iserialport -Iespcomm -DVERSION=\"0.4.13\" -c -o main.o main.c
cc argparse/argparse.o argparse/argparse_binimagecmd.o argparse/argparse_commcmd.o argparse/argparse_elfcmd.o binimage/esptool_binimage.o elf/esptool_elf.o elf/esptool_elf_object.o espcomm/delay.o espcomm/espcomm.o espcomm/espcomm_boards.o infohelper/infohelper.o serialport/serialport.o main.o -o esptool
strip esptool 2>/dev/null \
|| -strip esptool
$:~/Desktop/ESPEasy/esptool-ck$ ls
argparse binimage _config.yml elf espcomm esptool infohelper LICENSE main.c main.o Makefile README.md serialport test_failure_rate.sh TODO


これでesptoolは用意できた。

次は,ESPeasyをsonoffに焼くのだが,
sonoffはスイッチを押しながら電源ONでFW更新モードに入るらしいので,
ttyUSBをPCにつなぐ前に本体のスイッチを押しながらPCに接続する。

(最初,FW更新モードの入り方がよく分からず,何度やっても焼けないので焦ってしまった。)

そして以下のようにしてesptoolを使ってESPeasyをフラッシュする。
ちなみに,ESPeasyはROM容量ごとにイメージが別れているが,sonoffはROMが1024Kらしい。


$:~/Desktop/ESPEasy$ ./esptool -vv -cd nodemcu -cb 115200 -cp /dev/ttyUSB0 -ca 0x000000 -cf ESPEasy_R120/ESPEasy_R120_1024.bin
esptool v0.4.13 - (c) 2014 Ch. Klippel <ck@atelier-klippel.de>
setting board to nodemcu
setting baudrate from 115200 to 115200
setting port from /dev/ttyUSB0 to /dev/ttyUSB0
setting address from 0x00000000 to 0x00000000
espcomm_upload_file
espcomm_upload_mem
opening port /dev/ttyUSB0 at 115200
tcgetattr
tcsetattr
serial open
opening bootloader
resetting board
trying to connect
espcomm_send_command: sending command header
espcomm_send_command: sending command payload
trying to connect
espcomm_send_command: sending command header
espcomm_send_command: sending command payload
espcomm_send_command: receiving 2 bytes of data
espcomm_send_command: receiving 2 bytes of data
espcomm_send_command: receiving 2 bytes of data
espcomm_send_command: receiving 2 bytes of data
espcomm_send_command: receiving 2 bytes of data
espcomm_send_command: receiving 2 bytes of data
espcomm_send_command: receiving 2 bytes of data
espcomm_send_command: receiving 2 bytes of data
Uploading 411264 bytes from ESPEasy_R120/ESPEasy_R120_1024.bin to flash at 0x00000000
erasing flash
size: 064680 address: 000000
first_sector_index: 0
total_sector_count: 101
head_sector_count: 16
adjusted_sector_count: 85
erase_size: 055000
espcomm_send_command: sending command header
espcomm_send_command: sending command payload
setting timeout 15000
setting timeout 1000
espcomm_send_command: receiving 2 bytes of data
writing flash
................................................................................ [ 19% ]
................................................................................ [ 39% ]
................................................................................ [ 59% ]
................................................................................ [ 79% ]
................................................................................ [ 99% ]
.. [ 100% ]
starting app without reboot
espcomm_send_command: sending command header
espcomm_send_command: sending command payload
espcomm_send_command: receiving 2 bytes of data
closing bootloader

とりあえず焼けたっぽいので,今度はスイッチを押さずに電源を投入する。
そうすると,通常モードで起動してきてESP01とかいうAPがwifiで見えるハズなのだが…
見えない。。(-_-;)

うーん,壊したか?

Leave a Reply

Your email address will not be published. Required fields are marked *