はじめてのMKR ZERO (4) SDメモリ

 前回、温湿度センサDHT11を使い、測定結果をキャラクタLCDに表示しました。MKRZEROにはSDメモリのソケットが搭載されています。しかし、回路図を見ても、SPIのポートが不明です。

MKRZEROのSDU

 サンプル・スケッチのMKRZERO用のスケッチにSDU-Usageがあります。開くとSDメモリに関するようです。内容はupdateのようなので、実行しておきます。

 サンプル・スケッチの中のSD-CardInfoを開きます。選択信号のSS端子の設定のコメントに、MKRZEROはSDCARD_SS_PINと記述するように書かれているので、元の4から書き換えて実行します。

 書き込み時に下記のエラー・メッセージが出ましたが、シリアルモニタを開くと、正常にSDメモリの内容が表示されます。

 「指定されたポートには、ボードが接続されていません。正しいポートを選んである事を確認してください。もしも正しいポートを選んである場合には、書き込みを開始した直後にボードのリセットボタンを押してみてください。」

 IDE1.8.9を長時間使っていると出るメッセージのようなので、IDEをいったん終了させて再度起動します。

SDメモリのへの書き込み

 サンプルのDetaloggerを読み込んで、SS信号の部分をMKRZERO用に書き換えてコンパイル、実行します。

  const int chipSelect = SDCARD_SS_PIN;

 前回のDHT11による温度と湿度の読み出しスケッチに、SDメモリの書き込みを追加します。

// Written by ladyada, public domain
#include <Wire.h>
#include "rgb_lcd.h"
rgb_lcd lcd;
const int colorR = 200;
const int colorG = 200;
const int colorB = 200;

#include "DHT.h"
#define DHTPIN 2 // Digital pin connected to the DHT sensor
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);

#include <SPI.h>
#include <SD.h>
const int chipSelect = SDCARD_SS_PIN;

void setup() {
Serial.begin(9600);
Serial.println("DHT11 start");

lcd.begin(16, 2);
lcd.setRGB(colorR, colorG, colorB);

dht.begin();

if (!SD.begin(chipSelect)) {
Serial.println("Card failed, or not present");
// don't do anything more:
while (1);
}
Serial.println("card initialized.");
}

void loop() {
String dataString = "";
delay(2000);
lcd.setCursor(0, 0);
float h = dht.readHumidity();
// Read temperature as Celsius (the default)
float t = dht.readTemperature();
// Read temperature as Fahrenheit (isFahrenheit = true)
float f = dht.readTemperature(true);
// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
// Compute heat index in Fahrenheit (the default)
float hif = dht.computeHeatIndex(f, h);
// Compute heat index in Celsius (isFahreheit = false)
float hic = dht.computeHeatIndex(t, h, false);
Serial.print("Humidity: "); Serial.print(h);
Serial.print("% Temperature: "); Serial.print(t); Serial.print("°C ");
Serial.print("Heat index: "); Serial.print(hic); Serial.println("°C ");

lcd.setCursor(0, 0); lcd.print("Temperature:"); lcd.print(t,1);
lcd.setCursor(0, 1); lcd.print("Humidity:"); lcd.print(h,0);

dataString = String(t,1)+","+String(h,0);
File dataFile = SD.open("datalog.txt", FILE_WRITE);
if (dataFile) {
dataFile.println(dataString);
dataFile.close();
// print to the serial port too:
Serial.println(dataString);
}
}

 実行中の様子です。

 SDメモリをMKRZEROから取り出し、PCのSDメモリ・リーダに入れます。DATAFILE.txtの内容です。温度と湿度が、カンマで区切られて保存されています。

前へ

はじめてのMKR ZERO (3) 温湿度DHT11

次へ

はじめてのMKR ZERO (5) RTC