Stasiun Cuaca Arduino

Stasiun Cuaca Arduino


Saya memutuskan untuk menulis artikel terperinci yang menceritakan semua aspek menciptakan stasiun cuaca Arduino, karena sulit untuk mencakup keseluruhan proses sekaligus. Versi saya dari stasiun cuaca nyaman karena datanya disimpan di komputer.



Apa yang dibutuhkan
  • jaringan lokal dibangun menggunakan router Wifi
  • sebuah komputer
  • arduino UNO Arduino UNO (Saya menggunakan replika China.)
  • Kabel USB untuk menghubungkan ke Arduino.
  • barometer BME280 5V I2C (suhu, kelembaban, sensor tekanan)
  • stasiun solder dengan pengering rambut
  • solder 0,7 mm
  • fluks.
  • Modul Wi-Fi versi ESP8266 ESP-01
  • 4 kabel ibu ke ayah untuk papan tempat memotong roti.
  • 4 kabel jantan ke betina untuk papan tempat memotong roti
  • 4 kabel sepanjang 50 cm untuk papan tempat memotong roti.
  • 8 tabung panas menyusut tipis masing-masing 10 cm.
  • 1 tabung heat-shrink besar dengan diameter sedemikian sehingga mencakup "4 kabel sepanjang 50 cm untuk papan tempat memotong roti" bersama dengan tabung heat-shrink lainnya


Pengaturan jaringan


Setiap komputer di jaringan harus melihat perangkat di mana server berada. Dianjurkan untuk menginstal workgroup yang sama di semua komputer di jaringan.


Klik untuk memperbesar.




Anda harus menonaktifkan bradmauser dan firewall lain.


Dalam pengaturan jaringan, di properti adaptor nirkabel, di tab akses, letakkan di awal kotak centang "izinkan pengguna lain untuk mengakses" dan kemudian - klik pada pengaturan;
taruh semua tanda centang di pengaturan, Anda akan melihat nama layanan alih-alih angka.


Klik untuk memperbesar.


Klik untuk memperbesar.




Anda harus membuka port 80 dan 3306 di router. Saya akan menunjukkan dengan contoh router Tenda: pertama, cari tahu alamat IP lokal Anda, untuk ini, klik pada ikon jaringan nirkabel. Selanjutnya, di panel yang terbuka, di sebelah nama jaringan Anda, Properties akan muncul. Setelah itu, gulir ke bawah.


Klik untuk memperbesar.




Selanjutnya, buka halaman web router, saya memilikinya http://192.168.0.1 , masukkan kata sandi untuk router, klik Pengaturan lanjutan, lalu Server Virtal.Kemudian masukkan IP Lokal dan port 80. Kemudian ulangi operasi, tetapi masukkan port 3306 .


Klik untuk memperbesar.


Klik untuk memperbesar.





Kami membutuhkan komponen-komponen berikut:

  • Apache - data dari stasiun cuaca akan dikirim ke sini.
  • PHP - akan mengambil data dari stasiun cuaca, dan menyimpan basis data.
  • Mysql - basis data di mana suhunya akan disimpan, karena hanya menggunakan PHP berarti tidak mungkin menyediakan tampilan untuk beberapa komputer dan perangkat lain.
  • HeidiSQL adalah penampil dan editor basis data (Anda dapat menggunakan yang lain, misalnya: "PhpMyAdmin").

Saya tidak akan menjelaskan secara rinci pengaturan server Apache , karena ada banyak informasi di Internet.Yang paling utama adalah mengkonfigurasi Apache dan MySQL agar terlihat di jaringan lokal.

Setelah itu, buat tabel di database - suhunya akan disimpan di sana.

Contoh halaman handler saya (pembacaan sensor) di server:



Kode 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'";//     mysqli_query($link,$sql); } echo"<br>"; $sql1="SELECT * FROM `temp1`";//  $result = mysqli_query($link,$sql1); $row = mysqli_fetch_all($result,MYSQLI_NUM); echo " "; echo $row[count($row)-1][0]; echo " C"; echo"<br>"; echo " "; echo $row[count($row)-1][1]; echo "hPa"; echo"<br>"; echo " "; echo $row[count($row)-1][2]; echo "%"; 


3. Konfigurasi esp8266


Hubungkan esp-01 ke adaptor dan hubungkan ke Arduino sebagai berikut: Rx-RX, TX-TX, GND-GND, VCC-5V ;
Tempatkan port RESET Arduino ke GND ;


Klik untuk memperbesar.



Hubungkan Arduino Anda ke komputer Anda, buka Arduino IDE , lalu Serial Monitor , lalu tentukan Rate 115200 , dan
Baik NL & CR .


Klik untuk memperbesar.


  1. Masukkan perintah AT .
  2. Sorot OK .
  3. Masukkan AT + RESTORE , itu akan meminta modul untuk pengaturan pabrik.
  4. Masukkan AT + CWMODE_CUR = 1 , ini akan menempatkan modul ke mode klien.
  5. Masukkan AT + CWJAP_CUR = "Network_name", "Password" - koneksi ke wifi.
  6. Sorot OK jika koneksi telah terjadi.

Konfigurasikan bme280 dan build final


Hubungkan kesimpulan sesuai dengan diagram (perhatian pada diagram menunjukkan esp8266 tanpa adaptor, tetapi pada kenyataannya itu perlu dihubungkan ke adaptor, dan sudah dari
4 adapter output memiliki fungsi yang sama seperti yang ditunjukkan pada diagram. )


Klik untuk memperbesar.


Buka Arduino IDE dan rekatkan kode berikut:


Kode IDE Arduino
 #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); 


Buka Serial Monitor , dan ingat alamat IC2 yang disorot.
Unduh Sensor Library , Sentuh Library Library dan unzip di C: \ Users \ user \ Documents \ Arduino . Buka
C: \ Users \ user \ Documents \ Arduino \ libraries \ Adafruit_BME280_Library-master dan ubah alamat:


Klik untuk memperbesar.


Buka IDE Arduino dan masukkan kodenya:


Kode IDE Arduino
 #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; } 


Selesai Data suhu akan ditransfer sebagai variabel ke basis data.

Seperti yang Anda lihat, stasiun cuaca saya membutuhkan pengetahuan awal tentang pemrograman web, tetapi hasilnya sepadan.


Source: https://habr.com/ru/post/id443664/


All Articles