ESP-WROOM-02を使ってみる(ようやく) | Tamesuke-Goto Maker的Blog

Tamesuke-Goto Maker的Blog

地域ISP管理者だけれど、ここ3年ほどMakerなJobが増えたのでまとめてみたいと思います 旧ハンドル Ringoro

こいつも大分前に買っておいたのですが3.3V対応のUSBシリアルケーブルが必要だったり、普通のブレッドボードでは配線がやりにくいとかだったりで、しばらく放っておいておりました。せっかくなので遅れてますが秋月の幅広ブレッドボードと3.3V対応USBシリアル変換モジュールを入手し使ってみる事にします。
 
購入したのがスイッチサイエンスの単体モジュールなので、GPIOを何本かプルアップしたりグランドに落としたりしないといけません。結構面倒ですね。
とりあえずLチカするだけでこんな配線になってしまいます。さらに単体稼動するためにはまたジャンパを付け替えるとか、、、
 
これはやっておられん。。。
 
 
{2C33A9EB-1B7F-401B-B2A7-AF744C3D8940}
 
なので、まじめに冶具を作りましょう。基板は秋月のBサイズがよろしいかな。
 
{CACED2C1-9C3F-4D39-9E2E-AD870DC812EC}
 
細ピンヘッダなので丸ピンソケットがよいです。
 
 
{75B6510C-1098-4338-892A-DE50DD3C4E0F}
 
起動リセットSWとライトモードSW 2つでモード切替します。
配線についてはネットに情報がたくさんありますね。以下を参考に致しました。
 

https://qiita.com/ikesato/items/92f4cb143e7aeb5e0f9b

 

i2cの接続は

 

GPIO4 - SDA

GPIO5 - SCL

 

とします。サイトによってはSCLをGPIO14にしている場合もある様ですが、Arduino IDEのデフォルトはGPIO4,5 の様です、

 

冶具として使うので基板上にi2c、SPI、使用可能なGPIOへ簡単に外付け出来る様ピン・ソケットをを半田付けしておきます。i2cピンの並びはRaspeberryPiと同じ配列にしました。これでRaspi用のブレークアウトがそのまま挿入できます。
これでNanoPiで使ったHDC1000モジュールが使えます。
 
 
{CA451DB2-586B-4F25-8423-C1C82EC2CAE3}
 
きれいにまとまった。まだ余裕があるのでいろいろ追加できそう。
 
Lチカだけでは芸がないので Wifiのアクセスポイントに接続してntpサーバから時間を取得、約一秒おきに温度・湿度を表示というスケッチを書いてみました。
 
スケッチはこちらサイトを参考にさせて頂きました ->  http://shirotsuku.sakura.ne.jp/blog/?p=812

 

------------------------

 

/*
 *   WROOM TEST
 *   
 *   NTP Time Sync
 *   HDC1000 i2c
 *
*/

#include <Wire.h>
 
#include <Arduino.h>
#include <time.h>
#include <ESP8266WiFi.h>
//#include <WiFiUDP.h>

//Access Point Setting
const char *ssid = "****";
const char *pass = "****";

#define addr 0x40

#define LED 13
#define JST  3600*9

IPAddress myIP;

void HDC1000_ini(void){
  delay(100);
  Wire.beginTransmission(addr);
  Wire.write(0x02);   //Configuration address
  Wire.write(0x10);   //MODE=1, 14bit
  Wire.write(0x00);
  Wire.endTransmission();  
}

void setup() {
  int t=0;
  pinMode(LED, OUTPUT);
  Serial.begin(9600);

  WiFi.begin(ssid, pass);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
    if(t++>20){
      Serial.println("ERROR Wifi CONNECT");
      break;
    }
  }
 
  Serial.println("");
 
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  myIP=WiFi.localIP();
  Serial.println(myIP);
  configTime( JST, 0, "ntp.nict.jp", "ntp.jst.mfeed.ad.jp");

  Wire.begin();  
  HDC1000_ini();
 
}

void loop() {
  static short intvl=0;
  time_t t;
  struct tm *tm;

  delay(100);
 
  if(intvl++ & 7 ){
    return;
  }

  digitalWrite(LED, HIGH);   

  t= time(NULL);
  tm = localtime(&t);
   Serial.printf(" %04d/%02d/%02d %02d:%02d:%02d , ",
        tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday,
        tm->tm_hour, tm->tm_min, tm->tm_sec);

  HDC1000_read();
  digitalWrite(LED, LOW);    

}

void HDC1000_read(void){
  unsigned int temp = 0;
  unsigned int humid = 0;
   
    delay(100);
    Wire.beginTransmission(addr);
    Wire.write(0x00);   //レジスタ0x00
    Wire.endTransmission();
    delay(50);
   
    Wire.requestFrom(addr, 4);
    if(4 <= Wire.available())   
    {       
      temp = (Wire.read()<<8);
      temp += Wire.read();
      humid = (Wire.read()<<8);
      humid += Wire.read();
      Serial.print(temp/65536.0*165.0-40.0);   
      Serial.print(",");
      Serial.println(humid/65536.0*100.0);
    }

}

 

 

実行結果: