こいつも大分前に買っておいたのですが3.3V対応のUSBシリアルケーブルが必要だったり、普通のブレッドボードでは配線がやりにくいとかだったりで、しばらく放っておいておりました。せっかくなので遅れてますが秋月の幅広ブレッドボードと3.3V対応USBシリアル変換モジュールを入手し使ってみる事にします。
購入したのがスイッチサイエンスの単体モジュールなので、GPIOを何本かプルアップしたりグランドに落としたりしないといけません。結構面倒ですね。
とりあえずLチカするだけでこんな配線になってしまいます。さらに単体稼動するためにはまたジャンパを付け替えるとか、、、
これはやっておられん。。。
なので、まじめに冶具を作りましょう。基板は秋月のBサイズがよろしいかな。
起動リセットSWとライトモードSW 2つでモード切替します。
配線についてはネットに情報がたくさんありますね。以下を参考に致しました。
冶具として使うので基板上にi2c、SPI、使用可能なGPIOへ簡単に外付け出来る様ピン・ソケットをを半田付けしておきます。i2cピンの並びはRaspeberryPiと同じ配列にしました。これでRaspi用のブレークアウトがそのまま挿入できます。
これでNanoPiで使ったHDC1000モジュールが使えます。
きれいにまとまった。まだ余裕があるのでいろいろ追加できそう。
Lチカだけでは芸がないので Wifiのアクセスポイントに接続してntpサーバから時間を取得、約一秒おきに温度・湿度を表示というスケッチを書いてみました。
------------------------
/*
* 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);
}
}
実行結果: