- Bahan yang Diperlukan:
- Bagaimana perkara berfungsi?
- Pengaturcaraan ESP8266-01:
- Menghubungkan ESP8266-01 dengan Arduino:
- Program Arduino dan Bekerja:
ESP8266-01 telah menjadi modul yang bagus untuk memuaskan semua kehausan kami untuk projek IOT. Sejak dilancarkan, ia telah mengembangkan komuniti yang kuat dan berkembang menjadi modul Wi-Fi yang mudah digunakan, murah dan hebat. Platform sumber terbuka lain yang jauh lebih popular adalah Arduino, ia sudah mempunyai banyak projek yang dibina di sekitarnya. Menggabungkan dua platform ini akan membuka pintu untuk banyak projek inovatif, jadi dalam tutorial ini kita akan belajar bagaimana menghubungkan modul ESP8266-01 dengan Arduino. Dengan cara ini kita akan dapat mengirim atau menerima data antara Arduino dan Internet.
Untuk tujuan tutorial ini, kita akan membaca waktu, tarikh, suhu dan kelembapan dari internet menggunakan API dengan ESP8266-01. Kemudian hantarkan nilai-nilai ini ke papan Arduino dan paparkan pada skrin LCD 16 * 2. Bunyi sejuk betul !! Oleh itu, mari kita mulakan.
Bahan yang Diperlukan:
- Arduino Board (Sebarang versi)
- ESP8266-01
- Papan pengaturcara FTDI dengan pilihan 3.3V
- LCD 16x2
- Potensiometer
- Tekan butang
- Menyambung wayar
- Papan roti
Bagaimana perkara berfungsi?
Sebelum kita menyelami, penting untuk mengetahui bagaimana sebenarnya perkara ini dapat berfungsi. Pada asasnya, kita harus bermula dengan modul ESP8266-01. Kami akan menggunakan Arduino IDE untuk memprogram ESP8266 dan kodnya akan ditulis untuk menggunakan API untuk membaca fail JSON melalui permintaan http. Kemudian kita akan frasa fail JSON ini untuk mengekstrak maklumat yang diperlukan sahaja dari fail JSON yang lengkap.
Setelah maklumat diungkapkan, kami akan mencetaknya menggunakan komunikasi bersiri. Talian bersiri ini kemudian akan dihubungkan ke Arduino, sehingga Arduino dapat membaca maklumat yang dikirim dari ESP8266. Setelah maklumat dibaca dan diproses, kami akan memaparkannya di skrin LCD.
Tidak apa-apa, jika anda belum memahami sepenuhnya ini, kerana kita akan belajar sama dalam tutorial ini.
Pengaturcaraan ESP8266-01:
Tutorial ini mengandaikan bahawa anda mempunyai pengalaman dengan modul ESP8266. Sekiranya tidak, adalah disyorkan untuk membaca tiga tutorial berikut untuk memahami sepenuhnya mengenainya.
- Bermula dengan ESP8266-01
- Pengaturcaraan ESP8266-01 menggunakan perintah AT
- Memprogram ESP8266-01 menggunakan Arduino IDE dan Memancarkan memori
Anda juga boleh menyemak semua projek ESP8266 kami di sini.
Di sini kita akan memprogram modul ESP8266-01 menggunakan Arduino IDE. Untuk perkakasan, kami menggunakan papan FTDI dengan 3.3V untuk memprogram ESP8266, kerana ia akan menjadikan perkakasan lebih mudah. Gambarajah litar untuk menghubungkan ESP8266 anda dengan papan FTDI ditunjukkan di bawah.
Pastikan syarat berikut dipenuhi
1. ESP8266-01 hanya bertoleransi 3.3V, jangan gunakan 5V. Oleh itu, tetapkan FTDI hanya dalam mod 3.3V.
2. GPIO_0 mesti dibumikan untuk mod pengaturcaraan
3. Pin reset harus disambungkan melalui butang ke pin ground. Butang ini harus ditekan sebelum memuat naik kod. Setiap kali butang ditekan LED biru pada modul ESP8266-01 akan naik tinggi untuk menunjukkan bahawa modul diset semula.
Setelah sambungan selesai, buka Arduino IDE dan periksa sama ada anda berjaya memuat naik program contoh. Sekiranya anda tidak pasti bagaimana menggunakan Arduino IDE untuk memuat naik program ke ESP8266, ikuti Pengaturcaraan ESP8266 bersama Arduino untuk mempelajarinya. Pada ketika ini saya menganggap bahawa anda telah berjaya memuat naik program sekelip mata.
. Program lengkap diberikan di akhir halaman ini di bawah ini saya menerangkannya sebagai potongan kecil. Program ini juga memerlukan pustaka Arduino JSON untuk dikompilasi, jadi jika anda belum menambahkan perpustakaan ke Arduino IDE anda, maka tambahkan dengan memuat turun dari perpustakaan Arduino JSON dari Github.
ESP8266 harus berhubung dengan internet untuk mendapatkan data mengenai tarikh, masa, suhu dan kelembapan. Oleh itu, anda harus membenarkannya menyambung ke Wi-Fi anda dengan membuktikan SSID dan Kata Laluan pada baris di bawah
const char * ssid = "JIO-Fi"; // Masukkan SSID Wi-Fi const char * password = "Pas123"; // Masukkan Kata Laluan Wi-Fi anda
Di dalam fungsi setup () kami memeriksa apakah ESP dapat terhubung dengan Wi-Fi, jika tidak, ia akan menunggu di sana selamanya hanya dengan mencetak "Menyambung.." pada monitor bersiri.
sementara (WiFi.status ()! = WL_CONNECTED) {// Tunggu sehingga Wi-Fi disambungkan kelewatan (1000); Serial.print ("Menyambung.."); // Cetak Menyambung.. sehingga sambungan terjalin }
Langkah seterusnya adalah langkah yang sangat penting. Sekiranya sambungan Wi-Fi berjaya, kita harus meminta permintaan http untuk membaca fail JSON dari internet. Dalam tutorial ini saya menggunakan API yang disediakan oleh wunderground.com. Oleh itu, jika anda merancang untuk menggunakan yang sama, anda boleh masuk ke pautan dan mendaftar untuk mendapatkan kunci API percuma atau menggunakan apa-apa API pilihan anda. Setelah anda selesai menggunakan API, anda akan mempunyai pautan seperti di bawah
Catatan: Saya telah menukar kunci API pautan ini sehingga ini tidak akan berfungsi. Jaga kunci API anda dengan selamat dan jangan berkongsi.
API saya di sini digunakan untuk mendapatkan data cuaca di Chennai. Anda boleh menggunakan sebarang API. Tetapi apabila anda memuatkan API di mana-mana penyemak imbas, ia harus mengembalikan fail JSON. Contohnya API saya mengembalikan fail JSON berikut
Anda mungkin mengembalikan fail dengan data yang berbeza. Kami dapat memeriksa sama ada fail JSON ini juga diterima oleh ESP8266 kami dengan membacanya dan mencetak JSON pada monitor bersiri kami menggunakan baris berikut
int httpCode = http.GET (); // lulus permintaan get jika (httpCode> 0) {// Periksa kod pengembalian // payload = http.getString (); // Simpan nilai pada Payload varibale untuk penyahpepijatan // Serial.println (muatan); // Cetak muatan untuk penyahpepijatan, sebaliknya komen kedua-dua baris
Saya telah mengulas baris ini, kerana ia hanya diperlukan untuk ujian. Sebaik sahaja anda memastikan bahawa ESP8266 dapat memperoleh data JSON, inilah masanya untuk membuat frasa Data. Seperti yang anda lihat, data ini sangat besar dan kebanyakan nilainya tidak berguna kecuali yang diperlukan untuk kita seperti tarikh, masa, suhu dan kelembapan.
Oleh itu, kami menggunakan perpustakaan JSON Arduino untuk memisahkan nilai yang diperlukan untuk kami dan menyimpannya dalam pemboleh ubah. Ini mungkin kerana nilai dalam fail JSON ditetapkan sebagai pasangan nilai nama. Jadi nama ini adalah rentetan yang akan menyimpan nilai yang diperlukan untuk kita.
Untuk melakukan ini, kita mesti beralih ke laman web yang akan menganalisis fail JSON dan memberi kita kod Arduino. Ya semudah itu. Teruskan ke https://arduinojson.org/assistant/ dan tempel fail JSON yang kami muatkan di penyemak imbas kami dan tekan enter. Setelah selesai saya kelihatan seperti di bawah ini
Tatal ke bawah sedikit untuk melihat program frasa yang dibuat secara automatik
Yang perlu anda lakukan ialah memilih pemboleh ubah yang anda mahukan, salin dan tampal pada Arduino IDE anda, seperti yang saya lakukan di sini
/ * Frasa Data menggunakan librarey JSON * / // Gunakan https://arduinojson.org/assistant/ untuk mendapatkan nilai frasa untuk string JSON const size_t bufferSize = JSON_OBJECT_SIZE (0) + JSON_OBJECT_SIZE (1) + JSON_OBJECT_SIZE (2) + 2 * JSON_OBJECT_SIZE (3) + JSON_OBJECT_SIZE (8) + JSON_OBJECT_SIZE (12) + JSON_OBJECT_SIZE (56) + 2160; DynamicJsonBuffer jsonBuffer (bufferSize); JsonObject & root = jsonBuffer.parseObject (http.getString ()); / * Akhir Frasa Data * / // Menangani nilai sin kepada pemboleh ubah yang diingini JsonObject & current_observation = root; // di bawah current_observation JsonObject & current_observation_observation_location = current_observation; // di bawah pemerhatian_lokasi const char * current_observation_station_id = current_observation; // "ICHENNAI1" // dapatkan detial lokasi const char * current_observation_local_time_rfc822 = current_observation; // Waktu tempatan // dapatkan waktu tempatan const char * current_observation_temperature_string = current_observation; // "90.7 F (32.6 C)" // dapatkan nilai suhu const char * current_observation_relative_humidity = current_observation; // "73%" // dapatkan nilai kelembapan
Saya baru saja menyalin pemboleh ubah current_observation_station_id, current_observation_local_time_rfc822, current_observation_temperature_string dan current_observation_relative_humidity . Oleh kerana kami merancang untuk memaparkan hanya empat data tersebut di layar LCD kami.
Akhirnya, kami telah memperoleh data yang kami perlukan dari internet dan menyimpannya sebagai pemboleh ubah yang boleh kami gunakan dengan selesa. Untuk menghantar data ini ke Arduino, kami hanya perlu menulisnya secara bersiri walaupun monitor Serial. Garis berikut akan melakukan perkara yang sama
// Cetak pemboleh ubah melalui monitor bersiri Serial.print (current_observation_station_id); // hantarkan butiran lokasi ke Arduino delay (100); // kelewatan kestabilan Serial.print (current_observation_local_time_rfc822); // hantarkan butiran waktu tempatan kepada Arduino delay (100); // kelewatan kestabilan Serial.print (current_observation_temperature_string); // hantarkan butiran suhu ke Arduino delay (100); // kelewatan kestabilan Serial.print (current_observation_relative_humidity); // hantarkan butiran kelembapan kepada Arduino delay (100); // kelewatan kestabilan
Perhatikan bahawa saya telah menggunakan Serial.print () dan bukan Serial.println () kerana perintah Serial.println () akan menambahkan a / n dan / r bersama dengan data yang tidak diperlukan untuk kami. Kami juga telah menambahkan kelewatan 10 saat sehingga ESP akan mengirimkan nilai-nilai ini hanya pada selang waktu 10 saat ke Arduino.
Menghubungkan ESP8266-01 dengan Arduino:
Sejauh ini kami telah memprogram ESP8266-01 kami untuk membaca data yang diperlukan dari internet pada selang waktu 10 saat dan menghantarnya secara bersiri. Sekarang kita harus menghubungkan ESP dengan Arduino supaya kita dapat membaca data bersiri ini. Kita juga harus menambahkan paparan LCD 16 * 2 ke Arduino sehingga kita dapat memaparkan data yang diterima dari modul ESP8266. The gambarajah litar untuk berhubung ESP8266 modul dengan Arduino ditunjukkan di bawah
Pastikan pin GPIO_0 dibiarkan bebas, hidupkan modul hanya dengan pin Arduino 3.3V dan tekan butang tekan untuk meletakkan modul ESP dalam modul operasi. Sekarang program yang kami muat naik ke ESP seharusnya sudah mulai berfungsi dan modulnya harus mengirim data melalui pin bersiri ke Arduino. Pin bersiri ini disambungkan ke pin nombor 6 dan 7 di Arduino. Oleh itu, kita boleh menggunakan pilihan siri perisian di Arduino untuk membaca data bersiri ini dari pin.
Program Arduino dan Bekerja:
The program Arduino lengkap juga diberikan bersama-sama dengan kod ESP pada akhir halaman ini. Anda boleh menatal ke bawah untuk melihat program atau membaca lebih lanjut jika anda ingin memahami program tersebut.
Program antara muka cukup mudah, kita hanya perlu menggunakan pustaka bersiri perisian untuk membaca data dari pin 6 dan 7 dan memaparkannya di layar LCD. Oleh kerana data yang diterima dalam format string, kita harus menggunakan pilihan substring untuk memecah muatan dengan keperluan kita atau bahkan mengubahnya menjadi bilangan bulat jika diperlukan. Oleh itu, kita mulakan dengan menentukan pin yang disambungkan dengan LCD.
const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // Pin ke mana LCD disambungkan LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
Oleh kerana kami telah menghubungkan pin Rx dan Tx ESP8266 dengan pin Arduino ke -6 dan ke- 7, kami harus menginisialisasi siri Perisian untuk pin tersebut sehingga kami dapat menerima data bersiri dari mereka. Saya mempunyai nama ini sebagai ESP_Serial, anda boleh namakan apa sahaja yang anda mahukan
PerisianSerial ESP_Serial (6,7); // Tx, Rx
Di dalam fungsi setup () kita menginisialisasi komunikasi bersiri untuk monitor Serial dan juga untuk siri perisian. Sekiranya anda dapat mengingat, kami membuat program ESP untuk berkomunikasi pada 9600 baud rate jadi kami harus menggunakan baud rate yang sama untuk port serial perisian. Kami juga memaparkan mesej intro kecil di LCD selama 2 saat.
persediaan tidak sah () {lcd.begin (16, 2); // Kami menggunakan lcd.print LCD 16 * 2 ("Arduino & ESP"); // Paparkan mesej intro Serial.begin (115200); ESP_Serial.begin (9600); kelewatan (2000); lcd.clear (); }
Di dalam fungsi gelung utama () kita harus memeriksa sama ada ESP8266 menghantar sesuatu. Sekiranya ya, maka kita membaca rentetan dari ESP8266 dan menyimpannya ke pemboleh ubah yang disebut muatan. Muatan berubah-ubah adalah jenis String dan ia akan menyimpan maklumat lengkap yang dihantar dari modul ESP8266.
sementara (ESP_Serial.available ()> 0) {payload = ESP_Serial.readString ();
Sekarang kita harus memisahkan tali ini menjadi potongan kecil sehingga kita dapat menggunakannya untuk tujuan kita sendiri, dalam hal ini kita harus memisahkannya untuk memaparkannya di layar LCD. Ini dapat dilakukan dengan mudah dengan menggunakan fungsi substring di Arduino. Anda harus mengetahui kedudukan setiap watak untuk menggunakan fungsi substring ini. Anda boleh mencetak muatan pada monitor bersiri untuk mengetahui kedudukan watak dan menggunakannya untuk mengkategorikan substring seperti yang ditunjukkan di bawah
local_date = payload.substring (14, 20); local_time = payload.substring (26, 31); suhu = muatan. substring (48, 54); Kelembapan = muatan. Substring (55, 60);
Sekarang saya boleh terus maju dan menggunakan pemboleh ubah ini untuk mencetaknya di monitor bersiri atau hanya mencetaknya di LCD. Walau bagaimanapun, mencetaknya pada monitor Serial akan membantu kita memeriksa apakah substring terbelah dengan betul. Seterusnya kami hanya mencetaknya pada paparan LCD menggunakan baris berikut
lcd.clear (); lcd.setCursor (1, 0); lcd.print (tarikh_ tempatan); lcd.setCursor (8, 0); lcd.print (waktu tempatan); lcd.setCursor (1, 1); lcd.print (suhu); lcd.setCursor (10, 1); lcd.print (Kelembapan);
Muat naik program ke Arduino, dan pastikan sambungannya seperti yang ditunjukkan dalam rajah litar di atas. Laraskan kontras paparan LCD sehingga anda melihat perkara dengan jelas. Anda akan melihat mesej Pengenalan pada LCD dan kemudian setelah beberapa saat perincian seperti tarikh, waktu, suhu dan Kelembapan harus dipaparkan di skrin LCD seperti gambar di bawah.
Anda juga dapat melihat lampu LED biru pada ESP8266 berkelip setiap kali Data masuk. Sekiranya anda tidak dapat melihatnya, ini bermakna ESP tidak berada dalam mod pengaturcaraan, cuba tekan butang Reset dan periksa sambungannya.
Sama dengan ini, anda boleh menggunakan API apa pun untuk mendapatkan data yang diperlukan dari internet dan memasukkannya ke Arduino dan memproses kerja anda dengan Arduino. Terdapat banyak API yang tersedia di internet dan dengan semua itu, anda boleh membuat sejumlah projek. Harap anda memahami projek ini dan seronok membinanya. Sekiranya anda menghadapi masalah, hantarkannya di bahagian komen di bawah atau di forum kami.
Anda boleh mendapatkan semua projek berkaitan ESP8266 kami di sini.