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ページ目の
4096kByteFlashを参考に各バイナリを書き込むアドレスを指定していきます。

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社のセラミック
コンデンサ使用可能なZLDO1117で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