気象ステーションArduino
プロセス全体を一度にカバーするのは難しいため、Arduino気象ステーションの作成のすべての側面を説明する詳細な記事を書くことにしました。 気象観測所の私のバージョンは、そのデータがコンピューターに保存されるという点で便利です。
必要なもの- Wifiルーターを使用して構築されたローカルネットワーク
- コンピューター
- Arduino UNO(中国のレプリカを使用しました。)
- Arduinoに接続するためのUSBケーブル。
- 気圧計BME280 5V I2C(温度、湿度、圧力センサー)
- ドライヤー付きはんだ付けステーション
- はんだ0.7 mm
- フラックス。
- Wi-FiモジュールESP8266バージョンESP-01
- ブレッドボード用の4本のケーブルママからパパ。
- ブレッドボード用のオスとメスの4本のケーブル
- ブレッドボード用に長さ50 cmのケーブル4本。
- 長さ10 cmの細い熱収縮チューブ8本。
- 「ブレッドボード用に50 cmの長さの4本のケーブル」と他の熱収縮チューブを含むような直径の1つの大きな熱収縮チューブ
ネットワーク設定
ネットワーク上の各コンピューターには、サーバーが配置されているデバイスが表示されますが、ネットワーク上のすべてのコンピューターに同じワークグループをインストールすることをお勧めします。
クリックすると拡大します。
bradmauserおよびその他のファイアウォールを無効にする必要があります。
ネットワーク設定のワイヤレスアダプターのプロパティの[アクセス]タブで、[他のユーザーにアクセスを許可する]チェックボックスを最初に配置し、設定をクリックします。
設定にすべてのチェックマークを付けると、番号の代わりにサービスの名前が表示されます。
クリックすると拡大します。
クリックすると拡大します。
ルータのポート80および3306を開く必要があります。 Tendaルーターの例で示します。まず、 ローカルIPアドレスを確認します。そのためには、ワイヤレスネットワークアイコンをクリックします。 次に、開いたパネルのネットワーク名の隣に、 プロパティが表示されます。 その後、下にスクロールします。
クリックすると拡大します。
次に、ルーターのWebページを開きます( http://192.168.0.1があります)、ルーターのパスワードを入力し、[詳細設定]、[Virtal Server]の順にクリックします。次に、 ローカルIPとポート80を入力します。
クリックすると拡大します。
クリックすると拡大します。
次のコンポーネントが必要です。
- Apache-気象観測所からのデータがここに送信されます。
- PHP-気象観測所からデータを取得し、データベースを保存します。
- Mysql-温度が保存されるデータベース。PHPのみを使用すると、複数のコンピューターやその他のデバイスに表示を提供することが不可能になるためです。
- HeidiSQL-ビューアー 、およびデータベースエディター(「PhpMyAdmin」など、他のものを使用できます)。
インターネットには多くの情報があるため、 Apacheサーバーの設定については詳しく説明しませんが、主なことは、ApacheとMySQLをローカルネットワーク上で見えるように構成することです。
その後、データベースにテーブルを作成します-温度はそこに保存されます。
サーバー上のハンドラーページ(センサー読み取り値)の例:
PHPコード$link = mysqli_connect(" ", "root", " ", " "); if (!$link) { echo ": MySQL." . PHP_EOL; echo " errno: " . mysqli_connect_errno() . PHP_EOL; echo " error: " . mysqli_connect_error() . PHP_EOL; exit; } echo " MySQL !" . PHP_EOL; echo " : " . mysqli_get_host_info($link) . PHP_EOL; if(isset($_GET['temp'])){ $c=$_GET['temp']; $vlah=$_GET['vlah']; $davlen=$_GET['davlen']; $sql = "UPDATE `temp1` SET `C`='$c',`vlah`='$vlah',`davlen`='$davlen' WHERE `id`='1'";
3. esp8266の構成
esp-01をアダプターに接続し、次のようにArduinoに接続します。Rx-RX、TX-TX、GND-GND、VCC-5V 。
RESET ArduinoポートをGNDに接地します。
クリックすると拡大します。
Arduinoをコンピューターに接続し、 Arduino IDEを開き、 Serial Monitorを開き、Rate 115200を指定し、
NLとCRの両方 。
クリックすると拡大します。
- ATコマンドを入力します。
- OKを強調表示します。
- AT + RESTOREを入力すると、モジュールに工場設定が要求されます。
- AT + CWMODE_CUR = 1と入力すると、モジュールがクライアントモードになります。
- AT + CWJAP_CUR =「Network_name」、「Password」-wifiへの接続を入力します。
- 接続が発生した場合は、[ OK]を強調表示します。
Bme280のセットアップと最終ビルド
図に従って出力を接続します(図に注目すると、アダプターなしでesp8266が表示されますが、実際にはアダプターに接続する必要があり、
4つの出力アダプターには、図に示されているのと同じ機能があります。 )
クリックすると拡大します。
Arduino IDEを開き、次のコードを貼り付けます。
Arduino IDEコード #include <Wire.h> void setup(){ Wire.begin(); Serial.begin(9600); while (!Serial); Serial.println("\nI2C Scanner"); } void loop(){ byte error, address; int nDevices; Serial.println("Scanning..."); nDevices = 0; for(address = 8; address < 127; address++ ){ Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0){ Serial.print("I2C device found at address 0x"); if (address<16) Serial.print("0"); Serial.print(address,HEX); Serial.println(" !"); nDevices++; } else if (error==4) { Serial.print("Unknow error at address 0x"); if (address<16) Serial.print("0"); Serial.println(address,HEX); } } if (nDevices == 0) Serial.println("No I2C devices found\n"); else Serial.println("done\n"); delay(5000);
シリアルモニターを開き、強調表示されたIC2アドレスを覚えておいてください。
センサーライブラリ 、 タッチライブラリライブラリをダウンロードし、 C:\ Users \ user \ Documents \ Arduinoで解凍します。 開く
C:\ユーザー\ユーザー\ドキュメント\ Arduino \ライブラリ\ Adafruit_BME280_Library-masterおよびアドレスを変更します。
クリックすると拡大します。
Arduino IDEを開き、コードを配置します。
Arduino IDEコード #include <SoftwareSerial.h> #define RX 10// esp8266 #define TX 11// esp8266 String AP = "Aleks"; // String PASS = "1brui47ci881"; // String HOST = "192.168.0.185";// String PORT = "80";// String field = "field1"; int countTrueCommand; int countTimeCommand; boolean found = false; int valSensor = 1; SoftwareSerial esp8266(RX,TX); #include <Wire.h> #include <SPI.h> #include <Adafruit_Sensor.h> #include <Adafruit_BME280.h> #define BME_SCK 13 #define BME_MISO 12 #define BME_MOSI 11 #define BME_CS 10 #define SEALEVELPRESSURE_HPA (1013.25) Adafruit_BME280 bme; // I2C //Adafruit_BME280 bme(BME_CS); // hardware SPI //Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI unsigned long delayTime; void setup() { Serial.begin(9600); bool status; // default settings // (you can also pass in a Wire library object like &Wire2) status = bme.begin(); if (!status) { Serial.println("Could not find a valid BME280 sensor, check wiring!"); while (1); } esp8266.begin(115200); sendCommand("AT",5,"OK"); sendCommand("AT+CWMODE=1",5,"OK"); sendCommand("AT+CWJAP=\""+ AP +"\",\""+ PASS +"\"",20,"OK"); sendCommand("AT+CIPMUX=1",5,"OK"); } void loop() { float vlah=bme.readPressure() / 100.0F; sendCommand("AT+CIPSTART=0,\"TCP\",\""+ HOST +"\","+ PORT,15,"OK"); String cmd = "GET /?temp="+String(bme.readTemperature())+"&vlah="+String(vlah)+"&davlen="+String(bme.readHumidity())+" HTTP/1.1\r\nHost: 192.168.0.185\r\n\r\n";// GET ,temp,vlah,davlen . sendCommand("AT+CIPSEND=0," +String(cmd.length()+4),4,">"); esp8266.println(cmd);delay(1500);countTrueCommand++; sendCommand("AT+CIPCLOSE=0",5,"OK"); delay(100000); } void printValues() { Serial.print("Temperature = "); Serial.print(bme.readTemperature()); Serial.println(" *C"); Serial.print("Pressure = "); Serial.print(bme.readPressure() / 100.0F); Serial.println(" hPa"); Serial.print("Humidity = "); Serial.print(bme.readHumidity()); Serial.println(" %"); Serial.println(); } void sendCommand(String command, int maxTime, char readReplay[]) { Serial.print(countTrueCommand); Serial.print(". at command => "); Serial.print(command); Serial.print(" "); while(countTimeCommand < (maxTime*1)) { esp8266.println(command);//at+cipsend if(esp8266.find(readReplay))//ok { found = true; break; } countTimeCommand++; } if(found == true) { Serial.println("OYI"); countTrueCommand++; countTimeCommand = 0; } if(found == false) { Serial.println("Fail"); countTrueCommand = 0; countTimeCommand = 0; } found = false; }
できた 温度データは変数としてデータベースに転送されます。
ご覧のとおり、私の気象観測所にはWebプログラミングの初期知識が必要ですが、結果には価値があります。