macsbug

Archive for 10月 2015

ESP8266 と I2C

leave a comment »

ESP8266 における I2C の配線とプログラム方法を示します。                                                    2015.10.24



I2C は、SCL と SDA 信号を使用し、使用する為には、ピン番号を設定する必要があります。
I2C の配線は Liblary の Wire で定義します。
スケッチは、以下。

#include <Wire.h>
void setup(){
Wire.begin(SDA,SCL) ;
}

例:Wire.begin(0,2) ;  : GPIO_0 と OLED の SDA を接続。 GPIO_2 と OLED の SCL を接続。


確認方法:

ESP8266 単体で I2C OLED を動かす」の回路を使用し、全てのピンの組み合わせを確認しました。

例:Wire.begin(0,2) ;   Wire.begin(14,0) ;


結果:
左、SDA 端子 0,2,4,4,12,13,14 と 右、SCL端子 0,2,4,4,12,13,14 の組み合わせを全て確認。
全ての端子は Wire.begin(SDA,SCL)  の設定で使用可能である事が解かりました。

SCL
  SDA
 GPIO 0 2 4 5 12 13 14
0  OK  OK  OK  OK  OK  OK
2  OK  OK  OK  OK  OK  OK
4  OK  OK  OK  OK  OK  OK
5  OK  OK  OK  OK  OK  OK
12  OK  OK  OK  OK  OK  OK
13  OK  OK  OK  OK  OK  OK
14  OK  OK  OK  OK  OK  OK

 


メモ:
ESP8266 のマニュアルは、I2C の記載があいまいで分かり難い。
ネットの記事では、動いた、動かない、GPIO_14=SCL固定 である等、多数の記事がある。
その為に、実際に全てのピン動作を確認しました。
今回は、ESP-WROOM-02 で確認しました。
確認するピンの数は多く時間を要しましたが、動く事が確認でき便利になりました。
結果論ですが、ESP-01(GPIO_0,GPIO_2 )でも使用する事が必要ですから、当たりまえといえば当たり前。
ESP-01は、同じ CPU を使用し端子は 8本です。CPUのGPIO端子を引き出せば、使える事になります。


 

Written by macsbug

10月 23, 2015 at 10:05 pm

カテゴリー: ESP8266

ESP8266 ファームウェアアップデート

leave a comment »

ESP8266 に、スケッチを書き込むと、AT コマンドが使えなくなる。                 2015.10.21


AT コマンドを使えるようにするには、マックでターミナル操作が必要となります。
ターミナル操作は面倒ですが、手順をまとめ、確認しました。(ESP-01で確認)


手順: ターミナルと esptool を使用した方法。
01. ESP8266 の GPIO_0 を GND にする。
02. USB接続したデバイス名を Arduino IDEで調べてメモる。例:cu.usbserial-A9MX5FJ3
03. esptool-master.zip をダウンロードし、解凍されると esptool-master フォルダーができる。
04. ファームウエアーの入手:New-AI-v0.9.5.0 AT Firmware フォルダーの中から、
_   AI-v0.9.5.0 AT Firmware.bin をダウンロードしファイル名を a.bin に変更し
_   esptool-master フォルダーに入れる。
05. 以下、ターミナル入力
06. cd desktop/esptool-master/
07. sudo python setup.py install
08. ESP8266 のRST端子をGNDにしてOPENする。(RESETをかける)
09. 以下の文に、メモしたUSBデバイス名を入れてターミナル入力する。
10. esptool.py -p /dev/cu.usbserial-A9MX5FJ3 write_flash 0x000000 a.bin
11. Connecting…
_      Erasing flash…
_   Writing at 0x00019400… (20 %)
_      Wrote 520192 bytes at 0x00000000 in 56.2 seconds (74.0 kbit/s)… を表示して終了。
12. ESP8266 の GPIO_0 を OPEN にする。
13. ESP8266 のRST端子をGNDにしてOPENする。(RESETをかける)
14. ATコマンドで調べる。


メモ:
1. o.9.5.2 のバージョンは、0.952 support SmartLink:v0.9.5.2 AT Firmware.bin
2. sudo python setup.py install は、ライブラリー内の Python 2.7 に、easy-install.pth,
_  esptool-0.1.0-py2.7, pyserial-2.7-py2.7 を作成し、Python が動作するようになる。
_  1度作成すればよいので次回から 「sudo python setup.py install 」は、不要となる。
3. ESP-WROOM-02 については、未検証です。
4. メモリーを書き換える操作は、書き換えてはいけない部分を書き換えてしまう場合があります。
_  たとえば、MacAddress を書き換えてしまうとかです。この記事は、私の備忘録の為にメモしたものです。
_  もとに戻らなない場合もありますので、実施する場合は各自の責任で行ってください。
_  また、ESP-WROOM-02 の場合は、技適の件がありますので、各自でお調べください。
5. ここでの事例は、全てのESP8266 に対してのものではない。


参考:
ATコマンドできない件:
Cerevo TechBlog:
_ ESP8266モジュール単体でミニ四駆をワイヤレス化!(技適済みWi-Fiモジュール[ESP8266]で始めるIoT入門)
_ Cerevoブレイクアウトボードで単体使用する場合の注意点が3点あります。
_ 3  一端書き込むと、「B」位置に戻しても、ATコマンドを受け付けるデフォルトの状態には戻りません
_ 戻すにはArduinoIDEではなく、別のツールが必要になります。

epstool の件:
hokori.net:EPSのTIFFプレビューを取得追加などできる 「epstool」
ESP8266 JAPAN:アップロードの実際(esptool-ck編)
JUNKHACK:espeink make その3
Qiita:ESP8266のファームウェアを更新する

MemoryMapの件:
ESP8266 Memory Map
Memory Map:
BRILLIANTSERVICE TECHNICAL BLOG:技適OKな中華IoTモジュールを使いこなす
Firmware Over The Air (FOTA) for ESP8266 SoC


 

 

Written by macsbug

10月 21, 2015 at 5:02 am

カテゴリー: ESP8266

ESP8266 + NTPCliant で時刻を取得し OLED に表示する

leave a comment »

ESP8266 + NTPCliantESP8266 + OLED を組み合わせて NTP時計を作る。   2015.10.19
NTPを使用すると、RCT(リアルタイムクロック) や GSP、電波時計より便利かと思います。
ネットワークがあれば、時刻が取得できる訳です。


基礎知識:不勉強ながら注意が必要と思いました。
NTP (network time protocol)とは、TCP/IPネットワークを通じて正しい現在時刻を取得するため
のプロトコルの一つ。コンピュータの内部時計の時刻を正しく調整するために、ネットワーク上で
時刻情報を配信しているサーバに問い合わせる手順を定義したもの。目的は、時刻合わせの為。
NTPへの短時間の繰り返しアクセスは、ネットワークや自宅回線の負荷になる為、注意が必要です。



準備:
1. ESP8266(ESP-WROOM-02) +  I2C OLED(128 x 64) 。
2. Udp NTP Client:ESP8266WiFi のサンプルを試す:NTPCliant
3. OLED:ESP8266 単体で I2C OLED を動かす
4. Arduino IDE と ESP8266 開発環境。既に習熟済みである事。


配線:ESP8266 と OLED の配線は、信号線2本のみです。
_  ESP8266 IO_14 (14) — OLED (SCL)、ESP8266 IO_13 (13) — OLED (SDA) 。
_  他の IO 端子を使用してもかまいません。
_  ESP8266 の使用する端子は、10kΩ で +3.2V へプルアップしておきましょう。
_  ESP-01 の場合:例:ESP-01  IO_0 — OLED (SDA)、 IO_2 — OLED (SCL) 。
スケッチの設定:SSID、Passwarod は、各自の環境にあわせて入力の事。


謝辞:
NTP Client は、Sandeep Mistry氏の「NTPClient」を使わせて頂きました。
OLED は、Chiang Mai Maker Clubの「ESP_Adafruit_SSD1306」を使わせて頂きました。


参孝:
Network Time Protocol
Network time syncronized clock for Arduino



// ESP8266(ESP-WROOM-02) + OLED(128 x 64) + Udp NTP Client

#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#include <Time.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <ESP_Adafruit_SSD1306.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

char ssid[] = "xxxx";   // your network SSID (name)
char pass[] = "xxxxxx"; // your network password
unsigned int localPort = 2390; // local port to listen for UDP packets
IPAddress timeServerIP(129, 6, 15, 28); // time.nist.gov NTP server
const char* ntpServerName = "time.nist.gov";// time.nist.gov NTP server address
const int NTP_PACKET_SIZE = 48; // NTP time stamp is in the first 48 bytes
byte packetBuffer[ NTP_PACKET_SIZE]; //buffer to hold incoming and outgoing packets
WiFiUDP udp; // UDP instance to let us send and receive packets over UDP

void setup(){
 Wire.begin(13,14);      // SDA(GPIO_13), SCL(GPIO_14)
 display.begin(SSD1306_SWITCHCAPVCC, 0x78>>1);
 display.clearDisplay(); // Clear the buffer.
 display.setTextSize(1); // font size 1 ( minnimum )
 display.setTextColor(WHITE);
 display.setCursor(0,0);display.print("Connecting to");
 display.setCursor(0,9);display.print("ssid =");
 display.setCursor(40,9);display.print(ssid);display.display();
 WiFi.begin(ssid, pass);
 int y=5;
 while (WiFi.status() != WL_CONNECTED) {
  delay(500);
  display.setCursor(y,18);display.print(".");display.display();
  y = y + 5;
 }
 display.setCursor(0,27);display.print("WiFi connected");
 display.setCursor(0,36);display.print("IP:");
 display.setCursor(20,36);display.print(WiFi.localIP());display.display();
 display.setCursor(0,45);display.print("Starting UDP");display.display();
 udp.begin(localPort);
 display.setCursor(0,54);display.print("Local port:");
 display.setCursor(68,54);display.print(udp.localPort());display.display();
 delay(3000);
}

void loop(){
WiFi.hostByName(ntpServerName, timeServerIP);//get a random server from the pool
 display.setTextSize(1);display.setCursor(120,0);
 display.print("*");display.display(); // sending NTP packet...on
 sendNTPpacket(timeServerIP); // send an NTP packet to a time server
 delay(1000); // wait to see if a reply is available
 int cb = udp.parsePacket();
 if (!cb) {}
  else { // We've received a packet, read the data from it
  udp.read(packetBuffer, NTP_PACKET_SIZE); // read the packet into the buffer
  unsigned long highWord = word(packetBuffer[40], packetBuffer[41]);
  unsigned long lowWord = word(packetBuffer[42], packetBuffer[43]);
  unsigned long secsSince1900 = highWord << 16 | lowWord; // NTP time
  const unsigned long seventyYears = 2208988800UL; // subtract seventy years:
  unsigned long epoch = secsSince1900 - seventyYears; //Unix time:
  setTime(epoch + (9 * 60 * 60)); // JST +‹9 HR

  display.clearDisplay();display.setTextSize(2);
  String ms="";String ds="";
  if (month() < 10){ ms="0";}
  if (day() < 10){ ds="0";}
  String ymd=String(year())+"."+ms+String(month())+"."+ds+String(day());
  display.setCursor(5,10);display.print(ymd);display.display();

  String hs="";String mi="";String ss="";
  if (hour() < 10){ hs="0";}
  if (minute() < 10){ mi="0";}
  if (second() < 10){ ss="0";}
  String hm=hs+String(hour())+":"+mi+String(minute());
  display.setCursor(18,40);display.print(hm);display.display();
 }
 display.setTextSize(1);display.setCursor(120,0);
 display.print(" ");display.display(); // sending NTP packet...off
 delay(10000); // wait ten seconds before asking for the time again
}

// send an NTP request to the time server at the given address
unsigned long sendNTPpacket(IPAddress& address){
 memset(packetBuffer, 0, NTP_PACKET_SIZE);// set all bytes in the buffer to 0
 // Initialize values needed to form NTP request
 // (see URL above for details on the packets)
 packetBuffer[0] = 0b11100011; // LI, Version, Mode
 packetBuffer[1] = 0; // Stratum, or type of clock
 packetBuffer[2] = 6; // Polling Interval
 packetBuffer[3] = 0xEC; // Peer Clock Precision
 packetBuffer[12] = 49; // 8 bytes of zero for Root Delay & Root Dispersion
 packetBuffer[13] = 0x4E;
 packetBuffer[14] = 49;
 packetBuffer[15] = 52;
 udp.beginPacket(address, 123); //NTP requests are to port 123
 udp.write(packetBuffer, NTP_PACKET_SIZE);
 udp.endPacket();
}


 

 

Written by macsbug

10月 19, 2015 at 12:27 pm

カテゴリー: ESP8266

ESP8266 単体で I2C OLED を動かす

leave a comment »

ESP8266 単体で OLED を動かす。                                                                                             2015.10.18

ESp8266 で、表示装置が簡単に使えるようになると、多彩な電子工作が出来ます。
たとえば、動作確認の為の、LED や Arduinoにあるシリアルモニターを
このディスプレーで表示する事ができ、部品が不要になります。



準備:
1. ESP8266:秋月電子通商の ESP-WROOM-02 と基板。
2. OLED:Blue 0.96 int I2C 128X64 OLED Display。I2C 128X64 OLED Display for Arduino を参照の事。
3. ESPとOLEDの配線:2本。ESP8266(IO_0) – OLED(SDA)、(IO_1) – OLED(SCL)。Vcc=+3.2V,GND=GND。
4. Liblary: ESP_Adafruit_SSD1306
5. Liblary: Adafruit_GFX
6. Arduino IDE:ライブラリ−のインストール方法と、ESP8266 への書き込み方法は習熟済みである事。


ポイント:
I2C :配線は Liblary の Wire で定義する。
基本:Wire.begin(SDA,SCL);  例:Wire.begin(0,2);  0:GPIO_0,  2:GPIO_2
SDAとSCLは、OLEDの端子に記載されている。
ESP8266 側は、空いているGPIO端子を使用する。尚、10kohm程度でプルアップ(+)しておく事。
注:ESP8266 に於ける、I2C の端子の解説は多数あり要注意の事。ESPのマニュアルの記載は解りにくい。

OLED:
_ 特徴:とにかく明るく見易い。配線数4本のみ。グラッフィック可能。文字、画像表示のサンプルあり。
_    サンプルは非常に良く出来ていて、参考にすると多彩な表現が容易に出来ます。
_ 電源:ESP8266と同じ、3.2Vで動作する。
_ 電源端子:販売されているOLEDは、2種類有り、VCC とGND の配置が逆になっているので、要注意!!
_ アドレス:OLED の基板の裏に書いてある。例:0x7A、0x78
_ スケッチとアドレス:Setupで、display.begin(SSD1306_SWITCHCAPVCC, 0x78>>1); と定義する。
_ 価格:ブログ記載時、ebayにて 883円。国内で高い場合は、共同購入しましょう。

ESPの電源:
_ 電源の入力は容量の大きな物を使用する事。これが前提です。
_ 秋月の基板は良く出来ています。それは、ESPの裏側が全面グランドパターンになっているからです。
_ ノイズ対策ができます:基板に小さな穴を開け、ESPの裏のグランドと基板のグランドをハンダ付けする。
_ さらに、3端子のグランドを基板のグランドに付け、放熱させる事が出来る。
_ 端子と3端子のグランドが接近している為、他の端子周辺には絶縁テープを付ける事。
_ この時、3端子の出力は、最大限、ESPの電源端子に近づけてハンダ付けする事。
_ 3端子のグランド側は極力太い線か銅板でグランドに付ける。
_ 3端子Regulatorの入出力には、1uFと10uFのチップ積層電解コンデンサーを付ける。
_ さらに、47uFの導電性高分子アルミ個体電解コンデンサーを付けると、かなり安定します。
_ 以上、Analog Discovery にて、ESPの電源端子をモニターして確かめた内容です。
_ この事を、順序立てて行う事により、大きなコンデンサーを付ける必要はなくなります。
_ 尚、写真は製作中のもので、3端子は横に付けてあるとか、47uF は外してあります。


#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <ESP_Adafruit_SSD1306.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

void setup() {
Wire.begin(0,2);  // (SDA,SCL):ESP8266(IO_0)-OLED(SDA),(IO_1)-OLED(SCL)
display.begin(SSD1306_SWITCHCAPVCC, 0x78>>1); // OLED ADDRESS
display.clearDisplay(); // Clear the buffer.
}

void loop() {
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(30,10);
display.println("Hello");
display.setCursor(30,40);
display.println("World");
display.display();
delay(2000);
}

参考:
มาเล่น ESP8266 กับจอ OLED 128×64 ด้วย Arduino ESP กัน
nathan.chantrell.net:WiFi MQTT Display with the ESP8266


Written by macsbug

10月 19, 2015 at 2:06 am

カテゴリー: ESP8266

ESP8266WiFi のサンプルを試す:mDNS_Web_Server

leave a comment »

ESP8266 のサンプルが動く事を確かめる。                 2015.10.18

その2: mDNS_Web_Server



準備:
ハード :ESP-WROOM-02 及び 書き込み環境が用意されている事。
開発環境:Arduino IDE 1.6.5:Tools -> Board に Generic ESP8266 Module の設定及び選択されている事。
スケッチ:ESP8266WiFi のサンプルを試す:WiFiAccesspoint と同様。esp8266/libraries を使用する。


スケッチを選択する:
Liblary > esp8266 > ESP8266mDNS > mDNS_Web_Server


スケッチの変更:
冒頭にある、以下の SSID と Password に、使用するルーターの値を入力する。
const char* ssid = “…………”;
const char* password = “…………..”;


ブラウザーに、ESPのIP(例:192.168.100.26)を入力すると、ESP の mDNS_Web_Server から 返事が来る。
これで、HTTPサーバーが出来る訳です。
以上で、動きました。


参考:
ともの技術メモ:ESP-8266用ArduinoIDEでサンプルを動かす


 

Written by macsbug

10月 17, 2015 at 10:50 pm

カテゴリー: ESP8266

ESP8266WiFi のサンプルを試す:NTPCliant

with one comment

ESP8266 のサンプルが動く事を確かめる。                 2015.10.17

その2:NTPCliant


日本時間:JST is 2015/10/15 9:28:18 が表示されている。

UTC time: The UTC time is 0:28:18 が表示されている。


準備:
ハード :ESP-WROOM-02 及び 書き込み環境が用意されている事。
開発環境:Arduino IDE 1.6.5:Tools -> Board に Generic ESP8266 Module の設定及び選択されている事。
スケッチ:ESP8266WiFi のサンプルを試す:WiFiAccesspoint と同様。esp8266/libraries を使用する。
ルーター:NTP の ポート 123 ( TCP/UDP )を開けておく事。TCP か UDP は、用途に応じて設定する事。


スケッチを選択する:
Liblary > esp8266 > ESP8266WiFi > examples > NTPCliant


スケッチの変更:
冒頭にある、以下の SSID と Password に、使用するルーターの値を入力する。
char ssid[] = “*********”; // your network SSID (name)
char pass[] = “********”; // your network password

時間の値を変更する:
取得した時間の値は、UNIX Time の為、日本時間に変更するスケッチを追加する。
スケッチの 2/3程の場所にある以下
// now convert NTP time into everyday time:
Serial.print(“Unix time = “);
// Unix time starts on Jan 1 1970. In seconds, that’s 2208988800:
const unsigned long seventyYears = 2208988800UL;
// subtract seventy years:
unsigned long epoch = secsSince1900 – seventyYears;
// print Unix time:
Serial.println(epoch);

の下に、次のスケッチを追加する。

Serial.println();
// Timeライブラリに時間を設定(UNIXタイム)し日本標準時にあわせる。+9時間
setTime(epoch + (9 * 60 * 60));
Serial.print(“JST is “);
Serial.print(year());
Serial.print(‘/’);
Serial.print(month());
Serial.print(‘/’);
Serial.print(day());
Serial.print(‘ ‘);
Serial.print(hour());
Serial.print(‘:’);
Serial.print(minute());
Serial.print(‘:’);
Serial.println(second());
Serial.println();


以上で、動きました。

setTime(UTC + (9 * 60 * 60));  により
年=year()、月=month()、日=day()、時=hour()、分=minute()、秒=second() が取得できます。


メモ:時間は応用性が広い為、役に立ちます。
_ ネット環境さえあれば、RTC(リアルタイムクロック)やGPS、電波時計を使用しなくとも直ぐ使える訳です。


参考:
Ardunio:Arduino Time library
PJRC:Time library
なんでも作っちゃう、かも:NTPを使ってインターネット経由で時刻をあわせる
Fourmotion:Display Internet based Time (NTP)


 

Written by macsbug

10月 17, 2015 at 8:11 am

カテゴリー: ESP8266

ESP8266WiFi のサンプルを試す:WiFiAccessPoint

leave a comment »

ESP8266 のサンプルが動く事を確かめる。           2015.10.17

その1:WiFiAccessPoint



準備:
ハード :ESP-WROOM-02 及び 書き込み環境が用意されている事
開発環境:Arduino IDE 1.6.5:Tools -> Board に Generic ESP8266 Module の設定及び選択されている事。
スケッチ:Sandeep Mistry氏の sandeepmistry から esp8266-Arduino をダウンロードする。
_ 必要の無い物もある為、ここでは、esp8266 というフォルダーを作り Liblary をまとめる。
_ 以下の Liblary(ESP8266WiFi等々) の中味を esp8266 フォルダーに入れ Arduino のライブラリ−に入れる。
_ esp8266-Arduino > esp8266com/esp8266 > libraries > ESP8266WiFi等々
_ 追記: 2016.06.21:ライブラリ WiFiAccessPoint のURL:WiFiAccessPoint


スケッチを選択する:
Liblary > esp8266 > ESP8266WiFi > WiFiAccessPoint


スケッチの変更:
冒頭にある、以下の SSID と Password に、使用するルーターの値を入力する。

/* Set these to your desired credentials. */
const char *ssid = “xxx“;
const char *password = “xxxx“;


以上、これだけで、動きました。

 

Written by macsbug

10月 17, 2015 at 7:52 am

カテゴリー: ESP8266

ESP と BME280 と ThingSpeak で IOT

with 6 comments

ThingSpeak で 温度、湿度、気圧 をモニターする。                                                   2015.10.13


BME280 センサーから温度、湿度、気圧を取得し ESP-WROOM-02 から ThingSpeakに送信する。
ThingSpeak は、センサーによって収集されたデータを、ブラウザーに可視化することができます。
PluginやMATLAB等の機能があり、Pluginでは、円グラフ表示も出来る様になります。



用意するもの:
1. ESP-WROOM-02:秋月電子通商、共立電子、マイクロテクニカ、Cerevo、aitendo。
_ 注:各社によって基板の配線や端子が事なる為、ピン番号等を充分確認の事。
2. BME280(温度、湿度、気圧)センサー:秋月で1個1080円
3. IoTデータの収集サービス:ThingSpeakアカウント登録済みの事。Channel設定済みの事。
_ アカウント登録で作られた Thingspeak Write KEY を入手しておく事。(スケッチに記入)
.
以下は既に ESP-WROOM-02(ESP-12) に書き込みが出来るように準備済である事。
1. 3.3V 800mA 電源:例:YwRobot Breadboard Power Supply。注:500mA以上必要。
2. USBシリアル変換機:例;超小型USBシリアル変換モジュール。秋月。
3. ブレッドボード、ワイヤー、10KΩ 、100Ω 、スイッチ、AC Adapter(DC9V 2A):秋月。
4. Arduino IDE ver 1.6.5:Board は、Generic ESP8266 Module が設定済みである事。
5. Libraly:Adafruit_BME280_Library Adafruit_Sensor をインストール済みの事。
6. Arduino IDEによる PROGRAM と RST スイッチの書き込み方法は事前に習熟の事。


配線:左が BME280。右が YwRobot Breadboard Power Supply(AS1117 33 Regulator:800mA)。
橙色のスイッチは、RST(RESET) スイッチ。緑のスイッチは、PROGRAM スイッチ。

左上に USBシリアル変換機。中央に ESP-WROOM-02。
中央下の ESPの電源とGND端子側に 導電性高分子アルミ固体電解コンデンサ47uF。
ESP-WROOM-02の電源端子に SMA Connector を装着(電源モニター用)。

Deep-Sleep から 送信時の電源:3.24V -> 3.12V。12mVpp。[ Analog Discoveryによる観測]


BME280:温度、湿度、気圧を内蔵したセンサー
_ 温度:範囲:-40~65℃:精度:+-0.5℃(@25℃)、+-1.0℃(0~65℃):分解能 0.01°
_ 湿度:測定範囲:0~100%RH:分解能:0.008%RH:精度:+-3%RH
_ 気圧:測定範囲:300~1100hPa:精度:+-1.0hPa:分解能 0.008%


メモ:
1. Deep-Sleep モードを使用する時は、Pin 17(IO 16) と Pin 15(RST) をジャンパーする事。
_ Deep-Sleep 復帰時に、LOW信号が出力され RST(RESET) を動作させる。
2. Deep-Sleep モード(10uA)からの送信は過大な電流が流れる為、3.3V電源は 3.0V以上の事。
3. BME280 は、SPI接続とI2C接続がある。今回は、Liblaryの関係でSPI(4本線)を採用した。
_ 理由:I2C 接続を実施してみたが動作しない為、SPI 接続とした。(宿題)
4. スケッチ:次の設定は各自で行う事。
_ SEALEVELPRESSURE_HPA、MySSID、MyPassword、thingspeak_key
_ BME280とESPの配線変更は、Adafruit_BME280 bme(CSB,SDI,SDO,SCK )の値を設定する。
5. 送信間隔:10分毎でスケッチ最下段にあり。system_deep_sleep(10 * 60 * 1000000);
6. データー送信方法:
_ Requesting URL: /update?key=XY64****RF4&field1=23.45&field2=45.67&field3=1008.12
_ という形で Thingspeakサイトに AppKeyと一緒にフィールドデータを送ります。
_ なので、うまく自分のチゃネルにデータが送り込める訳です。


スケッチ:

// ESPWROOM-02(ESP-12) + BME280 + thingspeak service
// BMP280(VDD) --> 3.3V
// BMP280(GND) --> GND
// BMP280(CSB) --> ESP(GPIO 14)( 3 pin)
// BMP280(SDI) --> ESP(GPIO 12)( 4 pin)
// BMP280(SDO) --> ESP(GPIO 13)( 5 pin)
// BMP280(SCK) --> ESP(GPIO  4)(10 pin)

#include <ESP8266WiFi.h>
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
extern "C" {
  #include "user_interface.h"
}
#define SEALEVELPRESSURE_HPA (1000.00)                  // please set
//Adafruit_BME280 bme();                                // I2C                   
Adafruit_BME280 bme(14, 12, 13, 4 );                    // CSB,SDI,SDO,SCK
const char* ssid     = "MySSID";                        // myRouter SSID
const char* password = "MyPassword";                    // myRouter Password
const char* host = "api.thingspeak.com";                // thingspeak URL
const char* thingspeak_key = "xxxxxxxxxxxxxxxx";        // thingspeak Write KEY

void turnOff(int pin) { pinMode(pin, OUTPUT); digitalWrite(pin, 1);}

void setup() {
  Serial.begin(115200);
  turnOff(0);turnOff(2);turnOff(5);turnOff(15);//disable all output to save power
  pinMode(4,INPUT);pinMode(12,INPUT);pinMode(13,INPUT);pinMode(14,INPUT);
  Serial.println(F("BME280 Start"));    // BME280 check
  if (!bme.begin()){Serial.println("Failed BME280 sensor!"); while (1);}
  Serial.println();Serial.println();Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password); 
  while (WiFi.status() != WL_CONNECTED){delay(500);Serial.print(".");}
  Serial.println("");Serial.println("WiFi connected");Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void loop() {
  delay(5000);
  Serial.print("connecting to ");Serial.println(host);
  WiFiClient client;      // Use WiFiClient class to create TCP connections
  const int httpPort = 80;
  if (!client.connect(host,httpPort)){Serial.println("connection failed");return;}

  String temp = String(bme.readTemperature());                 // Temp
  String humi = String(bme.readHumidity());                    // Humidity
  String pres = String(bme.readPressure()/100);                // Pressure
  String alti = String(bme.readAltitude(SEALEVELPRESSURE_HPA));// Altitude 
  String url = "/update?key=";
  url += thingspeak_key;          // thingspeak Write KEY
  url += "&field1=";url += temp;  // Temp
  url += "&field2=";url += humi;  // Humidity
  url += "&field3=";url += pres;  // Pressure
  url += "&field4=";url += alti;  // Altitude   
  Serial.print("Requesting URL: ");Serial.println(url);
  
  // send the request to the server
  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" + "Connection: close\r\n\r\n");
  delay(10);
 
  while(client.available()){           // reply from server
   String line = client.readStringUntil('\r'); Serial.print(line);
  }
 
 Serial.println();Serial.println("closing connection. going to sleep...");
 delay(1000);
 system_deep_sleep_set_option(0);      // go to deepsleep for 10 minutes
 system_deep_sleep(10 * 60 * 1000000); // 10 minutes
}

参考:
Thingspeak Data Logger
How to Hookup Adafruit BME280 Barometric Pressure Sensor to an Arduino
Bring IOT to Arduino, togerther

宅Make !【IoTをDIY!】ThingSpeakで作る湿温度モニター(第一回)
Qiita:ESP8266とThingspeakとArduinoで電力計を作る
BME280:Breakout Temperature Humidity Barometric Pressure BME280 Digital Sensor Module
_ ebayで 1個828円。BME280の派生品で専用のライブラリ−がある。
ネットワークをモニターするマック用のソフト:IP Scanner Home:ESPを確認できる。


復習:
ファームウエアの書き込みモード
ALL OFF
PROGRAM(IO_0 : pin_8) Push (GND)
PROGRAM(IO_0 : pin_8) Push (GND) + RESET(RST : pin_12) Push (GND)
PROGRAM(IO_0 : pin_8) Push (GND)
ALL OFF


 

Written by macsbug

10月 13, 2015 at 7:52 am

カテゴリー: ESP8266

Analog Discovery 購入

leave a comment »

Analog Discovery を購入。                      2015.10.03


電子回路の動作を確認する為には、信号を測定する装置が必要です。
オシロスコープを検討する中で、DIGILENTの Analog Discovery を選択しました。
Agilentの200MHz DIjital OscilloScope を使用した経験から、見劣りするかなとの危惧がありました。
アナログでの周波数帯域は、5MHzしかありませんが、通常の電子工作では使える範囲です。
価格は高いですが、多彩な機能があり、オシロを購入するより満足する場面が多々あります。


オシロスコープではできない優れた機能:
1. 直流電圧測定のオフセットを大きく取れる。例:直流の細かな変動を測定できる。
2. 表示サイズを大きくできる。例:27インチの画面表示。
3. 画面の保存が容易:例:スクリーンショットで即時及び自在に撮れる。
4. 拡大表示がが容易:例:縦、横及び全体の大きさを自由に選択できる。
5. 測定とパソコンの機能が同時に使用できる。例:メモ帳等で文書の作成。
6. パソコン画面に多くの波形表示が出来る:例:測定済みの波形と比較できる。


購入先:秋葉原、秋月電子通商。
価格:総計 46,989円。
Analog Discovery = 36,000円。(左上)
Discovery BNC Connector = 2,140円。(左下)
Analog Parts Kit = 6,980円。(右下)
Connector , BNC Cable 等 = 1869円。(右上)*
*コネクターやケーブルは、末広町近くの
コンピューエースが安い。
BNC-SMAコネクター = 124円。
SMAケーブル 0.5m = 288円。
Analog Discoverydigilent.waveformsの画面。
.
使用条件:iMac+ VM Ware + Windows XP +
digilent.waveforms_v2.7.5 。
.
測定は2CH、信号発生器は2CH。
オシロスコープには無い多彩な機能がある。

Analog Discovery で ESP8266 の電源を測定する。これにより、ESPの電源問題が明らかになる。


ESP12W Arduino UNO + ESP12 Sheeld
.
ESP12の電源3.3Vを測定。
.
ESPの3.3V電源端子直下(左上)と
GND端子直下(左下) を測る事。(重要)
.
5VからAS1117L33 LDR(中央のIC)
(3.3V 800mA)で3.3Vを作っている。
ESPの電源電圧を測定し分析 動作しない原因は、電源容量の不足である
Arduinoの電源は、マックに接続した
USB HUB(電源付き)  に接続。
.
Hi = 3.27V
Lo = 2.74V
.
Lo は、3.0V (ESP最低動作電圧)より低い。
送信時に2.74Vまで落ちている事が解る。
.
3端子の出力にCapacitorを追加しても変化なし
ESP12 3.3vの電源は、USB -> Arduio(5V) ->
AS1117L 33(3.3V 800mA)3端子の容量は充分。
.
USB電源をエネループに変更し電流容量を増す。
.
Hi = 3.29V
Lo = 3.02V
3.0Vギリギリだが、電圧は確保できている。
ArduinoのAC Adapterは、9V〜12V DCの仕様。
.
AC Adapter 6V 2.0A は、電力不足でダメ。
.
AC Adapter 12V 2.5A は正常。(左画像)
Hi = Lo = 3.25V
電圧(縦)を、10mV レンジに拡大した波形。
.
電圧低下は、10mV
.
スパイクは、100mV
.
AC Adapter 9V 2.0A も同様の波形。
不具合事例:ESP-WROOM 02単体での実験。
ブレットボードで、3端子LDO出力から
ESP電源端子までの配線が6cmの場合。
配線の抵抗(0.32Ω)により、ESP電源端子は
3.25Vから3.09Vに低下(0.16V)。
さらに送信時の電圧は、2.3V となり、
ESPは、ハングアップ状態となった。
波形の分析から解る事。
.
ESPは送信時の消費電流が大きい為に、
配線や内部抵抗による影響が大きい。
.
ESPの動作を安定化させる対策と方法。
1. USB電源は、容量の多い物を使う。
2. AC アダプターは、容量の多い物を使う。
3. 3端子Regulatorは、容量の多い物を使う。
4. 3端子Regulatorの配置は、
_ ESP電源端子の直下に接続する事。
5. 平滑キャパシターの配置は、
_ ESP電源端子の直下に接続する事

参孝:
アナログ回路のおもちゃ箱:Analog Discovery
あるエンジニアの回想録:Analog Discovery で遊んでみた
CQ出版社:レギュレータの動作安定性を 実測して検証する
CQ出版社:腕上げまくり!オールマイティ・ アナライザ Analog Discovery
マイナビニュース:これからはじめる人のためのMATLAB活用術
趣味のオーディオ製作:Analog Discovery試用記
フルバランス アンプ:Analog Discoveryで自動測定
他の製品:redpitaya の方が良さそうでもある。
_ Analog Discavaryと同様なKickstarter発のredpitayaは、Ethenet接続。
_ これは、どのPCでも波形を見る事ができます。つまり、iPadでも見れる。
_ つまり、Analog Discavaryのような、Windowsやアプリを使う必要がない。
_ 価格が高い事は高いですが、円高の影響が大きい Analog Discavary と、さほど変わらず。
_ 今回は、実際に確認していない為、購入は見送りました。


 

Written by macsbug

10月 3, 2015 at 1:26 pm

カテゴリー: Arduino, ESP8266, Knowledge