raspberry pi 3にTensorFlowを入れて画像認識させる
こいつの続き、ラズパイ3にTensorFlowを入れるところから。
これでわしもきゅうり判別機を作れるだろうかw 。
・TensorFlowを入れる
GitHub - samjabrahams/tensorflow-on-raspberry-pi: TensorFlow for Raspberry Pi
pi@raspberrypi:~ $ wget https://github.com/samjabrahams/tensorflow-on-raspberry-pi/releases/download/v1.1.0/tensorflow-1.1.0-cp27-none-linux_armv7l.whl
pi@raspberrypi:~ $ sudo pip install tensorflow-1.1.0-cp27-none-linux_armv7l.whl
pi@raspberrypi:~ $ sudo pip uninstall mock
pi@raspberrypi:~ $ sudo pip install mock
・確認
pi@raspberrypi:~ $ python
Python 2.7.9 (default, Sep 17 2016, 20:26:04)
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print sess.run(hello)
Hello, TensorFlow!
>>> a = tf.constant(10)
>>> b = tf.constant(32)
>>> print sess.run(a + b)
42
>>>
・kerasを入れる(かなり時間かかった。。)
pi@raspberrypi:~ $ sudo pip install keras
・学習済みのモデルを持ってくる
pi@raspberrypi:~ $ git clone https://github.com/fchollet/deep-learning-models
・実行 → 怒られた
pi@raspberrypi:~/deep-learning-models $ python inception_v3.py
Using TensorFlow backend.
Downloading data from https://github.com/fchollet/deep-learning-models/releases/download/v0.5/inception_v3_weights_tf_dim_ordering_tf_kernels.h5
Traceback (most recent call last):
File "inception_v3.py", line 399, in <module>
model = InceptionV3(include_top=True, weights='imagenet')
File "inception_v3.py", line 385, in InceptionV3
model.load_weights(weights_path)
File "/usr/local/lib/python2.7/dist-packages/keras/engine/topology.py", line 2531, in load_weights
raise ImportError('`load_weights` requires h5py.')
ImportError: `load_weights` requires h5py.
pi@raspberrypi:~/deep-learning-models $
・h5pyっていうのがいるの? → pipで入れる → 怒られた
pi@raspberrypi:~ $ sudo pip install h5py
※中略
In file included from /tmp/pip-build-1n231R/h5py/h5py/defs.c:470:0:
/tmp/pip-build-1n231R/h5py/h5py/api_compat.h:27:18: fatal error: hdf5.h: No such file or directory
#include "hdf5.h"
^
compilation terminated.
error: command 'arm-linux-gnueabihf-gcc' failed with exit status 1
・必要なものをいれる
pi@raspberrypi:~ $ sudo apt-get install -y libhdf5-dev
・とりあえずh5pyっていうのが入った
pi@raspberrypi:~ $ sudo pip install h5py
Collecting h5py
Using cached h5py-2.7.0.tar.gz
Requirement already satisfied: numpy>=1.7 in /usr/local/lib/python2.7/dist-packages (from h5py)
Requirement already satisfied: six in /usr/local/lib/python2.7/dist-packages (from h5py)
Building wheels for collected packages: h5py
Running setup.py bdist_wheel for h5py ... done
Stored in directory: /root/.cache/pip/wheels/3e/ff/67/d04f183c668c251c1bc737224584dec995715d486178f77ede
Successfully built h5py
Installing collected packages: h5py
Successfully installed h5py-2.7.0
pi@raspberrypi:~ $
・これで行けるか? → 失敗。。。
pi@raspberrypi:~/deep-learning-models $ python inception_v3.py
Using TensorFlow backend.
Traceback (most recent call last):
File "inception_v3.py", line 402, in <module>
img = image.load_img(img_path, target_size=(299, 299))
File "/usr/local/lib/python2.7/dist-packages/keras/preprocessing/image.py", line 318, in load_img
raise ImportError('Could not import PIL.Image. '
ImportError: Could not import PIL.Image. The use of `array_to_img` requires PIL.
pi@raspberrypi:~/deep-learning-models $
・これがいる模様 → pillow
pi@raspberrypi:~/deep-learning-models $ sudo pip install pillow
・必要なもの入ったんじゃね?
pi@raspberrypi:~/deep-learning-models $ python
Python 2.7.9 (default, Sep 17 2016, 20:26:04)
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import PIL
>>>
・来たーー!!???
pi@raspberrypi:~/deep-learning-models $ python inception_v3.py
Using TensorFlow backend.
Downloading data from https://s3.amazonaws.com/deep-learning-models/image-models/imagenet_class_index.json
Predicted: (u'n02504458', u'African_elephant', 0.58458394), (u'n01871265', u'tusker', 0.35385633), (u'n02504013', u'Indian_elephant', 0.01978549), (u'n02134084', u'ice_bear', 0.0005529598), (u'n02437312', u'Arabian_camel', 0.00053362496)
pi@raspberrypi:~/deep-learning-models $
※この画像
アフリカゾウ、あってそう!
pi@raspberrypi:~/deep-learning-models $ time python inception_v3.py apple.jpg
Using TensorFlow backend.
Predicted: (u'n07742313', u'Granny_Smith', 0.41690961), (u'n07720875', u'bell_pepper', 0.056339104), (u'n07745940', u'strawberry', 0.037945356), (u'n07747607', u'orange', 0.031627435), (u'n07768694', u'pomegranate', 0.027530219)
pi@raspberrypi:~/deep-learning-models $
なるほどりんごですか、色はちがうけど合ってるね。
※この画像
pi@raspberrypi:~/deep-learning-models $ time python inception_v3.py fi004.jpg
Using TensorFlow backend.
Predicted: (u'n07684084', u'French_loaf', 0.318775), (u'n07716358', u'zucchini', 0.17547932), (u'n07579787', u'plate', 0.1427407), (u'n07860988', u'dough', 0.07184507), (u'n07871810', u'meat_loaf', 0.067287661)
pi@raspberrypi:~/deep-learning-models $
んーフランスパンですかー??
※この画像
pi@raspberrypi:~/deep-learning-models $ python inception_v3.py
Using TensorFlow backend.
Predicted: (u'n04350905', u'suit', 0.14072829), (u'n03763968', u'military_uniform', 0.1166545), (u'n02916936', u'bulletproof_vest', 0.068024598), (u'n02883205', u'bow_tie', 0.037428539), (u'n04591157', u'Windsor_tie', 0.02336538)
pi@raspberrypi:~/deep-learning-models $
スーツ、軍服、防弾チョッキ、蝶ネクタイ!??!!!
※この画像
あっ(察し)。
raspberry pi 3にOpenCVをインスコ
こんどの勉強会でやるのを予習。
まずOpenCVをraspiに入れるとこをやてみよ。
・使ったもの
2017-04-10-raspbian-jessie-lite.img
→起動させてからsshファイルをboot領域に入れるの忘れるよねー
とりあえず以下の手順をなぞる。
日本語で解説されているところ、ありがたい
・必要なものを入れる
pi@raspberrypi:~ $ sudo apt-get update
pi@raspberrypi:~ $ sudo apt-get upgrade
pi@raspberrypi:~ $ sudo apt-get install build-essential cmake pkg-config
pi@raspberrypi:~ $ sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
pi@raspberrypi:~ $ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
pi@raspberrypi:~ $ sudo apt-get install libxvidcore-dev libx264-dev
pi@raspberrypi:~ $ sudo apt-get install libgtk2.0-dev
pi@raspberrypi:~ $ sudo apt-get install libatlas-base-dev gfortran
pi@raspberrypi:~ $ sudo apt-get install python2.7-dev
・OpenCVを入れる。
3.2.0が最新だったので、そっちにしました。
pi@raspberrypi:~ $ wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.2.0.zip
pi@raspberrypi:~ $ wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.2.0.zip
※zipを解凍(忘れ)
pi@raspberrypi:~ $ wget https://bootstrap.pypa.io/get-pip.py
pi@raspberrypi:~ $ sudo python get-pip.py
・numpyを入れる(けっこうかかる)
pi@raspberrypi:~ $ sudo pip install numpy
pi@raspberrypi:~ $ cd opencv-3.2.0/
pi@raspberrypi:~/opencv-3.2.0 $ mkdir build
pi@raspberrypi:~/opencv-3.2.0 $ cd build/
pi@raspberrypi:~/opencv-3.2.0/build $ cmake -D CMAKE_BUILD_TYPE=RELEASE \
> -D CMAKE_INSTALL_PREFIX=/usr/local \
> -D INSTALL_PYTHON_EXAMPLES=ON \
> -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.2.0/modules/ \
> -D BUILD_EXAMPLES=ON ..
Python2のとこがOKそうなのを確認
-- Python 2:
-- Interpreter: /usr/bin/python2.7 (ver 2.7.9)
-- Libraries: /usr/lib/arm-linux-gnueabihf/libpython2.7.so (ver 2.7.9)
-- numpy: /usr/local/lib/python2.7/dist-packages/numpy/core/include (ver 1.13.0)
-- packages path: lib/python2.7/dist-packages
pi@raspberrypi:~/opencv-3.2.0/build $ time make -j4
(中略)
real 135m55.136s
user 421m28.900s
sys 11m5.550s
・OpenCVを入れる。
pi@raspberrypi:~/opencv-3.2.0/build $ sudo make install
pi@raspberrypi:~/opencv-3.2.0/build $ sudo ldconfig
・確認
無事入ったようです。
pi@raspberrypi:~ $ python
Python 2.7.9 (default, Sep 17 2016, 20:26:04)
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'3.2.0'
>>>
・サンプルプログラム
ここのをお借りしました。
OpenCV 3をPython 2.7言語で顔認識プログラム | TomoSoft
実行
pi@raspberrypi:~/sample $ python face.py
inimg/lena.jpg
pi@raspberrypi:~/sample $
ぬおー!顔が四角で覆われました!
勉強会参加めも(5月~6月)
唐突だが5月と6月に参加した勉強会の覚えてる限り感想を書いていきましょう。
めんどくさくて書いてなかっただけとか
・5/27(土)Y8 2017 spring in Shibuya
「MySQLサーバパフォーマンスチューニング」
アプリからインフラ担当になった方のお話でした。 初期設定のままで動かしてたら週1でダウンするMySQLサーバ(何それこわい) 適切なmy.cnfの設定とレプリケーションの設定で安定した運用と可用性を確保できたという話、DB初心者にもわかりやすいトークとスライドでした。 ラズパイ2台でやってみようかな。
P.S お昼に孤独のグルメに出ていた店で長崎皿うどんを食べた。おいしかった。
・5/28(日) Android Bazaar and Conference 2017 Spring
japan-android-group.connpass.com
・トーク
「今更聞けない、IoTの基礎と事例」
芳和システムの鈴木さんのお話。
IoTの基礎と事例ということでBLE、WiSUN、LoRa、Sigfoxなどの違いを説明がありました。飛ばせるデータ量と距離が変わってくるんですな。出力、消費電力、暗号化、データ長は核技術によりちがうのでそこは考えどころと。
今村さんによるOSSでのドローン開発の現状と現在開発中のもののお話。
OSSのドローン開発コミュニティは合流したり分裂したりだとか。
Linaroが出してるDragonBoardを使ってフライトコントローラ(ヤタガラス)を作成されてて、ESP8266を使ったミニドローン(ハチドリ)を会場で回して見させてもらいました。
今あるドローンではペットボトル2本積んで、15分ぐらいしか飛ばせないので災害の撮影とかで使うのが重要とか。
あとモータの稼働状況をフィードバックしながら制御できるような本当の産業ドローンが必要と仰ってました。
「農業IoT「みどりクラウド」のこれまでとこれから」
ラズパイを使ったみどりクラウドのお話。
質問したら神奈川県内だけでも70台ぐらい動いてるそうな。全国で考えると結構な数ですね。OS止まったらどうすんのかも聞いてみたら農家さんがコンセント挿しなおすとか。
まぁIPMIみたいな機構はラズパイじゃ無理ですかね。
最初の鈴木さんのお話ではIoT×農業ってのはけっこうはハードルが高くて、電池から有害物質が無農薬栽培の畑に流失しないかとかぶっちゃけIoTで作ったトマトそんなにおいしくなかったwとかっていう話があって、それはまたみどりクラウドとはベクトルが違うんだろうなーと。
みどりクラウドはおいしいトマトを作るというより、農家の負担を減らすという生産性が向上するソリューションなんでしょうね。
・6/4 (日)KiCad入門ハンズオン #0
ESP8266やESP32の基板を作って発注してみたかったので行ってきました。
講師はMaker Fairでラズパイクラスタカメラやってる方でした。
今年も参加されるようで何よりです、ブログも拝見させて頂いてます。
そんなKiCad入門ハンズオン、もともと教職の方だったそうで、進め方もテキストも抜群、次もあったら是非参加したい。
何ぶん電子回路の基礎がないので、そこら辺も勉強しないと
(べたグランドis何的な?)
おしまい。
ESP32を始めてみる Visual Studio 2017編
わーい!ESP32ってたーのしー!
ちょっと間が開いていしまいました。
秋月電子でも開発ボートの取り扱いが始まって今年はESP32がけものフレンズ並みに流行りそうですね。
今回はプラグインをいれることでVisualStudioがArduino IDE代わりになるということで以下でも取り上げられいまして二番煎じ丸出しです。
てなわけでこの前入れたVisual Studio 2017でもESP32に書き込みができました。
確認したのはRC版ですがこの前正式リリースされた正式版でも同じようにできると思います。
・インストール
何はともあれVS2017を入れましょう。
C++も入れないと動かないので注意してください。
・プラグイン追加
ツール→拡張機能を開いてarduinoで検索して出てきた「Arduino IDE for Visual Studio」をダウンロードします。
ダウンロード完了後にVSを再起動するとチームとツールの間にvMicroと表示されました。
最初はBoardにESP32が出てこず、やだな~おかしいな~と稲川淳二ばりに首をひねってましたが、以下の下2つの設定(スケッチの保存先とjsonファイルのURL)を削除してみるとうまくESP32が出てくるようになりました。
理由はわからないけどまぁいいです。
あとはESP32を書き込みモードにして書き込むだけですね。
ブレークポイントを置いてデバッグ...のようなことはできませんが入力補完が効くのでラクですね~
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で行いました。
使い方は↑のイメージの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にホスト側の作業フォルダがマウントされます。
コンテナに入ります。
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
初回なのでとくにconfigはいじらずmake→make flashでESP32にプログラムを書き込めました。
リセットするとLEDが点滅しLチカプログラムが実行します。
こうしてdockerを使うことで公式のセットアップ手順のStep0とStep1をすっ飛ばすことができました。
いやーありがたや、ありがたや。
しかしCompilerとToolchainのVersionでWARNINGが出ているようですね。
Dockerfileで取得してるのが古いのかな?、なので公式のセットアップ手順のVerに置き換えればよいでしょう。
dockerってすっごーい!
さーて他のテンプレも動かしてみっぺかー
※ makeとmake flashを貼り付けときます。
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に従って環境のセットアップです。
↑のレポジトリを(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がリセットも兼ねているようです。
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が実行できます。
何やら隠しコマンドみたいですね。
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でプログラムをストップできるようですね。
>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
>
その他にもいろいろと命令セットがあるようです。
BASICは初めてでしたのでとても新鮮でした。