工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

SMS温度返信

コンポーネントと消耗品

>
Arduino Mega 2560
× 1
DHT22温度センサー
× 1
SIM800L
× 1
抵抗10kオーム
× 1
ブレッドボード(汎用)
× 1
ジャンパー線(汎用)
× 1

このプロジェクトについて

こんにちは。このプロジェクトは、はるかに大きなプロジェクトの一部です。この部分で多くの問題が発生し、最終的に解決策を見つけたので、コミュニティと共有して、プロジェクトで役立つことを願っています。

プロジェクトの説明

SMSをArduinoに送信して、自宅の気温を取得します。

ソフトウェア

SIM800Lモジュールには、「Seeeduino_GPRS-master」ライブラリを使用しました。 MEGAで動作できるようにするには、「sim800.h」ライブラリの次の行を変更する必要がありました。

  #define SIM800_TX_PIN 8#define SIM800_RX_PIN 7  

... TX_PIN10およびRX_PIN11に。ライブラリを「SoftwareSerial」からメガシリアルポートの1つ、つまりSerial3に変更するのは難しすぎたため、簡単に解決できました。

問題

基本的に、私のコードは、「DHT.h」と「Seeeduino_GPRS-master」の2つのライブラリからサンプルをカットアンドペーストします。私が抱えていた問題は、「gprs.h」の例では、事前に定義されたメッセージを引用符で囲む方法しか示されていないことでした。温度センサーから可変浮動小数点値を送信する方法がわかりませんでした。これは、私が試した他のライブラリ「GPRS_SIM900-master」と「SIM800L-master」にも当てはまりました。

問題を解決するためにWEBで例を検索するのに何週間も費やしましたが、何も見つかりませんでした。同じテーマのフォーラム投稿を見つけました。答えが得られなかった貧しい失われた魂のために、この投稿を見つけていただければ幸いです。

答え

float値をStringに変換してから、StringをChar配列に変換します-簡単です!

コードスニペット

  MyString =String(temp、0); // floatをStringMyStringに変換=(MyString + "Degrees C"); //文字列をcharに変換開始ここから開始//長さ(ヌルターミネータに1文字追加)int str_len =MyString.length()+ 1; //文字配列(バッファ)を準備しますchar char_array [str_len]; // MyString.toCharArray(char_array、str_len); //文字列をcharに変換しますendheregprs.sendSMS( "04 +++++++ + "、char_array); //電話番号とテキストを定義します。 

配線

simモジュールに電力を供給するためにULTRAFIRE18650バッテリーを使用しました。後で、回路に電圧レギュレータを追加します。このチュートリアルを参照してください。

参考資料

  • http://www.ayomaonline.com/programming/quickstart-sim800-sim800l-with-arduino/
  • https://www.sparkfun.com/datasheets/Sensors/Temperature/DHT22.pdf

ライブラリ

  • https://github.com/Seeed-Studio/Seeeduino_GPRS
  • https://github.com/adafruit/DHT-sensor-library

コード

  • DHT_SIMPosting.ino
DHT_SIMPosting.ino Arduino
SMSの送信「InTemp」は温度とArduinoの応答を度Cで要求します。
 //さまざまなDHT湿度/温度センサーのテストスケッチの例// ladyada、public domain#include "DHT.h" #define DHTPIN2 //接続しているデジタルピン#defineDHTTYPE DHT22 // DHT 22(AM2302)、AM2321 //#define DHTTYPE DHT21 // DHT 21(AM2301)//センサーのピン1(左側)を+ 5V //センサーのピン2をDHTPINに接続します//センサーのピン4(右側)をGROUNDに接続します// 10K抵抗をピン2(データ)からピン1(電源)に接続しますセンサー// DHTセンサーを初期化します。DHTdht(DHTPIN、DHTTYPE); #include  #include  #define TIMEOUT 5000GPRS gprs; bool ITemp =false; float temp; String MyString; #define LED_PIN 13bool ledStatus; // SIM800charからのシリアル出力の最後の行を保持する変数currentLine [500] =""; int currentLineIndex =0; //メッセージ通知が見つかった場合はtrueに設定され、セリアの次の行l出力は実際のSMSメッセージですcontentboolnextLineIsMessage =false; void Reply()//関数はここから始まります{Serial.println( "GPRS-SMSテストを送信..."); gprs.preInit(); delay(1000); while(0!=gprs.init()){delay(1000); Serial.print( "初期エラー\ r \ n"); } Serial.println( "初期化に成功し、SMSメッセージの送信を開始します..."); if(ITemp ==true){float t =dht.readTemperature(); temp =t; ITemp =false; } MyString =String(temp、0); // floatをStringに変換しますMyString =(MyString + "Degrees C"); //文字列をcharに変換しますここから始まります//長さ(ヌルターミネータに1文字余分に)int str_len =MyString.length()+ 1; //文字配列(バッファ)を準備しますchar char_array [str_len]; // MyString.toCharArray(char_array、str_len);にコピーします//文字列をcharに変換しますここで終了gprs.sendSMS( "04 ++++++++"、char_array); //電話番号とテキストを定義します//関数はここで終了します} void setup(){Serial.begin(9600); Serial.println( "DHTxxテスト!"); dht.begin(); gprs.preInit(); delay(1000); while(0!=gprs.init()){delay(1000); Serial.print( "初期エラー\ r \ n"); //後でNextionHMIホームページにSIMエラーを表示} // SMSモードをASCIIに設定if(0!=gprs.sendCmdAndWaitForResp( "AT + CMGF =1 \ r \ n"、 "OK"、TIMEOUT)){ERROR( "エラー:CNMI");戻る; } //新しいSMSメッセージ表示のリッスンを開始if(0!=gprs.sendCmdAndWaitForResp( "AT + CNMI =1,2,0,0,0 \ r \ n"、 "OK"、TIMEOUT)){ERROR( "エラー:CNMI ");戻る; } Serial.println( "Init success");} void loop(){//測定の合間に数秒待ちます。 delay(2000); //温度または湿度の読み取りには約250ミリ秒かかります! //センサーの読み取り値も最大2秒古い場合があります '古い'(非常に遅いセンサー)float h =dht.readHumidity(); //温度を摂氏(デフォルト)として読み取りますfloat t =dht.readTemperature(); Serial.print( "湿度:"); Serial.print(h); Serial.println( "%\ t"); Serial.print( "温度:"); Serial.print(t); Serial.println( "* C"); SIM();} void SIM(){//現在のステータスをLEDピンに書き込むdigitalWrite(LED_PIN、ledStatus); Serial.println( "SMSを探しています"); // SIM800からのシリアル出力がある場合if(gprs.serialSIM800.available()){char lastCharRead =gprs.serialSIM800.read(); //シリアル出力から\ rまたは\ n(行の終わりを示す)に達するまで各文字を読み取りますif(lastCharRead =='\ r' || lastCharRead =='\ n'){String lastLine =String(currentLine); //最後の行が+ CMTを読み取った場合、新しいSMSメッセージ表示が受信されました。 //したがって、次の行はメッセージの内容です。 if(lastLine.startsWith( "+ CMT:")){Serial.println(lastLine); nextLineIsMessage =true; } else if(lastLine.length()> 0){if(nextLineIsMessage){Serial.println(lastLine); //メッセージコンテンツを読み取り、SMSコンテンツに従ってステータスを設定しますif(lastLine.indexOf( "InTemp")> =0){Serial.println( "InTemp"); ITemp =true;返事 (); // ledStatus =1; // Serial.println( "Turn ON the Light"); //} else if(lastLine.indexOf( "LED OFF")> =0){// ledStatus =0; // Serial.println( "Turn OFF the Light"); } nextLineIsMessage =false; }} //読み取りの次の行のchar配列をクリアしますfor(int i =0; i  

回路図


製造プロセス

  1. 温度制御ファン
  2. RaspberryPi温度ロガー
  3. DS18B20で温度を読み取る|ラズベリーパイ2
  4. ラズベリーパイの温度監視
  5. RASPBERRYPIによる温度測定
  6. ラズベリーパイで温度を監視する
  7. IoT 101プロジェクト:RaspberryPiからのストリーム温度
  8. 研究所の「気象観測所」
  9. ラズベリーパイ温度センサー
  10. ローバー
  11. AuGe12