ESP-WROOM-02を使ってみる2 -外付けSPIフラッシュの書き換え-

ESP-WROOM-02はモジュール内にプログラム/データ格納用のSPIフラッシュを持ち、
UARTブートモードで書き換え可能です。前回技適なしのハズレモジュール殻わりを
して16MBitのSPI-ROMの存在を確認しました
が実際の技適版ESP-WROOM-02は
32MBitのものが搭載されているそうなので書き換えのついでに確かめてみましょう。

20161108追:
SDKのバージョンは時々刻々と変化していき、詳しい手順をせっせと作っても
あっというまに使えないものとなってしまいます。しかしなるべく最新の手順を
紹介していくよう努めさせていただきます。
20161108追:




前回初めて通電した時の「AT+GMR」コマンドで表示されたバージョンストリングです。
現在はSDKのバージョンもV2.0.0まで進んでいます。さらにATコマンドのバージョンも
進んでいて今はV1.3.0.0となっています。今回はESP-WROOM-02をUARTブートモードで
起動させ、最新のATコマンドファームウエアに書き換えます。

注:本ぶろぐエントリで紹介しているのはEspressifが配布している公式のATファームの
 書き換え方法です。SDKを利用しコンパイルしたカスタムファームの際は書き込む
 アドレスが異なるケースがありますのでご注意ください。



公式BBSのこちらのエントリからESP8266_NONOS_SDK_V2.0.0_16_08_10.zip
ダウンロードしておきます。
展開して出てくる"ESP8266_NONOS_SDK/bin/at/1024+1024"以下のファイル群が書き込む
メインのプログラムとなります。つぎにこちらのエントリからFlash書き込みツール
Flash Download Tools V3.4.2 (ESP8266 & ESP32)をダウンロードし適当な場所に
展開し起動します。そしてエクスプローラから解凍するとなぜか失敗しやがるので、7Zip
使って確実に解凍してくださいF**K!ちくしょうマカーめ!!11!1


起動したらこんなダイヤログが出ますがESP8266 DownloadToolを選択してください。

ESP-WROOM-02はねむいさん謹製のピン配置表を参考にして
UARTブートモードで起動させておきましょう。UARTブートモードでは115200bpsが
安定して書き込める速度ですが230400bpsで上手くいくならばその値でもかまいません。


さて、先に結果を言ってしまいますがESP-WROOM-02は実際に32MBit(=4Mbyte)のSPI-ROM
を持っています。それにしたがってこちらのエントリのにある
2B-ESP8266__Non-OS_SDK__IOT_Demo_Guide__CN.pdfの23ページ目の4096kByte
Flashを参考に各バイナリを書き込むアドレスを指定していきます。

SPIフラッシュに書き込むバイナリのアドレスの構成は上記にならいます。





20161108改変:
"boot_v1.6.bin"は0x0000
"user1.2048.new.5.bin"は0x1000
"blank.bin"は0xFE000
"esp_init_data_default.bin"は0x3FC000
もう一ちょ"blank.bin"は0x3FE000
上記構成はブート領域を書き込むがFOTAを行わない場合の構成です(後述)。
書き込む予定のバイナリにはチェックフォームにチェック(緑に反転する)を忘れずに。

ツールの下段の項目は
CrystalFreqは"26M"
SPI SPEEDは"40MHz"
SPI MODEは"QIO"
FLASH SIZEは"32MBit-C1"を選択してください。


SDKで提供されているデフォルトのATファームのバイナリは20151203現在SPI-ROMの
サイズが1024kByte(8Mbit)と2048kByte(16MBit)版、そしてブートローダー無し版
の3つです。当記事ではブートローダー無し版は対象外ですので無視してください。

ESP-WROOM-02では32MBit(4096kbyte)のSPI-ROMを持ちますが2048kByte版でも
使用可能です。従ってuser1.2048.new.5.binを書きこむATファームのバイナリとします。
また、SDKに同梱しているesp_init_data_default.binについて、これをESP-WROOM-02
に書き込むとSTAモードとAPモードのMACアドレスやSSID、そしてRFの出力設定の
デフォルト値が書き換えられます。書き換えの際はSTAとAPのそれぞれのMACアドレスと
SSIDを事前にATコマンドで読み出しておいて"必ず"控えてください。
AT+CIPSTAMAC_DEF? 」と「AT+CIPAPMAC_DEF?」が読み出しコマンドです。


それはさておきv0.23以前のファームのモジュールをお持ちの方はATコマンドの
ファームウェアのアップデートの際はesp_init_data_default.binとblank.binも
同時に書き換えておかないと変な値が設定されて送信出力が極端に低い値になって
しまうことがありますのでご注意ください。過去にこのぶろぐエントリで書いた書き
変え手順では省略しても可と述べていましたが現在は上記二つのファイルは必ず
適切なアドレスに書き込んで下さい!



これらの設定をストアするデータ領域のアドレス構成だけこちらから抜き出してみました。
ESP-WROOM-02の外付けSPI-ROMはブロック消去単位が4kByteセクタ区切りでコンフィグ
データも上記のように4kByte区切りでストアされます。
FOTA(ネットワーク書き込み)する場合は0xFE000にblank.binの代わりにEspressifから
ダウンロードしてくるmaster_device_key.binを書き込みます。


ところでなんで何も書き込んでない領域が存在する中途半端な歯抜け状態なっている
かというと公式の2a-Esp8266 Iot Sdk User Manual.pdf内でそういう指示があるからです。




Download Panel1のSTARTボタンを押すと書き込みが始まります。
このときDETECTED INFOの項目にSPI-FLASHのデバイスIDが表示されて実際に32MBitの
品種が搭載されているのが分かります。



無事書き換えが完了したところです。一旦電源を落としてSPI-FLASHブートモードに
戻してからESP-WROOM-02に電源を再投入します。


「AT+GMR」でバージョンを確認します。無事アップデートできたのが分かります。

いろいろ試していると変なバイナリをうっかり書き込んでしまい上手く起動できなくなる・・・!
なんてことがよく出てきます。そうなったらとにかく上記の方法でデフォルトのバイナリに
書き換えてしまえば復帰可能ですので参考にしてください。





























●今となってはどうでもいい脱線
※技適について※

現在のATコマンド(v0.24以降)のファームウエアは上記のRF出力設定もコマンドで
変更可能になっています。モジュール出荷の時点でデフォルトでフルパワーの82
(=尖頭値電力20.5dBm(112.2mW))が設定されています。その最大設定で技適が
(FCCの試験レポートを見ると上限いっぱいの23dBmで通してるようでtelecのお墨付きに
書いてある8.09mW/MHzをもって電波法上限の帯域幅26MHz使ってると想定して
逆算すると23dBm弱になりだいたい計算が合うのでやっぱりフルパワーで通ってます)
通っていて(yuna_digickさんのヒのURL先参照)ESP8266のチップ単体の性能上
これ以上の空中線電力は実質出せず、つまりモジュール上のアンテナを違法に改造
しない限りは好きに書き換えても技適に違反しないはず


…ですがそうは問屋がおろさずこのモジュールの外付けSPIフラッシュに書き込む
バイナリはRF部をコントロールするコアの部分が必ず含まれさらにファーム変更後の
技適の保証を示す資料が現時点ではどこにも見当たらないため、誰にも干渉されず
正々堂々と使うならば書き換えるなら個人で再申請して技適を再取得するのが筋です。
(↑"書き換たことで工事認証を失効し、それを使うと電波法に抵触する"と断定していない点に注意!)
BluegigaやInventekのモジュール等はその辺きっちりクリアしていてRFをコントロール
するブロックはユーザーが絶対に触ることができないように分離されているものがあります。

20151021さらに追:
少し前ですがtiger22様のブログ記事のコメント欄のやり取りにてESP-WROOM-02と
非常に似たケースの見解がありました。

>メーカー製のファームウェアアップデートはこちらに申請が無いかぎり、
>技適認証にかかわる部分の変更をやっていないと判断している。

>それ以外のファームウェアは把握していないのでわからない(DD-WRTとか聞き返しても同じ回答)。

>ファームウェアアップデートにおいて、日本の法律を越える出力が可能になることが、
技適を無効にさせる条件にはならない。個別の総合的な判断である。

↑ファームの書き換えでオーバーパワー・スプリアス増大・オフバンドの3アウト
 となるのならばさすがに電監が動いてパーペキにゲームセットだと思います。(※上級国民除く)


ESP-WROOM-02においては"メーカー製ファーム"とはSDKに付属しているデフォのAT
ファームを意味します。私のようにEspressifが提供しているATファームだけを使い続ける
だけならば、電波法に反すると絡まれ指摘された時、「Espressifから提供されたファームウェア
だけを信用して使っている。そんなこと私に言わずにEspressifに直接言え!
もちろん英語でな!
」…と反論しノイズをシャットアウトできます。

むしろEspressifと関係ない一個人が勝手な解釈で法律的判断を下すこと自体大きなミステイク
です。ちゃんと技適マークは取れてお上のお墨付きももらってるんですからEspressifさんを
信用して(←このアピール重要)
バンバン書き換えまくって使い倒しましょう!!!

Espressif提供のスタティックライブラリを含むSDK使ってコンパイルしたファームでも同じ
理屈でなんだか反論出来そうなので技適を名目に難癖付けるのだけが趣味の人たちには
「私に聞くのはお門違い。Espressifに直接言え!」のお題目で突っぱねちゃいましょう。

繰り返しますが現時点で確実に工事設計認証が無効になり電波法違反になる行為は、
技適マークが刻印されているESP-WROOM-02の金属ケースを外したりもしくは
基板上のパタンアンテナを傷つけたり削ったりアンテナにリード線を半田付けしたり
新たに外付けアンテナを取り付けたモジュールをシールドルームの外で動作させる
ことです。

20160129さらに追:ついに白黒が付いた!!
スイッチサイエンスさんから公式に問い合わせた結果が公表されております。
以下引用
ユーザーによるファームウェアの書き換えが、ESP-WROOM-02の工事設計認証を無効にする可能性について、メーカーのEspressif Systemsに確認をしました。同社は登録証明機関に確認した上で、Arduino core for ESP8266 WiFi chipとSDKを使っている限りにおいては、認証には影響を与えないという回答を下さいました。他の開発環境など、ファームを書き換える部分によっては、認証に影響を及ぼし得るとのことですので、ご注意ください。

引用終わり
SDKを使用してビルドしたファームウェアなら書き換えても最早なんの問題も心配もありません!!
みんな遠慮せずどんどんやりまくれ!!!!!!!!!!!!!!!!!!!

技適マーク付きESP8266モジュール ESP-WROOM-02 を使ってみる






ド ン !



ついにっ・・・!ついにきたっ・・・!

今年の2月に"ESP8266モジュール"が技適取れたとの報(ともの技術メモさん情報より)を
受けて以来、ねむいさんはず〜〜〜〜〜〜〜〜〜っと待っていました!!!

ESP8266モジュール自体は去年から活気付いてきていますがそれまではもちろん技適
なぞ取れていない真っ黒な代物で日本国内ではいつものお仕置き部屋でしか扱えなかっ
たブツでしたが・・・!ESP8266チップ製造元のEspressifさん自らがワイヤレスモジュー
ルを製造に乗り出した折に日本の技適を含む各国の認証を取得して日本でも堂々と
使うことができるようにしてくれました!しかも従来のモジュールたちより遥かに安い単価で!!!


現在技適マークつきの"ESP-WROOM-02"モジュールを確実に購入できるのはタオバオの
本家店舗かもしくは検索で出てくるamazonの国内店舗からのようです。ねむいさんは
タオバオの本家から代行業者さん経由で購入しましたが10個で国際/国内送料コミコミ
で7000円以下でしたから単純計算で一つ当たり700円以下になり時間はかかりましたが
満足しています♥(代行業者さん使ったの数年ぶりです)

注意すべきはAliexpressやebayで"ESP-WROOM-02"として販売されているモジュール
です。こいつらは各国の認証が取れる前の開発者向けのモデルを取り扱っていて技適
マークどころかFCCマークすら存在しない超はずれのモジュールばっかりです!!!
先走って買うとまずハズレが送りつけられるので急がば回れの精神で落ち着いて確実に技適
マーク付きのやつを買える購入先をしっかり選びましょう。

ねむいさんのような哀れな子羊を増やさないように・・・掴まされたorz

腹いせに技適じゃない版のケース引っぺがしてやりました!!
SPI-ROMは貴重なので回収しましょう・・・



さて、それでは早速使っていきましょう!ESP-WROOM-02は電源立ち上がり後の
動作を決めるための外部プルアップやプルダウンすべき端子がいくつか存在しています。
配線を適当にしてると動作不良の元になるのでしっかりと!


前回と同じくピン配置を考案してみました。秋月さんのXBee変換モジュール上に乗っ
けることを想定した配置です。今回も合言葉はb・・・うぐぐ・・・頭が・・・
緑の網掛けの部分は外部接続必須の端子です。ブートセレクトを制御するIO15,IO2,
そしてIO0の端子の処理についてはほとんどの局面でSPI-ROMブートしか使うことは
ないと思いますがUARTブートローダモードなどに手軽に切り替えられるように10kohm
程度の抵抗でプルアップ/プルダウンすべきです。


こんなかんじで秋月さんちのRN-42用Xbee変換基板に搭載してみました。ひとまず
最低限必要なピンを配線しておきました。


ちなみにESP-WROOM-02もwi-fiモジュールなのでリセット直後はどうしても電流を消費して
しまいがちです。XBee用2.54mmピッチ変換基板に元から乗っている電流容量150mA
のLDOだと到底まかなえないので私はDIODES-Zetex社のセラミックコンデンサ使用可能な
ぱわふりゃーなLDOで3.3Vを供給しています。
さらに今は1608サイズで温度特性の良い大容量MLCCが秋月さんで購入できるので少ない
スペースの実装にフル活用しています★




まずはUARTからターミナルを用いてESP-WROOM-02と会話してみましょう。
デフォルトのUARTの設定は115200bps,N,8,1でフロー制御無しです。また、ATコマンド
の終端はCR+LFが必須
となりますのでご注意ください。


まずは基本の「AT」


お次はバージョンチェックコマンド「AT+GMR」です。技適版ESP-WROOM-02は5月上旬に量産
開始でしたからほんとに初期のものですね〜。今はATバージョンも0.25まで進んでます。


UARTで通信できていることが確認できたらお次はwi-fiの通信を使ってみます。
通常のUARTのように使用できる透過モードでwifi2serial化してみましょう。

まずは事前にホストPCとwifi接続し、さらにNetCatを立ち上げて接続待ち状態にして
おきます。今回は1000番ポートと使用しますのでコマンドは下記のようにします
「nc.exe -L -p 1000」

ESP-WROOM-02は購入直後はSoftAPモードになっているはずなのでたとえばホストPCと
wifi接続した時のホストのIPアドレスが192.168.4.2ならば・・・
「AT+CIPSTART="TCP","192.168.4.2",1000」とします。


コマンドが成功したら上記のようにCONNECT OKが帰ってきます。


接続に成功したら「AT+CIPMODE=1」でコマンド透過モードに切り替えます。
このコマンドを打っただけではまだ切り替わりません。


さらに「AT+CIPSEND」を打つことで「>」がUART側ターミナルに現れてようやく相互通信が
可能になります。


Nemuisan!を送信してみました。NetCatの端末のほうに送信できています。


逆にInaisan!をNetCat側から送信してみました。UARTのターミナルにしっかりInaisan!
が現れましたね♥


透過モードではATコマンドが使用不可能になるのですが「+++」を打ち込むと解除できます。
その代わり「+++」をすばやく打ち込まないと駄目です。


一旦ATコマンドモードに戻っても「AT+CIPSEND」ですぐに透過モードに復帰可能です。




という感じに取り急ぎですが購入直後から簡単にできるごく基本的な操作を紹介
しました。こんな凄まじいモジュールが技適マークつきで1000円以下で購入できて
手軽に利用できるようになるなんて(なんか前回もいったような気がしますが)
ほんとに良い時代になりましたね♥

新しい時代の幕開けです!

技適マーク付き★RN-42とRN-41を使ってみる


これがっ!

技適(このモジュールでは工事設計認証)

マークだっッ!!!!




はぁはぁ…ようやく電磁波と騒音と振動が遮断されたお仕置き部屋から出ることが
できた…♥なんだかねむいさんもきれいな体に慣れたって感じです…

かつては電波法の絡みで脱着可能なコネクタを必ず持つモジュール以外では認可が
降りなかったせいで微妙に使いづらく一つ1万円以上もしやがっていたBluetoothSPP
モジュールですが…、

少し前に電波法に規制緩和があり半田付けタイプのモジュールにも技適マークを
貼ることが許されるようになり
、2015年現在では秋月さんよりMicroChip社製の(元
RovingNetworks製)のRN-42
を購入することで"確実に"技適マークがモジュールに
付されているBluetoothSPPモジュールを安価に入手し堂々と使用する事ができます♥

ちなみに"確実に"と強調した理由は技適(TELEC)の認証が降りていてもモジュール
本体に技適マークが貼られたり刻印されていない物が流通しているからで、特に
中華系海外通販などでは技適マークが無い品種が圧倒的に多く購入して実物を確か
めるまで分からず結局お金と時間を無駄にしてしまうことが多いです。

秋月さんちで購入できるRN-42の素の(半田付けタイプの)モジュールは1700円とかつて
のボッタ価格のやつらと比べると破格です。しかもHC-05とかと違って電波法違反に
ならずいろんな場所で思う存分使いまくりできます。さらに市場に捨て値で出回って
いるHC-05とその眷属ほとんどが性能足らずのぱちもんなのを鑑みるとRN-42がいかに
非常に安価でなおかつ安心して使用できるモジュールであるかが分かります。
因みにHC-05の正規品は国際送料合わせると秋月さんとこでRN-42買う方が安くなり
なおかつ到達距離もHC-05より性能が高いので、2015年の今ではわざわざHC-05他
技適マークなしの怪しい中華モジュールをコソコソ使う理由が何一つ無いです。

ぇ?私?私はちゃんとキワモノなのを理解して電波法違反にならない様に電磁波と
振動と騒音が遮断されたお仕置き部屋で紹介してきましたのでいいんです。
私はいいんです!


ゲフンゲフフン・・・・せっかくきれいな体になったのにまたダーティになりかけたのでRN-42
を真面目に使っていくことにしましょう…



私が秋月さんとこで購入したのはモジュール単品に加えてXBee風に変換基板をあつらえた
もの
です。XBee感覚で使用できるのでお手軽です★現在はさらに安価な秋月オリジナル
のモジュールもありお求め易くなっています♥

いつもの汎用無線モジュールドックでXbeeと同じように接続!
しかし・・・

最初にホストPCで認識させたときはなんでかBuetoothHIDデバイスになってしまい
ました。どうやらデフォルトの設定では電源投入時にIO11をHiにすると強制的に
HIDキーボードになってしまうようです。もともと本家Xbee用の下駄を転用していて
XBeeのファーム更新で使うDTRが丁度RN-42モジュールのIO11につながることになる
ので私の環境では頻繁にこうなっちゃいます。

HIDキーボードモードをキャンセルしたい場合は後でも紹介しますがコマンドモード
で"SH,0000"を送信してやると常にSPPモードで使用可能になります。HIDモード不要
なら真っ先に設定しちゃったほうがいいでしょう、このほか、RN-42ではHC-05たち
とは比べ物にならないくらい幅広い柔軟な設定ができます。
(どっちも同じCSRのBC417なのに)

SPPモードで認識するとこんな感じになります。


XBee風のRN-42のピン配置をまとめてみました。電源投入時不用意にHiレベルにして
しまわないように使わないピンはNCに、その一方でハンドシェイク不要の場合はCTS
とRTSは直結にしておいた方が無難です。
オリジナルのXBeeと比べるとフロー制御用のCTSとRTSが逆のあべこべになっているので
XBeeアダプタを流用されるときは特に注意してください!!ファック1!!!!!

また、公式のデータシートでは一部に誤植があってGPIO6と8の説明があべこべに
なってたり何故かGPIO7が二つ存在していやがるのでご注意ください。


ひとまずXBee風のRN-42の購入直後から簡単な設定までもう一度やってみましょうか。
ホストPCとUARTで繋がる状態にしてUARTのターミナルを下記の設定にします。
・115200bps,N,8,1
・フローコントロールあり(RTS/CTS)
このフローコントロールありが曲者です。前途のようにちゃんとした手順でホストと
RTS/CTSを繋いでおくか、もしくはXBee風のRN-42側でRTSとCTSを直結にしておきま
しょう。解放は厳禁です!

こんな感じに直結用の切り替えスイッチつけておくと楽です★


電源投入後は接続待ち状態になります。この間にターミナルから"$$$"を打ち込む
ことによりコマンドモードに入ることができます。各コマンドは改行をもって受け
付けられます。改行コードはCRもしくはCRLFとしてください。

・コマンドモードに入る
$$$
・ファームウエアバージョン確認
V
・設定を工場出荷時に全て戻す
SF,1
・ボーレートを230400bps,N,8,1に変更
(リセット後に反映されます。コマンドモードも設定されたボーレートとなります。)
SU,230400
・HIDモード切り替え用キーを無効にする
SH,0000
・PINコード2613に変更する
SP,2613
・コマンドモードを抜ける
---



設定がちゃんと反映されていればモジュールをリセット後ターミナルを230400bpsで
開きなおしてコマンドモードに入り"D"コマンドで上記のように表示されます。

ちなみに"R,1"でソフトウエアリセットも可能です。


BlueTooth側の仮想COMポートとホストとの通信はもちろんバッチリです♥


ちなみにUARTからだけでなくBlueTooth側の仮想COMからも同じく設定が可能です★





ところでRN-42よりさらにハイパワーなRN-41というClass1な最強に強まったモジュール
も存在しています。以前は技適を取得できていなかったのですが近年は取得され、技適
マークの入ったモジュールが出回っています。


もちろんねむいさんも入手済みです♥Mouserはこの技適マーク入りのモジュールが"確実に"
購入できます。使い方はRN-42と同じですがRN-41はClass1のハイパワーな送信(デフォル
トが最強出力設定になってる)が可能なので当然消費電流も多く、最大100mA,RN-42の2倍
以上電力を消費しますので電源周りも強化必須です!

しつこいくらいにアピール!!!!

秋月さんちで販売されているXBee風変換基板でRN-41もBee化してみました。
合言葉はbe・・・うっ・・・あ、頭がッ・・・!
















さて、せっかく日本国内で堂々とお外で使いたおせるモジュールを手に入れたので屋外で
実践してみたいところですね・・・自宅からそれほど遠くなく、100m以上障害物がない広い
敷地がある場所といえば・・・


GYOEN!  Kyoto Imperial palace park!

ここなら思い存分実験が可能です!
そうだねお散歩ついでだね。


RN-41/42側は携帯用USB電源を使って電源供給し離れた場所に置きます。
ホストPC側はずーっと昔に買って今も使っているPLANEXのClass1のBluetoothUSBドングル
をつけて何mくらいまでデバイスが見えるか確かめてみました。


RN-42はClass2で額面はオープンサイトで飛距離10m程度のはずなのですが、なんか10m
どころか20mくらいまでデバイス安定してつかめました・・・!?
頑張ったら不安定でしたが30mまでいけたです・・・RN-41いらんやん!


お次は本チャンのRN-41です!


・・・
これ余裕で100m以上あるんじゃないかな・・・

力こそパワー!



そんなわけでよほど力を欲しない限りは無理してRN-41使わなくてもRN-42で事足りる
と思います。無線モジュールはここ数年で規制の面でも値段の面でもハードルが低くな
ってほんとに良い環境になってきましたね♥

Go to top of page