Alexaベースのスマートホームモニタリング
コンポーネントと消耗品
> ![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
![]() |
| × | 1 |
アプリとオンラインサービス
> ![]() |
| |||
![]() |
| |||
| ||||
![]() |
| |||
| ||||
|
このプロジェクトについて
はじめに:
現在の世界では、人々は自宅よりも職場で過ごす時間が長くなっています。したがって、人々が仕事中に家の状態を知ることができる家の監視システムの必要性があります。勤務時間中に「誰か」に自分の家について尋ねることができれば、さらに良いでしょう。これは、Amazon Alexaをアシスタントとして利用して、ユーザーに自宅に関する必要な情報を提供することで実現できます。
職場だけでなく、ユーザーはインターネット接続とAmazon Alexaデバイスがあれば、世界中のどこにいても家の状態を知ることができます。
このプロジェクトには次の機能が実装されています:
1)ファンやライトなどの家庭用デバイスを制御する
2)デバイスのステータスを通知します
3)家の気象条件(温度と湿度)を伝えます
4)必要に応じて、家の内部のスナップショットをGmail経由でユーザーに送信します。
5)-
の場合に通知を送信します*侵入者(写真も送信)
*火
*ゲスト(写真も送信)
プロジェクトに関連する手順:
ステップ1:ArduinoとESP8266のプログラミング
公式ウェブサイトからArduinoIDEをダウンロードします:https://www.arduino.cc/en/Main/Software
Arduino IDEを開き、ファイル->設定->追加のボードマネージャーURLタイプ-http://arduino.esp8266.com/stable/package_esp8266com_index.json
に移動します[ツール]-> [ボード]-> [ボードマネージャー]->に移動し、最後に見つかったesp8266パッケージをインストールします。
arduinoをプログラムするには USBケーブルをarduinoからコンピューターに接続し、ツール->ボードでArduino / GenuinoUNOを選択するだけです。また、ツールでCOMポートの権利を選択していることを確認してください(COMポート番号はデバイスマネージャーにあります)。必要なプログラムを作成し、コンパイルして、エラーがない場合は[アップロード]をクリックします。
ESP8266をプログラムするには 図に示すように接続します
<図>
<図>

USBをarduinoからコンピューターに接続します。 [ツール]-> [ボード]-> [汎用ESP8266]を選択し、右側のCOMポートも選択します。必要なプログラムを作成し、コンパイルして、エラーがない場合は[アップロード]をクリックします。 Arduino RSTをGNDに接続していることを確認してください(arduinoはESP8266のプログラマーのように機能します)。
このプロジェクトでは、最初にESP8266がプログラムされ、次に回路接続が削除されます。次に、「回路接続」という名前の図に示すように、回路が再接続されます。そして、arduinoは プログラム済み
ステップ2:thingspeak.comを構成する
thingspeak.comでアカウントを作成します。
Thingspeakのチャネルを利用して、デバイス制御情報を保存し、arduino / alexaにルーティングします。また、チャネルに温度と湿度の値を保存します。情報の保管場所のようなものです。
チャンネル->マイチャンネルに移動し、新しいチャンネルを作成します。チャンネルに名前と説明を付けます。
私たちのプロジェクトでは、8つのチャネルが必要です(より少ないチャネルを使用して作業を行うことができますが、プログラミング中は少し複雑になります)。また、thingspeakには、チャネルの更新中に時間の制約があります。特定のチャネルの連続更新の間には、10〜15秒のギャップが必要です。
値と意味を持つ8つのチャネルを以下に示します
チャネル名(value1-meaning、value2-meaningなど):
1)デバイス制御(0 -lightON、1- lightOff、2-ファンON、3-ファンオフ)
2)ライトステータス(0-ライトオフ、1-ライトオン)
3)ファンの状態(0-ファンオフ、1-ファンオン)
4)湿度(湿度の値)
5)温度(温度の値)
6)侵入者通知(1-侵入者アラート)
7)火災通知(1-火災警報)
8)ゲスト通知(1-ゲストアラート)
いずれかのチャネルをクリックすると、そのチャネルIDが表示され、[APIキー]タブにAPIキーを書き込むことができます。チャネル内の情報/値を取得するには、チャネルIDが必要です。チャネルに値を格納するには、書き込みキーが必要です。
チャネルを更新するためのhttpリクエストは次のとおりです:
https://api.thingspeak.com/update?api_key=<書き込みキー>&field1 =<値>
<書き込みキー>は、チャネルの対応する書き込みキーに置き換えられ、値は(デバイス制御または温度/湿度値の場合は0/1)になります
チャネルから値を読み取るためのhttpリクエストは次のとおりです:
https://api.thingspeak.com/channels/
ステップ3:プログラム
プログラムは3つの部分に分かれています:
A) Arduinoのプログラム :arduinoのプログラムはとてもシンプルです。 ESP8266からシリアルにデータを受信し、受信したデータに基づいてデバイスが制御されます。プログラムの詳細については、プログラム自体のコメントをご覧ください。
B) ESP8266のプログラム : ESP8266のプログラムには3つのことが含まれます
1)httpリクエストを使用して温度と湿度を更新する
client.print(String( "GET")+ "/ update?key =&field1 =" + humidity + "HTTP / 1.1 \ r \ n" + "Host:" + host + " \ r \ n "+"接続:閉じる\ r \ n \ r \ n "); //湿度を更新client.print(String( "GET")+ "/ update?key =&field1 =" + temperature + "HTTP / 1.1 \ r \ n" + "Host:" + host + "\ r \ n "+"接続:閉じる\ r \ n \ r \ n "); //温度を更新
<書き込みキー>は、湿度と温度のそれぞれについて、thingspeakチャネルにある対応する書き込みキーに置き換えられます。ホストはapi.thingspeak.comです。
https://github.com/adafruit/DHT-sensor-library
からdhtライブラリをダウンロードします。2)得られた値に基づいてthingspeakの対応するチャネルから読み取り、デバイスを制御します:
client.print(String( "GET")+ "/ channels / /field/field1/last.html HTTP / 1.1 \ r \ n" + "Host:" + host + " \ r \ n "+"接続:閉じる\ r \ n \ r \ n ");
ここで、
3)プッシュボックスを介して高温の場合にアラートを送信する
String host1 ="api.pushingbox.com"; client.print(String( "GET")+ "/ pushingbox?devid = HTTP / 1.1 \ r \ n" + "Host : "+ host1 +" \ r \ n "+"接続:close \ r \ n \ r \ n ");
ここで、
ステップ4:linkit smart7688デュオとウェブカメラの設定
私 nこのプロジェクトのウェブカメラとlinkitsmart 7688デュオは、必要な写真をキャプチャしてユーザーに送信するために使用されます。 arduinoカメラモジュールを使用してarduinoとインターフェースすることも、任意のIPカメラを使用することもできます。
linkit smart 7688のwifiボタンを20秒間押し続けて、ボードをリセットします。次に、wifi設定がリセットされた後、ワイヤレスネットワーク接続でそのアクセスポイント名を確認できるようになります。次に、コンピューターをそのネットワークに接続します。
接続後、ブラウザを開き、アドレスバーに192.168.100.1と入力します。ポータルが表示されます。
ポータルにログインするためのパスワードを設定します。
<図>
ログイン後、[ネットワーク]タブに移動し、[ステーションモード]を選択して(インターネットにアクセスするには(linkit smart 7688 duo)必要です)、Wi-Fiネットワークに接続し、[構成]と[再起動]を押します。
<図>
ボードを再起動すると、ローカルIPアドレスが割り当てられます。 IPツールまたはルーターポータルを使用してアドレスを確認します。私の場合は192.168.1.4でした。
次に、ブラウザのアドレスバーにローカルIPアドレスを入力します。コンピューターがlinkitsmartと同じネットワークに接続されていることを確認してください。再度ログインするように求められます。
Webカメラからのストリーミングを有効にするには、MJPGストリーマーを有効にする必要があります(mjpg-streamerは、1つ以上の入力プラグインから複数の出力プラグインにJPEGフレームをコピーするコマンドラインアプリケーションです)。ポータルでこれを行うには、右上のOpenWrtの場所に移動します。もう一度ログインする必要があります。
<図>
ログイン後、[サービス]タブに移動し、[MJPGストリーマーを有効にする]をオンにして、このサービスのポート番号を割り当てます。 4440を割り当てました。[保存して適用]をクリックします。
<図>
セットアップ後、OTGケーブルを介してWebカメラをlinkit smart 7688 duousbホストに接続できます。
ストリームを表示するには、ブラウザを開き、アドレスバーに<ローカルIPアドレス>:<ポート>と入力します。私の場合は192.168.1.4:4400
です <図>
スナップショットを撮るには、コマンド

現在、この画像はローカルで利用できますが、プッシュボックスサービスで利用できるようにする必要があります。これを実現するには、ポートフォワーディングを実行する必要があります。 ポートフォワーディングはルーターポータルで実行できます。プロセスIDはルーターごとに異なります。特定のルーターのポートフォワード方法を知るには、グーグルで検索してください。通常、NATサービスで利用できます。
ポートフォワードを使用すると、外部IPからこのポート(つまり、4440)にアクセスできます。外部IPは、グーグルで「whatsmyip」を結ぶことで見つけることができます。
このアドレスを入力する必要があります。つまり、http:// <外部IP>:
Linkit smart 7688 duoには情報を保存するためのSDカードスロットも付属しているため、画像をSDカードに保存することもできます。
これに関する詳細については、https://docs.labs.mediatek.com/resource/linkit-smart-7688/en/get-started/get-started-with-the-linkit-smart-7688-duoを参照してください。 -開発ボード/
ステップ5:PushingBoxの構成
pushboxは、プロジェクト内のさまざまなアラートに関する通知をGmailに送信するために使用されます。
Googleアカウントを使用してpushboxにサインインします:https://www.pushingbox.com/
[マイサービス]-> [サービスの追加]に移動します。 Gmail、Twitter、Androidのプッシュ通知など、選択できるサービスはたくさんあります...
Gmailを選択し(写真を添付ファイルとして送信する必要があるため)、アラートの送信先となるユーザーの適切なGmail名の構成とGmailIDを入力します。
私のシナリオに移動して、新しいシナリオを作成します。シナリオに名前を付けます(例:ALERT)以前に作成したサービスを追加します。
<図>
メールの適切な件名と本文を記入し、URLを入力して、写真を添付するためのWebカメラのスクリーンショットを撮ります。アラートごとに異なるシナリオを作成します。
プッシュボックスシナリオを実行するためのAPIは次のとおりです。http://api.pushingbox.com/pushingbox?devid =
ステップ6:バックエンドレスを使用してAlexaスキルを作成する
バックエンドレスは、alexaスキルを作成するために使用されます。これは単純なドラッグアンドドロッププログラミングです。 バックエンドレスAPIからアクセスできるalexaスキル(または任意のプログラム)を作成するために使用されます。
バックエンドレスでアカウントを作成します:https://backendless.com/
- バックエンドレスアカウントでアカウントにログインします。 [アプリの作成]をクリックして、アプリに名前を付けます/
- 左側のアイコンバーにあるビジネスロジックアイコンをクリックします。 APIサービス画面が表示されます。
- 「+」アイコンをクリックして、新しいサービスを作成します。 「新しいサービス」ポップアップで「CODELESS」を選択してください。サービス名に「AlexaService」と入力します。 [保存]ボタンをクリックします:

- バックエンドレスはAPIサービスを作成し、サービスのメソッドを作成するように求めます。これは、Alexaからのリクエストを処理するメソッドになります。メソッド名に「handleRequest」と入力します。必ずREST操作にPOSTを選択し、以下に示すように「req」という名前で引数を宣言し、「AnyObject」と入力してください。

バックエンドレスは、メソッドのコードレスロジックのプレースホルダーを作成します。 [編集]ボタンをクリックして、コードレスロジックデザイナへの切り替えを開始します。
作成した関数プレースホルダーブロックで、「doSomething」と表示されている領域をクリックし、「sendAlexaResponse」に変更します。この関数は、alexaに引数として渡すことができる何かを言わせるために使用されます。 [保存]ボタンをクリックして、関数を保存します:
<図>
「機能」という単語のすぐ横にある紫色のブロックにある歯車のアイコンをクリックします。次の画像に示すように、入力ブロックをドラッグして2つの引数を追加します。引数の名前を「whatToSay」および「waitForResponse」として割り当てます。引数を追加すると、コンテキストブロック領域に引数値を表すブロックが自動的に入力されることに注意してください。
<図>
次の画像のように、関数のロジックを変更します。 「オブジェクトの作成」ブロックの場合、歯車アイコンを使用してオブジェクトプロパティの名前を変更します。 [保存]ボタンをクリックして、作業内容を保存することを忘れないでください。
<図>
カスタム関数が作成されたので、AlexaServiceサービスのhandleRequestメソッドに戻ります。左側のツールバーの[カスタム関数]カテゴリをクリックし、sendAlexaResponseブロックをドラッグして、サービスメソッドのリターンコネクタに接続します。
<図>
上記の手順は、次のWebサイトにもあります:https://backendless.com/developing-alexa-skill-without-writing-any-code-part1-codeless-in-backendless-mbaas/
https://backendless.com/developing-an-alexa-skill-without-writing-any-code-part2-slots/
[ブラウザ]セクションの[関数]の下にある[新規追加]ノードをクリックします。作成された関数プレースホルダーブロックで、[doSomething]と表示されている領域をクリックし、[getIntentName]に変更します
<図>
関数が次のようになるようにブロックを変更します。
<図>
<図>

これは、サンプルの発話に基づいてインテント名を取得します。ブラウザセクションでAPIサービス-> <アプリ名>->リクエストの処理に戻ります。変数とロジックはシステムセクションから作成されます。次の変数を作成します:
<図>
次に、変数をリクエストするためのインテント名を保存します。そして、意図と比較します。たとえば、リクエストが「introduction」の場合、応答変数は「hi!I can control .......」に設定され、この応答はついにalexaによって読み上げられます。
以下に示すようにブロックを変更します:
<図>
リクエストがLightsOnインテントの場合、http getリクエストを使用してthingspeakチャネルを「0」に更新すると同時に、デバイスのステータスを更新します(オン/オフに応じて1/0)。 LightsOff、FanOn、FanOffについても同じことが繰り返されます。
<図>
天気については、温度と湿度のチャネルから読み取り、結果を応答変数に保存します。チャネルは値のみを提供するため、応答を意味のあるものにするためにテキストを追加します:
<図>
リビングルームのスナップショットについては、プッシュボックスシナリオを実行します:
<図>
デバイスのステータスについては、thingspeakのステータスチャネルから情報を読み取ります:
<図>
アラートチャネル(火災、侵入者、ゲスト)から読み取った通知とアラートの場合:
<図>
通知フィールドから取得した値に基づいて、対応するアラートメッセージがrespond0変数に格納されます。通知がない場合、通知メッセージは保存されません。
<図>
通知が読み取られると、通知チャネルで「0」が更新され、alexaが同じ通知を再度読み取らないようになります。そして、ついにリクエストに基づいて、respond0 / respond変数が読み上げられます。
<図>
PS:バックエンドレスで必要なモデルを作成したら、コードレス画面の右上にある[モデルのデプロイ]をクリックしてモデルをデプロイします。
ステップ7:Amazon Developer ConsoleでAlexaスキルを設定する:
アマゾン開発者コンソールに移動し、アマゾンアカウントを使用してサインインします。 https://developer.amazon.com/
開発者コンソールに移動し、[ALEXA]タブをクリックします。アレクサスキルキットをクリックして開始します。
<図>
カスタムスキルタイプを作成し、スキルに名前と呼び出し名を付けます。
それぞれの意図とサンプルの発話は、以下のコードに示されています。
{"languageModel":{"intents":[{"name": "AMAZON.CancelIntent"、 "samples":[]}、{"name": "AMAZON.HelpIntent"、 "samples" :[]}、{"name": "AMAZON.StopIntent"、 "samples":[]}、{"name": "Camera"、 "samples":["リビングルームのスナップショットを送ってください"、 "家のスナップショットを送ってください」、「居間の写真を送ってください」、「家の写真を送ってください」]、「スロット」:[]}、{「名前」:「ファンオフ」、「サンプル」 ":["ファンをオフにする "、"ファンをオフにする "、"ファンをオフにする "、"ファンをオフにする "]、"スロット ":[]}、{"名前 ":"ファンオン "、"サンプル " :["ファンをオンにする"、 "ファンをオンにする"、 "ファンをオンにする"、 "ファンをオンにする"]、 "スロット":[]}、{"名前": "はじめに"、 "サンプル": [「何ができるか」、「何ができるか」 u do "、"あなたは私のために何ができますか "]、"スロット ":[]}、{"名前 ":" LightsOff "、"サンプル ":["ライトをオフにする "、"ライトをオフにする "、"ターンライトをオフにする "、"ライトをオフにする "]、"スロット ":[]}、{"名前 ":" LightsOn "、"サンプル ":["ライトをオンにする "、"ライトをオンにする "、"オンにするライト "、"ライトをオンにする "]、"スロット ":[]}、{"名前 ":"通知 "、"サンプル ":["通知は何ですか "、"通知はあります "、"更新があります "、"通知を読み上げます "]、"スロット ":[]}、{"名前 ":"ステータス "、"サンプル ":["デバイスのステータスは何ですか "、"私のステータスは何ですかデバイス "]、"スロット ":[]}、{"名前 ":"天気 "、"サンプル ":["私の家の気象条件は何ですか "、"雨は何ですか彼女の私の家」、「天気は何ですか」、「私の家の温度は何ですか」、「温度は何ですか」]、「スロット」:[]}]、「invocationName」:「私の家」}}
[構成]タブで、サービスエンドポイントタイプとして[HTTPS]を選択し、デフォルトのURLにバックエンドレスのAPIURLを入力します。
<図>
<図>

SSL証明書のデフォルトのエンドポイントとして、証明書の2番目のオプションを選択します。テストシミュレーターを使用してスキルをテストすることもできます。
テストが完了したら、必要な公開情報を使用してスキルを公開できます。
ステップ8:最終セットアップと終了!
以下のように回路を接続してください
<図>
<図>

時々 ESP8266 します 誤動作 なぜなら の 不十分 現在。 だから しかし ない 言及 で 回路、 それ は 別の3.3vからESP8266に電力を供給することをお勧めします ソース。 もし あなた あります 使用 a パワー 銀行 3.3v電圧レギュレータを使用して電圧を5vから3.3vに下げるようにしてください。
プログラムをESP8266とarduinoにアップロードします。電球への接続を示しましたが、同じことがファンやその他のデバイスにも拡張できます。
最後に、amazonechoまたはechosim.ioを使用してスキルをテストします。
あなた 必須 アクティブ化 スキル 使用 呼び出し 名前 ( as は 私の ケース -「私の ホーム ")。 時々 それ しません 仕事 if それ は 使用済み なし 呼び出し 名前 as 私 持っている 表示 カップル の 回 で 私の ビデオ。
チュートリアルを楽しんでいただけたでしょうか。
ありがとう!
コード
- Smart_bell_ESP8266.ino
- Home_monitor_arduino.ino
- Home_Monitor_ESP8266.ino
Smart_bell_ESP8266.ino Arduino
侵入者とゲストに関するアラートを取得するためのESP8266のコード/ **このスケッチはスマートベルとホームセキュリティの実装です** /#include#include // ----- ------------------------------------- //変数// -------- ---------------------------------- int intruder =0、guest =2; //侵入者アラートとしてピン0、ゲストアラートとしてピン2 const char * ssid ="SSID"; // WIFIconstのSSIDchar * password ="password"; // Wifiのパスワード// ------------------------------------------- -const char * host ="api.thingspeak.com"; void setup(){Serial.begin(115200); delay(10); // WiFiネットワークに接続することから始めますSerial.println(); Serial.println(); Serial.print( "接続中"); Serial.println(ssid); / * ESP8266を明示的にWiFiクライアントに設定します。そうしないと、デフォルトでクライアントとアクセスポイントの両方として機能しようとし、WiFiネットワーク上の他のWiFiデバイスでネットワークの問題が発生する可能性があります。 * / WiFi.mode(WIFI_STA); WiFi.begin(ssid、password); while(WiFi.status()!=WL_CONNECTED){delay(500); Serial.print( "。"); } Serial.println( ""); Serial.println( "WiFi接続"); Serial.println( "IPアドレス:"); Serial.println(WiFi.localIP());} int value =0; int x、y =0、z、k =0; void loop(){delay(1000); ++値; Serial.print( "接続中"); Serial.println(host); // WiFiClientクラスを使用してTCP接続を作成しますWiFiClientclient; const int httpPort =80; if(!client.connect(host、httpPort)){Serial.println( "接続に失敗しました");戻る; } Serial.print( "リクエストURL:"); // ============================================================================================================//侵入者アラート// ============================================================================================================x =digitalRead(intruder); // Serial.println(x); if(x ==0){y =0; } if(x ==1 &&y ==0){Serial.println( "Sending Alert Pls Wait ....."); delay(1000);文字列host1 ="api.pushingbox.com"; client.print(String( "GET")+ "/ pushingbox?devid = HTTP / 1.1 \ r \ n" + "ホスト:" + host1 + "\ r \ n" + "接続:close \ r \ n \ r \ n "); //プッシュボックスの実行apiclient.print(String( "GET")+ "/ update?api_key = &field1 =1 HTTP / 1.1 \ r \ n" + "Host:" + host + "\ r \ n "+"接続:閉じる\ r \ n \ r \ n "); //侵入者通知delay(1000);を更新しますy =1; } // ============================================================================================================//侵入者アラートの終了// ============================================================================================================// ============================================================================================================//ゲストアラート// ============================================================================================================長いt1; z =digitalRead(guest); if(z ==0 &&(millis()> =t1 + 300000))//複数のドアベルを押すことによる複数のアラート送信を回避するために5分間待機します{k =0; } if(x ==1 &&k ==0){t1 =millis(); //現在のタイムスタンプをt1に保存Serial.println( "Sending Alert Pls Wait ....."); delay(1000); //アラートの送信とスイッチのデバウンスの遅延Stringhost1 ="api.pushingbox.com"; client.print(String( "GET")+ "/ pushingbox?devid = HTTP / 1.1 \ r \ n" + "ホスト:" + host1 + "\ r \ n" + "接続:close \ r \ n \ r \ n "); //プッシュボックスの実行apiclient.print(String( "GET")+ "/ update?api_key = &field1 =1 HTTP / 1.1 \ r \ n" + "Host:" + host + "\ r \ n "+"接続:閉じる\ r \ n \ r \ n "); //ゲスト通知delay(1000);を更新しますk =1; } // ============================================================================================================//ゲストアラートの終了// ============================================================================================================unsigned long timeout =millis(); while(client.available()==0){if(millis()-timeout> 5000){Serial.println( ">>> Client Timeout!"); client.stop();戻る; }} //Serial.println("closeing connection ");}
Home_monitor_arduino.ino Arduino
Arduinoがアプライアンスを制御するためのコード//ホームオートメーションの実装におけるこのスケッチ#include//シリアルライブラリをインポートする#include // --------- -------------------------------- //ピンの定義// ------------ -----------------------------#define Light 2 //ピン2で制御ライト#defineファン3 //ピン3で制御ファン// ------------------------------------------ //変数// ------------------------------------------ char e; int p =0、 q =0; //これらの変数は、すでにオン/オフになっているデバイスのオン/オフの切り替えを防ぎますSoftwareSerial home_monitor(10、11); // RX、TXchar control_data; // the data transmitted over Bluetoothvoid setup() { // put your setup code here, to run once:home_monitor.begin(115200); Serial.begin(9600); pinMode(13,OUTPUT);}void loop() { // put your main code here, to run repeatedly:if (home_monitor.available()){ control_data=home_monitor.read(); // getting control information from ESP8266 serially e=control_data; Serial.print(control_data); //============================================================================================================// Device Control //============================================================================================================// Performing required operations based on the value of channel //------------------------------------------------------------- // LIGHT //------------------------------------------------------------- if(e=='0'&&p==0) //Light ON { digitalWrite(Light,LOW); p=1; } if(e=='1'&&p==1) //Light off { digitalWrite(Light,HIGH); p=0; } //------------------------------------------------------------- // Heater //------------------------------------------------------------- if(e=='2'&&q==0) { digitalWrite(fan,HIGH); q=1; } if(e=='3'&&q==1) { digitalWrite(fan,LOW); q=0; }}}
Home_Monitor_ESP8266.inoArduino
Code For ESP8266 to update humidity and temperature in thingspeak and also retrieve control information from thingspeak/* * This sketch updates wheather information in thingspeak.com and also retrieve control information from thingspeak.com * It send the control information to arduino serially */#include#include #include "DHT.h" // including the library of DHT11 temperature and humidity sensor#define DHTTYPE DHT11 // DHT 11#define dht_dpin 2 // define GPIO2 as data input DHT dht(dht_dpin, DHTTYPE); //------------------------------------------// variables//------------------------------------------//dht DHT;char c,e; // stores the bytes coming from the serverfloat temp,h; //stores float value of temp and humididtyString humidity,temperature,line; //stores string value of temp and humididtyint co=0; //control the sending of Alertconst char* ssid ="SSID"; //your SSID of WIFIconst char* password ="password"; // password of Wifi//--------------------------------------------const char* host ="api.thingspeak.com";void setup() { dht.begin(); Serial.begin(115200); delay(10); // We start by connecting to a WiFi network Serial.println(); Serial.println(); Serial.print( "接続中"); Serial.println(ssid); /* Explicitly set the ESP8266 to be a WiFi-client, otherwise, it by default, would try to act as both a client and an access-point and could cause network-issues with your other WiFi-devices on your WiFi-network. */ WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); while (WiFi.status() !=WL_CONNECTED) { delay(500); Serial.print( "。"); } Serial.println( ""); Serial.println("WiFi connected"); Serial.println("IP address:"); Serial.println(WiFi.localIP());}int value =0;void loop() { delay(1000); ++value; Serial.print("connecting to "); Serial.println(host); // Use WiFiClient class to create TCP connections WiFiClient client; const int httpPort =80; if (!client.connect(host, httpPort)) { Serial.println("connection failed");戻る; } Serial.print("Requesting URL:"); //============================================================================================================// Mini Weather Station //============================================================================================================h =dht.readHumidity(); //reads humidity and temperature temp =dht.readTemperature(); if(temp<50.0) { co=0; } if(temp> =50.0&&co==0) // send alert if temperature is above 50 degrees and co is used to avoid multiple alert sending { Serial.println("Sending Alert please wait......."); delay(1000); String host1="api.pushingbox.com"; client.print(String("GET ") + "/pushingbox?devid= HTTP/1.1\r\n" + "Host:" + host1 + "\r\n" + "Connection:close\r\n\r\n"); //pushingbox api to send alert delay(1000); client.print(String("GET ") + "/update?key= &field1=1 HTTP/1.1\r\n" + "Host:" + host + "\r\n" + "Connection:close\r\n\r\n"); //updating thingspeak fire alert channel co=1; } humidity=String(h); temperature=String(temp); Serial.println(h); Serial.println(temp); client.print(String("GET ") + "/update?key= &field1="+humidity+" HTTP/1.1\r\n" + "Host:" + host + "\r\n" + "Connection:close\r\n\r\n"); //update humidity in thingspeak channel client.print(String("GET ") + "/update?key= &field1="+temperature+" HTTP/1.1\r\n" + "Host:" + host + "\r\n" + "Connection:close\r\n\r\n"); ////update temperature in thingspeak channel //============================================================================================================// End of Weather Station//============================================================================================================//============================================================================================================// Sending Control info to arduino Serially//============================================================================================================// This will send the request to the server client.print(String("GET ") + "/channels/ /field/field1/last.html HTTP/1.1\r\n" + "Host:" + host + "\r\n" + "Connection:close\r\n\r\n"); // get information about device control unsigned long timeout =millis(); while (client.available() ==0) { if (millis() - timeout> 5000) { Serial.println(">>> Client Timeout !"); client.stop();戻る; } } // Read all the lines of the reply from server and print them to Serial while(client.available()){ String line =client.readStringUntil('\r'); } Serial.print(line); // received by arduino serially //Serial.println("closing connection");}
回路図


製造プロセス