ESP32搭載可能なFPGAボード

Hack a dayを見ていたら、新しいFPGAボードの記事が出ていました。搭載しているFPGAがLatticeというのがちょっと好みがわかれそうな気がしないでもないです。このボードの仕様一覧をみていて気づいたのですが、仕様をざっと並べると

  • FPGAは Lattice ECP5 LFE5U-85F-6BG381Cで、84KのLUTと3.7Mbitのメモリを内蔵
  • JTAG I/F用のFT231XSを搭載
  • 32MBのSDRAMを搭載(DDR2とかじゃないので、設計が楽なはず^^;)
  • コンフィグ用を兼ねた4-16MBのフラッシュ(まだ容量確定してないのかな?)
  • MicroSDスロット搭載
  • LED11個、ボタン7個、4極3.5mmジャック
  • 0.96インチのカラーOLEDディスプレイが取付可能
  • ESP-32取付可能(WiFi越しに独立してJTAGをWebで操作可能っぽい!)
  • 無線用アンテナ(27,88−108,144,433MHz)搭載
    (88-108MHzはFMラジオ受信用、他は無線リモコンの受信用ですかね。後者は日本では使えないと思いますが)
  • ADC搭載

ということで、ケーブルレスでFPGAのコンフィグができそうです。JTAGつなぐのめんどくさいのでケーブルレスで行けるのなら面白そうです。ただ、価格帯は$60〜$200ということみたいなので、具体的に何かネタ(と時間と気力)がないとちょっと手が出ないかも。

ESP32でNTP Clientを動かしてみた

一昨日のESP-WROOM-32(ESP32)をArduino IDEで動かしてみた続きです。

Arduino IDEにはWiFi関連のサンプルプログラムがあるので、動かしてみました。

「ファイル」⇒「スケッチ例」⇒「あらゆるボードのスケッチ例」⇒「WiFi」の下にいくつかサンプルが有りますが、こちらはESP32環境ではビルドできませんでした。Espressif社提供のライブラリとArduino IDEに初めから付いているWiFiライブラリでは完全に互換ではないようです。(確か、バージョン情報を取得するようなライブラリでコケてたような気がします)

「ファイル」⇒「スケッチ例」⇒「ESP32 Dev Module用のスケッチ例」⇒「WiFi」の下の「WiFiIPv6」というのを開いてみると、NTPクライアントプログラムのように見えますので、これを動かしてみることにします。
スケッチ例を開いて、冒頭にある

の部分にSSIDとパスワードをセットして名前を付けて保存、シリアルポートを /dev/ttyUSB* に設定した後、シリアルモニタを起動して、次に基板上のタクトスイッチを押しながら、「マイコンボードに書き込む」としてやると、ビルドと書き込みが行われます。タクトスイッチは「Writing at 0x00010000… (5 %) 」という表示が出たところで離してもOK。

書き込みが終わると、ESP-WROOM-32モジュールは勝手にリブートして起動します。

 

シリアルモニタ側には IPv6 でのステーションとしての動作、アクセスポイントとしての動作状況の表示、IPv4のステーションとしての動作状況が表示され、IPv4のIPアドレス取得ができると、その後NTPクライアントが動作している状況が表示されました。

また、同時にアクセスポイントとしても動作しているので、スマートフォンのWiFiアナライザなどのツールでみると「esp32-v6」というSSIDでのアクセスポイント動作が確認できました。

ESP32を動かしてみた

ふと秋月のWebサイトをみていたら、ESP-WROOM-32が発売になっていました。早速、秋月へ行ってゲットしてきました。

で、とにかく動かしてみます。すでに先達もいるようなので、参考にさせてもらいながら、なるべく手抜きして動かします。開発環境はESP-WROOM-02の時と同様にArduinoで動かします。

使用した部品

使用した部品は以下の通りです。

  • ESP-WROOM-32
    まずこれがないと、ですね。
  • FT-232RQ USBシリアル変換キット
    最近のお気に入りのUSBシリアル変換基板です。Linuxでも安定して動作するのでGoodです。
  • NJU7223DL1
    3.3Vのレギュレータです。データシートの回路図だと入出力のコンデンサが小さくて済みそうなので、選びました。
  • 0.1uF 1608 チップコンデンサ✕3
    三端子レギュレータの入出力に各1個、USBシリアルのRTS端子とEN端子の間に1個
  • 22uF 1608 チップコンデンサ✕1
    ESP-WROOM-32の資料では電源入力に10uFが付いているので、手持ちの22uFのチップコンを使用
  • 10kΩ 1608 チップ抵抗✕2
    1個はEN端子のプルアップ、もう1個はIO0端子のプルアップ
  • 0.022uF 1608 チップコンデンサ✕1
    EN端子の入力とGND間に接続
  • 適当なタクトSW✕1
    IO0端子をGNDに落としてダウンロードモードに移行させるのに使います
  • ユニバーサルプリント基板
    これを使いました。最近は軽量化を目指して薄めの基板を使ってます。この基板は両面なのですが、内面がスルーホール処理されていないので表裏の接続ができていない箇所があってハマリました。
  • その他
    適当なピンヘッダ・ピンソケット、ポリウレタン被覆線、スズメッキ線

ハードウェアの組み立て

こちらの回路を参考に手抜きして作りました。

  • GND端子はUSBシリアル基板のGNDに接続
  • 3V3端子は三端子レギュレータの出力端子に接続
  • EN端子は10kΩでプルアップ、GNDとの間に0.022uF、USBシリアル基板のRTS端子との間に0.1uFを接続。この0.1uFによりPC側でRTSを制御するとESP-WROOM-32側にリセットがかかります。
  • IO0端子はプルアップ、および、タクトスイッチを接続して、ボタン押下でGNDに落ちるようにします。ボタンを押しながらArduino IDEで書き込み操作をすることで、書き込みモードへ移行できます。
    (注:IO0のプルアップは不要らしい。タクトスイッチによるIO0のコントロールがうまく行かなかった際につけたが、外してOKかは試していない。ちなみに、タクトスイッチでIO0がコントロールできなかった原因はノンスルーホール基板を使ったので基板の表裏で接続ができてなかったため。)
  • TXD0端子はUSBシリアル基板のRXDへ接続
  • RXD0端子はUSBシリアル基板のTXDへ接続

回路図はこんな感じです。15ピンのGNDは手抜きで接続していませんが、動いています。

 

こんな感じになりました。

ESP-WROOM-32は裏返しに両面テープで基板に貼り付けてあります。基板を作りなおす時も多分無事に剥がせると思います。

無計画に作ったので、裏側は汚いですw。左上のレギュレータ周りがどうしようもないですね。

まずはハードウェアの動作確認

Arduinoで書き込みをする前に、ハードウェアの動作確認をしておきます。
といっても、よくよく結線を確認した後、電源を投入(USBケーブルで接続)するだけです。
電源を投入したら、スマートフォンのWiFiアナライザなどアプリケーションで、「ESP-xxxxxx」というSSIDが見えることを確認しておきます。SSIDが見えればとりあえずESP-WROOM-32はアクセスポイントとして動作しているはずです。(注:Arduino環境の構築ができていれば、Arduinoのシリアルモニタで /dev/ttyUSB* を115200bpsでモニタすればブートローダなどの表示も確認できます)

Arduino開発環境の構築

PCはLinux Mint 18の64bit版です。

まず、arduino IDE をインストールします。その前に、古いバージョンをアンインストール。

arduino.cc から最新版の arduino-IDE をダウンロード。今回ダウンロードしたファイルは arduino-1.8.1-linux64.tar.xz です。

次に、arduino-esp32 をインストール。このページのコマンドをコピペ。

いよいよ起動します。デスクトップ上のArduino IDEのアイコンをダブルクリックして、Arduino IDEを起動。
起動したら、「ツール」→「ボード:xxx」→「ESP32 Dev Module」を選択でESP32モジュールを選択します。

サンプルを動かしてみる

次にサンプルを動かしてみます。シリアルに結果が表示されるものが良いと思うので、WiFiScanを動かしてみます。
「ファイル」→「スケッチ例」→ESP32 Dev Module用のスケッチ例の下の「WiFi」→「WiFiScan」選択すると、サンプルプログラムが表示されます。「ツール」⇒「シリアルポート」⇒「/dev/ttyUSB0(環境によって変わります)」でシリアルポートを選択した後、「ツール」⇒「シリアルモニタ」でシリアルモニタを起動しておきます。

準備ができたら「⇒」ボタンをクリックして、書き込んでみます。「⇒」をクリックする際にはIO0に接続したタクトスイッチを押しながらクリックすることでダウンローダを起動します。「Wrting … 」という表示が出たら、タクトスイッチのボタンを離します。

書き込み完了後はこんな感じ。

書き込みが終わると、シリアルモニタの方に表示が始まります。

 

こんな感じでSSIDのリストが表示されれば成功です。

ESP8266でSmartConfigを試してみた

長らく放置していたESP8266基板ですが、やっと動かしました。前回の記事から数えて約1年(ぉぃ)。回路図の定数に不適切な部分があってブートローダから先に進んでなかったのと、秋月のFT234X搭載の超小型UART変換基板だとなぜかLinux側が固まってしまうという事象に悩まされたためです(汗)。

で、まだ最低限の機能しか試してないのですが、回路図はこんな感じです。回路図の電源周りにいろいろわけのわからないFETが入っていますが、これはソフトウェア制御で電源OFFできるようにするのと、電池使用時に電源電圧を自身で測定できるようにするためです。電池を使えば Amazon Dash Button 相当のことができる予定です。

回路図

UART変換基板は結局秋月のAE-TTL-232Rを使いました。

開発環境はArduino IDE 1.6.12を使っています。昔調べた方法でボードマネージャでESP-8266を使えるようにして、ボードはGeneric ESP8266 Module、FlashメモリサイズはESP-WROOM-02に合わせて1M(64K SPIFFS)を選択しました。

2016-11-05-02-29-33

さらに1年間の進化は素晴らしいもので、smartconfigというWiFi周りの設定をAndroidスマートフォンでやる仕組みが登場していました。ArduinoのコードはGitHubのここから持ってきました。少しこの基板にあわせて修正したのが以下のファイルです。

修正したのは起動時のGPIO12のLEDの点灯と、ステータスのGPIOをGPIO16からGPIO13に変更、初期化が完了したら電源OFFする制御を追加したことです。これをコンパイルしてボードに書き込んでやります。

シリアルモニタで動作を確認しながら、スマートフォンで「ESP8266 SmartConfig」というアプリを動作させてESP8266モジュールに接続させる先のSSID(スマートフォンがつながってるSSIDが勝手に表示されます)と、パスワードを入力してCONFIRMを押してしばらく待つとESP8266側の接続設定がされるという便利なものです。

設定したSSIDとパスワードはフラッシュメモリ内に保存されて、次回は勝手にロードしてくれます。(上記のソースでは、起動後2秒たった瞬間にGPIO0がLレベルだと設定をクリアして再度設定待ちになります)

上記は電源投入〜SmartConfigによる設定〜APへの接続〜シャットダウンまでのシリアルコンソールのログです。楽でいいですね!

ESP8285が登場!?

例によってHack a Dayの記事から。

EspressifからESP8266の後継チップが登場しているようです。その名もESP8285。データシートによると、一言で言えば、ESP8266では外付けだったSPI Flash(8Mbit)が内蔵になっていて、より小さなモジュールが作れる、というところでしょう。

公式かどうかわかりませんが、開発用のボードもすでにあるようです。

Hack a Dayの記事には小さな小さなモジュールの写真が載っています。小さいことだけはわかるのですが、1元硬貨との比較ではサイズがよくわかりません。やっぱり比較は25セント硬貨とじゃないと・・・。
で、1元硬貨のサイズは直径25mmで、500円硬貨は直径26.5mmなので、ほぼ500円硬貨くらいのようです。となると、モジュールのサイズは9mm角くらいでしょうか。アンテナがないので、アンテナ付きだともう少し大きくなるでしょうが。

基板が届きました

やっと基板が届きました。10月11日発注で11月7日着なので、ほぼ4週間ですね。

ENVELOPE

前回は箱で届いたのですが、今回は封筒で届きました。よくよく見ると、差出人が「CHANGI AIRFREIGHT CENTRE」になっています。CHANGI=シンガポール・チャンギ国際空港です。たくさんの荷物(発送物)をシンガポールまでまとめて運んで、シンガポールから日本へ発送しているんでしょう。Tracking Numberが決まってからシンガポールを出るまでに10日かかっているので、梱包や送り状の貼付けは中国で行い、その後シンガポールまでは船便なのかもしれません。

<次回の参考にすべくTracking情報を追加しました>

日本郵便でのトラッキング:

Tracking

https://www.singpost.com/ でのトラッキング(トラッキングナンバーを入力して、表示されるステータスでトラッキングナンバーのところに張られたリンクを辿ると下記詳細が表示されます):

singapost

結局、「Information Recieved」というのは中国国内で受け付けした、という情報なのでしょうかね・・・。

PACK

こんな風にパッキングされて、プチプチ付きの封筒に入ってきました。

BOARD

右下の部分にCADにはない記号が入っています。以前は発注時に自分でオーダー番号をシルク面に入れないといけなかったのですが、今は勝手に空いているところに入れてくれるようです。(余計なものが勝手に入るのはけしからん、という考えもないでもないですが、オーダー番号が入るのは定尺サイズから安く基板を作るための方策でしょうし、自分で入れる手間を省いてくれるんだから歓迎ですね。)

出来はホビーユースとしては十分なレベルですが、気づいたところはこんなところです。

  • C1の枠のシルクが切れかかってます。
    裏側も寸法ギリギリの枠のシルクが入ってなかったりします。もう少しマージンが要るのかもしれません。
  • スルーホールにかかったシルクは欠損してます。
    基本的には設計で重ねないようにすべきだと思って作業していたのですが、いくつか重なっちゃってます。勝手にその部分は抜いているのか、抜けてしまうのかわかりませんが、問題ありません。
  • 取り付け穴用の穴は内面がスルーホールメッキされていませんでした。前回は内面がスルーホールメッキされていました。でも、CAD上は区別がないはずなんだけど、どうなってるのか謎です。
  • 写真の1枚は左上に傷が入ってますが、実使用上は全然問題ない範囲です。
  • ヘッダピン用の穴が小さいのではないか?
    既存のライブラリがそのまま使えそうなので、そのまま使ったのですが、確認漏れです。やっぱりいくら綺麗にCADで表示されても実物が来ないと気づかない点ってありますね。
  • いまさら思い出したけど、I2C接続の液晶を載せられるようにするのを忘れてた・・・

さて、次は部品実装です。

ESP32のβ版がもうすぐリリース!?

Twitterの情報(Espressifの中の人)によると、EspressifからもうすぐESP8266の次の製品が出るようです。

ざっと書いてあることは、こんな感じ。(意訳です。英語力ないので違ってても責任持てませんw)

我々は過去1年間ESP32と呼んでいる新しい製品の開発に全力を傾けてきた。皆さんのコメントを聞いて、細心の注意を払いながらそれらをリストアップし、最新のチップでは大部分を満足できるようベストを尽くした。皆さんの役に立てるよう、こんな機能をこのチップに搭載した。

  1. より速くなったWiFi。ビデオストリーミングができる144.4MBbps。また、新しいRFアーキテクチャを採用し、アプリケーションの回路がよりシンプルになるようにした。
  2. Bluetooth LE対応。レガシーも(もちろん)サポート。
  3. 160MHzで動作するデュアルコアのパワフルなTensilica L108プロセッサ。
  4. 低消費電力。Deep Sleep中でもADC変換などが可能。
  5. 周辺機能盛りだくさん。DMA付きのインタフェースで、タッチセンサ、ADC、DAC、I2C、UART、SPI、SDIO、I2S、RMII、PWM。申し訳ないがUSBはない。
  6. RAMたくさん。現時点で〜400kB。
  7. セキュリティ。AESとSSLのハードウェアアクセラレータ内蔵。
  8. 簡単になったAPI。

我々は開発者のサポートに全力を尽くすことを約束する。その1つとして我々が求めているのは、どのようにしたらツールチェーンを改善できるか、ということだ。我々はどんな意見でも歓迎する。
βテストはまもなく開始する。開発者向けのアプリケーションボードはこの先2週間以内に発送する予定だ。(ただ)限られた数しかチップがないので我慢して欲しい。合計200枚しか送れない。
最後に1つ、我々は情熱と才能のある開発者を探している。Espressifには興奮するような開発がたくさんある(ハードもソフトも)・・・製品に搭載するしないに関わらず。我々は常に応用分野を広げようとしており、我々に加わってくれる才能(ある人)をもっと必要としている。もし興味があるなら連絡して欲しい。我々は世界中から才能ある人が上海の私達に加わってくれることや、世界のどこからでも貢献してくれることを歓迎する。
我々の製品を気に入ってくれることを期待している。応援してくれる全ての人たちに感謝します。

・・・だそうです。

いや、すごいですね。盛りだくさんです。RMIIがあるので、PHYをつければEthernetも付くということですね。(無線LANコンバータやアクセスポイントを構成できるってことですね)
自分が気になるのは、

  1. 技適の取れたモジュールがいつ出てくるか?
  2. Arduino IDE対応はどうなるのだろうか?
    (やっぱりArduino IDEはお手軽ですからね〜)
  3. UbuntuやDebianでのクロスコンパイル環境構築が容易になるといいな。できれば Debパッケージで提供されたりapt-get/aptitude/synapticでインストールできたりすると嬉しいんだけどなぁ。
  4. ツールチェーンも重要ですが、サンプルプログラムもたくさん用意されるといいな。
  5. 電池でどこまで動くかなぁ?
  6. 高速なデータI/Fは何を使うんだろう?SDIOなのかなぁ?
  7. いくら位なんだろうか?

というところでしょうかねぇ。用途はたくさんありそうです。まさしく、「WiFi Everywhere!」「IP Everywhere!」という感じになりそうです。

日本に入ってきている?

Singapore Postでのトラッキングによると、

singpost

ということで、日本の郵便局まで届いているようです。この記述を信じるなら、最寄りの郵便局と読めないこともないのですが、単に日本に入ってきただけ、とも読めます。(どっちでしょう?)

一方、日本郵便のサイトでは「国際交換局から発送」のままです。まあ、まだ来ないところを見ると、通関中なんですかね?

やっと日本で検索できるようになった

Singapore Postで検索できるようになっても、なかなか実際の荷物の動きが見えないんですが、やっとシンガポールを出たようです。

Screenshot-17

シンガポールから日本に向けて(かな〜?)発送されたようです。
同じ情報は日本郵便のサイトでも確認できました。(Information Recievedの時には日本郵便のサイトでは確認できませんでした)

Screenshot-18

さて、いつ来るんでしょうか(^^;。

部品を買ってきました

FusionPCBからTrackingできるようになったよ、という通知がとっくに来ているのですが、なかなか荷物状況の確認ができるようにならず・・・。で、ようやくSingapore Postのトップ画面左側にある「Track Item」で「Information Received」になりました。でも、物理的な荷物の引受とは関係ないんだそうで(^^;。

まあ、焦ってもしょうがないですので、部品を買い集めました。

PARTS

基本的には秋月で手に入るものばかりで基板設計したので概ね揃いました。