Library untuk membuat query HTTP dengan modul WiFi ESP8266 dan Arduino

Library untuk membuat query HTTP dengan modul WiFi ESP8266 dan Arduino

Library untuk membuat query HTTP dengan modul WiFi ESP8266 dan Arduino

Cara sederhana untuk mengirimkan informasi ke dan dari mikrokontroler adalah dengan memusatkannya pada server web. Meskipun metode ini tidak seefisien, misalnya, mengakses database secara langsung, metode ini cukup efektif, terutama jika Anda mempertimbangkan proyek berbasis mikrokontroler, dan menambahkan keunggulan ubiquity (data di cloud) dan kesederhanaan (itu dapat ditangani sebagai informasi teks dan perintah). Mengirim informasi menggunakan sistem ini dapat terdiri dari membuat permintaan HTTP POST dan menerimanya dengan menganalisis konten respons terhadap permintaan HTTP GET.

Daftar Isi

    El Modul WiFi ESP8266 Ini adalah pilihan yang sangat ekonomis, dengan kinerja yang sangat cocok untuk digunakan dengan mikrokontroler dan sangat mudah digunakan bekerja dengan perintah AT.

    Untuk mensistematisasikan penggunaannya dengan permintaan HTTP, saya telah mengembangkan perpustakaan kecil yang mendukung kebutuhan proyek perangkat manajemen tidur saya (yang saya sebut SleepManager) karena mendasarkan infrastrukturnya pada server web yang memungkinkannya diperluas ke suatu objek. IOT sebagai layanan cloud. Tidak sulit untuk menambahkan layanan lain seperti permintaan UDP ke perpustakaan, misalnya sinkronisasi waktu melalui NTP meskipun, seperti yang saya jelaskan di teks tertaut, ini tidak penting untuk kebutuhan saya dan saya dapat menyelesaikannya dengan permintaan HTTP ke halaman web yang disiapkan untuk tujuan itu, seperti yang saya tunjukkan dalam contoh penggunaan perpustakaan ini.

    Pengoperasian perpustakaan didasarkan pada pengiriman perintah AT ketika perangkat tersedia dan mengulanginya (dengan sedikit penundaan) jika terjadi kesalahan, yang ditafsirkan sebagai tidak tersedianya (berhasil, dengan pengujian) misalnya dari titik akses WiFi atau server sedang dikonsultasikan.

    Perpustakaan memanfaatkan fakta bahwa modul WiFi ESP8266 mengembalikan kode +IPD sebagai peringatan penerimaan data untuk mengisi buffer kecil dengan informasi yang dikembalikan oleh server. Untuk proyek perangkat manajemen tidur saya perlu menganalisis sangat sedikit data yang dikembalikan dari server sehingga, untuk menghemat, buffer dan penunjuk yang menjalankannya sangat kecil; Ini akan menjadi salah satu hal pertama yang harus Anda ubah untuk menggunakan kembali perpustakaan guna memproses data dalam jumlah lebih besar.

    Fungsi-fungsi yang diekspos sebagai publik memungkinkan (1) mengetahui status modul: apakah terhubung atau tidak, apakah ada data di buffer dan berapa banyak dan apakah modul ESP8266 telah menyelesaikan operasi yang diminta; (2) terhubung ke titik akses WiFi di jaringan dengan server DHCP dan (3) membuat permintaan HTTP GET dan POST meskipun, seperti yang akan Anda lihat, kode ini dirancang untuk membuatnya sangat mudah untuk menambahkan yang lain.

    Mengenai fungsi internal, pertama-tama dua matriks dibangun, satu dengan perintah AT dan satu lagi dengan respons yang diharapkan untuk keberhasilan dan kesalahan; Kemudian, program yang menggunakan perpustakaan harus memanggil fungsi tersebut dari waktu ke waktu mengirim yang akan bertugas mengirimkan pesanan ke modul jika tersedia dan tidak sibuk dan ke fungsinya recibir yang akan memproses respons dari modul ESP8266 (dan dari server HTTP yang melaluinya jika ada)

    Karena ada kemungkinan modul terputus karena kehilangan sinyal, program utama dapat memeriksa apakah modul ESP8266 terhubung ke titik akses WiFi (dengan fungsi Koneksi) dan coba sambungkan sebaliknya (dengan fungsi sambungkan_wifi)

    Untuk mengetahui apakah operasi yang diminta telah selesai, program dapat menggunakan fungsi tersebut operasi_selesai dan dalam hal ini kirim yang lain atau gunakan data yang dihasilkan yang fungsinya digunakan baca_buffer, yang mengembalikan isi buffer yang telah diisi dengan data yang tiba di modul ESP8266 hingga operasi selesai, dan fungsinya buffer_length yang melaporkan jumlah data ini yang telah diperingatkan oleh server bahwa data tersebut akan dikirim (sehingga informasi dari modul itu sendiri dapat diabaikan)

    Contoh di bawah ini menggunakan HTTP query library dengan modul WiFi ESP8266 untuk mengirimkan data ke server (persentase yang diperoleh dari pembacaan input analog) setiap interval waktu tertentu. Karena tidak mengharapkan respons apa pun, ia tidak menggunakan buffer dan cukup untuk menyelesaikan operasi dengan benar. Sistem inilah yang saya gunakan dalam proyek perangkat manajemen tidur saya untuk menyimpan hasil pembacaan sensor di server.

    Contoh berikut menggunakan kueri HTTP GET untuk menanyakan waktu server dan menyinkronkannya dengan waktu perangkat yang dikontrol mikro dengan menambahkan perkiraan waktu respons; Faktanya, ia menambahkan 4 hingga 6 detik lagi untuk memastikan bahwa waktu perangkat lebih besar daripada waktu server dan untuk dengan mudah memeriksa apakah waktu pada jam waktu nyata yang merupakan bagian dari perangkat sudah benar atau telah hilang karena pengunduhan. .baterai.

    Setelah banyak tes saya telah memverifikasi bahwa sistem ini Sinkronisasi waktu dengan modul WiFi ESP8266 Ini cukup akurat untuk kebutuhan saya; dalam kasus terburuk dengan kesalahan kurang dari 10 detik yang agak tidak relevan dalam kasus saya.

    Seperti yang dapat dilihat pada kode, panjang buffer perlu ditanyakan terlebih dahulu karena pembacaan akan meresetnya sehingga tersedia untuk menyimpan data baru.

    Setelah isi buffer dibaca, dalam contoh ini diproses untuk mendapatkan waktu. Pertama, teks di antara tanda kurung kurawal dipilih (server merespons menggunakan perintah PHP gema “{“.waktu().”}”) mengubahnya menjadi "objek waktu" dan memperoleh tanggal dan waktu darinya dalam format manusia.

    Contoh program berikut, terinspirasi oleh permintaan pengguna, digunakan untuk menemukan alamat IP publik menggunakan layanan ini PeriksaIP AWS (Layanan Web Amazon) setiap lima menit.

    Seperti pada contoh sebelumnya, dibuat serangkaian asumsi yang harus diubah tergantung pada konfigurasi jaringan yang digunakan (192.168.1.X, dalam contoh), SSID dan kunci WiFi... Cara menemukan Alamat IP tidak terlalu elegan, diasumsikan bahwa ini adalah baris terakhir dari respons terhadap permintaan HTTP GET meskipun mungkin ada API untuk melakukannya dengan cara yang lebih ortodoks.


    Anda bisa unduh perpustakaan ESP8266 untuk kueri HTTP dengan Arduino Uno (tanpa konsol) dan dari sini Anda bisa unduh perpustakaan permintaan HTTP ESP8266 untuk Arduino yang menggunakan konsol, yaitu perlu mengimplementasikan port serial melalui perangkat lunak atau digunakan sebagai perangkat keras, misalnya motherboard arduino mega o arduino leonardo.

    Anda mungkin melewatkannya