Isi kandungan:

Stesen Cuaca Rumah ESP-Now: 9 Langkah (dengan Gambar)
Stesen Cuaca Rumah ESP-Now: 9 Langkah (dengan Gambar)

Video: Stesen Cuaca Rumah ESP-Now: 9 Langkah (dengan Gambar)

Video: Stesen Cuaca Rumah ESP-Now: 9 Langkah (dengan Gambar)
Video: Kecurangan penjual gas elpiji!!!!! 2024, November
Anonim
Stesen Cuaca Rumah ESP-Now
Stesen Cuaca Rumah ESP-Now

Saya mahu mempunyai stesen cuaca di rumah untuk beberapa waktu dan stesen yang boleh diperiksa oleh semua orang dalam keluarga dengan mudah untuk suhu dan kelembapan. Sebagai tambahan untuk memantau keadaan luar saya juga ingin memantau bilik-bilik tertentu di rumah dan bengkel garaj saya. Ini akan memberi tahu kami bila masa yang tepat untuk menyiarkan rumah atau menjalankan penyahhidratan (hujan turun banyak di sini semasa musim sejuk). Apa yang saya buat adalah sistem sensor berasaskan ESP-Now yang melaporkan kepada pelayan web tempatan yang boleh diperiksa oleh sesiapa sahaja dari komputer atau telefon mereka. Untuk telefon, saya menulis sebagai aplikasi Android ringkas untuk menjadikannya lebih mudah.

Langkah 1: Perincian Reka Bentuk

Perincian Reka Bentuk
Perincian Reka Bentuk

Saya ingin mempunyai pelbagai stesen sensor yang boleh saya letakkan di lokasi yang berbeza dan minta mereka melaporkan kembali ke satu stesen utama (atau hub) yang akan menyimpan maklumat. Setelah mencuba pelbagai idea, saya memutuskan untuk menggunakan protokol ESP-Now Espressif, kerana ia membenarkan komunikasi pantas antara peranti dengan pantas. Anda boleh membaca sedikit mengenai ESP-Sekarang di sini dan repo GitHub ini merupakan sebahagian daripada inspirasi saya.

Gambar pertama menunjukkan susun atur sistem. Setiap sensor melaporkan pengukurannya ke peranti gateway yang meneruskan data ke pelayan utama melalui sambungan bersiri kabel. Sebabnya ialah protokol ESP-Now tidak dapat aktif pada masa yang sama dengan sambungan WIFI. Agar pengguna dapat mengakses laman web, WIFI harus selalu aktif dan ini menjadikannya mustahil untuk menggunakan komunikasi ESP-Now pada peranti yang sama. Walaupun peranti gerbang mestilah peranti berasaskan Espressif (mampu ESP-Now), pelayan utama mungkin merupakan peranti yang mampu menjalankan laman web.

Beberapa stesen sensor akan kehabisan bateri (atau bateri bermuatan solar) dan yang lain hanya mempunyai kuasa utama. Namun, saya mahu semua menggunakan sekerap mungkin dan di situlah ciri "deepsleep" yang tersedia untuk peranti ESP8266 dan ESP32 sangat membantu. Stesen-stesen sensor akan bangun secara berkala, melakukan pengukuran dan mengirimnya ke peranti gerbang dan kembali tidur selama beberapa waktu yang diprogramkan. Masa bangun mereka hanya sekitar 300ms setiap 5 minit (dalam kes saya) mengurangkan penggunaan kuasa mereka dengan ketara.

Langkah 2: Sensor

Sensor
Sensor
Sensor
Sensor

Terdapat pelbagai sensor yang dapat dipilih untuk mengukur parameter persekitaran. Saya memutuskan untuk menggunakan sensor berkomunikasi I2C sahaja, kerana ia membolehkan pengukuran cepat dan berfungsi pada mana-mana peranti yang saya miliki. Daripada bekerja dengan IC secara langsung, saya mencari modul siap pakai yang mempunyai pin-out yang sama untuk memudahkan reka bentuk saya. Saya bermula dengan hanya mahu mengukur suhu dan kelembapan dan oleh itu memilih modul berdasarkan SI7021. Kemudian saya mahukan sensor yang dapat mengukur tekanan juga dan memutuskan untuk mencuba modul sensor berasaskan BME280. Untuk beberapa lokasi, saya juga mahu memantau tahap cahaya dan modul BH1750 sangat sesuai untuk ini sebagai modul sensor yang berasingan. Saya membeli modul sensor saya dari ebay dan ini adalah modul yang saya terima:

  • BME280 (GY-BMP / E280), mengukur suhu, kelembapan dan tekanan
  • SI7021 (GY-21), mengukur suhu dan kelembapan
  • BH1750 (GY-302), mengukur cahaya

Terdapat dua gaya modul PCB GY-BMP / E280 yang boleh dijumpai. Kedua-duanya mempunyai pin yang sama untuk pin 1 hingga 4. Satu modul mempunyai dua pin tambahan, CSB dan SDO. Kedua-dua pin tersebut disambungkan pada versi modul 4-pin. Tahap pin SDO menentukan alamat I2C (Ground = default 0x76, VCC = 0x77). Pin CSB mesti disambungkan ke VCC untuk memilih antara muka I2C. Saya lebih suka modul 4 pin, kerana ia siap digunakan sebagaimana tujuan saya.

Secara amnya, modul-modul ini sangat senang digunakan kerana mereka sudah mempunyai perintang tarik yang dipasang untuk saluran komunikasi dan semuanya berjalan pada 3.3V sehingga serasi dengan papan berasaskan ESP8266. Perhatikan, bahawa pin pada IC sensor ini umumnya tidak bertolak ansur dengan 5V, jadi menghubungkannya secara langsung dengan sesuatu seperti Arduino Uno boleh merosakkannya secara kekal.

Langkah 3: Stesen Sensor

Stesen Sensor
Stesen Sensor

Seperti disebutkan, stesen sensor semuanya akan menjadi perangkat Espressif yang menggunakan protokol komunikasi ESP-Now. Dari projek dan percubaan sebelumnya, saya mempunyai beberapa alat yang berbeza untuk saya menjalankan ujian awal dan memasukkannya ke dalam reka bentuk akhir. Saya mempunyai peranti berikut:

  • dua modul ESP-01
  • dua papan pengembangan mini Wemos D1
  • satu papan pengembangan Lolin ESP8266
  • satu papan kit WIFI bersiri ESP12E
  • satu papan GOOUUU ESP32 (papan pengembangan 38 pin)

Saya juga mempunyai papan pengembangan Wemos D1 R2, tetapi ada masalah dengannya yang tidak membenarkannya bangun dari tidur nyenyak dan sebagai alat pintu gerbang ia akan rosak dan tidak dimulakan semula dengan betul. Saya membaikinya kemudian dan ia menjadi sebahagian daripada projek pembuka pintu Garage. Agar "deepsleep" berfungsi, pin RST ESP8266 mesti disambungkan ke pin GPIO16, supaya pemasa tidur dapat menghidupkan peranti. Sebaik-baiknya sambungan ini harus dibuat dengan dioda Schottky (katod ke GPIO16) supaya manual reset melalui sambungan USB-TLL semasa pengaturcaraan masih berfungsi. Walau bagaimanapun, perintang bernilai rendah (300-ish Ohm) atau sambungan wayar langsung masih boleh berjaya.

Modul ESP-01 tidak membenarkan akses mudah ke pin GPIO16 dan seseorang mesti menyolder terus ke IC. Ini bukan tugas yang mudah dan saya tidak mengesyorkan ini untuk semua orang. Papan kit WIFI bersiri ESP12E adalah sedikit perkara baru dan memerlukan beberapa perubahan agar ia berguna untuk tujuan saya. Papan yang paling mudah digunakan ialah papan jenis mini Wemos D1 dan papan Lolin. Peranti ESP32 tidak memerlukan pengubahsuaian agar deepsleep berfungsi. Andreas Spiess mempunyai Instructable yang bagus dalam hal ini.

Langkah 4: Stesen Sensor ESP-01

Stesen Sensor ESP-01
Stesen Sensor ESP-01
Stesen Sensor ESP-01
Stesen Sensor ESP-01
Stesen Sensor ESP-01
Stesen Sensor ESP-01

Di semua stesen sensor modul sensor dipasang secara menegak untuk mengurangkan jumlah habuk yang dapat mengumpulkannya. Tidak semua berada dalam kurungan dan saya mungkin tidak memasangnya di kandang. Sebabnya adalah bahawa peranti boleh memanaskan badan dan mempengaruhi bacaan suhu dan kelembapan agar tidak cukup pengudaraan.

Papan ESP-01 sangat padat dan mempunyai sedikit pin IO digital untuk digunakan, tetapi cukup untuk antara muka I2C. Walau bagaimanapun, papan memerlukan pengubahsuaian yang sukar untuk membolehkan "deepsleep" berfungsi. Dalam foto yang ditunjukkan, wayar disolder dari pin sudut (GPIO16) ke pin RST pada tajuk. Kawat yang saya gunakan adalah wayar "pembaikan" bertebat diameter 0.1mm. Lapisan penebat meleleh semasa pemanasan, sehingga dapat disolder untuk memperbaiki jejak, dll di PCB dan masih tidak bimbang untuk membuat seluar pendek di mana wayar menghubungi komponen lain. Ukurannya menyukarkan kerja dan saya menyolder wayar ini di bawah mikroskop (gaya pemungut hobi / stempel). Perlu diingat bahawa header di sebelah kanan mempunyai jarak pin 0.1 "(2.54mm). Memasang dioda Schottky di sini sama sekali tidak mudah, jadi saya memutuskan untuk mencuba wayar sahaja dan kedua-dua unit telah berjalan lebih lama sebulan tanpa sebarang masalah.

Modul dipasang pada dua papan prototaip yang saya buat. Satu (# 1) adalah papan pengaturcara yang juga memungkinkan modul I2C dipasang dan diuji, sementara yang lain (# 2) adalah papan pengembangan / ujian untuk peranti I2C. Untuk papan pertama, saya menyatukan penyambung lelaki USB lama dan PCB kecil untuk menghidupkan unit secara langsung dari penyesuai dinding USB. Unit lain mempunyai soket DC biasa yang diubah suai untuk masuk ke header terminal skru dan digerakkan melalui penyesuai dinding juga.

Skema menunjukkan bagaimana mereka dihubungkan dan bagaimana pengaturcara berfungsi. Saya tidak mempunyai modul ESP-01 yang lain, jadi saya tidak memerlukan langsung programmer. Pada masa akan datang saya mungkin akan membuat PCB untuk mereka. Kedua-dua papan ini mempunyai modul sensor SI7021 yang terpasang kerana saya tidak begitu berminat dengan pengukuran tekanan di lokasi tersebut.

Langkah 5: Stesen Sensor Kit WIFI ESP 12E

Stesen Sensor Kit Serial WIFI ESP 12E
Stesen Sensor Kit Serial WIFI ESP 12E
Stesen Sensor Kit Serial WIFI ESP 12E
Stesen Sensor Kit Serial WIFI ESP 12E

Papan Kit Serial WIFI ESP12E tidak ditujukan untuk pembangunan seperti untuk memperlihatkan apa yang dapat dilakukan dengan peranti ini. Saya membelinya sejak dulu untuk mengetahui sedikit mengenai pengaturcaraan ESP8266 dan akhirnya memutuskan untuk menggunakannya. Saya mengeluarkan semua LED yang dipasang untuk demonstrasi dan menambahkan header pengaturcaraan USB serta header I2C yang sesuai untuk modul yang saya gunakan. Ia mempunyai perintang foto CdS yang disambungkan ke pin input analognya dan saya memutuskan untuk meninggalkannya di sana. Unit khusus ini akan memantau bengkel garaj saya dan sensor foto yang ada cukup untuk memberi tahu saya jika lampu tidak sengaja terpadam. Untuk pengukuran cahaya saya menormalkan pembacaan untuk memberi saya output persen dan apa pun yang melebihi "5" pada waktu malam bermaksud lampu ditinggalkan atau pintu ke rumah tidak ditutup dengan betul. Pin RST dan GPIO16 dilabel dengan jelas pada PCB dan dioda Schottky yang menghubungkannya dipasang di bahagian bawah PCB. Ia digerakkan melalui papan bersiri USB yang disambungkan secara langsung ke pengecas dinding USB. Saya mempunyai tambahan papan bersiri USB ini dan tidak memerlukannya sekarang.

Saya tidak membuat skema untuk papan ini dan secara amnya tidak mengesyorkan membeli satu untuk digunakan untuk tujuan ini. Papan Wemos D1 Mini jauh lebih sesuai dan akan dibincangkan seterusnya. Walaupun, jika anda mempunyai salah satu daripadanya dan memerlukan nasihat, saya dengan senang hati akan membantu.

Langkah 6: Stesen Sensor Mini D1

Stesen Sensor Mini D1
Stesen Sensor Mini D1
Stesen Sensor Mini D1
Stesen Sensor Mini D1
Stesen Sensor Mini D1
Stesen Sensor Mini D1

Papan pengembangan ESP8266 jenis Wemos D1 Mini adalah pilihan saya untuk digunakan dan sekiranya saya terpaksa menggunakannya, saya akan menggunakannya. Mereka mempunyai sebilangan besar pin IO yang dapat diakses, dapat diprogram secara langsung melalui Arduino IDE dan masih cukup padat. Pin D0 adalah GPIO16 pada papan ini dan menghubungkan dioda Schottky agak mudah dilakukan. Skema menunjukkan bagaimana saya memasang papan ini dan kedua-duanya menggunakan modul sensor BME2808.

Salah satu daripada dua papan digunakan untuk memantau cuaca luar dan menggunakan bateri tenaga suria. Panel solar 165mm x 135mm (6V, 3.5W) disambungkan ke modul pengisian bateri Li-ion TP4056 (lihat Diagram Pengaturan Stesen Bateri Tenaga Suria). Modul pengecasan khusus ini (03962A) mempunyai litar perlindungan bateri yang diperlukan sekiranya bateri (pek) tidak mengandungi satu. Bateri Li-ion dikitar semula dari pek bateri komputer riba yang lama dan ia masih boleh memuatkan muatan yang mencukupi untuk menjalankan papan D1 Mini, terutama dengan tidur nyenyak. Papan itu diletakkan di dalam penutup plastik agar tidak selamat dari unsur-unsur. Namun, agar bahagian dalaman terkena suhu dan kelembapan luar, dua lubang diameter 25mm digerudi di sisi yang bertentangan dan ditutup (dari dalam) dengan kain lanskap hitam. Kain ini dirancang untuk membolehkan kelembapan menembus dan oleh itu kelembapan dapat diukur. Di salah satu hujung kandang terdapat lubang kecil dan tingkap plastik yang jelas dipasang. Di sinilah modul sensor cahaya BH1750 ditempatkan. Seluruh unit diletakkan di luar tempat di bawah naungan (bukan sinar matahari langsung) dengan sensor cahaya menghala ke tempat terbuka. Telah berjalan dari bateri berkuasa solar selama hampir 4 minggu dalam cuaca musim sejuk / mendung kita di sini.

Langkah 7: Gateway dan Webserver

Gerbang dan Pelayan Web
Gerbang dan Pelayan Web
Gerbang dan Pelayan Web
Gerbang dan Pelayan Web
Gerbang dan Pelayan Web
Gerbang dan Pelayan Web

Papan Lolin NodeMCU V3 (ESP8266) digunakan untuk peranti Gateway ESP-Now dan ESP32 (papan GOOUUU) digunakan untuk Webserver. Hampir mana-mana papan ESP8266 atau bahkan ESP32 boleh berfungsi sebagai peranti gerbang, ini hanyalah papan yang saya "tinggalkan" setelah saya menggunakan semua papan lain yang saya miliki.

Saya menggunakan papan ESP32 kerana saya memerlukan papan dengan kekuatan pengkomputeran yang lebih sedikit untuk mengumpulkan data, menyusunnya, menyimpannya ke tempat penyimpanan dan menjalankan pelayan web. Di masa depan ia mungkin juga mempunyai sensor sendiri dan paparan tempatan (OLED). Untuk penyimpanan kad SD digunakan dengan penyesuai yang disesuaikan. Saya menggunakan penyesuai kad microSD ke SD dan menyisipkan header 7 pin lelaki (0,1 pitch) ke kenalan berlapis. Saya mengikuti nasihat dari GitHub ini untuk membuat sambungan.

Penyediaan prototaip (dengan wayar Dupont) tidak termasuk modul sensor, tetapi PCB akhir yang saya reka memungkinkan untuk satu dan juga paparan OLED kecil. Perincian mengenai bagaimana saya merancang bahawa PCB adalah sebahagian daripada Instructable yang berbeza.

Langkah 8: Perisian

Perisian
Perisian

Peranti ESP8266 (ESP-SEKARANG)

Perisian untuk semua peranti ditulis menggunakan Arduino IDE (v1.87). Setiap stesen sensor menjalankan kod yang sama. Mereka hanya berbeza dengan pin mana yang digunakan untuk komunikasi I2C dan modul sensor mana mereka disambungkan. Yang paling penting mereka menghantar paket data pengukuran yang sama ke stesen Gateway ESP-Now, tidak kira sama ada mereka mempunyai sensor yang sama. Ini bermaksud bahawa beberapa stesen sensor akan mengisi nilai dummy untuk pengukuran tekanan dan tahap cahaya jika mereka tidak mempunyai sensor untuk memberikan nilai sebenar. Kod untuk setiap stesen dan pintu masuk diadaptasi dari contoh Anthony Elder di GitHub ini.

Kod peranti gerbang menggunakan SoftwareSerial untuk berkomunikasi dengan pelayan web, kerana ESP8266 hanya mempunyai satu UART perkakasan yang berfungsi sepenuhnya. Berjalan pada kadar baud maksimum 9600 nampaknya cukup dipercayai dan lebih dari cukup untuk menghantar paket data yang agak kecil ini. Peranti gateway juga diprogramkan dengan alamat MAC peribadi. Sebabnya adalah kerana jika perlu diganti, stesen sensor tidak perlu diprogramkan semula dengan alamat MAC penerima baru.

ESP32 (Pelayan Web)

Setiap stesen sensor menghantar paket datanya ke peranti gateway yang meneruskannya ke pelayan web. Bersama dengan paket data, alamat MAC stesen sensor juga dihantar untuk mengenal pasti setiap stesen. Pelayan web mempunyai jadual "cari" untuk menentukan lokasi setiap sensor dan menyusun data dengan sewajarnya. Selang waktu antara pengukuran diatur ke 5 min ditambah faktor rawak untuk mengelakkan sensor "bertembung" satu sama lain ketika mengirim ke perangkat pintu gerbang.

Penghala WIFI rumah telah ditetapkan untuk memberikan alamat IP tetap ke pelayan web ketika menyambung ke WIFI. Bagi saya adalah 192.168.1.111. Mengetik alamat di mana-mana penyemak imbas akan menyambung ke pelayan web stesen cuaca selagi pengguna berada dalam jarak WIFI (dan menyambung ke) rangkaian rumah. Apabila pengguna menyambung ke laman web, pelayan web bertindak balas dengan tabel pengukuran, dan termasuk waktu pengukuran terakhir dari setiap sensor. Dengan cara ini jika stesen sensor menjadi tidak responsif, seseorang dapat melihatnya dari meja jika bacaan berusia lebih dari 5-6 minit.

Data disimpan dalam fail teks individu pada kad SD dan mereka juga dapat dimuat turun dari laman web juga. Ia boleh diimport ke Excel atau aplikasi lain untuk merancang data

Aplikasi Android

Untuk mempermudah untuk melihat maklumat cuaca tempatan pada telefon pintar, saya membuat Aplikasi Android yang relatif menggunakan Android Studio. Ia boleh didapati di halaman GitHub saya di sini. Ia menggunakan kelas webview untuk memuat halaman web dari pelayan dan fungsi yang terhad. Ia tidak dapat memuat turun fail data dan saya tidak memerlukannya di telefon saya.

Langkah 9: Hasil

Keputusan
Keputusan

Akhirnya, berikut adalah beberapa hasil dari stesen cuaca rumah saya. Data dimuat turun di komputer riba dan diplot di Matlab. Saya melampirkan skrip Matlab saya dan anda juga boleh menjalankannya di GNU Octave. Sensor luar telah digunakan pada bateri bermuatan suria selama hampir 4 minggu dan kita jarang berjemur pada waktu ini sepanjang tahun. Setakat ini semuanya berjalan lancar dan semua orang dalam keluarga dapat melihat sendiri cuaca daripada bertanya kepada saya sekarang!

Disyorkan: