Arduino MKR1000でDHT11センサーデータをThingSpeakにアップロードする方法
必要な部品と用品
| DHT11 温湿度センサー(4ピン) | ×1 |
| Arduino MKR1000 | ×1 |
プロジェクト概要
以前、ESP8266 12-EでDHT11による環境センサーデータを無線でThingSpeakにアップロードし、グラフ化するコードを開発していました。今回はそれをArduino MKR1000で動作させるために、わずかな修正を加えました。

手順1: 配線
DHT11のデータ出力線をMKR1000のPin1(基板裏面の「1」と書かれたピン、端から5番目)に接続します。

手順2: ライブラリのインストール
以下のライブラリをダウンロードしてインストールしてください。
手順3: ボードマネージャーでSAMDボードを追加
Arduino IDEの「ツール」→「ボード」→「ボードマネージャー」を開き、「Arduino SAMD Boards (32-bits ARM Cortex M0+)」を検索してバージョン1.6.3をインストールします。バージョン1.6.4ではMKR1000ボードが正しくインストールされない問題がありました。

手順4: ThingSpeakアカウントの設定
ThingSpeak.comで無料アカウントを作成し、グラフ化するフィールド(湿度、温度など)を設定します。提供されているスケッチに、ThingSpeakの「Write APIキー」、Wi-FiのSSID、パスワードを貼り付けてください。
手順5: 書き込みと実行
MKR1000に対応したCOMポートを選択し、コンパイルして書き込みます。シリアルモニタにThingSpeakへのデータ送信ログが表示されれば成功です。

スケッチ(コード)
MKR1000 → DHT11 → ThingSpeak 無線環境センサーグラフ化
AdafruitのDHTスケッチ、WiFi101 WebClient、ThingSpeak Arduinoテンプレートを組み合わせ、Stephen Borsay氏がMKR1000用に改変したものです。自由にご利用ください。
/* This sketch is a combination of ADAFruits DHT sketch, WiFi101 Webclient and The arduino example from ThingSpeak Modified by Stephen Borsay for the MKR1000, feel free to use */
#include <SPI.h> // シールド不使用のため不要だが互換性のため残す
#include <WiFi101.h>
#include "DHT.h"
#define DHTPIN 1 // 接続ピン(Pin1 = 基板裏面の5番目ピン)
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT21 // DHT 21
//#define DHTTYPE DHT22 // DHT 22
DHT dht(DHTPIN, DHTTYPE);
String apiKey = "YourApiKeyHere"; // ThingSpeakのWrite APIキー
char ssid[] = "YourSSIDHERE"; // Wi-Fi SSID
char pass[] = "YourPasswordHere"; // Wi-Fiパスワード
int keyIndex = 0; // WEPの場合のみ必要
char server[] = "api.thingspeak.com";
WiFiClient client;
void setup() {
Serial.begin(9600);
while (!Serial) { ; } // ネイティブUSBポートの場合のみ必要
if (WiFi.status() == WL_NO_SHIELD) {
Serial.println("WiFi shield not present");
while (true);
}
while (WiFi.status() != WL_CONNECTED) {
Serial.print("Attempting to connect to SSID: ");
Serial.println(ssid);
WiFi.begin(ssid, pass);
delay(10000);
}
Serial.println("Connected to wifi");
printWifiStatus();
}
void loop() {
delay(2000);
int h = dht.readHumidity();
int t = dht.readTemperature();
int f = dht.readTemperature(true);
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
int hif = dht.computeHeatIndex(f, h);
int hic = dht.computeHeatIndex(t, h, false);
Serial.print("Humidity: "); Serial.print(h); Serial.print(" %\t");
Serial.print("Temperature: "); Serial.print(t); Serial.print(" *C ");
Serial.print(f); Serial.print(" *F\t");
Serial.print("Heat index: "); Serial.print(hic); Serial.print(" *C ");
Serial.print(hif); Serial.println(" *F\n");
Serial.println("\nStarting connection to server...");
if (client.connect(server, 80)) {
Serial.println("connected to server");
String tsData = "field1=" + String(h) + "&field2=" + String(t) + "&field3=" + String(f) + "&field4=" + String(hic) + "&field5=" + String(hif);
client.print("POST /update HTTP/1.1\n");
client.print("Host: api.thingspeak.com\n");
client.print("Connection: close\n");
client.print("X-THINGSPEAKAPIKEY: " + apiKey + "\n");
client.print("Content-Type: application/x-www-form-urlencoded\n");
client.print("Content-Length: ");
client.print(tsData.length());
client.print("\n\n");
client.print(tsData);
client.stop();
delay(1000);
}
}
void printWifiStatus() {
Serial.print("SSID: "); Serial.println(WiFi.SSID());
IPAddress ip = WiFi.localIP();
Serial.print("IP Address: "); Serial.println(ip);
long rssi = WiFi.RSSI();
Serial.print("signal strength (RSSI):"); Serial.print(rssi); Serial.println(" dBm");
}
回路図
DHTのデータ線をMKR1000のPin1(端から5番目)に接続。5VとGNDはMKR1000から供給します。
製造プロセス
- Parts.Cat.Comで部品調達を効率化:時間とコストを大幅削減
- Shop.Cat.Com:機器、アタッチメント、ツールのワンストップリソース
- Cat®機材を最適化:My.Cat.com完全活用ガイド
- Raspberry Pi向けコンパクトDHT温湿度ブレークアウト – ATtiny85 & DHT22/DHT11
- Raspberry PiとBrickPiでThingSpeak温度モニターを構築
- Raspberry Pi、DHT11、ThingSpeakで作る初めてのIoTプロジェクト
- 3Dfilemarket.com創業者Philip Cotton氏インタビュー:英国3Dプリント教育のエキスパート
- MKR1000ピン配置完全解説:IoT開発に最適なArduinoボード
- PicoCoreMX8MM:NXP i.MX 8M Mini搭載の超コンパクトARMモジュール
- Kontron、新しい高性能組み込みコンピューティング標準「COM HPC」を発表
- ASTM A551 Class DHT 熱処理鋼 - 主要特性と性能