読者です 読者をやめる 読者になる 読者になる

ようこそシャチクパーク!

今日もどったんばったん大騒ぎ!

ESP32を始めてみる Visual Studio 2017編

わーい!ESP32ってたーのしー!

ちょっと間が開いていしまいました。

秋月電子でも開発ボートの取り扱いが始まって今年はESP32がけものフレンズ並みに流行りそうですね。

 

今回はプラグインをいれることでVisualStudioがArduino IDE代わりになるということで以下でも取り上げられいまして二番煎じ丸出しです。

てなわけでこの前入れたVisual Studio 2017でもESP32に書き込みができました。

確認したのはRC版ですがこの前正式リリースされた正式版でも同じようにできると思います。

 

d.hatena.ne.jp

 

・インストール

 何はともあれVS2017を入れましょう。

 C++も入れないと動かないので注意してください。

 

プラグイン追加

 ツール→拡張機能を開いてarduinoで検索して出てきた「Arduino IDE for Visual Studio」をダウンロードします。

 ダウンロード完了後にVSを再起動するとチームとツールの間にvMicroと表示されました。

f:id:ken5owata:20170318212643p:plain

 

最初はBoardにESP32が出てこず、やだな~おかしいな~と稲川淳二ばりに首をひねってましたが、以下の下2つの設定(スケッチの保存先とjsonファイルのURL)を削除してみるとうまくESP32が出てくるようになりました。

f:id:ken5owata:20170318214031p:plain

 

理由はわからないけどまぁいいです。

f:id:ken5owata:20170318214238p:plain

 

あとはESP32を書き込みモードにして書き込むだけですね。

f:id:ken5owata:20170318214518p:plain

f:id:ken5owata:20170318214525p:plain

 

ブレークポイントを置いてデバッグ...のようなことはできませんが入力補完が効くのでラクですね~

 

f:id:ken5owata:20170318215706p:plain

ESP32を始めてみる dockerでESP-IDF編

わーい!ESP32ってたのしー

 

Arduino IDEではなくメーカー提供のESP-IDFで開発してみたいと思います。

が手順*1を見るとツールのセットアップ等めんどくさいですよねー

 

なんか簡単にできないかなとdockerhubを検索してみるとあるじゃないですか。

ほーいいじゃないか、こういうのでいいんだよ、こういうので。

 

https://hub.docker.com/r/vowstar/esp8266/

 

どうやらESP32とESP8266どっちもいけるようですね。

すっごーい!

 

でイメージを落とします。

なお以降の手順はubuntu 16.04、Docker version 1.10.3, build 20f81ddで行いました。

 # docker pull vowstar/esp8266

 

使い方は↑のイメージのURLのUsageをそのままをなぞっていきます。

開発はコンテナ内ではなくホスト側で行うのでESP-IDFとテンプレートを持ってきます。

作業フォルダを作りそのなかにESP-IDFとテンプレ(Lチカ)を配置します。

 # mkdir idf

 # cd idf

 

 ESP-IDFを取得します。

 # git clone --recursive https://github.com/espressif/esp-idf.git

 # cd esp-idf/

 # git submodule update --init

 

テンプレ(Lチカ)を取得してmyapp内のmain.cのピン番号を適当なのに変えます。

 

ESP32をFlashモードで起動させPCにつなぎコンテナを作業フォルダで起動します。

-v オプションでコンテナが起動すると/buildにホスト側の作業フォルダがマウントされます。

# docker run -it --name ESP32 -e IDF_PATH=/build/esp-idf --device /dev/ttyUSB0:dev/ttyUSB0 -v `pwd`:/build vowstar/esp8266 /bin/bash

 

コンテナに入ります。

root@672a8f22f3a6:/# cd build/
root@672a8f22f3a6:/build# ls
esp-idf  myapp
root@672a8f22f3a6:/build# cd myapp/
root@672a8f22f3a6:/build/myapp# ls
LICENSE  Makefile  README.rst  main  sdkconfig
root@672a8f22f3a6:/build/myapp# make menuconfig

 

f:id:ken5owata:20170216025123p:plain

 

初回なのでとくにconfigはいじらずmake→make flashでESP32にプログラムを書き込めました。

リセットするとLEDが点滅しLチカプログラムが実行します。

 

こうしてdockerを使うことで公式のセットアップ手順のStep0とStep1をすっ飛ばすことができました。

いやーありがたや、ありがたや。

 

しかしCompilerとToolchainのVersionでWARNINGが出ているようですね。

Dockerfileで取得してるのが古いのかな?、なので公式のセットアップ手順のVerに置き換えればよいでしょう。

dockerってすっごーい!

 

さーて他のテンプレも動かしてみっぺかー

 

※ makeとmake flashを貼り付けときます。

root@672a8f22f3a6:/build/myapp# make
fatal: Not a git repository: /home/hoge/デスクトップ/work/sketch/ESP32/idf/esp-idf/.git/modules/components/coap/libcoap
fatal: Not a git repository: /home/hoge/デスクトップ/work/sketch/ESP32/idf/esp-idf/.git/modules/components/esp32/lib
fatal: Not a git repository: /home/hoge/デスクトップ/work/sketch/ESP32/idf/esp-idf/.git/modules/components/micro-ecc/micro-ecc
fatal: Not a git repository: /home/hoge/デスクトップ/work/sketch/ESP32/idf/esp-idf/.git/modules/components/esptool_py/esptool
WARNING: Toolchain version is not supported: crosstool-NG 8d95cad
Expected to see version: crosstool-NG crosstool-ng-1.22.0-61-gab8375a
Please check ESP-IDF setup instructions and update the toolchain, or proceed at your own risk.
WARNING: Compiler version is not supported: 4.8.5
Expected to see version(s): 5.2.0
Please check ESP-IDF setup instructions and update the toolchain, or proceed at your own risk.
GENCONFIG
fatal: Not a git repository: /home/hoge/デスクトップ/work/sketch/ESP32/idf/esp-idf/.git/modules/components/coap/libcoap
fatal: Not a git repository: /home/hoge/デスクトップ/work/sketch/ESP32/idf/esp-idf/.git/modules/components/esp32/lib
fatal: Not a git repository: /home/hoge/デスクトップ/work/sketch/ESP32/idf/esp-idf/.git/modules/components/micro-ecc/micro-ecc
fatal: Not a git repository: /home/hoge/デスクトップ/work/sketch/ESP32/idf/esp-idf/.git/modules/components/esptool_py/esptool
fatal: Not a git repository: /home/hoge/デスクトップ/work/sketch/ESP32/idf/esp-idf/.git/modules/components/micro-ecc/micro-ecc
fatal: Not a git repository: /home/hoge/デスクトップ/work/sketch/ESP32/idf/esp-idf/.git/modules/components/esptool_py/esptool
WARNING: Toolchain version is not supported: crosstool-NG 8d95cad
Expected to see version: crosstool-NG crosstool-ng-1.22.0-61-gab8375a
Please check ESP-IDF setup instructions and update the toolchain, or proceed at your own risk.
WARNING: Compiler version is not supported: 4.8.5
Expected to see version(s): 5.2.0
Please check ESP-IDF setup instructions and update the toolchain, or proceed at your own risk.
CC src/bootloader_flash.o
CC src/secure_boot_signatures.o
CC src/secure_boot.o
CC src/flash_partitions.o
CC src/esp_image_format.o
CC src/flash_encrypt.o
CC src/bootloader_random.o
AR libbootloader_support.a
CC log.o
AR liblog.a
CC bootloader_start.o
AR libmain.a
LD bootloader.elf
esptool.py v2.0-beta1
Building partitions from /build/esp-idf/components/partition_table/partitions_singleapp.csv...
CC esp_ota_ops.o
AR libapp_update.a
CC src/bootloader_flash.o
CC src/secure_boot_signatures.o
CC src/secure_boot.o
CC src/flash_partitions.o
CC src/esp_image_format.o
CC src/flash_encrypt.o
CC src/bootloader_random.o
AR libbootloader_support.a
CC bt.o
AR libbt.a
CC libcoap/src/address.o
CC libcoap/src/async.o
CC libcoap/src/block.o
CC libcoap/src/coap_time.o
CC libcoap/src/debug.o
CC libcoap/src/encode.o
CC libcoap/src/mem.o
CC libcoap/src/net.o
CC libcoap/src/option.o
CC libcoap/src/pdu.o
CC libcoap/src/resource.o
CC libcoap/src/str.o
CC libcoap/src/subscribe.o
CC libcoap/src/uri.o
CC port/coap_io_socket.o
AR libcoap.a
CXX cxx_guards.o
AR libcxx.a
CC spi_master.o
CC sigmadelta.o
CC uart.o
CC i2c.o
CC periph_ctrl.o
CC ledc.o
CC gpio.o
CC pcnt.o
CC rmt.o
CC sdmmc_transaction.o
CC timer.o
CC sdmmc_host.o
CC i2s.o
CC rtc_module.o
AR libdriver.a
CC panic.o
CC event_default_handlers.o
CC task_wdt.o
CC system_api.o
CC lib_printf.o
CC cpu_util.o
CC int_wdt.o
CC phy_init.o
CC deep_sleep.o
CC cpu_start.o
CC heap_alloc_caps.o
CC crosscore_int.o
CC ipc.o
CC intr_alloc.o
CC core_dump.o
CC event_loop.o
CC cpu_freq.o
CC hw_random.o
CC brownout.o
AR libesp32.a
CC emac_dev.o
CC emac_main.o
AR libethernet.a
CC src/option/syscall.o
CC src/option/unicode.o
CC src/ff.o
CC src/vfs_fat_sdmmc.o
CC src/vfs_fat.o
CC src/diskio.o
AR libfatfs.a
CC ringbuf.o
CC heap_regions_debug.o
CC xtensa_intr.o
CC queue.o
CC croutine.o
CC list.o
CC xtensa_init.o
CC port.o
CC heap_regions.o
CC event_groups.o
CC tasks.o
CC timers.o
CC FreeRTOS-openocd.o
CC xtensa_overlay_os_hook.o
AS xtensa_context.o
AS portasm.o
AS xtensa_vectors.o
AS xtensa_intr_asm.o
AR libfreertos.a
CC log.o
AR liblog.a
CC api/pppapi.o
CC api/netbuf.o
CC api/api_lib.o
CC api/netifapi.o
CC api/tcpip.o
CC api/netdb.o
CC api/err.o
CC api/api_msg.o
CC api/sockets.o
CC api/lwip_debug.o
CC apps/sntp/sntp.o
CC apps/ping/ping.o
CC apps/ping/esp_ping.o
CC apps/dhcpserver.o
CC core/ipv4/ip_frag.o
CC core/ipv4/dhcp.o
CC core/ipv4/ip4_addr.o
CC core/ipv4/igmp.o
CC core/ipv4/ip4.o
CC core/ipv4/autoip.o
CC core/ipv4/icmp.o
CC core/ipv6/ip6_frag.o
CC core/ipv6/dhcp6.o
CC core/ipv6/inet6.o
CC core/ipv6/ip6_addr.o
CC core/ipv6/ip6.o
CC core/ipv6/nd6.o
CC core/ipv6/mld6.o
CC core/ipv6/ethip6.o
CC core/ipv6/icmp6.o
CC core/mem.o
CC core/inet_chksum.o
CC core/init.o
CC core/memp.o
CC core/sys.o
CC core/tcp.o
CC core/dns.o
CC core/ip.o
CC core/raw.o
CC core/tcp_in.o
CC core/pbuf.o
CC core/netif.o
CC core/stats.o
CC core/timers.o
CC core/def.o
CC core/udp.o
CC core/tcp_out.o
CC netif/slipif.o
CC netif/etharp.o
CC netif/ethernet.o
CC netif/lowpan6.o
CC netif/ethernetif.o
CC port/freertos/sys_arch.o
CC port/netif/wlanif.o
CC port/netif/ethernetif.o
AR liblwip.a
CC library/entropy.o
CC library/md4.o
CC library/pkcs12.o
CC library/ccm.o
CC library/sha1.o
CC library/x509_csr.o
CC library/ssl_cli.o
CC library/camellia.o
CC library/blowfish.o
CC library/x509.o
CC library/ssl_ticket.o
CC library/ecp_curves.o
CC library/cipher.o
CC library/error.o
CC library/pem.o
CC library/entropy_poll.o
CC library/x509write_csr.o
CC library/version_features.o
CC library/ripemd160.o
CC library/rsa.o
CC library/md.o
CC library/md_wrap.o
CC library/sha256.o
CC library/dhm.o
CC library/pkwrite.o
CC library/base64.o
CC library/timing.o
CC library/asn1parse.o
CC library/ssl_tls.o
CC library/version.o
CC library/memory_buffer_alloc.o
CC library/cipher_wrap.o
CC library/md2.o
CC library/ssl_cache.o
CC library/ssl_srv.o
CC library/x509_crt.o
CC library/ecdh.o
CC library/asn1write.o
CC library/net.o
CC library/debug.o
CC library/x509_create.o
CC library/ecjpake.o
CC library/oid.o
CC library/md5.o
CC library/ecdsa.o
CC library/pkcs11.o
CC library/sha512.o
CC library/xtea.o
CC library/ecp.o
CC library/aes.o
CC library/x509write_crt.o
CC library/arc4.o
CC library/bignum.o
CC library/pkparse.o
CC library/padlock.o
CC library/threading.o
CC library/x509_crl.o
CC library/gcm.o
CC library/havege.o
CC library/ssl_ciphersuites.o
CC library/certs.o
CC library/pkcs5.o
CC library/ssl_cookie.o
CC library/aesni.o
CC library/hmac_drbg.o
CC library/des.o
CC library/pk.o
CC library/platform.o
CC library/ctr_drbg.o
CC library/pk_wrap.o
CC port/esp_sha1.o
CC port/net.o
CC port/esp_sha256.o
CC port/esp_bignum.o
CC port/esp_hardware.o
CC port/esp_sha512.o
AR libmbedtls.a
CC mdns.o
AR libmdns.a
CC time.o
CC syscalls.o
CC syscall_table.o
CC locks.o
AR libnewlib.a
CXX src/nvs_page.o
CXX src/nvs_pagemanager.o
CXX src/nvs_storage.o
CXX src/nvs_api.o
AR libnvs_flash.a
CC library/ssl_cert.o
CC library/ssl_methods.o
CC library/ssl_pkey.o
CC library/ssl_x509.o
CC library/ssl_lib.o
CC library/ssl_stack.o
CC platform/ssl_pm.o
CC platform/ssl_port.o
AR libopenssl.a
CC sdmmc_cmd.o
AR libsdmmc.a
CC flash_mmap.o
CC partition.o
CC cache_utils.o
CC flash_ops.o
AR libspi_flash.a
CC tcpip_adapter_lwip.o
AR libtcpip_adapter.a
CC ulp.o
AR libulp.a
CC vfs_uart.o
CC vfs.o
AR libvfs.a
CC src/crypto/aes-internal-enc.o
CC src/crypto/sha256-internal.o
CC src/crypto/md5-internal.o
CC src/crypto/aes-internal.o
CC src/crypto/sha1.o
CC src/crypto/aes-internal-dec.o
CC src/crypto/crypto_internal.o
CC src/crypto/aes-unwrap.o
CC src/crypto/crypto_internal-rsa.o
CC src/crypto/des-internal.o
CC src/crypto/dh_group5.o
CC src/crypto/ms_funcs.o
CC src/crypto/aes-wrap.o
CC src/crypto/sha1-internal.o
CC src/crypto/md4-internal.o
CC src/crypto/dh_groups.o
CC src/crypto/sha256.o
CC src/crypto/rc4.o
CC src/crypto/md5.o
CC src/crypto/aes-cbc.o
CC src/crypto/sha1-pbkdf2.o
CC src/crypto/bignum.o
CC src/crypto/crypto_internal-modexp.o
CC src/crypto/crypto_internal-cipher.o
CC port/os_xtensa.o
AR libwpa_supplicant.a
CC trax.o
AR libxtensa-debug-module.a
CC main.o
AR libmain.a
LD app-template.elf
esptool.py v2.0-beta1
To flash all build output, run 'make flash' or:
python /build/esp-idf/components/esptool_py/esptool/esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 115200 --before default_reset --after hard_reset write_flash -u --flash_mode dio --flash_freq 40m --flash_size detect 0x1000 /build/myapp/build/bootloader/bootloader.bin 0x10000 /build/myapp/build/app-template.bin 0x8000 /build/myapp/build/partitions_singleapp.bin
root@672a8f22f3a6:/build/myapp#
root@672a8f22f3a6:/build/myapp# make flash
fatal: Not a git repository: /home/hoge/デスクトップ/work/sketch/ESP32/idf/esp-idf/.git/modules/c
omponents/coap/libcoap
fatal: Not a git repository: /home/hoge/デスクトップ/work/sketch/ESP32/idf/esp-idf/.git/modules/$
omponents/esp32/lib
fatal: Not a git repository: /home/hoge/デスクトップ/work/sketch/ESP32/idf/esp-idf/.git/modules/$
omponents/micro-ecc/micro-ecc
fatal: Not a git repository: /home/hoge/デスクトップ/work/sketch/ESP32/idf/esp-idf/.git/modules/$
omponents/esptool_py/esptool
WARNING: Toolchain version is not supported: crosstool-NG 8d95cad
Expected to see version: crosstool-NG crosstool-ng-1.22.0-61-gab8375a
Please check ESP-IDF setup instructions and update the toolchain, or proceed at your own risk.
WARNING: Compiler version is not supported: 4.8.5
Expected to see version(s): 5.2.0
Please check ESP-IDF setup instructions and update the toolchain, or proceed at your own risk.
fatal: Not a git repository: /home/hoge/デスクトップ/work/sketch/ESP32/idf/esp-idf/.git/modules/$
omponents/micro-ecc/micro-ecc
fatal: Not a git repository: /home/hoge/デスクトップ/work/sketch/ESP32/idf/esp-idf/.git/modules/$
omponents/esptool_py/esptool
WARNING: Toolchain version is not supported: crosstool-NG 8d95cad
Expected to see version: crosstool-NG crosstool-ng-1.22.0-61-gab8375a
Please check ESP-IDF setup instructions and update the toolchain, or proceed at your own risk.
WARNING: Compiler version is not supported: 4.8.5
Expected to see version(s): 5.2.0
Please check ESP-IDF setup instructions and update the toolchain, or proceed at your own risk.
Flashing binaries to serial port /dev/ttyUSB0 (app at offset 0x10000)...
esptool.py v2.0-beta1
Connecting..........
Uploading stub...
Running stub...
Stub running...
Attaching SPI flash...
Configuring flash size...
Auto-detected Flash size: 4MB
Flash params set to 0x0220
Wrote 16384 bytes at 0x00001000 in 1.5 seconds (90.3 kbit/s)...
Hash of data verified.
Wrote 491520 bytes at 0x00010000 in 43.4 seconds (90.6 kbit/s)...
Hash of data verified.
Wrote 16384 bytes at 0x00008000 in 1.4 seconds (91.6 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting...
root@672a8f22f3a6:/build/myapp#

ESP32を始めてみる Arduino IDE編

あなたは電子工作が得意なフレンズなんだね!すごーい!

 

というわけでArduino IDEでESP32を使ってみたいと思います。

まずはInstallation Instructionsに従って環境のセットアップです。

 

github.com

 

 

↑のレポジトリを(C:/Users/[YOUR_USER_NAME]/Documents/Arduino/hardware/espressif/esp32)に配置してtoolsフォルダ内のget.exeをクリックすると同じフォルダ内にコンパイラや書き込みツール等をダウンロードしてくれるようです。

get.exeが完了してArduino IDEのボードを開くとESP32が出てきました。

環境のセットアップはできました。

 

ESP32にスケッチを書き込むために回路を変えます。

ENにスイッチを1つ挟んで押したらリセットがかかるようします。

ESP8266ではENとリセットが別でしたが、ESP32ではENがリセットも兼ねているようです。

 

f:id:ken5owata:20170213002426j:plain

 

Arduino IDEでBlinkを開き適当なピン番号を指定した後、ツール⇒ボードでESP32 Dev moduleを選択したらスケッチを保存して書き込みます。

ESP32にスケッチを書き込むにはIO0をプルダウンしてFlashモードで起動させることが必要です。

3v3につないでいるIO0をGNDに落としスイッチを押してリセットをかけます。

 

rst:0x1 (POWERON_RESET),boot:0x3 (DOWNLOAD_BOOT(UART0/UART1/SDIO_REI_REO_V2))
waiting for download

 

Arduino IDEのシリアルモニタでリセットがかかりFlashモードで起動したことを確認して、スケッチ書き込みを実行します。

以下のようなメッセージが出てきました。ちゃんと書き込みができたようです。

 

最大1044464バイトのフラッシュメモリのうち、スケッチが199415バイト(19%)を使っています。
最大294912バイトのRAMのうち、グローバル変数が21688バイト(7%)を使っていて、ローカル変数で273224バイト使うことができます。
C:\Users\ken5\Documents\Arduino\hardware\espressif\esp32/tools/esptool.exe --chip esp32 --port COM6 --baud 115200 --before default_reset --after hard_reset write_flash -z --flash_freq 80m --flash_mode dio --flash_size 4MB 0x1000

C:\Users\xxxx\Documents\Arduino\hardware\espressif\esp32/tools/sdk/bin/bootloader.bin 0x8000 C:\Users\xxxx\AppData\Local\Temp\arduino_build_654019/Blink.ino.partitions.bin 0x10000 C:\Users\xxxx\AppData\Local\Temp\arduino_build_654019/Blink.ino.bin
esptool.py v2.0-dev
Connecting...
Uploading stub...
Running stub...
Stub running...
Attaching SPI flash...
Configuring flash size...
Compressed 8752 bytes to 5468...

Writing at 0x00001000... (100 %)
Wrote 8752 bytes (5468 compressed) at 0x00001000 in 0.5 seconds (effective 141.7 kbit/s)...
Hash of data verified.
Compressed 3072 bytes to 82...

Writing at 0x00008000... (100 %)
Wrote 3072 bytes (82 compressed) at 0x00008000 in 0.0 seconds (effective 1638.4 kbit/s)...
Hash of data verified.
Compressed 288960 bytes to 122835...

Writing at 0x00010000... (12 %)
Writing at 0x00014000... (25 %)
Writing at 0x00018000... (37 %)
Writing at 0x0001c000... (50 %)
Writing at 0x00020000... (62 %)
Writing at 0x00024000... (75 %)
Writing at 0x00028000... (87 %)
Writing at 0x0002c000... (100 %)
Wrote 288960 bytes (122835 compressed) at 0x00010000 in 10.9 seconds (effective 211.9 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting...

 

書き込みができたら、IO0を3v3に戻してスイッチを押しリセットをかけます。

書き込んだLチカスケッチが実行されLEDが点滅します。

 

 

というわけでESP32でLチカできました。

つぎはスマホからLチカでもしてみましょうか。

ESP32を始めてみる BASIC編

Arduino IDEでスケッチを書くまえにBASICをさくっと試してみました。

IO12をプルアップしてESP32を起動するとBASICが実行できます。

何やら隠しコマンドみたいですね。

 

hackaday.com

 

Easter Egg of ESP32macsbug.wordpress.com

 

IO12をプルアップしてESP32を起動すると以下のメッセージが流れます。

Enterを押すとBASICをREPLで実行できるようになります。

 

rst:0x10 (RTCWDT_RTC_RESET),boot:0x33 (SPI_FAST_FLASH_BOOT)
flash read err, 1000
Falling back to built-in command interpreter.
OK

>
>about
ESP32 ROM Basic (c) 2016 Espressif Shanghai
Derived from TinyBasic Plus by Mike Field and Scott Lawrence
>help
A very Basic ROM console. Available commands/functions:
LIST
NEW
RUN
NEXT
LET
IF
GOTO
GOSUB
RETURN
REM
FOR
INPUT
PRINT
PHEX
POKE
STOP
BYE
MEM
?
'
DELAY
END
RSEED
HELP
ABOUT
IOSET
IODIR
PEEK
ABS
RND
IOGET
USR

 

LEDを26ピンにセットしてLチカをしてみました。

Ctrl+Cでプログラムをストップできるようですね。

 

>10 iodir 26,1
>20 ioset 26,0
>30 delay 500
>40 ioset 26,1
>50 delay 500
>60 goto 20
>list
10 IODIR 26,1
20 IOSET 26,0
30 DELAY 500
40 IOSET 26,1
50 DELAY 500
60 GOTO 20
OK
>run
break!
OK
>

 

f:id:ken5owata:20170207004905j:plain

 

その他にもいろいろと命令セットがあるようです。

BASICは初めてでしたのでとても新鮮でした。

 

github.com

ESP32を始めてみる

キタ━━━━(゚∀゚)━━━━!!

待ちに待ったESP32の取り扱いが秋月電子で始まりました。

 

akizukidenshi.com

 

さっそく入手したので初めてみます。

変換基板はまだなく*1そのままではブレットボードに挿せないのでピンヘッダとピンソケットを交互に半田付けしました。

 

 半田付けができたらQitaの記事を参考に配線をします。

ESP32(ESP-WROOM-32)でLチカ - Qiita

・3v3   →  3v3

・GND → GND

・IO0 → 10KΩで3v3

・EN → 10KΩで3v3

・TX → RX

・RX → TX

 

f:id:ken5owata:20170205190156j:plain

 

配線できたらPCにつなぎArduino IDEのシリアルモニタ、teraterm等で開きます。

以下のような起動メッセージが出ました。正しく配線できたようです。

 

ets Jun  8 2016 00:22:57

rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
ets Jun  8 2016 00:22:57

rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0x00
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3ffc0000,len:0
load:0x3ffc0000,len:2304
load:0x40078000,len:3788
ho 0 tail 12 room 4
load:0x40098000,len:532
entry 0x4009813c
[1;36m

[0m[1;36m**************************************
[0m[1;36m*       hello espressif ESP32!       *
[0m[1;36m*        2nd boot is running!        *
[0m[1;36m*            version (V0.1)          *
[0m[1;36m**************************************
[0m[0;36mcompile time 18:16:58

[0m[0;36m  SPI Speed      : 40MHz
[0m[0;36m  SPI Mode       : DIO
[0m[0;36m  SPI Flash Size : 4MB
[0m[1;36mPartition Table:
[0m[1;36m## Label            Usage          Type ST Offset   Length
[0m[1;36m 0 factory          factory app      00 00 00010000 00100000
[0m[1;36m 1 rfdata           RF data          01 01 00110000 00040000
[0m[1;36m 2 wifidata         WiFi data        01 02 00150000 00040000
[0m[1;36mEnd of partition table
[0m[1;36mLoading app partition at offset 00010000
[0m[0;36msection 0: paddr=0x00000020 vaddr=0x00000000 size=0x0ffe8 ( 65512)
[0m[0;36msection 1: paddr=0x00010010 vaddr=0x3f400010 size=0x05b64 ( 23396) map
[0m[0;36msection 2: paddr=0x00015b7c vaddr=0x3ffba720 size=0x01378 (  4984) load
[0m[0;36msection 3: paddr=0x00016efc vaddr=0x40080000 size=0x00400 (  1024) load
[0m[0;36msection 4: paddr=0x00017304 vaddr=0x40080400 size=0x126ac ( 75436) load
[0m[0;36msection 5: paddr=0x000299b8 vaddr=0x00000000 size=0x06658 ( 26200)
[0m[0;36msection 6: paddr=0x00030018 vaddr=0x400d0018 size=0x325b4 (206260) map
[0m[0;36mstart: 0x400807ac

[0mInitializing heap allocator:
Region 19: 3FFBBA98 len 00024568 tag 0
Region 25: 3FFE8000 len 00018000 tag 1
Pro cpu up.
Pro cpu start user code
nvs_flash_init
frc2_timer_task_hdl:3ffbc564, prio:22, stack:2048
tcpip_task_hdlxxx : 3ffbeca8, prio:20,stack:2048
phy_version: 80, Aug 26 2016, 13:04:06, 0
pp_task_hdl : 3ffc34f0, prio:23, stack:8192

:>enter uart init
uart init wait fifo succeed
exit uart init

IDF version : master(db93bceb)

WIFI LIB version : master(934d079b)

ssc version : master(r283 4d376412)

!!!ready!!!
mode : softAP(26:0a:c4:05:5d:ac)
dhcp server start:(ip: 192.168.4.1, mask: 255.255.255.0, gw: 192.168.4.1)

+WIFI:AP_START

 

さてATコマンドを....

 

AT

:>what?

 

Σ(゚Д゚)What? 

あれっ、え、ATコマンドはどこいったんや(ESP8266脳)。。

 

調べてみますと、sscコマンドというのですね。

https://espressif.com/sites/default/files/documentation/esp32_at_instruction_set_and_examples_en.pdf

 

とりあえず打ってみました。 

 

>op -S -o 1

# stationモードにセット

>sta -S

# wifiをスキャンする

>sta -C -s ssid -p password

# wifiに接続

>ip -Q

# IPアドレスを表示

 

こんな感じで自宅のwifiにつなげられました。

初期動作の確認はこの辺にしといて次はArudino IDEからやってみたいと思います。

続く。

 

*1:そのうち秋月が出すでしょう。aitendoが2月下旬に発売予定

micropythonを始めよう(ESP8266編)

この記事は Python Advent Calender 10日目の記事です。

 

micropythonは以前のAdvent Calender*1やPycon JP*2でも紹介されていましたが、改めて紹介したいと思います。

 

・micropythonとは

micropython.org

 

もともとPythonマイコンで動かそうとKickstarterで始まった移植プロジェクトです。その結果としてソースはgithubに、ターゲットとしてPyboardという商品が発売されています。

PyboardにはSTM32という32bitのARMマイコンが使われています。Pyboardは日本では発売されていませんが、秋月電子で販売されている同じ系統のSTM32のマイコンボードで動かすことが可能です。

micropython用に2つ購入済みですが、現時点でまだやっていません。

STM32マイコンでmicropythonを動かす方法はInterfaceの10月号で記載されています。

micropythnに自作モジュールを組み込む方法も載っていて大変有用です。

 

micropythonは基本的にPython3と互換ですが、モジュールやライブラリは同じではありません。ドキュメントを参照して動かしていくことになります。

Overview — MicroPython 1.8.6 documentation

 

 

・ESP8266

そんなmicropythonですが今年の初め頃からKickstarterでさらにESP8266への移植が始まりました。プロジェクトは成功しソースはgithubで公開されています。

 

ESP8266はwifiチップを搭載した32bitマイコンです。日本で使用できるのは技適を取得したESP-WROOM-002という型番になります。

akizukidenshi.com

 

micropython on ESP8266は自分でコンパイル環境を構築しビルドして動かす状況が続いていましたが、今年の夏頃から公式ページからダウンロード可能になりましたの。

これをESP8266に書き込むことで簡単にmicropythonを実行することが可能になりました。

しかしながらmicropython on ESP8266は技適の問題があります。スイッチサイエンスさんが言及されているようにmicropythonのファームウェアを書き込むことは認証に影響を及ぼす可能性があります。*3

これから試される場合は自己責任でお願い致します。

 

・Let's Try

まずはESP8266(ESP-WROOM-002)と必要なものを入手します。
USBシリアル変換モジュール、3v3の3端子レギュレータ、10KΩの抵抗、ブレッドボード、ジャンパ線等を用意します。

 

ブレットボードにESP-WROOM-002を挿せるようにするためにはんだ付けを行います。フラックスを塗った後テープでESP-WROOM-002を仮止めして専用のピッチ変換基盤にはんだ付けをします。

 

f:id:ken5owata:20161210013010j:plain

 

はんだ付けができたら配線をします以下のように接続すればOKです。

  • 3v3 → 3v3
  • EN → 10K抵抗で3v3
  • IO15 → 10K抵抗でGND
  • IO2   → 10K抵抗で3v3
  • IO0   → 10K抵抗で3v3
  • RST  → 10K抵抗で3v3
  • TXD  → RXD
  • RXD →  TXD
  • GND → GND

f:id:ken5owata:20161210014614j:plain

配線が出来たらArudino IDEのシリアルモニタで開いてみましょう。

ATという文字を送信しOKが帰ってくれば配線は合っています。

 

配線が正しければESP8266用のmicropythonのファームウェアを書き込みましょう。

micropythonのダウンロードページに行き最新のファームウェアをダウンロードします。

ダウンロードしたら書き込みツールで書き込みます。windowsならFlash Download Tools macLinuxならesptoolで書き込みます。

自分はwindowsで書き込みました。

 

f:id:ken5owata:20161210025003p:plain

 

書き込みが完了したらシリアルモニタを開くと対話形式でmicropythonを実行できます。

f:id:ken5owata:20161210020339p:plain

 

定番のLチカです。

http://docs.micropython.org/en/latest/esp8266/esp8266/quickref.html#pins-and-gpio

f:id:ken5owata:20161210021037j:plain

machineモジュールを使用します。

>>>import machine
>>>pin = machine.Pin(14, machine.Pin.OUT)
>>>pin.high()
>>>pin.low()

 

ESP8266はwifiにつながるのでsocketモジュールを使用してHTTP通信が可能です。

http://docs.micropython.org/en/latest/esp8266/esp8266/tutorial/network_tcp.html

このようにslackにメッセージを飛ばすことも可能です。

 

f:id:ken5owata:20161210022756p:plain

 

・micropythonしません?

今までマイコン動かすのはC言語やArudinoならC++ライクなスケッチが主でした。

普段Pythonをお使いの皆様でしたら違和感なくmicropythonに入っていけるのではないでしょうか。

PythonのみでIoTシステムを作れる日もそう遠くないかもしれません。

来年はmicropython Advent Calenderをぜひやりたいですね。

 

Perl入学式に参加した結果www

1:  perl初心者 2016/12/07(水) 04:33:34.78 id:B0PHZqy40
 
とてもよかった。
 
この記事は Perl入学式 Advent Calender 8日目の記事です。
今年のPerl入学式に参加させて頂いたので感想を書きたいと思います。
 

・参加

会社に入ってからはよくディスられてるSIerさんで常駐で働いてます。

開発ではないの*1でプログラミングはさっぱりです。*2

 

そんな時 Perl入学式を見つけたのでさっそく申し込んでみました。

 
・講義

勉強会には様々スタイルがあります。

セミナー形式、自習形式、もくもく形式etc…

 

Perl入学式は講師、サポーターの方々と程よい距離で進められていきます。

ターミナルの使い方などそこから行くか的な手厚さで始まります。

不明点はその場でコール&レスポンス形式で教えて頂けますし、

また講師のスライドと同期、横にコメントが書き込める slasla という便利な

サービスを使い講義が進められていきます。

資料はgithubにあがっているので予習と復習も行えることができました。

常駐先で。

 

・懇親会

講義が終わればみんなでピザを食べる0次会の後、近隣の店で懇親会が開かれます。

他の参加者、講師、サポーターの方々と色々なお話をすることができて

毎回大変楽しく、お酒も進みます。

 

・参加後

これといって作りたいものやアイディアが考えつかなかったので、

復習がてら問題を解いてました。常駐先で。

 

www.cl.ecei.tohoku.ac.jp

 

今は5章の問題を解いてみています。

4章の最後らへん、グラフで表示するのはちょっとパスしました。*3

そこまでは概ね解けた、正解と同じように出力することができました。

Perl6のAdvent Calenderでも言語処理100本ノックの記事がありますね。

 

本当はgithubにうpしてこの記事の中で公開したかったのですが、忘年会に向けてつまみ*4を仕込んだりはんだ付けしてたりして力及びませんでした(;´∀`)

 

後日空いてる日で公開したいと思います。

 

 ・これから

5回目(webアプリ)の回は都合により参加できなかったので、来年参加したいと思います。

また文化放送A&Gなどアニラジを録画するモジュールを作って、ラズパイかオレンジパイで動かしておきたいですね。録画したらmp3をGoogleドライブにでも入れれば通勤時間にアニラジを聞けます。

 

次回の Perl入学式 in東京 第2回 〜構文基礎編〜 - connpass は17日(土曜)開催のようです。

自分はアイドルマスターシンデレラガールズ 城ヶ崎美嘉役でおなじみ佳村はるかさんのイベントがあるので参加できませんが、これからプログラミングを学びたい方、Perlを勉強したい方は奮って参加されてはいかがでしょうか。

 

以上、佳村はるかのひみつきち 諜報員でした。

*1:〇ン〇モリーDBとかいうのをいじってます

*2:C#JavaPythonの初心者向けの本を写経したぐらい

*3:モジュールの入れ方がようわからんかった

*4:牡蠣の燻製オリーブオイル漬けやナポリピッツァの生地を作ってました