Daftar Isi:

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

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

Video: Stasiun Cuaca IoT Dengan RPi dan ESP8266: 10 Langkah
Video: PROJECT ARDUINO IOT MONITORING CUACA/WEATHER STATION BERBASIS NODEMCU-ESP8266 & APLIKASI BLYNK #iot 2024, November
Anonim
Stasiun Cuaca IoT Dengan RPi dan ESP8266
Stasiun Cuaca IoT Dengan RPi dan ESP8266

Pada tutorial sebelumnya, kita telah bermain dengan NodeMCU, sensor, dan mempelajari cara menangkap dan mencatat data di ThingSpeak (platform Internet of Things (IoT) yang memungkinkan Anda mengumpulkan dan menyimpan data sensor di cloud dan mengembangkan aplikasi IoT):

IOT DIBUAT MUDAH: MENANGKAP DATA CUACA JAUH: SUHU & KELEMBABAN UV DAN UDARA

Dengan tutorial baru ini, kita akan belajar bagaimana melakukan hal yang sama tetapi kali ini, menggunakan Raspberry Pi untuk menangkap data dari beberapa sensor yang berbeda dan juga mengeksplorasi berbagai cara berkomunikasi antara perangkat dan web:

Jenis Sensor dan Komunikasi:

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

Diagram Blok menunjukkan apa yang akan kita dapatkan di akhir proyek ini:

Gambar
Gambar

Langkah 1: BoM - Bill of Material

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

Langkah 2: Memasang Sensor Suhu & Kelembaban

Memasang Sensor Suhu & Kelembaban
Memasang Sensor Suhu & Kelembaban

Sensor pertama yang dipasang adalah DHT22 untuk menangkap data suhu udara dan kelembaban relatif. Situs ADAFRUIT memberikan informasi hebat tentang sensor tersebut. Di bawah ini, beberapa informasi diambil dari sana:

Gambaran

Sensor suhu & kelembaban DHT murah sangat mendasar dan lambat tetapi sangat bagus untuk penggemar yang ingin melakukan pencatatan data dasar. Sensor DHT terdiri dari dua bagian, sensor kelembaban kapasitif, dan termistor. Ada juga chip yang sangat mendasar di dalamnya yang melakukan beberapa konversi analog ke digital dan mengeluarkan sinyal digital dengan suhu dan kelembaban. Sinyal digital cukup mudah dibaca menggunakan mikrokontroler apa pun.

DHT22 Karakteristik utama:

  • Biaya rendah
  • Daya 3 hingga 5V dan I/O
  • 2.5mA max penggunaan saat ini selama konversi (saat meminta data)
  • Baik untuk pembacaan kelembaban 0-100% dengan akurasi 2-5%
  • Baik untuk pembacaan suhu -40 hingga 125 ° C ± 0,5 ° C akurasi
  • Tidak lebih dari 0.5 Hz sampling rate (setiap 2 detik sekali)
  • Ukuran tubuh 15.1mm x 25mm x 7.7mm
  • 4 pin dengan jarak 0,1"

Setelah biasanya Anda akan menggunakan sensor pada jarak kurang dari 20m, resistor 4K7 ohm harus dihubungkan antara pin Data dan VCC. Pin data keluaran DHT22 akan disambungkan ke Raspberry GPIO 16. Periksa diagram kelistrikan di atas, sambungkan sensor ke pin RPi seperti di bawah ini:

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

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

Setelah sensor terhubung, kita juga harus menginstal perpustakaannya di RPi kita.

Memasang Pustaka DHT:

Di Raspberry Anda, mulai dari /home, buka /Documents

cd dokumen

Buat direktori untuk menginstal perpustakaan dan pindah ke sana:

mkdir DHT22_Sensor

cd DHT22_Sensor

Di browser Anda, buka Adafruit GitHub:

github.com/adafruit/Adafruit_Python_DHT

Unduh perpustakaan dengan mengklik tautan unduhan zip di sebelah kanan dan unzip arsip di folder Raspberry Pi Anda yang baru saja dibuat. Lalu pergi ke direktori perpustakaan (subfolder yang secara otomatis dibuat ketika Anda membuka ritsleting file), dan jalankan perintah:

sudo python3 setup.py install

Buka program uji (DHT22_test.py) dari GITHUB saya

impor Adafruit_DHT

DHT22Sensor = Adafruit_DHT. DHT22 DHTpin = 16 kelembaban, suhu = Adafruit_DHT.read_retry(DHT22Sensor, DHTpin) jika kelembaban tidak Tidak ada dan suhu tidak Tidak ada: print('Temp={0:0.1f}*C Humidity={1:0.1 f}%'.format(suhu, kelembaban)) else: print('Gagal membaca. Coba lagi!')

Jalankan program dengan perintah:

python3 DHT22_test.py

Layar cetak Terminal di bawah ini menunjukkan hasilnya.

Gambar
Gambar

Langkah 3: Memasang DS18B20 - Sensor Suhu

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

Ikhtisar Sensor:

Kami akan menggunakan dalam tutorial ini versi tahan air dari sensor DS18B20. Ini sangat berguna untuk suhu yang jauh dalam kondisi basah, misalnya di tanah yang lembab. Sensor diisolasi dan dapat melakukan pengukuran hingga 125oC (Adafrut tidak merekomendasikan untuk menggunakannya di atas 100oC karena jaket kabel PVC-nya).

DS18B20 adalah sensor digital yang membuatnya baik digunakan bahkan untuk jarak jauh! Sensor suhu digital 1-kawat ini cukup presisi (±0,5°C pada sebagian besar rentang) dan dapat memberikan presisi hingga 12 bit dari konverter digital-ke-analog onboard. Mereka bekerja sangat baik dengan NodeMCU menggunakan satu pin digital, dan Anda bahkan dapat menghubungkan beberapa pin ke pin yang sama, masing-masing memiliki ID 64-bit unik yang dibakar di pabrik untuk membedakannya.

Sensor bekerja dari 3.0 hingga 5.0V, yang berarti dapat diaktifkan langsung dari 3.3V yang disediakan oleh salah satu pin Raspberry (1 atau 17).

Sensor memiliki 3 kabel:

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

Di sini, Anda dapat menemukan data lengkap: Lembar Data DS18B20

Instalasi Sensor:

Ikuti diagram di atas dan buat koneksi:

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

Memasang Pustaka Python:

Selanjutnya, mari kita instal library Python yang akan menangani sensor:

sudo pip3 instal w1thermsensor

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

Jangan lupa untuk me-restart RPi Anda, setelah mengubah konfigurasinya

Menguji sensor:

Untuk menguji sensor, skrip python sederhana dapat digunakan:

waktu impor

dari w1thermsensor import W1ThermSensor ds18b20Sensor = W1ThermSensor() while True: temperature = ds18b20Sensor.get_temperature() print("The temperature is %s celsius" % temperature) time.sleep(1)

Langkah 4: Memasang BMP180

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

Ikhtisar Sensor:

BMP180 adalah penerus BMP085, generasi baru sensor tekanan digital presisi tinggi untuk aplikasi konsumen. Daya ultra-rendah, elektronik tegangan rendah dari BMP180 dioptimalkan untuk digunakan di ponsel, PDA, perangkat navigasi GPS, dan peralatan luar ruangan. Dengan kebisingan ketinggian rendah hanya 0,25m pada waktu konversi yang cepat, BMP180 menawarkan kinerja yang unggul. Antarmuka I2C memungkinkan integrasi sistem yang mudah dengan mikrokontroler. BMP180 didasarkan pada teknologi piezo-resistif untuk ketahanan EMC, akurasi tinggi, dan linieritas serta stabilitas jangka panjang.

Lembar data BMP lengkap dapat ditemukan di sini: BMP180 - Sensor Tekanan Digital

Instalasi Sensor: Ikuti diagram di atas dan buat koneksi:

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

Mengaktifkan Antarmuka I2C

Buka Konfigurasi RPi dan konfirmasikan bahwa antarmuka I2C diaktifkan. Jika tidak, aktifkan dan mulai ulang RPi.

Menggunakan BMP180

Jika semuanya telah diinstal dengan baik, dan semuanya telah terhubung dengan baik, Anda sekarang siap untuk menyalakan Pi Anda dan mulai melihat apa yang dikatakan BMP180 tentang dunia di sekitar Anda.

Hal pertama yang harus dilakukan adalah memeriksa apakah Pi melihat BMP180 Anda. Coba yang berikut ini di jendela terminal:

sudo i2cdetect -y 1

Jika perintah berhasil, Anda akan melihat sesuatu yang mirip dengan Terminal Printscreen di atas, yang menunjukkan bahwa BMP180 berada di saluran '77'.

Memasang Pustaka BMP180:

Buat direktori untuk menginstal perpustakaan:

mkdir BMP180_Sensorcd BMP180_Sensor

Di browser Anda, buka Adafruit GIThub:

github.com/adafruit/Adafruit_Python_BMP

Unduh perpustakaan dengan mengklik tautan unduhan zip di sebelah kanan dan unzip arsip di folder yang dibuat Raspberry Pi Anda. Lalu pergi ke subfolder yang dibuat dan jalankan perintah berikut di direktori perpustakaan:

sudo python3 setup.py install

Buka Python IDE Anda dan buat program pengujian dan beri nama, misalnya BMP180Test.py

import Adafruit_BMP. BMP085 as BMP085sensor = BMP085. BMP085() print('Temp = {0:0.2f} *C'.format(sensor.read_temperature())) print('Pressure = {0:0.2f} Pa'. format(sensor.read_pressure())) print('Ketinggian = {0:0.2f} m'.format(sensor.read_altitude())) print('Tekanan Permukaan Laut = {0:0.2f} Pa'.format(sensor.read_sealevel_pressure()))

Jalankan program percobaan:

python3 BMP180Test.py

Layar cetak Terminal di atas menunjukkan hasilnya.

Perhatikan bahwa tekanan disajikan dalam Pa (Pascals). Lihat langkah selanjutnya untuk lebih memahami tentang unit ini.

Langkah 5: Mengukur Cuaca dan Ketinggian Dengan BMP180

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

Mari luangkan waktu untuk memahami sedikit lebih banyak tentang apa yang akan kita dapatkan, dengan pembacaan BMP. Anda dapat melewati bagian tutorial ini, atau kembali lagi nanti.

Jika Anda ingin tahu lebih banyak tentang pembacaan Sensor, silakan kunjungi tutorial hebat ini:

BMP180 dirancang untuk mengukur tekanan atmosfer secara akurat. Tekanan atmosfer bervariasi dengan cuaca dan ketinggian.

Apa itu Tekanan Atmosfer?

Definisi tekanan atmosfer adalah kekuatan yang dikerahkan oleh udara di sekitar Anda pada segala sesuatu. Berat gas di atmosfer menciptakan tekanan atmosfer. Satuan umum tekanan adalah "pon per inci persegi" atau psi. Di sini kita akan menggunakan notasi internasional, yaitu newton per meter persegi, yang disebut pascal (Pa).

Jika Anda mengambil kolom udara selebar 1 cm, beratnya sekitar 1 kg

Bobot ini, menekan jejak kolom itu, menciptakan tekanan atmosfer yang dapat kita ukur dengan sensor seperti BMP180. Karena kolom udara selebar cm itu beratnya 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 Anda naik. Semakin tinggi Anda, semakin sedikit tekanan yang akan Anda lihat, karena kolom ke puncak atmosfer jauh lebih pendek dan karenanya lebih ringan. Ini berguna untuk diketahui, karena dengan mengukur tekanan dan melakukan beberapa matematika, Anda dapat menentukan ketinggian Anda.

Tekanan udara di 3.810 meter hanya setengah dari itu di permukaan laut.

BMP180 mengeluarkan tekanan absolut dalam pascal (Pa). Satu pascal adalah jumlah tekanan yang sangat kecil, kira-kira sama dengan tekanan yang diberikan selembar kertas saat diletakkan di atas meja. Anda akan lebih sering melihat pengukuran dalam hektopaskal (1 hPa = 100 Pa). Pustaka yang digunakan di sini menyediakan keluaran nilai titik-mengambang dalam hPa, yang kebetulan juga sama dengan satu milibar (mbar).

Berikut adalah beberapa konversi ke unit tekanan lainnya:

  • 1 hPa = 100 Pa = 1 mbar = 0,001 bar
  • 1 hPa = 0,7506168 Torr
  • 1 hPa = 0,01450377 psi (pon per inci persegi)
  • 1 hPa = 0,02953337 inHg (inci air raksa)
  • 1 hpa = 0,00098692 atm (atmosfer standar)

Efek Suhu

Karena suhu mempengaruhi densitas gas, dan densitas mempengaruhi massa gas, dan massa mempengaruhi tekanan (wah), tekanan atmosfer akan berubah secara dramatis dengan suhu. Pilot tahu ini sebagai "ketinggian kepadatan", yang membuatnya lebih mudah untuk lepas landas pada hari yang dingin daripada hari yang panas karena udara lebih padat dan memiliki efek aerodinamis yang lebih besar. Untuk mengimbangi suhu, BMP180 menyertakan sensor suhu yang cukup baik serta sensor tekanan.

Untuk melakukan pembacaan tekanan, pertama-tama Anda melakukan pembacaan suhu, kemudian menggabungkannya dengan pembacaan tekanan mentah untuk menghasilkan pengukuran tekanan kompensasi suhu akhir. (Perpustakaan membuat semua ini sangat mudah.)

Mengukur Tekanan Mutlak

Jika aplikasi Anda memerlukan pengukuran tekanan absolut, yang harus Anda lakukan adalah mendapatkan pembacaan suhu, kemudian melakukan pembacaan tekanan (lihat contoh sketsa untuk detailnya). Pembacaan tekanan akhir akan dalam hPa = mbar. Jika mau, Anda dapat mengonversinya ke unit lain menggunakan faktor konversi di atas.

Perhatikan bahwa tekanan mutlak atmosfer akan bervariasi dengan ketinggian Anda dan pola cuaca saat ini, keduanya merupakan hal yang berguna untuk diukur.

Pengamatan Cuaca

Tekanan atmosfer di lokasi tertentu di bumi (atau di mana pun dengan atmosfer) tidak konstan. Interaksi yang kompleks antara putaran bumi, kemiringan sumbu, dan banyak faktor lainnya menghasilkan pergerakan daerah dengan tekanan yang lebih tinggi dan lebih rendah, yang pada gilirannya menyebabkan variasi cuaca yang kita lihat setiap hari. Dengan memperhatikan perubahan tekanan, Anda dapat memprediksi perubahan cuaca jangka pendek. Misalnya, penurunan tekanan biasanya berarti cuaca basah atau badai mendekat (sistem tekanan rendah sedang bergerak). Tekanan yang meningkat biasanya berarti cuaca cerah akan segera tiba (sistem tekanan tinggi sedang bergerak). Tapi ingat bahwa tekanan atmosfer juga bervariasi dengan ketinggian. Tekanan absolut di rumah saya, Lo Barnechea di Chili (ketinggian 950m) akan selalu lebih rendah daripada tekanan absolut di San Francisco misalnya (kurang dari 2 meter, hampir permukaan laut). Jika stasiun cuaca baru saja melaporkan tekanan absolutnya, akan sulit untuk secara langsung membandingkan pengukuran tekanan dari satu lokasi ke lokasi lain (dan prediksi cuaca skala besar bergantung pada pengukuran dari sebanyak mungkin stasiun).

Untuk mengatasi masalah ini, stasiun cuaca selalu menghilangkan efek ketinggian dari pembacaan tekanan yang dilaporkan dengan secara matematis menambahkan tekanan tetap yang setara untuk membuatnya tampak seolah-olah pembacaan dilakukan di permukaan laut. Ketika Anda melakukan ini, pembacaan yang lebih tinggi di San Francisco daripada Lo Barnechea akan selalu karena pola cuaca, dan bukan karena ketinggian.

Untuk melakukan ini, ada fungsi di perpustakaan yang disebut sea level(P, A). Ini mengambil tekanan absolut (P) dalam hPa, dan ketinggian stasiun saat ini (A) dalam meter, dan menghilangkan efek ketinggian dari tekanan. Anda dapat menggunakan output dari fungsi ini untuk secara langsung membandingkan pembacaan cuaca Anda dengan stasiun lain di seluruh dunia.

Menentukan Ketinggian

Karena tekanan bervariasi menurut ketinggian, Anda dapat menggunakan sensor tekanan untuk mengukur ketinggian (dengan beberapa peringatan). Tekanan rata-rata atmosfer di permukaan laut adalah 1013,25 hPa (atau mbar). Ini turun ke nol saat Anda mendaki menuju ruang hampa. Karena kurva penurunan ini dipahami dengan baik, Anda dapat menghitung perbedaan ketinggian antara dua pengukuran tekanan (p dan p0) dengan menggunakan persamaan tertentu.

Jika Anda menggunakan tekanan permukaan laut (1013,25 hPa) sebagai tekanan dasar (p0), output persamaan akan menjadi ketinggian Anda saat ini di atas permukaan laut. Ada fungsi di perpustakaan yang disebut ketinggian (P, P0) yang memungkinkan Anda mendapatkan "ketinggian yang dihitung".

Penjelasan di atas disarikan dari tutorial BMP 180 Sparkfun.

Langkah 6: HW Lengkap

HW Lengkap
HW Lengkap

Langkah 7: Mengirim Data ke ThingSpeak

Mengirim Data ke ThingSpeak
Mengirim Data ke ThingSpeak

Pada titik ini, kami belajar bagaimana mempersiapkan RPi untuk menangkap data dari ketiga sensor, mencetaknya di terminal. Sekarang, saatnya untuk melihat cara mengirim data tersebut ke platform IoT, ThingSpeak.

Mari kita mulai!

Pertama, Anda harus memiliki akun di ThinkSpeak.com

Ikuti petunjuk untuk membuat Saluran dan catat ID Saluran dan Tulis Kunci API Anda

Unduh Skrip Python dari GitHub saya: localData ToTS_v1_EXT.py

Mari beri komentar kode bagian yang paling penting:

Pertama, mari impor perpustakaan ThingSpeak, tentukan klien WiFi dan tentukan kredensial Router dan Thinkspeak lokal Anda:

impor hal-hal berbicara

Ada beberapa cara untuk berkomunikasi dengan ThingSpeak, cara paling sederhana adalah menggunakan pustaka klien untuk API thingspeak.com yang dikembangkan oleh Mikolaj Chwaliz dan Keith Ellis.

Perpustakaan dapat diunduh dari https://github.com/mchwalisz/thingspeak atau menggunakan PIP di terminal:

sudo pip3 instal thingspeak

Selanjutnya, di dalam skrip, perbarui kredensial saluran ThingSpeak

chId = 9999999 # Masuk dengan Id Saluran Anda

tsKey='ENTER WITH YOUR CHANNEL WRITE KEY' tsUrl='https://api.thingspeak.com/update' ts = thingspeak. Channel(chId, tsUrl, tsKey)

Sekarang, mari kita inisialisasi 3 sensor:

# DS18B20 1-Wire library

dari w1thermsensor import W1ThermSensor ds18b20Sensor = W1ThermSensor() # Secara default GPIO 4 digunakan oleh library # DHT22 Library import Adafruit_DHT DHT22Sensor = Adafruit_DHT. DHT22 DHTpin = 16 # BMP180 library import Adafruit_BMP. BMP0851805Sensor = BMP085085Sensor = BMP085Sensor. Anda harus menentukan ketinggian sebenarnya di mana Stasiun Cuaca Anda berada, memperbarui variabel Global "altReal". Dalam kasus saya, Stasiun saya terletak di 950m di atas permukaan laut

altReal global

altReal = 950

Setelah masuk dengan stasiun ketinggian sebenarnya sebagai input, kita dapat memperoleh tekanan absolut, tekanan permukaan laut, suhu, dan ketinggian menggunakan fungsi bmp180GetData(altitude):

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 absolut dalam hPa (atau mbar) alt=putaran (alt) presSeaLevel = putaran (presSeaLevel/100, 2) # tekanan absolut dalam hPa (atau mbar) kembali temp, pres, alt, presSeaLevel

Fungsi getLocalData(), akan mengembalikan semua data lokal yang ditangkap oleh stasiun kita:

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, DHTpin tidak ada) jika humDHT tidak ada dan tempDHT bukan None: humLab = round (humDHT

Setelah Anda memiliki semua data yang ditangkap oleh fungsi-fungsi di atas, Anda harus mengirimkannya 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 dikirim untuk 5 bidang: ", tempLab, tempExt, humLab, presSL, altLab)

Dengan data saluran Anda diperbarui, simpan skrip dan jalankan di terminal Anda:

sudo Python3 localData_ToTs_v1_EXT.py

Tentang protokol Komunikasi

Perhatikan bahwa menggunakan "perpustakaan thingspeak", "permintaan perpustakaan" diimpor, yaitu perpustakaan HTTP Berlisensi Apache2, yang ditulis dengan Python. Dokumentasi resmi Permintaan Instalasi dapat ditemukan di sini:

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

Jika perlu, sebelum menjalankan skrip, Anda dapat memverifikasi apakah pustaka permintaan telah diinstal:

sudo pip3 instal permintaan

Secara opsional, Anda dapat menggunakan MTTQ sebagai metode untuk mengirim data ke ThingSpeak. MQTT berbeda dari HTTP, dulu MQTT dirancang khusus agar ringan dan ditujukan untuk perangkat yang disematkan dengan RAM dan kinerja CPU yang rendah. Juga, dalam banyak kasus, MQTT menggunakan lebih sedikit bandwidth.

Lihat tutorial ini: Perbarui Saluran ThingSpeak menggunakan MQTT pada Raspberry Pi untuk lebih jelasnya.

Langkah 8: Mengirim Data Jarak Jauh ke ThingSpeak Menggunakan ESP8266

Mengirim Data Jarak Jauh ke ThingSpeak Menggunakan ESP8266
Mengirim Data Jarak Jauh ke ThingSpeak Menggunakan ESP8266
Mengirim Data Jarak Jauh ke ThingSpeak Menggunakan ESP8266
Mengirim Data Jarak Jauh ke ThingSpeak Menggunakan ESP8266

Untuk langkah ini, kita akan menggunakan HW yang sama seperti yang dijelaskan di banyak tutorial:

IOT DIBUAT MUDAH: MENANGKAP DATA CUACA JAUH: SUHU & KELEMBABAN UV DAN UDARA

Kode yang akan kita gunakan di sini, pada dasarnya sama dengan yang digunakan pada tutorial itu. Mari beri komentar kode bagian yang paling penting:

Pertama, panggil perpustakaan ESP8266, tentukan klien WiFi dan tentukan kredensial Router dan Thinkspeak lokal Anda:

/* NodeMCU ESP12-E */

#sertakan klien WiFiClient; const char* MY_SSID = "MASUKKAN DENGAN SSDID ANDA"; const char* MY_PWD = "MASUKKAN DENGAN PASSWORD ANDA"; /* Thinkspeak */ const char* TS_SERVER = "api.thingspeak.com"; String TS_API_KEY ="MASUKKAN DENGAN KUNCI TULIS ANDA";

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

/* WAKTU */

#sertakan pengatur waktu SimpleTimer;

Ketiga, selama setup(), kita akan memulai komunikasi serial, memanggil fungsi connectWiFi() dan menentukan timer. Perhatikan bahwa baris kode: timer.setInterval(60000L, sendDataTS); akan memanggil fungsi sendDataTS() setiap 60 detik, untuk mengunggah data ke saluran ThinkSpeak.

batalkan pengaturan()

{ … Serial.begin(115200); penundaan (10); … hubungkan Wifi(); timer.setInterval(60000L, sendDataTS); … }

Akhirnya, selama loop(), satu-satunya perintah yang diperlukan adalah memulai timer dan hanya itu!

lingkaran kosong()

{ … timer.run(); // Memulai SimpleTimer }

Di bawah ini, Anda dapat melihat dua fungsi penting yang digunakan untuk menangani komunikasi Thinkspeak:

Koneksi ESP12-E dengan jaringan WiFi Anda:

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

* Menghubungkan WiFi *********************************************** ***/ void connectWifi() { Serial.print("Menghubungkan ke "+ *MY_SSID); WiFi.begin(MY_SSID, MY_PWD); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.print("."); } Serial.println(""); Serial.println("WiFi Terhubung"); Serial.println(""); }

ESP12-E mengirim data ke ThinkSpeak:

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

* Mengirim Data ke Saluran Thinkspeak ******************************************** ******/ void sendDataTS(void) { if (client.connect(TS_SERVER, 80)) { String postStr = TS_API_KEY; postStr += "&field6="; postStr += String(temp); postStr += "&field7="; postStr += String(berdengung); postStr += "&field8="; postStr += String(dataSensorUV); postStr += "\r\n\r\n"; client.print("POST /update HTTP/1.1\n"); client.print("Host: api.thingspeak.com\n"); client.print("Koneksi: tutup\n"); client.print("X-THINGSPEAKAPIKEY: " + TS_API_KEY + "\n"); client.print("Jenis Konten: application/x-www-form-urlencoded\n"); client.print("Panjang Konten: "); client.print(postStr.length()); klien.print("\n\n"); klien.print(postStr); penundaan (1000); } dikirim++; klien.berhenti(); }

Kode lengkap dapat ditemukan di GitHub saya: NodeMCU_UV_DHT_Sensor_OLED_TS_EXT

Setelah Anda memiliki kode yang diunggah ke NodeMCU Anda. Mari kita hubungkan baterai eksternal dan lakukan pengukuran di bawah matahari. Saya meletakkan Remote Station di atap dan mulai mengambil data di ThingSpeak.com seperti yang ditunjukkan pada foto di atas.

Langkah 9: Catatan Akhir

Catatan Akhir
Catatan Akhir

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

Dengan menggunakan kesempatan itu, kami juga mengirim data ke saluran tertentu, menangkapnya dari stasiun jarak jauh menggunakan ESP8266. Ini adalah pendekatan yang OK, tapi bukan yang terbaik. Karena kita memiliki operasi "asynchronous", kadang-kadang, baik, RPi dan ESP8266 mencoba untuk login pada saat yang sama (atau dengan interval kecil) apa yang dibantah oleh ThingSpeak. Yang ideal adalah ESP8266 mengirim data secara lokal ke Raspberry Pi dan yang terakhir bertanggung jawab untuk menangani semua data. Melakukan itu, "Stasiun Utama" (Raspberry Pi), dapat melakukan 3 hal:

  • Catat semua data di database lokal
  • Sajikan semua data di Halaman Web lokal (menggunakan Flask seperti yang ditunjukkan pada foto di atas)
  • Mengirim semua data ke ThingSpeak secara bersamaan.

Pada tutorial mendatang, kita akan mengeksplorasi opsi tersebut.

Langkah 10: Kesimpulan

Kesimpulan
Kesimpulan

Seperti biasa, saya berharap proyek ini dapat membantu orang lain menemukan jalan mereka ke dunia elektronik yang menarik!

Untuk detail dan kode akhir, silakan kunjungi penyimpanan GitHub saya: RPi-NodeMCU-Weather-Station

Untuk proyek lainnya, silakan kunjungi blog saya: MJRoBot.org

Pantau terus! Tutorial selanjutnya kita akan mengirimkan data dari stasiun cuaca jarak jauh ke stasiun pusat, berdasarkan server Web Raspberry Pi:

Gambar
Gambar

Saludos dari selatan dunia!

Sampai jumpa di instruksi saya berikutnya!

Terima kasih, Marcelo

Direkomendasikan: