2017年05月14日

ESP32 でやってみたいこと

ESP32 でやってみたいことの覚書

1) bootloader - 起動の仕組みの理解 あるいは改造

ESP32 は、OTA -- Wifi からのプログラム書き換えができるらしいのだ。作ったボードは USB シリアルがないし、これを常用したいのだが、どういう仕組みなのか? 理解してないとなにもできない。

ちょっと調べただけだが、まず次のところに解説があった。
 ・ESP32 (4) – Flash, bootloader and FreeRTOS

ざっと説明すると、ROM 内の 1st stage ブートローダーが SPI FLASH から 2nd stage ブートローダーを読み込み実行する。2nd stage ブートローダー は、 factory app もしくは 2種類の OTA app から選択したものを読み込み起動する。OTA app が 2種類あるのは、書き込みが失敗したときの対策ができるということだろう。

2nd stage ブートローダー 0x1000
パーティションテーブル 0x8000
 nvs 0x9000 24k
 phy_init 0xf000 4k
factory app 0x10000 1M

基本はこんな配置らしいのだが、パーティション自体は別。app と data の2個のパーティションがあるらしい。

で、さらに調べると 2nd stage ブートローダー のソースコードが公開されていることが分かった。
 ・https://github.com/espressif/esp-idf/tree/master/components/bootloader/src/main

ソースコードがあるのなら、自分が使いやすいと思うブートローダーを作ることも可能だ。例えば、OTA で書き込んでそれを起動するようなものも作れそうだ。そこまでしなくとも、起動する app の 選択ロジックがどうなってるか調べるのにも役にたちそうだ。

    いきなり訂正。

    PART_TYPE_APP PART_SUBTYPE_FACTORY: factory app

    ということ。OTA も PART_SUBTYPE_OTA_FLAG/PART_SUBTYPE_OTA_MASK で 2 種類が認識される。

さて、

dram_seg (RW) : org = 0x3FFF0000, len = 0x10000
iram_pool_1_seg (RWX) : org = 0x40078000, len = 0x8000
iram_seg (RWX) : org = 0x40080000, len = 0x400

メモリ上は、このあたりを使うらしい。といっても、そもそもどこが RAM なのか知らなかった。

512KB の SRAM は、3つのユニットに分かれている。

dbus ibus
SRAM 0 192KB 0x4007_8000 ~ 0x4007_FFFF
SRAM 1 128KB 0x3FFE_0000 ~ 0x3FFF_FFFF 0x400A_0000 ~ 0x400B_FFFF reverse order (word-wise)
SRAM 2 200KB 0x3FFA_E000 ~ 0x3FFD_FFFF

なんだか複雑でよく分からない。慣れが必要そうだ。

さて、OTA だが、実際にどう使うのか?
 ・http://ht-deko.com/arduino/esp-wroom-32.html
ここに説明と具体例があった。

要するにライブラリはあるが、app から 呼び出してやらないといけない。動かないコードを作ってしまうと、USB シリアル使っていちからやりなおし。ブートローダーに OTA 書き込み機能を付けるか、2 つ目の OTA app を OTA 書き込み専用にするか。まぁ普通に考えるとリカバリ用を作るのが妥当なのだろう。

ちなみに ホスト側のアプリは用意する必要はなく、Arduino IDE から書き込めるようになっているらしい。そうであれば、環境さえ整えれば、USB シリアルレスで いけそうだ。




さて、実際になにをしたいか?

1) IP カメラ
まぁ取り立てて必要というわけではないが、車のバックカメラなんかは、あると良いかも知れない。

 ・https://github.com/igrr/esp32-cam-demo/blob/master/components/camera/ov7725.c

このサンプルコードを見ながら、いろいろやってみたいとは思う。

 ・Orange pi 用カメラ

ov7725 は fifo なしのを使う。だが割と高い。どうせなら、より高機能な ov2640 を使ったほうが良いかもしれない。幸いなことに Orange pi 用が割と安い --- 送料込み $8.28 (OPi を買うついでに set にしておくと $5 分ぐらい)。 実験用なら、やっすい ov7670 が良いかも知れない。ov7670 にもいろいろあって、24-pin フレキのタイプもある。互換性があるなら、ov2640 と入れ替えてテストするとかできるかも。

さて、aliexpress のカメラモジュールを見ているといろいろなタイプがある。ONVIF 対応の IP カメラが $10 ほどで買えたりする。さすがに、こういうのに対抗するのは難しいような。シリアルインターフェイスの jpeg 30fps のものもある。プロトコルは、vimicro VC0706 プロトコルというもの。先人が これを ESP8266 で IP camera にするようなことをしている。互換性があるものを作れたら良いのかも知れない。

    データシートを見ていたら、ov2640 は圧縮エンジンが付いている。JPEG stream がいけるとなると、ONVIF 対応も可能? やはりこちらが本命か。

    ov7670 の ピンアサイン は、aitendo のモジュールのデータシートに記載されているものが一般的なようだ。HDR というシルクがある ov7725 も同じ。そして、Orange pi カメラもおそらく同じ。ただし、電源回りは少し違うようだ。ov7670/ov7725 は、内蔵レギュレータがあり、レジスタの設定で ON/OFF できる。ov2640 もあるのだが物理的に配線が必要で、ON/OFF がレジスタではできない。もし配線されてなければ、core に 1.2v を供給しないといけない。
    1 NC
    2 NC
    3 D2
    4 D1
    5 D3
    6 D0
    7 D4
    8 PCLK
    9 D5
    10 GND
    11 D6
    12 MCLK
    13 D7
    14 VCC (2.8v)
    15 VCORE (1.8v - ov7670/ov7725, 1.2v - ov2640)
    16 HSYNC
    17 STBY_EN (PWDN)
    18 VSYNC
    19 RESET#
    20 SCK
    21 AVCC (2.8v)
    22 SDA
    23 AGND
    24 NC

ところで、これらカメラモジュールは 38mm 角のものが多い。なにか規格があるのだろうか? カメラ専用基板とか作りたくなっているので気になる。

2) bluetooth スピーカー あるいはイヤホン

bluetooth のデバイス作れるのだから当然やってみたい。このあたりは先人が既に作っているから、楽だろう。慣れるために手を付けたいわけなので、外部 DAC じゃなくて、内蔵 DAC もしくは、1bit シグマデルタでやりたい。シグマデルタは GPIO を叩くライブラリがあったはず。RMT を使ったものはまだないかも知れない。

 ・事:ESP32でBluetoothイヤホンを作ってみた – Qiita
 ・ESP32でI2S+DACを使う – Qiita

 ・https://github.com/espressif/esp-idf/tree/master/examples/bluetooth
このあたり。

3) bluetooth キーボード

キーボードというか HID デバイスを作りたい。自由に作れるようになれば、かなり応用が広がる。ゲームコントローラに仕込んで、なにか遠隔操作するとか。あるいは、Android を遠隔操作するものとか -- 赤外線ハンドルリモコンのブリッジとか。

 HOGP -- HID over GATT Profile を使うらしいのだが、あまり情報がない。誰かの実装まち。

4) その他 bluetooth デバイス

 bluetooth デバイス はまだまだある。USB シリアルの代替につかえる bluetooth シリアル とか。

5) lowspeed USB HOST/device

ESP8266 でも ソフトUSB ができるそうだが、ESP32 でもたぶんできるのだろう。そのためには、CPU を1つ占有してブン回さないと。

 ・https://techtutorialsx.com/2017/05/09/esp32-running-code-on-a-specific-core/

とりあえず、コア指定でタスクを動かす方法。これが出来たうえで、同一バンクへのメモリアクセスが競合しないようにする。そこまでできれば、ESP8266 と同じ条件になるはず。あるいは、RMT を使うとか。



基板づくりメモ

先日はじめて ELECROW を使ってみた。使ったのは、special offer というので、10cm x10cm 10枚が、$9.5 +送料 $3.3 =$12.8 で作れた。(今は送料$4.8 計$14.3) 。AIR MAIL でも 2週間かからなかったし、シルクの品質にも満足。さらに今は、5 枚までなら、カラー基板がさらに安くなっている。

 https://www.elecrow.com/5pcs-2-layer-pcb.html

$4.9 が基本価格で、送料は 5cm x5cm $3.72 , 5cm x10cm $4.98, 10cm x10cm $6.42 。

milling を使った疑似パネライズが OK らしいので、便利に使えそう。
posted by すz at 21:49| Comment(0) | TrackBack(0) | ESP32
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/179711674
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック