Isi kandungan:

Stesen Cuaca IoT Dengan RPi dan ESP8266: 10 Langkah
Stesen Cuaca IoT Dengan RPi dan ESP8266: 10 Langkah

Video: Stesen Cuaca IoT Dengan RPi dan ESP8266: 10 Langkah

Video: Stesen Cuaca IoT Dengan RPi dan ESP8266: 10 Langkah
Video: Belajar IOT Untuk Pemula | NodeMCU ESP8266 + Blynk 2024, November
Anonim
Stesen Cuaca IoT Dengan RPi dan ESP8266
Stesen Cuaca IoT Dengan RPi dan ESP8266

Pada tutorial sebelumnya, kami telah bermain dengan NodeMCU, sensor dan belajar bagaimana menangkap dan log data di platform ThingSpeak (Internet of Things (IoT) yang membolehkan anda mengumpulkan dan menyimpan data sensor di awan dan mengembangkan aplikasi IoT):

IOT DIBUAT MUDAH: DATA MINGGU CAPTURING REMOTE: SUHU & HUMIDITI UV DAN UDARA

Dengan tutorial baru ini, kita akan belajar bagaimana melakukan hal yang sama tetapi pada masa ini, menggunakan Raspberry Pi untuk menangkap data dari beberapa sensor yang berbeza dan juga meneroka pelbagai cara berkomunikasi antara peranti dan web:

Sensor dan jenis Kominikasi:

  • DHT22 (Suhu dan Kelembapan) ==> Komunikasi digital
  • BMP180 (Suhu dan Tekanan) ==> Protokol I2C
  • DS18B20 (Suhu) ==> 1-Wire Protocol

Gambarajah Blok menunjukkan apa yang akan kita perolehi pada akhir projek ini:

Imej
Imej

Langkah 1: BoM - Bil Bahan

  1. Raspberry Pi V3 - US $ 32.00
  2. Sensor Suhu dan Kelembapan Relatif DHT22 - USD 9,95
  3. Perintang 4K7 ohm
  4. Sensor Suhu Kalis Air DS18B20 - USD 5,95
  5. Perintang 4K7 ohm
  6. Sensor Tekanan, Suhu dan Ketinggian BMP180 Barometrik - USD 6,99

Langkah 2: Memasang Sensor Suhu & Kelembapan

Memasang Sensor Suhu & Kelembapan
Memasang Sensor Suhu & Kelembapan

Sensor pertama yang akan dipasang adalah DHT22 untuk menangkap data suhu udara dan kelembapan relatif. Laman ADAFRUIT memberikan maklumat hebat mengenai sensor tersebut. Di bawah ini, beberapa maklumat diambil dari sana:

Gambaran keseluruhan

Sensor suhu & kelembapan DHT yang rendah sangat asas dan perlahan tetapi sangat sesuai untuk peminat yang ingin melakukan beberapa pencatatan data asas. Sensor DHT terbuat dari dua bahagian, sensor kelembapan kapasitif, dan termistor. Terdapat juga cip yang sangat asas di dalamnya yang melakukan penukaran analog ke digital dan mengeluarkan isyarat digital dengan suhu dan kelembapan. Isyarat digital agak senang dibaca menggunakan mikrokontroler mana pun.

Ciri-ciri utama DHT22:

  • Kos rendah
  • Kuasa 3 hingga 5V dan I / O
  • 2.5mA penggunaan semasa maksimum semasa penukaran (semasa meminta data)
  • Baik untuk bacaan kelembapan 0-100% dengan ketepatan 2-5%
  • Baik untuk bacaan suhu -40 hingga 125 ° C ketepatan ± 0.5 ° C
  • Tidak lebih dari 0,5 Hz kadar persampelan (sekali setiap 2 saat)
  • Ukuran badan 15.1mm x 25mm x 7.7mm
  • 4 pin dengan jarak 0.1"

Setelah biasanya anda akan menggunakan sensor pada jarak kurang dari 20m, perintang 4K7 ohm harus dihubungkan antara pin Data dan VCC. Pin data output DHT22 akan disambungkan ke Raspberry GPIO 16. Periksa rajah elektrik di atas, sambungkan sensor ke pin RPi seperti di bawah:

  1. Pin 1 - Vcc ==> 3.3V
  2. Pin 2 - Data ==> GPIO 16
  3. Pin 3 - Tidak Bersambung
  4. Pin 4 - Gnd ==> Gnd

Jangan lupa Pasang perintang ohm 4K7 antara pin Vcc dan Data

Setelah sensor disambungkan, kita juga mesti memasang perpustakaannya pada RPi kita.

Memasang Perpustakaan DHT:

Pada Raspberry anda, bermula dari / rumah, pergi ke / Dokumen

cd Dokumen

Buat direktori untuk memasang perpustakaan dan pindah ke sana:

mkdir DHT22_Sensor

cd DHT22_Sensor

Pada penyemak imbas anda, pergi ke Adafruit GitHub:

github.com/adafruit/Adafruit_Python_DHT

Muat turun perpustakaan dengan mengklik pautan muat turun zip di sebelah kanan dan nyah zip zip arkib pada folder Raspberry Pi anda yang baru dibuat. Kemudian pergi ke direktori perpustakaan (subfolder yang dibuat secara automatik ketika anda membuka zip fail), dan jalankan perintah:

sudo python3 setup.py pasang

Buka program ujian (DHT22_test.py) dari GITHUB saya

import Adafruit_DHT

DHT22Sensor = Adafruit_DHT. DHT22 DHTpin = 16 kelembapan, suhu = Adafruit_DHT.read_retry (DHT22Sensor, DHTpin) jika kelembapan tidak Tiada dan suhu tidak ada: cetak ('Temp = {0: 0.1f} * C Kelembapan = {1: 0.1 f}% '. format (suhu, kelembapan)) lain: cetak (' Gagal membaca. Cuba lagi! ')

Jalankan program dengan arahan:

python3 DHT22_test.py

Skrin cetak Terminal di bawah menunjukkan hasilnya.

Imej
Imej

Langkah 3: Memasang DS18B20 - Sensor Suhu

Memasang DS18B20 - Sensor Suhu
Memasang DS18B20 - Sensor Suhu
Memasang DS18B20 - Sensor Suhu
Memasang DS18B20 - Sensor Suhu

Gambaran Keseluruhan Sensor:

Kami akan menggunakan dalam tutorial ini versi kalis air dari sensor DS18B20. Ia sangat berguna untuk suhu jauh dalam keadaan basah, misalnya di tanah lembap. Sensor diasingkan dan dapat melakukan pengukuran hingga 125oC (Adafrut tidak mengesyorkan menggunakannya lebih dari 100oC kerana jaket PVC kabelnya).

DS18B20 adalah sensor digital yang menjadikannya baik untuk digunakan walaupun jarak jauh! Sensor suhu digital 1-wayar ini cukup tepat (± 0,5 ° C melebihi julat) dan boleh memberikan ketepatan hingga 12 bit dari penukar digital-ke-analog onboard. Mereka berfungsi dengan baik dengan NodeMCU menggunakan pin digital tunggal, dan anda juga boleh menghubungkan beberapa pin ke pin yang sama, masing-masing mempunyai ID 64-bit unik yang dibakar di kilang untuk membezakannya.

Sensor berfungsi dari 3.0 hingga 5.0V, yang bermaksud bahawa ia dapat dihidupkan terus dari 3.3V yang disediakan oleh salah satu pin Raspberry (1 atau 17).

Sensor mempunyai 3 wayar:

  • Hitam: GND
  • Merah: VCC
  • Kuning: Data 1-Wire

Di sini, anda dapat mencari data lengkap: Lembaran Data DS18B20

Pemasangan Sensor:

Ikuti rajah di atas dan buat sambungan:

  • Vcc ==> 3.3V
  • Gnd ==> Gnd
  • Data ==> GPIO 4 (lalai untuk perpustakaan)

Memasang Python Library:

Seterusnya, mari pasang pustaka Python yang akan mengendalikan sensor:

sudo pip3 pasang w1thermsensor

Sebelum menjalankan skrip untuk menguji sensor, periksa apakah antara muka "1-Wire" diaktifkan di RPi anda (lihat layar cetak di atas)

Jangan lupa memulakan semula RPi anda, setelah mengubah konfigurasinya

Menguji sensor:

Untuk menguji sensor, skrip python sederhana boleh digunakan:

masa import

dari w1thermsensor import W1ThermSensor ds18b20Sensor = W1ThermSensor () manakala True: suhu = ds18b20Sensor.get_temperature () cetak ("Suhu adalah% s celsius"% suhu) masa.s tidur (1)

Langkah 4: Memasang BMP180

Memasang BMP180
Memasang BMP180
Memasang BMP180
Memasang BMP180
Memasang BMP180
Memasang BMP180

Gambaran Keseluruhan Sensor:

BMP180 adalah penerus BMP085, generasi baru sensor tekanan digital berketepatan tinggi untuk aplikasi pengguna. Elektronik kuasa rendah dan voltan rendah BMP180 dioptimumkan untuk digunakan dalam telefon bimbit, PDA, peranti navigasi GPS dan peralatan luaran. Dengan bunyi ketinggian rendah hanya 0.25m pada masa penukaran pantas, BMP180 menawarkan prestasi yang unggul. Antara muka I2C memungkinkan penyatuan sistem yang mudah dengan mikrokontroler. BMP180 didasarkan pada teknologi piezo-resistive untuk ketahanan EMC, ketepatan tinggi, dan linearitas serta kestabilan jangka panjang.

Lembaran data BMP yang lengkap boleh didapati di sini: BMP180 - Sensor Tekanan Digital

Pemasangan Sensor: Ikuti rajah di atas dan buat sambungan:

  • Vin ==> 3.3V
  • GND ==> GND
  • SCL ==> GPIO 3
  • SDA ==> GPIO 2

Mengaktifkan Antara Muka I2C

Pergi ke Konfigurasi RPi dan sahkan bahawa antara muka I2C diaktifkan. Sekiranya tidak, aktifkan dan mulakan semula RPi.

Menggunakan BMP180

Sekiranya semuanya telah dipasang dengan baik, dan semuanya telah dihubungkan dengan baik, anda kini bersedia untuk menghidupkan Pi anda dan mula melihat apa yang diberitahu oleh BMP180 tentang dunia di sekeliling anda.

Perkara pertama yang perlu dilakukan ialah memeriksa sama ada Pi melihat BMP180 anda. Cuba yang berikut di tetingkap terminal:

sudo i2cdetect -y 1

Sekiranya arahan itu berfungsi, anda akan melihat sesuatu yang serupa dengan Skrin Cetak Terminal di atas, yang menunjukkan bahawa BMP180 ada di saluran '77'.

Memasang Perpustakaan BMP180:

Buat direktori untuk memasang perpustakaan:

mkdir BMP180_Sensorcd BMP180_Sensor

Pada penyemak imbas anda, pergi ke Adafruit GITHub:

github.com/adafruit/Adafruit_Python_BMP

Muat turun perpustakaan dengan mengklik pautan muat turun zip di sebelah kanan dan buka zip fail arkib pada folder Raspberry Pi yang anda buat. Kemudian pergi ke subfolder yang dibuat dan jalankan perintah berikut di direktori perpustakaan:

sudo python3 setup.py pasang

Buka Python IDE anda dan buat program ujian dan beri nama, contohnya BMP180Test.py

import Adafruit_BMP. BMP085 sebagai BMP085sensor = BMP085. BMP085 () cetak ('Temp = {0: 0.2f} * C'.format (sensor.read_temperature ())) cetak (' Tekanan = {0: 0.2f} Pa '). format (sensor.read_pressure ())) print ('Altitude = {0: 0.2f} m'.format (sensor.read_altitude ())) print (' Sealevel Pressure = {0: 0.2f} Pa'.format (sensor.read_sealevel_pressure ()))

Jalankan program ujian:

python3 BMP180Test.py

Skrin cetak Terminal di atas menunjukkan hasilnya.

Perhatikan bahawa tekanan ditunjukkan dalam Pa (Pascals). Lihat langkah seterusnya untuk lebih memahami mengenai unit ini.

Langkah 5: Mengukur Cuaca dan Ketinggian Dengan BMP180

Mengukur Cuaca dan Ketinggian Dengan BMP180
Mengukur Cuaca dan Ketinggian Dengan BMP180

Mari luangkan sedikit masa untuk memahami sedikit sebanyak mengenai apa yang akan kita perolehi, dengan bacaan BMP. Anda boleh melangkau bahagian tutorial ini, atau kembali kemudian.

Sekiranya anda ingin mengetahui lebih lanjut mengenai bacaan Sensor, sila pergi ke tutorial hebat ini:

BMP180 dirancang untuk mengukur tekanan atmosfera dengan tepat. Tekanan atmosfera berbeza dengan cuaca dan ketinggian.

Apakah Tekanan Atmosfera?

Definisi tekanan atmosfera adalah kekuatan yang dilakukan oleh udara di sekeliling anda. Berat gas di atmosfera menimbulkan tekanan atmosfera. Satuan tekanan yang biasa ialah "pound per inci persegi" atau psi. Kami akan menggunakan notasi antarabangsa di sini, yaitu Newton per meter persegi, yang disebut pascal (Pa).

Sekiranya anda mengambil ruang selebar 1 cm, beratnya kira-kira 1 kg

Berat ini, menekan jejak lajur itu, menimbulkan tekanan atmosfera yang dapat kita ukur dengan sensor seperti BMP180. Oleh kerana tiang udara selebar cm itu mempunyai berat sekitar 1Kg, maka tekanan permukaan laut rata-rata adalah sekitar 101325 pascal, atau lebih baik, 1013.25 hPa (1 hPa juga dikenal sebagai milibar - mbar). Ini akan turun sekitar 4% untuk setiap 300 meter yang anda naiki. Semakin tinggi anda mendapat, semakin sedikit tekanan yang akan anda lihat, kerana tiang ke puncak atmosfera lebih pendek dan oleh itu beratnya lebih sedikit. Ini berguna untuk diketahui, kerana dengan mengukur tekanan dan melakukan beberapa matematik, anda dapat menentukan ketinggian anda.

Tekanan udara pada jarak 3, 810 meter hanya separuh dari permukaan laut.

BMP180 menghasilkan tekanan mutlak dalam pascal (Pa). Satu pascal adalah tekanan yang sangat kecil, kira-kira jumlah selembar kertas yang akan diletakkan di atas meja. Anda akan lebih kerap melihat pengukuran pada hectopascals (1 hPa = 100 Pa). Perpustakaan yang digunakan di sini memberikan output nilai titik terapung dalam hPa, yang juga sama dengan satu milibar (mbar).

Berikut adalah beberapa penukaran ke unit tekanan lain:

  • 1 hPa = 100 Pa = 1 mbar = 0.001 bar
  • 1 hPa = 0.75006168 Torr
  • 1 hPa = 0.01450377 psi (paun per inci persegi)
  • 1 hPa = 0.02953337 inHg (inci merkuri)
  • 1 hpa = 0.00098692 atm (atmosfera standard)

Kesan Suhu

Kerana suhu mempengaruhi ketumpatan gas, dan ketumpatan mempengaruhi jisim gas, dan massa mempengaruhi tekanan (whew), tekanan atmosfera akan berubah secara mendadak dengan suhu. Juruterbang mengetahui ini sebagai "ketinggian kepadatan", yang menjadikannya lebih mudah untuk dilepaskan pada hari yang sejuk daripada yang panas kerana udara lebih padat dan mempunyai kesan aerodinamik yang lebih besar. Untuk mengimbangi suhu, BMP180 menyertakan sensor suhu yang agak baik dan juga sensor tekanan.

Untuk melakukan pembacaan tekanan, pertama-tama anda mengambil bacaan suhu, kemudian menggabungkannya dengan bacaan tekanan mentah untuk menghasilkan pengukuran tekanan yang dikompensasi suhu akhir. (Perpustakaan menjadikan semua ini sangat mudah.)

Mengukur Tekanan Mutlak

Sekiranya aplikasi anda memerlukan pengukuran tekanan mutlak, yang harus anda lakukan ialah mendapatkan bacaan suhu, kemudian lakukan bacaan tekanan (lihat lakaran contoh untuk perinciannya). Bacaan tekanan akhir adalah dalam hPa = mbar. Sekiranya anda mahu, anda boleh menukarnya ke unit lain menggunakan faktor penukaran di atas.

Perhatikan bahawa tekanan atmosfera mutlak akan berbeza dengan ketinggian anda dan corak cuaca semasa, kedua-duanya adalah perkara yang berguna untuk diukur.

Pemerhatian Cuaca

Tekanan atmosfera di lokasi tertentu di bumi (atau di mana sahaja dengan atmosfera) tidak berterusan. Interaksi yang kompleks antara putaran bumi, kemiringan paksi, dan banyak faktor lain mengakibatkan kawasan bergerak dengan tekanan yang lebih tinggi dan lebih rendah, yang seterusnya menyebabkan perubahan cuaca yang kita lihat setiap hari. Dengan melihat perubahan tekanan, anda dapat meramalkan perubahan cuaca jangka pendek. Sebagai contoh, penurunan tekanan biasanya bermaksud cuaca basah atau ribut semakin hampir (sistem tekanan rendah bergerak). Kenaikan tekanan biasanya bermaksud cuaca cerah semakin hampir (sistem tekanan tinggi bergerak). Tetapi ingat bahawa tekanan atmosfera juga berbeza dengan ketinggian. Tekanan mutlak di rumah saya, Lo Barnechea di Chile (ketinggian 950m) akan selalu lebih rendah daripada tekanan mutlak di San Francisco misalnya (kurang dari 2 meter, hampir permukaan laut). Sekiranya stesen cuaca melaporkan tekanan mutlaknya, sukar untuk membandingkan pengukuran tekanan secara langsung dari satu lokasi ke lokasi lain (dan ramalan cuaca berskala besar bergantung pada pengukuran dari seberapa banyak stesen yang mungkin).

Untuk menyelesaikan masalah ini, stesen cuaca selalu menghilangkan kesan ketinggian dari bacaan tekanan yang dilaporkan dengan menambahkan secara matematik tekanan tetap yang setara untuk menjadikannya seolah-olah bacaan diambil di permukaan laut. Apabila anda melakukan ini, bacaan yang lebih tinggi di San Francisco berbanding Lo Barnechea selalu disebabkan oleh corak cuaca, dan bukan kerana ketinggian.

Untuk melakukan ini, terdapat fungsi di perpustakaan yang disebut permukaan laut (P, A). Ini mengambil tekanan mutlak (P) dalam hPa, dan ketinggian arus stesen (A) dalam meter, dan menghilangkan kesan ketinggian dari tekanan. Anda boleh menggunakan output fungsi ini untuk membandingkan bacaan cuaca anda secara langsung dengan stesen lain di seluruh dunia.

Menentukan Ketinggian

Oleh kerana tekanan berbeza dengan ketinggian, anda boleh menggunakan sensor tekanan untuk mengukur ketinggian (dengan beberapa peringatan). Tekanan purata atmosfer di permukaan laut ialah 1013.25 hPa (atau mbar). Ini turun menjadi sifar semasa anda menuju ke arah kekosongan ruang. Kerana lekukan penurunan ini dapat dipahami dengan baik, anda dapat menghitung perbezaan ketinggian antara dua pengukuran tekanan (p dan p0) dengan menggunakan persamaan tertentu.

Sekiranya anda menggunakan tekanan permukaan laut (1013.25 hPa) sebagai tekanan garis dasar (p0), output persamaan akan menjadi ketinggian semasa anda di atas permukaan laut. Terdapat fungsi di perpustakaan yang disebut ketinggian (P, P0) yang membolehkan anda mendapatkan "ketinggian yang dikira".

Penjelasan di atas diambil dari tutorial BMP 180 Sparkfun.

Langkah 6: HW Lengkap

HW Lengkap
HW Lengkap

Langkah 7: Menghantar Data ke ThingSpeak

Menghantar Data ke ThingSpeak
Menghantar Data ke ThingSpeak

Pada ketika ini, kami belajar bagaimana mempersiapkan RPi untuk menangkap data dari ketiga-tiga sensor, mencetaknya di terminal. Sekarang, inilah masanya untuk melihat bagaimana menghantar data tersebut ke platform IoT, ThingSpeak.

Mari kita mulakan!

Pertama, anda mesti mempunyai akaun di ThinkSpeak.com

Ikuti arahan untuk membuat Saluran dan perhatikan ID Saluran anda dan Tulis Kunci API

Muat turun Skrip Python dari GitHub saya: localData ToTS_v1_EXT.py

Mari komen bahagian paling penting kod:

Pertama, mari kita import perpustakaan ThingSpeak, tentukan klien WiFi dan tentukan kelayakan Router dan Thinkspeak tempatan anda:

import barang-barang

Terdapat beberapa cara untuk berkomunikasi dengan ThingSpeak, cara termudah adalah menggunakan pustaka pelanggan untuk thingspeak.com API yang dikembangkan oleh Mikolaj Chwaliz dan Keith Ellis.

Perpustakaan boleh dimuat turun dari https://github.com/mchwalisz/thingspeak atau menggunakan PIP di terminal:

sudo pip3 pasang thingspeak

Seterusnya, di dalam skrip, kemas kini kelayakan saluran ThingSpeak

chId = 9999999 # Masukkan dengan Id Saluran anda

tsKey = 'MASUKKAN DENGAN KUNCI MENULIS SALURAN ANDA' tsUrl = 'https://api.thingspeak.com/update' ts = thingspeak. Channel (chId, tsUrl, tsKey)

Sekarang, mari kita mulakan 3 sensor:

# Perpustakaan 1-Wire DS18B20

dari w1thermsensor import W1ThermSensor ds18b20Sensor = W1ThermSensor () # Secara lalai GPIO 4 digunakan oleh perpustakaan # DHT22 Perpustakaan import Adafruit_DHT DHT22Sensor = Adafruit_DHT. DHT22 DHTpin = 16 # BMP180 pustaka import Adafruit_B80B00BB085 Anda harus menentukan ketinggian sebenar di mana Stesen Cuaca anda berada, mengemas kini pemboleh ubah global "altReal". Dalam kes saya, Stesen saya terletak pada ketinggian 950m dari aras laut

altReal global

altReal = 950

Setelah masuk dengan ketinggian sebenar stesen sebagai input, kita dapat memperoleh tekanan mutlak, tekanan permukaan laut, suhu, dan ketinggian menggunakan fungsi bmp180GetData (ketinggian):

def bmp180GetData (ketinggian):

temp = bmp180Sensor.read_temperature () pres = bmp180Sensor.read_pressure () alt=bmp180Sensor.read_altitude () presSeaLevel = pres / pow (1.0 - ketinggian / 44330.0, 5.255) temp = bulat (temp, 1) pres = bulat (pres / 100, 2) # tekanan mutlak dalam hPa (atau mbar) alt=bulat (alt) presSeaLevel = bulat (presSeaLevel / 100, 2) # tekanan mutlak dalam hPa (atau mbar) temp kembali, pres, alt, presSeaLevel

Fungsi getLocalData (), akan mengembalikan semua data tempatan yang ditangkap oleh stesen kami:

def getLocalData ():

global timeString global humLab global tempExt global tempLab global presSL global altLab global presAbs # Dapatkan waktu membaca sekarang = datetime.datetime.now () timeString = now.strftime ("% Y-% m-% d% H:% M") # Baca Suhu Luar (jarak 1 meter) tempExt = bulat (ds18b20Sensor.get_temperature (), 1) tempLab, presAbs, altLab, presSL = bmp180GetData (altReal) humDHT, tempDHT = Adafruit_DHT.read_retry (DHT22Sensor) dan tempDHT bukan Tiada: humLab = bulat (humDHT

Setelah anda memperoleh semua data dengan fungsi di atas, anda mesti menghantarnya ke ThingSpeak. Anda akan melakukannya menggunakan fungsi sendDataTs ():

def sendDataTs ():

data = {"field1": tempLab, "field2": tempExt, "field3": humLab, "field4": presSL, "field5": altLab} ts.update (data) print ("[INFO] Data dihantar untuk 5 bidang: ", tempLab, tempExt, humLab, presSL, altLab)

Dengan data saluran anda dikemas kini, simpan skrip dan laksanakan di terminal anda:

sudo Python3 localData_ToTs_v1_EXT.py

Mengenai protokol Komunikasi

Perhatikan bahawa dengan menggunakan "thingspeak library", "permintaan library" diimport, iaitu perpustakaan HTTP Berlesen Apache2, yang ditulis dalam Python. Dokumentasi Permintaan Pemasangan rasmi boleh didapati di sini:

docs.python-requests.org/en/latest/user/install/

Sekiranya perlu, sebelum menjalankan skrip anda, anda dapat mengesahkan apakah perpustakaan permintaan dipasang:

permintaan pemasangan sudo pip3

Secara pilihan anda boleh menggunakan MTTQ sebagai kaedah untuk menghantar data ke ThingSpeak. MQTT berbeza dengan HTTP, setelah dirancang khusus untuk ringan dan ditujukan untuk peranti tertanam dengan RAM dan kinerja CPU yang rendah. Juga, dalam kebanyakan kes, MQTT menggunakan lebar jalur yang lebih sedikit.

Rujuk tutorial ini: Kemas kini Saluran ThingSpeak menggunakan MQTT pada Raspberry Pi untuk maklumat lebih lanjut.

Langkah 8: Menghantar Data Jauh ke ThingSpeak Menggunakan ESP8266

Menghantar Data Jauh ke ThingSpeak Menggunakan ESP8266
Menghantar Data Jauh ke ThingSpeak Menggunakan ESP8266
Menghantar Data Jauh ke ThingSpeak Menggunakan ESP8266
Menghantar Data Jauh ke ThingSpeak Menggunakan ESP8266

Untuk langkah ini, kami akan menggunakan HW yang sama yang dijelaskan dalam tutorial muy:

IOT DIBUAT MUDAH: DATA MINGGU CAPTURING REMOTE: SUHU & HUMIDITI UV DAN UDARA

Kod yang akan kita gunakan di sini, pada dasarnya sama seperti yang digunakan pada tutorial itu. Mari komen bahagian paling penting kod:

Pertama, mari panggil perpustakaan ESP8266, tentukan klien WiFi dan tentukan kelayakan Router dan Thinkspeak tempatan anda:

/ * NodeMCU ESP12-E * /

#masuk pelanggan WiFiClient; const char * MY_SSID = "MASUKKAN DENGAN SSDID ANDA"; const char * MY_PWD = "MASUKKAN DENGAN KATA LALUAN ANDA"; / * Thinkspeak * / const char * TS_SERVER = "api.thingspeak.com"; Rentetan TS_API_KEY = "MASUKKAN DENGAN KUNCI MENULIS ANDA";

Kedua, mari sertakan perpustakaan yang sangat penting untuk projek IoT: SimpleTimer.h:

/ * PEMASA * /

#masuk pemasa SimpleTimer;

Ketiga, selama penyiapan (), kita akan memulai komunikasi bersiri, memanggil fungsi connectWiFi () dan menentukan pemasa. Perhatikan bahawa garis kod: timer.setInterval (60000L, sendDataTS); akan memanggil fungsi sendDataTS () setiap 60 saat, untuk memuat naik data ke saluran ThinkSpeak.

persediaan tidak sah ()

{… Serial.begin (115200); kelewatan (10); … ConnectWifi (); timer.setInterval (60000L, sendDataTS); …}

Akhirnya tetapi paling tidak, semasa gelung (), satu-satunya arahan yang diperlukan adalah memulakan pemasa dan hanya itu!

gelung kosong ()

{… Timer.run (); // Memulakan SimpleTimer}

Di bawah ini, anda dapat melihat dua fungsi penting yang digunakan untuk mengendalikan komunikasi Thinkspeak:

Sambungan ESP12-E dengan rangkaian WiFi anda:

/***************************************************

* Menyambungkan WiFi *********************************************** *** / batal connectWifi () {Serial.print ("Menyambung ke" + * MY_SSID); WiFi.begin (MY_SSID, MY_PWD); sementara (WiFi.status ()! = WL_CONNECTED) {kelewatan (1000); Cetakan bersiri ("."); } Serial.println (""); Serial.println ("WiFi Disambungkan"); Serial.println (""); }

ESP12-E menghantar data ke ThinkSpeak:

***************************************************

* Menghantar Data ke Saluran Thinkspeak ******************************************** ****** / batal sendDataTS (void) {if (client.connect (TS_SERVER, 80)) {String postStr = TS_API_KEY; postStr + = "& bidang6 ="; postStr + = Rentetan (temp); postStr + = "& bidang7 ="; postStr + = Rentetan (hum); postStr + = "& bidang8 ="; postStr + = Rentetan (dataSensorUV); postStr + = "\ r / n / r / n"; client.print ("POST / kemas kini HTTP / 1.1 / n"); client.print ("Host: api.thingspeak.com / n"); client.print ("Sambungan: tutup / n"); client.print ("X-THINGSPEAKAPIKEY:" + TS_API_KEY + "\ n"); client.print ("Content-Type: application / x-www-form-urlencoded / n"); client.print ("Panjang Kandungan:"); client.print (postStr.length ()); client.print ("\ n / n"); client.print (postStr); kelewatan (1000); } dihantar ++; pelanggan.stop (); }

Kod lengkap boleh didapati di GitHub saya: NodeMCU_UV_DHT_Sensor_OLED_TS_EXT

Setelah kod dimuat naik ke NodeMCU anda. Mari sambungkan bateri luaran dan lakukan pengukuran di bawah cahaya matahari. Saya meletakkan Stesen Jauh di atas bumbung dan mula menangkap data di ThingSpeak.com seperti yang ditunjukkan dalam gambar di atas.

Langkah 9: Nota Akhir

Nota Akhir
Nota Akhir

Tujuan utama tutorial ini adalah untuk menunjukkan cara menghubungkan Raspberry Pi ke ThingSpeak. Ini bagus untuk menangkap data dan mencatatnya di platform IoT.

Dengan menggunakan kesempatan tersebut, kami juga mengirim data ke saluran tertentu, menangkapnya dari stesen jauh menggunakan ESP8266. Pendekatan ini adalah OK, tetapi bukan yang terbaik. Kerana kami mempunyai operasi "tidak segerak", kadang-kadang, kedua-duanya, RPi dan ESP8266 cuba log pada masa yang sama (atau dengan selang kecil) apa yang dibantah oleh ThingSpeak. Yang ideal adalah ESP8266 menghantar data secara tempatan ke Raspberry Pi dan yang terakhir bertanggungjawab untuk mengendalikan semua data. Melakukannya, "Stesen Utama" (Raspberry Pi), dapat melakukan 3 perkara:

  • Log semua data pada pangkalan data tempatan
  • Kemukakan semua data di Halaman Web tempatan (menggunakan Flask seperti yang ditunjukkan pada foto di atas)
  • Menghantar semua data ke ThingSpeak pada masa yang sama.

Pada tutorial yang akan datang, kami akan meneroka pilihan tersebut.

Langkah 10: Kesimpulannya

Kesimpulannya
Kesimpulannya

Seperti biasa, saya harap projek ini dapat membantu orang lain memasuki dunia elektronik yang menarik!

Untuk keterangan dan kod akhir, sila kunjungi simpanan GitHub saya: RPi-NodeMCU-Weather-Station

Untuk lebih banyak projek, sila lawati blog saya: MJRoBot.org

Nantikan! Tutorial seterusnya kami akan menghantar data dari stesen cuaca jauh ke pusat, berdasarkan pelayan Raspberry Pi Web:

Imej
Imej

Saludos dari selatan dunia!

Jumpa anda dalam arahan saya seterusnya!

Terima kasih, Marcelo

Disyorkan: