拡張開発ボード

大体、本体側は出来たので拡張ボードを何か作ろうかと。特にアイデアがまだないので、思考中ですが、電流計測なんかあると面白いんじゃないかと思い、ACS712 あたりを入れたらどうかと。それか、汎用的にユニバーサルピッチと、8pin のIC とか乗せて、足だけつけるのもありかなぁと。

4

真ん中の余った部分には、各種パッケージのパターンを織り込んで、手半田で出来るサイズを作っておけばいいかも。

あると便利だなと思うのは、

・ロジック変換

・モータードライバ

・LCD 制御

・LED制御

あたりでしょうか? なんか、こういう製品があってもいいんじゃない? って思っています。

 

電流をセンシングする専用のICがあるようで、TIのINA226 とかそのシリーズがよさそうです。

INA226 パッケージは、10-Pin VSSOP で価格も5個で1000円ちょいのようですので候補です。

Free-shipping-5lot-pcs-INA226AIDGSR-INA226AIDGS-INA226-MSOP10-100-NEW こんなESP のプロジェクトがあるようで、参考にしてみたいです。

ESP8266-MQTT-battery-monitor-hw

https://github.com/hwstar/ESP8266-MQTT-battery-monitor-hw

I2C接続のデジタル電圧・電流センサIC で、接続も楽そうですし、ストロベリーリナックスさんも販売しているくらいですから、物は良さそうです。

 

どうやって使うかは、まだ不明ですが、シャント抵抗の精密なものがあるといいようです。はぁ、なんですかね、これは?

電圧と、電流を計測するものは、拡張ボードで作って、2つを個別に動作させて動かしてsleepmode の時の消費電力を計測する感じになりそうですね。

Hot Air Gun

Amazon からHot Air Gun が届いたので、早速ジャンクのマザーボードから適当にはずしてみました。

 

Scan_20

なんと簡単に外れるんでしょう。すごいです。今まで断念していたパーツ達がいとも簡単にとれます。よくわからないパーツもありますが、じゃんじゃんはずしてみました。

IRF7410

SO-8 パッケージのIRF7410。International Rectifier のロゴが入っていますね。これはデータシートを見てみるとP-Channel MOSFETのようですが、VDSが-12V だそうで。

 

そのほか、IRF7805や、IRF7811 などの N-Chan MOSFET だそうです。

www_irf_com_product-info_datasheets_data_irf7805_pdf

ま、いつか実験で使うときもあるでしょうから、ジャンク箱でしばらく眠っていてもらうことに。

 

チップインダクタらしきものも外れたので、そのうち計測方法を調べないとですね。

Resetボタン配置とLED2つ

リセットボタンと、WEB にアクセスしたときに光るLEDと、WiFiにアクセスしたときに光るLEDをつけたのですが、スペース的に工夫しないとちょっと配線がきつそうです。

 

2

1

表のレイヤーを出すと、こんな感じ。自動配線を継ぎ足していったので、レイアウトは要再考ですね。

3

パイロットランプ的な、パワーLEDは電力消費を抑えてつけず、動作がわかるようにWEBにデータを投げているときに付くLEDと、WiFiにアクセスしているときに付くLEDをつけようと思っています。

 

スペースはまだあるのでレイアウトさえ考えればいけそうな感じです。GPIOのどのピンから取るかで配置が決まりそうです。ESP12とWROOM-02のピン配列が載っているブログがありました。わかりやすいですね。

Imazeki’s workshop

ESP8266 へ ArduinoIDEからの書き込み

14 と 16 から取って、裏側のサイドにLED配置しても光は見えるかなぁ。どうしますかね。

お買い物

そういえば、リセットボタンを付けてないやと思い、リセットボタンでお値打ちなものをゲット。赤色のがよかったので、以下のにしました。100個 272円 @2.8円 3 x 6 x 2.5mm

Free-shiping-100pcs-3-6-2-5-mm-3-6-2-5H-SMD-red-Button-switch ついでに、いつも買い忘れちゃう小手先。10本セット 516円。ぽちり出したらとまらなくなりました。ピンセット。6本セットで451円

HTB1DMcNHXXXXXXeXpXXq6xXFXXXkHT1NikCFSFbXXagOFbXo

  そして、クリーム半田XG-40。2個セットで759円。注射器タイプが断然便利。

HTB1RpNFIFXXXXakXXXXq6xXFXXXe

そして、以下はアマゾンにて。これなんていうんだっけ、小手先クリーナー?

51drPfcu4PL._SY355_

映像をモニタに出力できるように、カメラをどっかにつけて改造するとは思いますが、安かったのでついでに。

411WnfR1LjL._SY355_

最後に、今回の工作に不可欠な Hot Air Gun!ついに手を出してしまいました。安くなってましたしね。5600円

71uWWYBeCfL._SL1001_

当初、こっちを買おうとずっと Wish List に入れていたのですが、9600円くらいするし、冷静に考えると小手自体は、2本もありますしね。エアフローだけあればいいやということで。

HTB1pFfDHFXXXXbxaXXXq6xXFXXXB

リセットボタンをぽちり出してからとまりませんでしたね。ま、道具は必要ですから。

SMD の半田付け、ステンシルとかいらないんじゃないの?って以下の映像見てたら思いましたが。

 

[youtube https://www.youtube.com/watch?v=pz9163EQIsk]

 

SMD工作の準備はできました。さて、リセットボタンでもつけますかね。今週末には、PCB を発注したいので。

迷うことがない値段だった・・・

土日にあれだけ、部品点数を減らすために試行したんですが、結局nodemcu と同じトランジスタ2つと抵抗2つを使う回路を採用することにしました。決定打は、トランジスタの価格。なんと、100個で138円だったのですよ。

 

222

 

RTSのピンは、仕方がないので手持ちのUART のを5VをカットしてRTS を接続するよう改造。そうすれば、ピンに挿せます。

111

トランジスタって高いイメージがあったんですが、1個1円以下ですか。心配になるくらい安いですが、ちゃんと動くかな?

S8050 (KOO CHIN ELECTRONICS)

spec

ISO9000 と設備もちゃんとしているから大丈夫なんでしょうね。トランジスタやダイオードの専門メーカーのようです。

100個入り買ってしまったあとに、気が付いたんですが、こんな小分けしたいろんな種類のを買っておいてもよかったかなぁと。

 

21valuex20=420pcs SMD SOT-23

SMD SOT-23 TYPE  Package current Voltage datasheet
———- —-  ——- ——- ——- ————————–
S9012      PNP   SOT-23                  http://www.hz-dz.net/UploadFiles/20095279561392.pdf
S9013      NPN                           http://www.hz-dz.net/UploadFiles/200952795741634.pdf
S9014      NPN                           http://www.hz-dz.net/UploadFiles/2009812164155938.pdf
S9015      PNP                           http://www.hz-dz.net/UploadFiles/200952795926434.pdf
S9018      NPN                           http://www.hz-dz.net/UploadFiles/200952710041892.pdf
S8050      NPN                           http://www.hz-dz.net/UploadFiles/2009527101530473.pdf
S8550      PNP                           http://www.hz-dz.net/UploadFiles/2009527101633635.pdf
C1815      NPN                           http://www.hz-dz.net/UploadFiles/2012924155134699.pdf
A1015      PNP                           http://www.hz-dz.net/UploadFiles/2009512174610585.pdf
TL431      Programmable Voltage Reference http://www.tij.co.jp/jp/lit/ds/symlink/tl431.pdf
MMBT3904   NPN                           http://www.hz-dz.net/UploadFiles/200952794252635.pdf
MMBT3906   PNP                           http://www.hz-dz.net/UploadFiles/200952794350480.pdf
MMBT2222A  NPN                           http://www.nxp.com/documents/data_sheet/MMBT2222A.pdf
MMBTA44    NPN                           http://www.secosgmbh.com/datasheet/products/SSMPTransistor/SOT-23/MMBTA44.pdf
MMBTA42    NPN                           http://www.nxp.com/documents/data_sheet/MMBTA42.pdf
MMBTA92    PNP                           http://www.nxp.com/documents/data_sheet/MMBTA92.pdf
MMBT5401   PNP                           http://www.hz-dz.net/UploadFiles/200952794554658.pdf
MMBT5551   NPN                           https://www.fairchildsemi.com/datasheets/MM/MMBT5551.pdf
MMBT2907   PNP                           https://www.fairchildsemi.com/datasheets/MM/MMBT2907.pdf
2SC945     NPN                           http://www.kexin.com.cn/pdf/2SC945.pdf
A733       PNP                           http://vakits.com/sites/default/files/2SA733.pdf

 

まぁ、トランジスタはあんまり使わないので、まぁいいか。

買うなら、TO-92 パッケージのこんなのがよいですかね

Auto Program Circuit

さて、Eagle の勉強をかねて、ESP8266 でPCBを作っているのですが、だいぶできてきました。

現在のところ、以下のような感じになっています。前回と違うのは、CDS のセンサーに分圧抵抗を入れて、1V 化したものをADC で計測しています。当初半固定抵抗を入れようと思っていたのですが、個体差には目をつぶることにして、安さを追求しました。

9

 

CDS は計測してみると、強い光を当てると、抵抗値が150オームくらいから、真っ暗にすると5Mオームくらいまで変動します。

10

分圧抵抗は以下のサイトが便利でした。

 11 ちなみに、nodemcu の回路のADC は、以下のようになっています。220k と 100k で分圧して1Vを作って計測しているようです。

12

電圧と、抵抗値を入れると出てくるサイトもあって、上記は以下のように入れると出てきます。

13

いろいろあって便利ですね。電卓で計算するより便利なので活用しています。

 

さて、前置きが長くなりましたが、 UART を挿しておけば自動的にファームウェアを書きかえれるモードにする方法です。

nodemucu は、回路図があって参考になります。以下のような回路です。

NODEMCU_DEVKIT_SCH_png__2339×1653_

この回路は、RTS も使っているので、DTR のみというわけにはいきません。自分の持っているUART は RST は出ているんですが、ピンの横から出ていて直接挿すには、改造しないといけません。

DTR付のCP2102 をゲット

cp2102a cp2102b

安くて、便利に使っているので2つ持っています。DTR だけでやるには以下のようにやれば良さそうなのですが、具体的な抵抗値と、コンデンサの値が良くわかりません。トランジスタは、PNP 形であれば良さそうです。

issues22

CH_PD は ESP13 や WROOM-02でいえば、EN ピンで普段は10k くらいでプルアップしている抵抗です。なので、R1 と R3 は10K程度でよいということはわかるのですが、R2 が良くわかりません。また、C1 はどのくらいの容量が良いのかも不明です。

 

プログラムを書き込みモードにする原理は、起動時にGPIO0 PinがGND に落ちていればいいので、R2 は10K 程度でよいのではと考えています。CH_PD にコンデンサを挟む原理は、再起動させる働きがあると理解すればよいのでしょうか?

 

一番シンプルな回路として、以下があります。ダイオードとコンデンサだけで、構成された回路です。

 

setup-windows-compiler-esp8266__ESP8266_Support_WIKI_

これが動作するのであれば、今回採用したいと思っています。

で、試してみました。手持ちには、1uf と 0.01uf しかないので、1uf で試しました。どうやら、これで書き込みモードになるようです。1uf だと30回の内、11回が成功し19回は失敗しました。3分の1の成功率です。もう少し、精度があがればいいのですが。

0.1uf だとちゃんと動くのかどうかは不明です。

コンデンサの数を並列に2,3と増やすと100%成功しますが、シリアルからコンソールを開くと、100%Boot せず、リセットをかけてもだめです。動いているときにシリアルを開いてもシステムが止まります。

 

どっかに0.1uf ないか探してみます。

ありましたが、1uF が一番成績が良かったです。

Scan_16

成功するときは、以下のようになります。

esptool v0.4.5 - (c) 2014 Ch. Klippel <[email protected]>
    setting board to ck
    setting baudrate from 115200 to 115200
    setting port from /dev/tty.usbserial to /dev/cu.SLAB_USBtoUART
    setting address from 0x00000000 to 0x00000000
    espcomm_upload_file
    stat /var/folders/9c/0bsgxjzx63s7xhc_zz12jyp40000gn/T/build8239373840747412004.tmp/sample_FSA3357_adc_Select.cpp.bin success
opening port /dev/cu.SLAB_USBtoUART at 115200
    tcgetattr
    tcsetattr
    serial open
opening bootloader
resetting board
trying to connect
    setting character timeout 0
    done
    setting character timeout 1
    done
    espcomm_send_command: sending command header
    espcomm_send_command: sending command payload
trying to connect
    setting character timeout 0
    done
    setting character timeout 1
    done
    espcomm_send_command: sending command header
    espcomm_send_command: sending command payload
    espcomm_send_command: receiving 2 bytes of data
    espcomm_send_command: receiving 2 bytes of data
    espcomm_send_command: receiving 2 bytes of data
    espcomm_send_command: receiving 2 bytes of data
    espcomm_send_command: receiving 2 bytes of data
    espcomm_send_command: receiving 2 bytes of data
    espcomm_send_command: receiving 2 bytes of data
    espcomm_send_command: receiving 2 bytes of data
    espcomm_open
Uploading 297360 bytes from /var/folders/9c/0bsgxjzx63s7xhc_zz12jyp40000gn/T/build8239373840747412004.tmp/sample_FSA3357_adc_Select.cpp.bin to flash at 0x00000000
    erasing flash
    size: 048990 address: 000000
    first_sector_index: 0
    total_sector_count: 73
    head_sector_count: 16
    adjusted_sector_count: 57
    adjusted_size: 039000
    espcomm_send_command: sending command header
    espcomm_send_command: sending command payload
    setting timeout 10000
    setting character timeout 100
    done
    setting timeout 1
    setting character timeout 1
    done
    espcomm_send_command: receiving 2 bytes of data
    writing flash
...................................................................................................................................................................................................................................................................................................
starting app without reboot
    espcomm_send_command: sending command header
    espcomm_send_command: sending command payload
    espcomm_send_command: receiving 2 bytes of data
closing bootloader

失敗するときは、以下のよう。

esptool v0.4.5 - (c) 2014 Ch. Klippel <[email protected]>
    setting board to ck
    setting baudrate from 115200 to 115200
    setting port from /dev/tty.usbserial to /dev/cu.SLAB_USBtoUART
    setting address from 0x00000000 to 0x00000000
    espcomm_upload_file
    stat /var/folders/9c/0bsgxjzx63s7xhc_zz12jyp40000gn/T/build8239373840747412004.tmp/sample_FSA3357_adc_Select.cpp.bin success
opening port /dev/cu.SLAB_USBtoUART at 115200
    tcgetattr
    tcsetattr
    serial open
opening bootloader
resetting board
trying to connect
    setting character timeout 0
    done
    setting character timeout 1
    done
    espcomm_send_command: sending command header
    espcomm_send_command: sending command payload
trying to connect
    setting character timeout 0
    done
    setting character timeout 1
    done
    espcomm_send_command: sending command header
    espcomm_send_command: sending command payload
trying to connect
    setting character timeout 0
    done
    setting character timeout 1
    done
    espcomm_send_command: sending command header
    espcomm_send_command: sending command payload
resetting board
trying to connect
    setting character timeout 0
    done
    setting character timeout 1
    done
    espcomm_send_command: sending command header
    espcomm_send_command: sending command payload
    serialport_receive_C0: 3E instead of C0
trying to connect
    setting character timeout 0
    done
    setting character timeout 1
    done
    espcomm_send_command: sending command header
    espcomm_send_command: sending command payload
trying to connect
    setting character timeout 0
    done
    setting character timeout 1
    done
    espcomm_send_command: sending command header
    espcomm_send_command: sending command payload
resetting board
trying to connect
    setting character timeout 0
    done
    setting character timeout 1
    done
    espcomm_send_command: sending command header
    espcomm_send_command: sending command payload
trying to connect
    setting character timeout 0
    done
    setting character timeout 1
    done
    espcomm_send_command: sending command header
    espcomm_send_command: sending command payload
trying to connect
    setting character timeout 0
    done
    setting character timeout 1
    done
    espcomm_send_command: sending command header
    espcomm_send_command: sending command payload
    serialport_receive_C0: 41 instead of C0
warning: espcomm_sync failed
error: espcomm_open failed

 

違う方法を模索しますか。まず、nodemcu でも採用されているNPNトランジスタを2つと抵抗2つを使ったもの。

自分のUART には、RTS があるのですがピンから出して配線。NPN トランジスタは、以下の左から2番目の2SC945を2つ使いました。たぶん、かなりの年代モノでジャンク箱にあったものです。

Scan_17

抵抗は、手持ちの適当なもの5.5k と 6.7k をつけました。当初、IDE (arduino に ESP8266 を組み込んだもの)からは、反応がなく「うーん、これもだめなの?」と思っていましたが、設定を以下のようにいじったら問題なくいけました。

---- esp8266/hardware/esp8266/1.6.5-947-*****/boards.txt
##############################################################
generic.name=Generic ESP8266 Module

generic.upload.tool=esptool
generic.upload.speed=115200
generic.upload.resetmethod=nodemcu
generic.upload.maximum_size=434160
generic.upload.maximum_data_size=81920
generic.upload.wait_for_upload_port=true
generic.serial.disableDTR=false
generic.serial.disableRTS=false
::

アプリケーションを再起動しないと駄目なようです。設定しても反映されないというなぜに陥りました。

設定が反映されているかどうかは、書き込み時の冒頭の赤い部分に出る以下で見分けがつきます。

esptool v0.4.6 - (c) 2014 Ch. Klippel <[email protected]>
    setting board to nodemcu★
    setting baudrate from 115200 to 115200
    setting port from /dev/tty.usbserial to /dev/cu.SLAB_USBtoUART
    setting address from 0x00000000 to 0x00000000
    espcomm_upload_file
    stat /var/folders/9c/0bsgxjzx63s7xhc_zz12jyp40000gn/T/build6222680945723527651.tmp/sample_FSA3357_adc_Select.cpp.bin success
opening port /dev/cu.SLAB_USBtoUART at 115200
    tcgetattr
    tcsetattr
    serial open

esptool-ck は現時点で最新の0.4.6に入れ替えておきました。

 

とにかく、これでリセットボタンや、GPIO0 をGND に落としたり、スイッチをつけている場合はそれを押さなくてもよいよいになります。

 

今回の組み込みには、RTS を使わないDTRだけを使ったものにしたいと思いますので、PNPとコンデンサを使ったものをなんとか成功させたいです。一度、組み込んだのですがうまく動作しなくて。もしかしたら、この設定が反映されてないかもしれないので、もう一度組み込んでみます。

 

やっぱりだめでした。うーん。作者が言っているやつなのになぁー。