2016年10月26日

ESP32について(開発ボード設計)


banggood で プレセールスのESP-32S モジュールを発注した。次はこれを使うためのボード。

前記事で、だいたいのことは説明した。ここでは eagle を使って基板を発注するところまで。

eagle 7.7
以前は eagle 5.6 を使っていた。久しぶりの使用になる。基本は同じだが忘れてしまっているので、結構苦労した。なにやらファイルフォーマットも変わっているようだ。もう 5.6 には戻れない。

Eagle用DRUファイル と CAMファイルは、スイッチサイエンスさんのところから入手。

作ったのはこれ
 ・suzbrd_wroom32-v1.0-out.zip 発注ファイル
 ・suzbrd_wroom32-v1.0.zip eagle ソース
v1.0 の問題点
 ・ MINI-360 ボードの幅が 0.5mm ほど合ってない(フットプリントが狭い)。
 ・ HX1001 を使う場合、インダクタのフットプリントが小さく CD43 は厳しい。




スイッチサイエンスさんのとこに発注すると、1,389円+1080円で作成することが出来る。だが、今回は久しぶりに Fusion PCB を使ってみることに。$9.9 + 送料 $6.13 - 0.99(10%off) だった。

ところで、気が付いたのだが、10cm x 10cm が意外にも安い。5 枚 $18.9 ,10 枚 $21.9 。以前もそうだったのかも知れないんだが、5cm x 5cm に拘らなくとも良いような気がしてきた。

suzbrd_wroom32-v1.0

ちょっとボードの説明。モジュールは裏に付けることにした。理由は配線の問題。ADC があるピンを A0-A5 に割り当てたかった。左下にある長方形は、DC/DC モジュール。これを使わずに、DC/DCコン IC の HX1001-GES を載せることも出来る。普通に使う分には、どちらでも良いとは思うのだが、RTC もあることだし、バッテリー駆動での消費電流に差が出るものなのかどうか見てみたい。

4pin コネクタは、SPI Flash 書き込み用。DTR - 470Ω - IO0 , DTR - 0.1u - EN という接続にしてみた。DTR を L にすれば、IO0 が L になり、 EN が L → H となるはず。

 ・http://www.espressif.com/en/products/hardware/esp32/resources

ここにある Flash Download Tool には Python 版もあるので、タイミングの問題でダメだったりするのであれば対応できるかも。

http://iot-bits.com/esp32/esp32-flash-download-tool-tutorial/
から抜粋

Pull GPIO0 LOW by pressing the "program" button on your development board. Reset the ESP32 by pressing the EN button momentarily while holding down the IO0 button.

というわけで、IO0 を L にして、EN を↓↑ ... 行けそうな気がする。

ついでにメモ

0x1000: bootloader.bin
0x4000: partitions_singleapp.bin
0x10000: .bin

bootloader というものが 0x1000 にあるわけだから、こいつ次第で、どこからでも -- Wifi や BT からでも -- プログラムを download できると思われる。で、download を指示するには、io0 は使えないわけで、違うボタンがあると良いかも知れない。



Arduino との関係

この基板、5cm x 5cm で作るという条件のため、arduino のシールドがそのままでは、使えない。

ユニバーサル・シールドで言うと、赤い部分がこの基板のコネクタの位置になる。ユニバーサル・シールドの内側に接続して、外側にピンソケットを付けると言った変換基板を作らないといけないのだ。

あるいは、割り切って普通のユニバーサル基板を使うとか。ただし、秋月C基板をタテには付けられない。昔の P-00189 でも一列足りないのだ。ヨコになら付けられる。まぁ、すなおに P-06877 とかを使っておけば良いか。

基板製作の価格について

そういえば、Fusion PCBITEAD があるのだった。送料もある程度するのだが、分からないので価格だけメモ。
      5cm x 5cm  5cm x 10cm  10cm x 10cm
Fusion PCB $9.9     $18.9     $21.9
ITEAD      $9.9     $14.9     $19.9

いずれも 10枚の価格。Fusion PCB は、5 枚だと、$9.9 ,$15.9 ,$18.9

DC-DC コンバータ


5V → 3.3V にこのモジュールを使えるようにしている。サイズは、17 x 11 mm で、ピン間は 長辺 0.6 in , 短辺 0.35 in 。aliexpress で "Mini 360 Step Down Module" で検索すると見つかるのだが、10個 で $3.5 とか冗談のように安い。banggood では 10個660 円 -- それでも安く感じる。

なにか問題があって安いのか?と不安になったりするのだが、写真見る限り、不安なのは半固定抵抗ぐらい -- 経年変化や振動で電圧が変わるのは困る。基板の写真も新旧2つのバージョンがあって、バッタ品とかというものではない模様。(古いのは、分圧抵抗用のパターンあり。)

Input voltage: DC 4.75V-23V
Output voltage: DC 1.0V-17V (Adjustable)
Output current: Rated current 1.8A (3A MAX)

スペック的には、12V 入力も出来て 1.8A 出力 。しかも電圧を設定できる。--- 使いでのありそうなモジュールだ。採用チップは、MP2307 -- データシートも入手できるが、それによると 連続 3A ピーク 4A とのこと。

半固定抵抗を取り外し、抵抗を付けることが出来れば、固定出力にすることは可能。FB は 5番ピンで 、FB 電圧は 0.925v。OUT - R1 - FB - R2 - GND として、 3.3V にしたければ、R1 = 26.1k, R2 = 10k が推奨だそうだ。ただ、写真を見ると R1 = 8.2k(822) が使われている。例えばこれを外して 1608 の 27k に付け替え、半固定抵抗を取ったあとのパターンを利用して 10k を付ける。(ただし、1% 品を使用しないといけない。)

データシートの回路図を元に分かったことを加えるとこういう感じ。ちなみに、左の抵抗は、01D で 100k のことらしい。青で書いたのは、スィッチングダイオードの追加で、5V 入力 3.3V 出力のような、低電圧入力・高電圧出力のときに効率を上げるとのこと。ところで、無負荷時の消費電流は多めらしく 15mA ぐらい常時流れるようだ。すなわちバッテリー駆動には向いていない。

ついでだが 12V 入力で 5v + α にしたい場合、R1 に 47k を使えば 5.27V -- タブレットの充電では、少し電圧を上げた方が具合が良いのである。AC アダプタだと調整出来ないから、こういう用途にも使える。このモジュールは小さいので、うまくすれば、 USBシガープラグに仕込めるはず。過電流保護があるから、ヒューズは取ってもかまわない。Thermal Shutdown 機能も一応付いている。

とか書いたものの、ダイソーの USBシガープラグも変わっているようで、300円のやつ(2.1A)とか 100円の新型 の分解記事がみつかった。特に 300円のやつは、5.3V 付近で 2.2A 流せている。すなおにこれを使えば良いかな。

USB シリアル


"CJMCU CP2102" で検索すると見つかるモジュール。banggood では 240円だが、aliexpress などでは $0.99 のものも。これ使っておけば良さそう。... というか、$1 なら、5V 電源 コネクタとして使っても安い。上記の DC-DC コンバータと合わせて使うとブレットボードの応用でも便利そうに思える。
追記:micro USB の DIP アダプタは、10個で $1.13 だった。 5V 電源 コネクタははるかに安かった。


aliexpress で たまたま、お安いカメラモジュールを発見。ov7670 というセンサを使ったもので、ピンヘッダで出力されている。お値段は $3.5 。

これを扱ってるのは、Top Electronic Company というショップなのだが、ESP32 関係もいろいろと扱っている。さらには、MINI 360 DCDC コンバータや、CP2102 モジュールも。このショップ探検するだけで楽しいかも。

さて、本題。カメラモジュールを扱うデモのソースコードが公開されている。ターゲットは ov7725 ではあるが、ov7670 もデータシートがあるので、扱えるだろう。
 https://github.com/igrr/esp32-cam-demo

かなり楽しみ。


11/17 基板がキター。予約した、ESP-32S は既に到着済み --- もっとも来たのは WROOM-32 だったが。早速と言いたいところだが、先に OPi Zero のほうをやりたい。
posted by すz at 02:06| Comment(0) | TrackBack(0) | ESP32

ESP32について(IO関係)

さて、ESP-WROOM-32(ESP-32S) というモジュールを入手したとして、どうやって使うのだろうか?開発用基板を作るつもりなので、それに最低限必要なことを整理していきたい。

I/O ピンの機能について
I/O ピンは、IO0 〜 IO39 がある。この I/O ピンの機能を、いくつかから選択する(IO MUX)。その中には GPIO もあるし、そのピンにだけ割り当てられた機能もある。 GPIO を選択すれば、GPIO に割り当て可能な機能から選べる(GPIO Matrix)。GPIO に割り当て可能な機能は、なんと 229 種類もある。

それとは別に boot の動作に必要なピン、SPI Flash に接続されたピンがある。これらの使用には制限がある。

使えない機能・使わない機能
まず、イーサネットを使いたいとは思わないので無視する。次に SPI Flash に接続されたピンが必要な機能は使えないと決め打ちしてしまおう。

SPI Flash に接続されたピンは、SD1 とか SD 関係のようで、調べてみると SD slave が使えないようだ。それ以外だと、Parallel QSPI という機能が使えないようだ。HS1_DATA7 とかの信号名があるので、8bit までのSPI らしいが、使うとは思えないので無視しよう。

しかしこれらの機能はどうやって使うものなのだろう? HOST との接続が前提で 常に download boot を使うのだろうか?気にはなるが、他の機能の把握が先なので忘れてしまおう。


ピンの割り当てが決まっている機能

SD host
 IO2 SD_DATA0
 IO4 SD_DATA1
 IO12 SD_DATA2
 IO13 SD_DATA3
 IO14 SD_CLK
 IO15 SD_CMD

JTAG
 IO12 MTDI
 IO13 MTCK
 IO14 MTMS
 IO15 MTDO

いきなり SD host とぶつかっている。と...なると JTAG はどうやって使うのだろうか?それはともかく、無視したのを除くと、これとアナログ系。

IO32 32K_XP, (32.768 kHz crystal oscillator input)
IO33 32K_XN,(32.768 kHz crystal oscillator input)

RTC 機能があり、Deep-sleep mode (RTC timer + RTC memories) で 20 uA。センサーからの入力で起動する設定だと、25 uA だそうだ。

IO36 SVP
IO39 SVN

60dB gain の ADC だそうだ。

IO25 DAC_1
IO26 DAC_2

8bit DAC が2つある。(10bit かも?)

IO0,IO2,IO4,IO12,IO13,IO14,IO15,IO27,IO32,IO33 TOUCH0-9

タッチパネル 10個まで。

IO34 ADC1_CH6
IO35 ADC1_CH7

上記のアナログ関係のピン以外で ADC があるのはこの2つ。ADC は、12bit SAR だそうだ。

後はすべて、制限なしに GPIO として使えるのかというと そうでもない。

IO0 1=SPI Flash Boot , 0=download Boot (with IO2=0)
IO2
IO12(MTDI) 0=Voltage of Internal LDO (VDD_SDIO) 3.3V
IO15(MTDO) 1=Debugging Log on U0TXD During Booting
IO3(U0RX) download Boot
IO1(U0TX) download Boot

これらが、重要な制限。
IO0 , IO3(U0RX), IO1(U0TX), と EN の4つを使って Arduino 的な使い方が出来る。

GPIO に割り当て可能な機能

SPI (master,slave) x2
UART x3
I2C (master,slave) x2
PWM x4
LED PWM (16ch)
RMT(IrDA, 8ch)
I2S x2 (+LCD,camera)

詳細までは把握できてない。... が、一番分からないのが RMT(IrDA) 。IrDA のために設計されて 38kHz フィルタも内蔵されたものなのだが ... 何故 8ch もあるのか? なにやら気になる。



以上を踏まえて、開発用ボードを作ることを検討してみる。

基本は、ピッチ変換ボードに 3.3V電源 を付けたようなものを考えている。あと回路を少々付加。でもUSB シリアルを内蔵するのは、やめようかと思う。今 SPI Flash 書き換えには必要なんだが、いずれは、他の手段が充実して来るだろう。使うとしても (ラズパイのような) Linux SBC で開発するなら USB 変換は不要だったりする。

電源回路
Wi-Fi Tx 使用時で 260mA と書いてある。それだけで済むとは思えないので、余裕を持った電源回路を組み込もう。
最近は、DC/DCコン モジュールが安く買える。MP2307 採用の これなどは、10 個で 659円。

その他、中華PMP を色々調べたときによく使われていた、中華IC の HX1001-GES も使ってみたい。これは、aliexpress で安価に入手できる。

形状
USB シリアル付きで ピンが両サイドに出ている開発ボードが多いが、どうも使いにくそうな。Arduino 的な形状でピンソケットを付けるのが良さそうだと思える。
以前 5cm x 5cm の基板にしたものを作ったので、それをベースにしようかと。
ピン割り当て
A0-A5 , D0-D13 までは決まった。

A5 IO36 SVP
A4 IO39 SVN
A3 IO34
A2 IO35
A1 IO32 32K_XP
A0 IO33 32K_XN

D0 IO23
D1 IO22
D2 IO21
D3 IO19
D4 IO18
D5 IO5
D6 IO4 SD_DATA1
D7 IO2 SD_DATA0

D8 IO15 SD_CMD
D9 IO13 SD_DATA3
D10 IO12 SD_DATA2
D11 IO14 SD_CLK
D12 IO26 DAC_2
D13 IO25 DAC_1

付加回路

32k 水晶 パターンだけ付ける
USB
 USB D- IO16
 USB D+ IO17
電源コネクタとして MICRO USB を使うが、D-/D+ に一応 IO を割り当ててみた。使えるようになるかも知れない。逆に ピンコネクタ側から電源を供給して HOST として使えないかとも思っている。

SPI Flash 書き込み
ボタン EN,IO0
IO3(U0RX) download Boot
IO1(U0TX) download Boot

DTR L での EN ↓↑ IO0 L

正規の回路が別にあるのだが、DTR + RTS が必要で利便性に欠ける。ちょっと使えるかどうか自信がないが DTR のみのやつを付けてみた。もしこれが上手くいくなら、IO0 のボタンを他の IO に変えられるよう工夫も入れる。

LED(L で点灯) IO27,IO10(SD3)

SD3 は、SPI Flash の /WP に接続されたピン。書き込み時に光るかも。ダメだとしても /WP なら適当に使っても大丈夫そう。


RMT(IrDA, 8ch) について。

ちょっと説明を見てるのだが、波形を生成できる機能のようだ。
メモリ上の 32bit ディスクリプタで、ON 時間(1 - 32768 clock) と OFF 時間(1 - 32768 clock) を指定する。それが最大 512 エントリの配列になっている。clock には、APB_CLK が使用でき 80MHz も可能。

そして、受信の方は ON 時間/OFF 時間 を測定するわけだ。

うまく使えば ΣΔ DAC にもなりそうだし、USB 受信で フレームを取り込むのにも使えるかも知れない。(low speed だと、1フレームの最長は 109bit )
posted by すz at 02:00| Comment(0) | TrackBack(0) | ESP32

ESP32について

ESP8266 というチップをご存じだろうか? Wifi が自由に使える マイコンで、arduino IDE を開発環境として使える。しかも 技適ありのモジュールが秋月で 500円だかで安価に購入できる。まぁ素晴らしいものだとは思うが実はあまり興味を引かなかった。ところが、ESP32 という次の世代のチップが最近出てきた。調べていくと、なにかと凄いのである。実に興味深い。

なにを凄いと感じたか書いてみよう。

1)Bluetooth をサポート。
自由に BT 装置を作れる --- そんなマイコンは初めてのような。しかも、技適取得も期待できる。Wifi だけだと消費電力が大きそうだが、BT だとバッテリー駆動もできそう。また、BT には、プロファイルというものがある。それに従った装置ならば、既存のOS、既存のアプリと組み合わせて使えるのだ。無線のUSB みたいなものと思えば、色々出来そうではないか。

2) I/O ピンが多い、メモリが多い。
ESP8266 は、I/O ピンが少なくてがっかりしたのだが、かなり増えて、ざっと見 30 ぐらいはある。メモリについても SRAM 520 KB と実に多い。プロトコルスタック用に ROM を448 KB 積んでいて、使える RAM を圧迫しないように工夫もされている。

AVR では、あまりのメモリの少なさ、それに対して出来ることの多さに驚いたものだが、そのノリで使ったら、余りまくりそう。かと言って Linux 動かすほどの メモリ量ではない。だが、逆にそれも良い。Linux が載るなら載せてしまうだろう --- 自由なようでそうでもないのだ。

まぁ Linux が載る Rasberry pi みたいな SBC も、それはそれで興味はある。ただ、Linux が動くだけでは面白くない。PC の Linux では出来ないこと − そういうものを見つけたらトライしてみたいとは思っている。


3) ペリフェラルの多さ、I/Oマッピングの自由度。
機能について、こんな風に列記されていたりするのだが。。。

capacitive touch
ADCs (analog-to-digital converter)
DACs (digital-to-analog converter)
I2C (Inter-Integrated Circuit)
UART (universal asynchronous receiver/transmitter)
SPI (Serial Peripheral Interface)
I2S (Integrated Interchip Sound)
RMII (reduced media-independent interface)
PWM (Pulse Width Modulation).

RMII があるのは驚きだが、これでも全然説明が足りない。なんと CSI カメラインターフェイスや (24bit バラレルまでの)LCD インターフェイスがI2S の機能のなかに含まれていたりする。列挙されていないが、SD Host 、SD Slave もある。AVR なんかでは、タイマー機能の確認は真っ先にするものだが、これも記載されていない。調べてみた限りでは、64bit タイマーが 4本あるようだ。他には IrDA もある。地味ではあるが、便利かも知れない。

実に沢山あるわけだが、いくつかのものは、完全に自由に I/O ピンに割り当てられる。AVR では、ピンアサインをどうするか頭の痛い問題だった。PIC32MX なんかでは、選択ができたが、入力と出力でルールが違い、かえって混乱した。こいつは、I2C 、UART 、SPI 、I2S 、PWM を完全に自由に割り当てられる。なにの機能が同時に使えるかすぐ把握できるのは非常にありがたい。

性能とかの観点で見れば無駄とも思える機能ではある。しかし、こいつは 40nm のプロセスルールで作られている。 40nm というと、普通は GHz クラスの CPU を作れるのだが、160 or 240 MHz に抑えてこういうものにリソースを振り分けている。なんとも素晴らしい無駄遣いではないか。

4) USB が ... ない。
多くの人が欲しがると思われる USB がない。組み込もうと思えば簡単に組み込めただろう。あえて外して見せて、「無線で出来ることを有線でやらなくも良いだろう」と言ってるようにも思える。それに乗ってみるのも悪くはない。

ただ、既存の USB装置を無線化することを考えると、あって欲しかったとも思う。これについてはソフトUSB の可能性がある。ESP8266 で実装した人がいる。ESP32 は デュアル Core なので、実行クロック数がコントールできず 無理かと思っていたが、そうでもないかも知れない。少なくとも RAM については、バンクが競合しない限りウェイトが入らないとか。

というわけで、かなりのインパクトを受けた。値段もあまり高くないようだし、しばらくこれで遊んでみたい。

入手性について


遊んでみたいわけだが入手できなければ話にならない。

中国国内では、チップ単体ですら入手できるようだが、日本で使う限り技適は無視できない。となると少なくともモジュールになったものを入手しないとならない。

現時点で購入可能なモジュールはいくつかある。
Ai-Thinker ESP3212 Module
真っ先に入手が可能になったモジュールで Seeed Studio で $7 で販売していた。だが、ESP-32S に切り替わるそうで既に Ghost だそうだ。

Ai-Thinker ESP-32S Module
Banggood でプリセール中 $9 。これは、今だ出ていない 正規版モジュール ESP-WROOM-32 の互換品。技適はない。


ESP-WROOM-32
ESP8266 の ESP-WROOM-02 は技適を通してきたから、これも期待できるのだが、今だアナウンスがない。予定では9月のはずだったのだ。
10/25 olimex で 6 EUR で発売開始。ただし、写真では技適はおろか FCC/CE マークも見えない。


というわけで、ESP-WROOM-32 待ちではあるが、ESP-32S で試作が出来るのが現状。

色々と書いてきたが、現時点では、
 ・http://esp32.net/
 ・http://www.espressif.com/en/products/hardware/esp32/resources
ここに情報が整理されているようだ。興味が湧いたならチェックしてみて欲しい。
2016/12/04 追記

ついに、技適マークが付いたモジュールになった。もうすぐ秋月で販売されるだろう。


注意:現時点で、開発環境は使えるものの、完成していない。Bluetooth は未だらしい。ドキュメントも作成途中のようで、十分な情報が公開されていない。ちゃんと使えるようになるまで、時間がかかる。

さて、入手したとしても、物理的な問題においても、すぐに使えるわけではない。 --- ピッチ変換基板をなんとかしないと。次回はこれについて考察してみよう。
posted by すz at 01:53| Comment(0) | TrackBack(0) | ESP32