Firebaseを使用して、あるArduinoから別のArduinoにセンサーデータを送信します
コンポーネントと消耗品
> |
| × | 2 | |||
| × | 2 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 1 |
アプリとオンラインサービス
> |
| |||
|
このプロジェクトについて
概要:
このクールなIoTプロジェクトでは、1つのArduinoUNOに接続された湿度および温度センサーからデータを読み取ります。 esp8266モジュールを使用してこのデータをFirebaseに送信し、esp8266を使用して別のArduino UNOにデータをダウンロードして、最終的にLCDに表示します。
ステップ1:ArduinoUNOとESP8266がどのように連携するかを理解します。
それらは2つの異なるボードとして機能し、異なるコードを持っていることに注意してください。 ArduinoUNOを使用してESP8266と通信します。 Arduinoをインターネットに接続しておらず、ESP8266をインターネットに接続していることを理解してください。後でシリアル端末を介して2つのボード間でデータを送信できます。
ステップ2:1つのArduinoをLCDに接続します
この部分では、私たちが行ったようにI2C通信または通常の通信のいずれかを使用できます。 I2Cは常に優れています。そこで提示されているサンプルコードを試してください。
20x4LCDを使用したことに注意してください。必要に応じてコードを変更してください。
ステップ3:他のArduinoをDHT11センサーに接続する
このチュートリアルに従って、動作させることができます。テンプレートコードを試すことを忘れないでください。
ステップ4:ESP8266をFirebaseに接続して、データを送受信する
このチュートリアルでは、彼らはそれを設定する方法を非常によく説明しています。
このステップバイステップのビデオに従ってください。 NodeMCUをESP8266に接続しますが、ArduinoUNOにも同じ接続を使用できます。
アドバイスとしては、混乱しないように、Googleスプレッドシートを作成するか、ESP8266に使用している色で優れていることをお勧めします。
機能しない場合は、最後にエラー部分に移動します。また 、チュートリアルのコメントを確認してください。
ステップ5:シリアル通信がどのように機能するかを理解します。
このチュートリアルでは、他のセンサーデータをFirebaseに送信します。これを読んで、どのように機能するかを理解したり、試してみたりすることができます。
必要な文字列のみをシリアルモニターに印刷する必要があります。他の印刷行は通信を中断します。
ステップ6:コードをアップロードします。
データのアップロードと受信の方法がわかったので、実際のコードをArduinosとArduinosに接続されたesp8266にアップロードできます。コードのアップロード方法については、手順4を参照してください。
アップロードする前にコードを読み、必要な変更を加えてください。
一般的なエラーとアドバイス:
ワイヤーを外す前に、必ずARDUINOケーブルを外してください。
コードがESP8266にアップロードされない:
- esp8266汎用ボードを選択します。
- それでもコードがアップロードされず、エラーが発生する場合は、これを行ってください。
- それでも機能しない場合は、プラグを抜いて再接続し、アップロードしてから、前の解決策を再試行してください。
コードがArduinoUNOにアップロードされない:
- このドキュメントのステップ7で、コードをArduinoUNOにアップロードする方法を注意深くお読みください。
- GNDからGPIO-0(IO0)を取り出し、Unoのグラウンド/ GNDピンからArduinoUnoRESETピンを取り出します。
- ESP8266 RXピンをUNOのRXピンから削除し、ESP8266TXピンをUNOのTXピンから削除します。
- ピンを再確認し、ArduinoUNOボードを選択します。
両方のコードをアップロードした後、機能しない:
- ESP8266 RXピンをUnoのTXピンに接続し、ESP8266TXピンをUnoのRXピンに接続します。はい、反対に接続する必要があります。理由を聞かないでください。やってください。
- ESP8266 GPIO-0(IO0)をGNDから切断します。
- ピンを再確認します
- シリアルモニターでArduinoとESP8266の間で共有したい値のみを印刷していることを確認してください。 「接続済み」などを印刷すると、コードは機能しません。
注: 動作させてLCDに奇妙な印刷が表示された場合は、数秒後に修正されるはずです あり 初期化 機能。これは、シリアル通信の遅延が原因で発生する可能性があります。
コード
- lcd_arduino.ino
- lcd_esp8266.ino
- Sensor_arduino.ino
- Sensor_esp8266.ino
lcd_arduino.ino Arduino
Arduino_LCD_Code#include#include //必要なLCDインターフェイスピンをLiquidCrystal_I2Clcd(0x3F、20、4);に接続されているarduinoピン番号に関連付けてライブラリを初期化します。文字列値、sensor_data; void setup(){Serial.begin(9600); delay(2000); // LCDの列と行の数を設定します:lcd.begin(20、4); //メッセージをLCDに出力します。 lcd.init(); // lcdを初期化しますlcd.backlight(); delay(2000); lcd.setCursor(0、0); lcd.print( "温度:"); delay(10); lcd.setCursor(18、0); lcd.print( "C"); delay(10); lcd.setCursor(0、1); lcd.print( "湿度:"); delay(10); lcd.setCursor(15、1); lcd.print( "%"); delay(2000);} void loop(){bool Sr =false; while(Serial.available()){//シリアルからセンサーデータを取得し、sensor_dataに配置sensor_data =Serial.readString(); Sr =true; } delay(1000); if(Sr ==true){値=センサーデータ; //コンマで分割して値変数からセンサーデータを取得し、変数に入力しますStringtemperature =values.substring(0、5);文字列の湿度=values.substring(6、11); initialize(); lcd.setCursor(13、0); delay(10); lcd.print(temperature); //カーソルを印刷温度delay(10);に設定します。 lcd.setCursor(10、1); delay(10); lcd.print(湿度); } delay(2000);} void initialize(){lcd.clear(); lcd.setCursor(0、0); lcd.print( "温度:"); delay(10); lcd.setCursor(18、0); lcd.print( "C"); delay(10); lcd.setCursor(0、1); lcd.print( "湿度:"); delay(10); lcd.setCursor(15、1); lcd.print( "%");}
lcd_esp8266.ino Arduino
ESP8266_LCD_Code#include#include #define FIREBASE_HOST "YOUR_FIREBASE_LINK" #define FIREBASE_AUTH "YOUR_FIREBASE_TOKEN" #define WIFI_SSID "YOUR_WIFI_SSID" #define WIFI_PASSWORD Serial.begin(9600); // Wi-Fiに接続します。 WiFi.begin(WIFI_SSID、WIFI_PASSWORD); while(WiFi.status()!=WL_CONNECTED){delay(500); } Firebase.begin(FIREBASE_HOST、FIREBASE_AUTH);} void loop(){文字列温度=Firebase.getString( "temperature");文字列の湿度=Firebase.getString( "humidity");温度=temperature.substring(0、5);湿度=湿度.substring(0、5);値=(温度+湿度); delay(10); // Serial.flush();を出力する前に常にフラッシュします。 delay(1000); Serial.print(values); delay(1000);}
Sensor_arduino.ino Arduino
Arduino_Sensor_Code#include#include #define dht_apin A0dht DHT; String values; void setup(){Serial.begin(9600); delay(5000); //システムの起動を遅らせる} void loop(){DHT.read11(dht_apin);値=(String(DHT.temperature)+ '、' + String(DHT.humidity)); delay(10); Serial.flush(); delay(1000); //センサーデータをシリアルに送信しました(センサーデータをESP8266に送信しました)Serial.print(values); delay(2000);}
Sensor_esp8266.ino Arduino
Sensor_ESP8266_Code#include#include #define FIREBASE_HOST "YOUR_FIREBASE_LINK" #define FIREBASE_AUTH "YOUR_FIREBASE_TOKEN" #define WIFI_SSID "YOUR_WIFI_SSID" #define WIFI_PASSWORD ){delay(1000); // Wi-Fiに接続します。 WiFi.begin(WIFI_SSID、WIFI_PASSWORD); while(WiFi.status()!=WL_CONNECTED){delay(500); } Serial.begin(9600); Firebase.begin(FIREBASE_HOST、FIREBASE_AUTH);} void loop(){bool Sr =false; while(Serial.available()){//シリアルからセンサーデータを取得し、sensor_dataに配置sensor_data =Serial.readString(); Sr =true; } delay(1000); if(Sr ==true){値=センサーデータ; //値からカンマインデックスを取得変数intfristCommaIndex =values.indexOf( '、'); int secondCommaIndex =values.indexOf( '、'、fristCommaIndex + 1); //コンマで分割して値変数からセンサーデータを取得し、変数に入力しますStringtemperature =values.substring(0、fristCommaIndex);文字列の湿度=values.substring(fristCommaIndex + 1、secondCommaIndex); //超音波センサーデータを文字列としてFirebaseに保存しますFirebase.setString( "temperature"、temperature); delay(10); // IRセンサー1のデータを文字列としてFirebaseに保存しますFirebase.setString( "humidity"、humidity); delay(10); //以前のセンサーデータを文字列としてfirebasedelay(1000);に保存しますif(Firebase.failed()){return; }}}
製造プロセス
- InitialStateを使用したppDAQCPiプレートからのセンサーデータのストリーミング
- Arduinoを使用したソーラーパネルのリアルタイムデータ取得
- ArduinoUnoを使用した人間検出ロボティクスシステム
- Arduinoを使用したDIY赤外線ハートビートセンサー
- arduinoを使用したソナーと処理IDEでの表示
- BoltとArduinoを使用したLEDの明るさの制御
- ArduinoでMAX30100ウェアラブルパルスセンサーを使用する
- ArduinoでのYL-39 + YL-69土壌湿度センサーの使用
- PHPを使用してArduinoと通信するWebサイトを作成する方法
- MPU6050I2Cセンサーから加速度を角度に変換
- ある CMMS から別の CMMS へ:ソフトウェア データ移行のガイドライン