-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
e31075b
commit b9a6618
Showing
2 changed files
with
144 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,85 @@ | ||
/******************************************************************************* | ||
Example 9: (IoTセンサ) Wi-Fi 温湿度計 SILICON LABS製 Si7021 版 | ||
デジタルI2Cインタフェース搭載センサから取得した温湿度を送信するIoTセンサです。 | ||
温湿度を送信するIoTセンサのクラウドサービスAmbientへの送信機能つき版です。 | ||
変更点(example09c_humとの違い): | ||
①デバイスドライバ「i2c_hdc.ino」を「i2c_si7021.ino」へ置き換えた | ||
②初期化関数「hdcSetup」を「si7021Setup」へ書き換えた | ||
Copyright (c) 2016-2019 Wataru KUNINO | ||
******************************************************************************** | ||
本サンプルで使用するクラウドサービスAmbient用の設定確認ページ | ||
http://ambidata.io/ch/channels.html | ||
*******************************************************************************/ | ||
|
||
#include <ESP8266WiFi.h> // ESP8266用ライブラリ | ||
#include <WiFiUdp.h> // UDP通信を行うライブラリ | ||
#include "Ambient.h" // Ambient用のライブラリの組み込み | ||
#define PIN_LED 13 // IO 13(5番ピン)にLEDを接続する | ||
#define SSID "1234ABCD" // 無線LANアクセスポイントのSSID | ||
#define PASS "password" // パスワード | ||
#define AmbientChannelId 100 // チャネルID(整数) | ||
#define AmbientWriteKey "0123456789abcdef" // ライトキー(16桁の16進数) | ||
#define SENDTO "192.168.0.255" // 送信先のIPアドレス | ||
#define PORT 1024 // 送信のポート番号 | ||
#define SLEEP_P 29*60*1000000ul // スリープ時間 29分(uint32_t) | ||
#define DEVICE "humid_1," // デバイス名(5文字+"_"+番号+",") | ||
void sleep(); | ||
Ambient ambient; | ||
WiFiClient client; | ||
|
||
void setup(){ // 起動時に一度だけ実行する関数 | ||
int waiting=0; // アクセスポイント接続待ち用 | ||
pinMode(PIN_LED,OUTPUT); // LED用ポートを出力に | ||
digitalWrite(PIN_LED,HIGH); // LEDの点灯 | ||
si7021Setup(); // 湿度センサの初期化 | ||
Serial.begin(9600); // 動作確認のためのシリアル出力開始 | ||
Serial.println("Example 09C HUM->Amb"); // 「Example 09」をシリアル出力表示 | ||
WiFi.mode(WIFI_STA); // 無線LANをSTAモードに設定 | ||
WiFi.begin(SSID,PASS); // 無線LANアクセスポイントへ接続 | ||
while(WiFi.status() != WL_CONNECTED){ // 接続に成功するまで待つ | ||
delay(100); // 待ち時間処理 | ||
waiting++; // 待ち時間カウンタを1加算する | ||
if(waiting%10==0)Serial.print('.'); // 進捗表示 | ||
if(waiting > 300) sleep(); // 300回(30秒)を過ぎたらスリープ | ||
} | ||
Serial.println(WiFi.localIP()); // 本機のIPアドレスをシリアル出力 | ||
ambient.begin(AmbientChannelId, AmbientWriteKey, &client); // Ambient開始 | ||
} | ||
|
||
void loop(){ | ||
WiFiUDP udp; // UDP通信用のインスタンスを定義 | ||
float temp,hum; // センサ用の浮動小数点数型変数 | ||
char s[6]; | ||
|
||
temp=getTemp(); // 温度を取得して変数tempに代入 | ||
hum =getHum(); // 湿度を取得して変数humに代入 | ||
if( temp>-100. && hum>=0.){ // 適切な値の時 | ||
udp.beginPacket(SENDTO, PORT); // UDP送信先を設定 | ||
udp.print(DEVICE); // デバイス名を送信 | ||
udp.print(temp,1); // 変数tempの値を送信 | ||
Serial.print(temp,2); // シリアル出力表示 | ||
udp.print(", "); // 「,」カンマを送信 | ||
Serial.print(", "); // シリアル出力表示 | ||
udp.println(hum,1); // 変数humの値を送信 | ||
Serial.println(hum,2); // シリアル出力表示 | ||
udp.endPacket(); // UDP送信の終了(実際に送信する) | ||
/* クラウドへ */ | ||
dtostrf(temp,-5,2,s); // 温度を文字列に変換 | ||
ambient.set(1,s); // Ambient(データ1)へ温度を送信 | ||
dtostrf(hum,-5,2,s); // 湿度を文字列に変換 | ||
ambient.set(2,s); // Ambient(データ2)へ湿度を送信 | ||
ambient.send(); // Ambient送信の終了(実際に送信する) | ||
} | ||
sleep(); | ||
} | ||
|
||
void sleep(){ | ||
digitalWrite(PIN_LED,LOW); // LEDの消灯 | ||
delay(200); // 送信待ち時間 | ||
ESP.deepSleep(SLEEP_P,WAKE_RF_DEFAULT); // スリープモードへ移行する | ||
while(1){ // 繰り返し処理 | ||
delay(100); // 100msの待ち時間処理 | ||
} // 繰り返し中にスリープへ移行 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
/********************************************************************* | ||
本ソースリストおよびソフトウェアは、ライセンスフリーです。(詳細は別記) | ||
利用、編集、再配布等が自由に行えますが、著作権表示の改変は禁止します。 | ||
I2C接続の温湿度センサの値を読み取る | ||
SILICON LABS社 Si7021 | ||
Copyright (c) 2017-2019 Wataru KUNINO | ||
https://bokunimo.net/bokunimowakaru/ | ||
*********************************************************************/ | ||
|
||
#include <Wire.h> | ||
#define I2C_si7021 0x40 // Si7021 の I2C アドレス | ||
|
||
float _i2c_si7021_hum; | ||
|
||
float getTemp(){ | ||
int temp,hum; | ||
_i2c_si7021_hum=-999.; | ||
Wire.beginTransmission(I2C_si7021); | ||
Wire.write(0xF5); | ||
if(Wire.endTransmission()) return -999.; | ||
|
||
delay(30); // 15ms以上 | ||
Wire.requestFrom(I2C_si7021,2); | ||
if(Wire.available()!=2) return -999.; | ||
hum = Wire.read(); | ||
hum <<= 8; | ||
hum += Wire.read(); | ||
|
||
delay(18); // 15ms以上 | ||
Wire.beginTransmission(I2C_si7021); | ||
Wire.write(0xE0); | ||
if(Wire.endTransmission()) return -989.; | ||
|
||
delay(30); // 15ms以上 | ||
Wire.requestFrom(I2C_si7021,2); | ||
if(Wire.available()!=2) return -999.; | ||
temp = Wire.read(); | ||
temp <<= 8; | ||
temp += Wire.read(); | ||
|
||
_i2c_si7021_hum = (float)hum / 65536. * 125. - 6.; | ||
return (float)temp / 65535. * 175.72 - 46.85; | ||
} | ||
|
||
float getHum(){ | ||
return _i2c_si7021_hum; | ||
} | ||
|
||
void si7021Setup(){ | ||
delay(2); // 1ms以上 | ||
Wire.begin(); // I2Cインタフェースの使用を開始 | ||
delay(18); // 15ms以上 | ||
Wire.beginTransmission(I2C_si7021); | ||
Wire.write(0xE6); | ||
Wire.write(0x3A); | ||
Wire.endTransmission(); | ||
delay(18); // 15ms以上 | ||
} |