smd 0603 の抵抗とコンデンサをぽちった

とりあえず、電子工作のディープな世界に足を突っ込む意気込みとして、SMD の 0603 タイプの抵抗とコンデンサをぽちりました。両方あわせて、9750個もあるのでまぁ死ぬまで持ちそうです。購入店は、いつもお世話になっているパーツ屋さん。ここは好評価で、来るのも速いので。

HTB1S.SQIpXXXXcXXFXXq6xXFXXXx

こんな感じで、本になっているんですね。

HTB1VyOWIpXXXXXSXFXXq6xXFXXXz

そして、まず作るのは、バックブーストの1セル用の電圧回路を作ってみようと思います。

TPS63000 と、TDK のコイルもあわせてゲット。

http://www.tdk.de/company/inductors_coils/e531_vlf4012a.pdf

https://strawberry-linux.com/pub/tps63000.pdf

プリント基板を作成する一歩目のお題としてはライトなので、これをESP8266 向けに設計してみようかと思います。ESP13 もあわせてゲット。大きさは、telec のWROOM02 と同じなので、こっちをこれからメインに使用していこうかと。

ESP8266 でADC 増設するには?

ESPシリーズは、全機種ADC が1ポートなので、アナログ値を読むには何かしら工夫しないといけないのですが、その方法を模索したいと思います。新しい課題です。

 

調査第一段階では、以下のものがあるようです。

ESP8266 Analog Input Expander Library for MCP3021 A/D Conveters

https://github.com/AllAboutEE/ESP8266-MCP3021-Library

これは、tindie で作っているヒトがいるようです。

ESP8266 Analog Inputs Expander (Version 2)

https://www.tindie.com/products/AllAboutEE/esp8266-analog-inputs-expander/

初期リリース版は、4つのMicrochip MCP3021を使っているようですが、Version2では、1ICとなっているようです。このIC は4チャンネルのやつだと思うのですが、型番がよくわかりません。MCP3304 か、MCP3008のTSSOP パッケージかな?ちょっとお尋ね申すことに。

 

とりあえず、回路は簡単そうなので部品を入手して模索してみたいと思います。

ESP13 と BackBoost のPCBを作成中

Eagle の勉強と、PCB をプリントに出すため、まずはお手ごろな素材を元に勉強中。

 

コンセプト

・Lion の1セルに、充電ができて、過充電、過放電保護がある

・充電は、マイクロUSB からできる

・1セルから3.3v を効率よく、安定して作るため、backboost 回路を入れる

・自分が持っている、UART のシリアル変換を直接挿せるようにする

・ケースに入れる都合上、幅を2cm x 6.5cm 未満とする

・UART の PIN は自動的にリセットがかかるよう、DTR からの信号を処理する回路を埋め込む

・バッテリーや、3.3V 出力など後に計測したいので、PINを出しておく

・DeepSleep は必ず使うので、配線しておく

・ブレッドボードに挿せる様、PIN を出しておく

・なるべく安くする

・レゴブロック風のものをジョイントすると機能が拡張できるようにしたい。

 

といういうな、お題を掲げて作っています。

まだ、途中ですが、以下のようなものができてきました。

1

安くあげるため、USB と充電回路(保護付き)は既成のモジュールを使うことに、90円くらいのものです。

この基板をノギスや、スキャナで取ってeagle のライブラリを作成。ここが面倒でした。また、ESP12Eと、ESP13(WROOM-02)と大きさを比べると、ESP13の方が小さく、組み込みやすそうです。

2

今回の目玉である、バックブースト回路は表に載せました。ブレッドボードに指せば裏側に回る予定。真ん中のパッド部分はスルーホールを横に作って、裏側の胴箔に熱伝統させる予定です。

3

裏面に部品が回せるのを知ったので、(Mirrorすれば良いだけですが、、、)上記のような配置にしました。まだ配線は仮なので、これから変わります。

4

左には、UARTのPINを直接させるようメスピンヘッダーをつけます。順番は逆配列にしないとブレッドボードに挿した時LEDとか見えませんので、後に変更予定です。

 

5

回路図は、離れたところにある配線をどうやるのかわからず、あれこれググりました。これはラベルでやるようですが、いまいち良くわかっていません。とりあず、つなぎたいところに、配線を伸ばしNAMEをつけて、ラベルみたいなのは、シンボルがあったので、それを使っています。supply2.lbr というのにありました。たぶんもっといいやり方があるのでしょうが、良くわかりません。機能は満たしているので、今はこれでよしとします。

 

先人たちの回路図を見ると、機能ごとに分離して、見やすくする工夫をしているようです。なので上記のような感じにしてみました。その後、あれこれと思案し、以下のようになっています。まだ途中。

 6

ブレッドボードに挿すPINは最低限のものにしたけれども、案外空きスペースがなくなって来ているので、複雑な回路だと2階建てにする感じになりそう。

 

▼まとめ

・回路図は見やすくするため、機能ごとにわける。

・離れたところを配線するため、NAMEを使い、ラベルをつける

・ラベルは回路図だけに出るライブラリ(supply2.lbr )があるのでそれを使う

・裏面に部品を配置するには、Mirror を使う。

・実際の部品で仕様がわからないものは、スキャニングして大きさを算出。ノギスで実物を計測。

・独自ライブラリを作るには、3ステップ。

New > Library

Package 作成(左から5番目のアイコン)で、PCB基板に実際に付く図形を書く

Simbol 作成で、回路図上で見える図とPINを書く

Device 作成し、上記を対応づけ。Connect でPIN対応づけできる

・部品の配置の際、ルーラをドキュメントレイヤーに置いておくと便利(Metric ruler のLIB)

 

▼不明なこと

・離れたとこにある配線のやりかた。見やすいラベルを同時付け、対応づけるには?

・ESP13のUARTでリセットを自動的に行う回路。いろいろあるようです。現在3種類のやり方を模索。モノがまだ来ていないので着たら検討。

・ESP13 と ESP12のピンの対応づけ表がほしい。 EN は CHPD で、TOUTは、ADCに対応していると考えればよい?

・ESP13はGNDが2つ増え、合計3つ。なので、PIN数がESP13の18PINに対し、ESP12は、16PINということなのか?

 

▼調査すること

・幅、2cmx長さ5cm、暑さ5mmくらいのお値打ちLIONを探す。

・どっかの記事で、ADCはダイオードをかませば、GPIOのピン数分読めるというような英文記事を見たが、あれは本当か?

ESP8266 でADC 増設その2

前回、ADC のアナログ入力を増設する方法として以下を調査していました。

ESP8266 でADC 増設するには?

作者に聞いてみたところ、Version2のICには、MAX11609EEE+ を使っているとの事。16ピンQSOP で、DigiKey で336円くらいのものです。

MAX11609EEE+

datasheet

データシートを見てみると、これは8チャンネルあるようです。通信は、I2Cでいけるようです。

MAX11609EEE

とりあえず、8チャンネルもいらないので、4チャンネルのMAX11607 というのを試しに使ってみようかと思っています。

Aliexpress で価格を調査すると、4ch8ch も値段がほとんど変わらないようです。1個400円ちょい。

 

他にも、I2C で ADC はいろいろあるようで、たとえば、TIの4チャンネルなんかの ADS7924IRTER は供給量も多いようです。

 

標準で付いている、ADC も工夫すればGPIO 分のアナログリードができるようなのでそれを試してみてから考えたいと思います。

ダイオードをつけて、計測前にGPIO x ピンをHigh にしてADC 値を読むという原理です。 Lua のサンプルコードでそんなロジックが書いてありました。なるほどーですね。

 

で、手持ちのダイオードがなぜか見つからず、ジャンクのマザーボードからチップダイオードを採取してユニバーサル基板につけたところまで今、作業が進んでいます。

ESP8266 でADC 増設その3

外部のADCを利用せず、スイッチをつけて内部のADCを利用するというアプローチが以下にありました。

TINKERING WITH TECHNOLOGY

WHEN YOU NEED MULTIPLE ANALOG INPUTS FOR YOUR ESP8266 APPLICATION

なるほどーです。FSA3157 というスイッチをつけて、GPIO ピンからデジタルでHigh Low させることによりスイッチを動作させるものです。なんか日本語変ですが。上記ブログと、データシート見たほうがわかりやすいです。

FarChild Semiconductor FSA3157
datasheet

 www_farnell_com_datasheets_690558_pdf

 

これで、ADCのソースを2つから選べるようになるということですね。

3つのソースを2つのGPIOで制御する場合は、以下のICを。

FSA3357

datasheet

価格的には、どちらも安いので候補ですね。ハードの世界はいろいろなICがあって、面白いですね。

配置した感じでは、大きさがほとんど変わらないので、8pin の 3チャンネル切り替えられる FSA3357 を導入することに。前回検討していた、ダイオードを挟む方法は、正確に抵抗値を読みたいので、適しませんでした。

aaa

AliExpress にて、10個1083円なり。1個110円くらいです。

これを組み込んで、電源電圧他、2つのアナログ値を取れるようにして、1つはCDSの照度に使い、あと1つはPINを出しておく形にしておきます。

xxx

 

抵抗分圧して、3.3v をいったん、0.5VにしてADC で値を読ませた後に、元の値に戻しています。wifi eink のコードにあったやつです。まだ、ものがないのでS1,S2 の切り替えコードは書いていませんが、抵抗分圧して、内臓のADC で1V 以上の抵抗を読めるようにテストしてみました。

/*
 ADC Read Sample
 Arduino IDE 1.6.5 Hourly Build 2015/06/12 03:13
 esp8266 by ESP8266 Community version 1.6.5 Hourly Build 2015/06/12
 JunkHack 2015.10.10

 --- ex Serial output.
 Blink Count: 40
 ADC mv: 3319
 ADC mv: 3313
 Blink Count: 41
 ADC mv: 3319
 ADC mv: 3313
 ::

 */
 
#include <ESP8266WiFi.h>

int ledState = LOW;     

unsigned long previousMillis = 0;
const long interval = 1000;

void setup() {
  pinMode(BUILTIN_LED, OUTPUT);
  Serial.begin(115200);
  delay(10);
}

int value = 0;
int count = 0;
int adc = 0;
int batteryMeasMv = -1;

void loop()
{
  delay(interval);
  ++value;
  
  unsigned long currentMillis = millis();
  if(currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;   
    if (ledState == LOW){
      ledState = HIGH;  // Note that this switches the LED *off*
    } else {
      ledState = LOW;   // Note that this switches the LED *on*
      digitalWrite(BUILTIN_LED, ledState);
      delay(1);
      count += 1;
      Serial.print("Blink Count: ");
      Serial.println(count);
    }
  }
  //Battery voltage is divided by an 5.6K/1K resistor divider.
  //ADC: 1024 = 1V
  adc = analogRead(A0);
  batteryMeasMv=(adc*10020*6.6)/10000;
  //                 ^^^^^To correct an error in the resistance value

  Serial.print("ADC mv: ");
  
  delay(1);
  Serial.println(batteryMeasMv);

}

テスターで実測値に近くなるよう係数を補正しています。

自分自身の電圧をグラフに投げて、長期DeepSpeel の電圧降下具合を記録できそうです。

 

手抜きですが、以下のようなコードになる感じですかね。

/*
 ADC Read Sample.
 Fairchild Semiconductor FSA3357 adc Select.
 Arduino IDE 1.6.5 Hourly Build 2015/06/12 03:13
 esp8266 by ESP8266 Community version 1.6.5 Hourly Build 2015/06/12
 JunkHack 2015.10.10

 --- ex Serial output.
  Blink Count: 1
  >adc1(B0)
  ADC mv: 3280
  >adc2(B1)
  ADC mv: 3273
  >adc3(B2)
  ADC mv: 3293
  >adc off
 ::

 */

#include <ESP8266WiFi.h>

int ledState = LOW;     
unsigned long previousMillis = 0;
const long interval = 1000; //1sec

/******************************************************
 * Fairchild Semiconductor FSA3357 adc Select.
 * 0 = No Connection
 * 1 = B0 to A
 * 2 = B1 to A
 * 3 = B2 to A
 */
const int S1 =  14; // S1 to GPIO Pin
const int S2 =  16; // S2 to GPIO Pin

void adcset(int port) {
  pinMode(S1, OUTPUT);
  pinMode(S2, OUTPUT);
      
  switch (port){
    case 1:
      digitalWrite(S1, HIGH);
      digitalWrite(S2, LOW);
      Serial.println(">adc1(B0)");
      break;
    case 2:
      digitalWrite(S1, LOW);
      digitalWrite(S2, HIGH);
      Serial.println(">adc2(B1)");
      break;
    case 3:
      digitalWrite(S1, HIGH);
      digitalWrite(S2, HIGH);
      Serial.println(">adc3(B2)");
      break;
    case 0:
      digitalWrite(S1, LOW);
      digitalWrite(S2, LOW);
      Serial.println(">adc off");
      break;
  }
}

/******************************************************
 * 
 */
void setup() {
  pinMode(BUILTIN_LED, OUTPUT);
  Serial.begin(115200);
  delay(10);
}

int value = 0;
int count = 0;
int adc = 0;
int batteryMeasMv = -1;

/******************************************************
 * 
 */
void loop()
{
  adcset(0);
  delay(4000);
  delay(interval);
  ++value;
  
  unsigned long currentMillis = millis();
  if(currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;   
    if (ledState == LOW){
      ledState = HIGH;  // Note that this switches the LED *off*
    } else {
      ledState = LOW;   // Note that this switches the LED *on*
      digitalWrite(BUILTIN_LED, ledState);
      delay(1);
      count += 1;
      Serial.print("Blink Count: ");
      Serial.println(count);
    }
  }

  // Select ADC source.
  adcset(1);
  delay(5000);
  
  //Battery voltage is divided by an 5.6K/1K resistor divider.
  //ADC: 1024 = 1V
  adc = analogRead(A0);
  batteryMeasMv=(adc*10020*6.6)/10000;
  //                 ^^^^^To correct an error in the resistance value
  Serial.print("ADC mv: ");
  delay(1);
  Serial.println(batteryMeasMv);

  adcset(2);
  delay(5000);
  adc = analogRead(A0);
  batteryMeasMv=(adc*10020*6.6)/10000;
  Serial.print("ADC mv: ");
  delay(1);
  Serial.println(batteryMeasMv);

  adcset(3);
  delay(5000);
  adc = analogRead(A0);
  batteryMeasMv=(adc*10020*6.6)/10000;
  Serial.print("ADC mv: ");
  delay(1);
  Serial.println(batteryMeasMv);
}

さて、ぼちぼちと回路図書いてみます。

 

書いて、PCB上に配置してみました。あと、温度湿度センサーを載せればOKとします。

7

リチウムの電池からの電圧と、バックブーストで作られた後の電圧を計測して、あとは照度センサーからのADCを計測したら3チャンネル使い切りました。

 

で、最後にDHT-22 を裏側に乗せました。前回作ったやつと同じように、ESP8266 の上に載る感じ。

 

datasheets_sensors_temperature_dht22_pdf

8

UART のPIN配列は、ブレッドボードに挿したときに上からLEDが見えるに配列を逆にしました。あと、UART からの信号のDTRを一工夫して、リセットを押さなくても、書き込みモードになるように回路を組んでおしまいです。

 

他、何か忘れているような気もしますが、最後の点検でチェックしていきます。

現時点で、忘れているもの。

・メインスイッチ

・CDS の調整用、半固定抵抗

・WEB アクセスのLEDと、WiFi アクセスのLED (をつけるかどうか)

・EN Pin の配線

 

最後に少し、プログラムを改良したのをメモ。まれに、ADC値が変なので、10回の平均値を出しています。ESP12でテストしているので、ESP13 だとどういう動きになるかは、実際にモノが着てからテスト。

/*
 ADC Read Sample2.
 Fairchild Semiconductor FSA3357 adc Select.
 Arduino IDE 1.6.5 Hourly Build 2015/06/12 03:13
 esp8266 by ESP8266 Community version 1.6.5 Hourly Build 2015/06/12
 JunkHack 2015.10.11

 --- ex Serial output.
  >adc3(B2)
  ADC3 mv/10: 0 : 476
  1 : 475
  2 : 474
  3 : 474
  4 : 474
  5 : 474
  6 : 474
  7 : 474
  8 : 474
  9 : 474
  3139
  >adc off
 ::

 */

#include <ESP8266WiFi.h>

int ledState = LOW;     
unsigned long previousMillis = 0;
const long interval = 200; //1sec

/******************************************************
 * 
 */
void setup() {
  pinMode(BUILTIN_LED, OUTPUT);
  Serial.begin(115200);
  delay(10);
}

int value = 0;
int count = 0;

/******************************************************
 * 
 */
void loop()
{
  // Select ADC source off.
  adcset(0);
  delay(interval);
  ++value;
  
  unsigned long currentMillis = millis();
  if(currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;   
    if (ledState == LOW){
      ledState = HIGH;  // Note that this switches the LED *off*
    } else {
      ledState = LOW;   // Note that this switches the LED *on*
      digitalWrite(BUILTIN_LED, ledState);
      delay(1);
      count += 1;
      Serial.print("Blink Count: ");
      Serial.println(count);
    }
  }

  // Select ADC source.
  adcset(1);
  delay(interval);
  Serial.print("ADC1 mv/10: ");
  Serial.println(getMv());

  adcset(2);
  delay(interval);
  Serial.print("ADC2 mv/10: ");
  Serial.println(getMv());

  adcset(3);
  delay(interval);
  Serial.print("ADC3 mv/10: ");
  Serial.println(getMv());
}

/******************************************************
 * Fairchild Semiconductor FSA3357 adc Select.
 * 0 = No Connection
 * 1 = B0 to A
 * 2 = B1 to A
 * 3 = B2 to A
 */
const int S1 =  14; // S1 to GPIO Pin
const int S2 =  16; // S2 to GPIO Pin

void adcset(int port) {
  pinMode(S1, OUTPUT);
  pinMode(S2, OUTPUT);
      
  switch (port){
    case 1:
      digitalWrite(S1, HIGH);
      delay(10);
      digitalWrite(S2, LOW);
      Serial.println(">adc1(B0)");
      break;
    case 2:
      digitalWrite(S1, LOW);
      delay(10);
      digitalWrite(S2, HIGH);
      Serial.println(">adc2(B1)");
      break;
    case 3:
      digitalWrite(S1, HIGH);
      delay(10);
      digitalWrite(S2, HIGH);
      Serial.println(">adc3(B2)");
      break;
    case 0:
      digitalWrite(S1, LOW);
      delay(10);
      digitalWrite(S2, LOW);
      Serial.println(">adc off");
      break;
  }
}

/******************************************************
 * It reads the 10 times of the average value.
 */
int getMv(){
  // correct an error in the resistance value.
  const int CORRECT = 10030;

  int mv = -1;
  int i;
  int adc = 0;
  
  for (i = 0; i<10; i++ ){
    adc = 0;
    
    //Battery voltage is divided by an 5.6K/1K resistor divider.
    //ADC: 1024 = 1V
    adc = analogRead(A0);
    //delay(10);
//    Serial.print(i);
//    Serial.print(" : ");
//    Serial.println(adc);
    mv += (adc*CORRECT*6.6)/10000;
    //                 ^^^^^To correct an error in the resistance value
  }

  mv = mv / 10;

  return mv;
}

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 <ck@atelier-klippel.de>
    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 <ck@atelier-klippel.de>
    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 <ck@atelier-klippel.de>
    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とコンデンサを使ったものをなんとか成功させたいです。一度、組み込んだのですがうまく動作しなくて。もしかしたら、この設定が反映されてないかもしれないので、もう一度組み込んでみます。

 

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