You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/translations/id/1-getting-started/lessons/4-connect-internet/wio-terminal-mqtt.md

11 KiB

Kendalikan lampu malam Anda melalui Internet - Wio Terminal

Perangkat IoT perlu diprogram untuk berkomunikasi dengan test.mosquitto.org menggunakan MQTT agar dapat mengirim nilai telemetri dengan pembacaan sensor cahaya, serta menerima perintah untuk mengontrol LED.

Dalam bagian pelajaran ini, Anda akan menghubungkan Wio Terminal Anda ke broker MQTT.

Instal pustaka WiFi dan MQTT Arduino

Untuk berkomunikasi dengan broker MQTT, Anda perlu menginstal beberapa pustaka Arduino agar dapat menggunakan chip WiFi di Wio Terminal dan berkomunikasi dengan MQTT. Saat mengembangkan perangkat Arduino, Anda dapat menggunakan berbagai pustaka yang berisi kode sumber terbuka dan mengimplementasikan beragam kemampuan. Seeed menerbitkan pustaka untuk Wio Terminal yang memungkinkan perangkat ini berkomunikasi melalui WiFi. Pengembang lain telah menerbitkan pustaka untuk berkomunikasi dengan broker MQTT, dan Anda akan menggunakan pustaka ini dengan perangkat Anda.

Pustaka-pustaka ini disediakan sebagai kode sumber yang dapat diimpor secara otomatis ke PlatformIO dan dikompilasi untuk perangkat Anda. Dengan cara ini, pustaka Arduino akan berfungsi pada perangkat apa pun yang mendukung kerangka kerja Arduino, dengan asumsi perangkat tersebut memiliki perangkat keras spesifik yang diperlukan oleh pustaka tersebut. Beberapa pustaka, seperti pustaka WiFi dari Seeed, hanya berlaku untuk perangkat keras tertentu.

Pustaka dapat diinstal secara global dan dikompilasi jika diperlukan, atau ke dalam proyek tertentu. Untuk tugas ini, pustaka akan diinstal ke dalam proyek.

Anda dapat mempelajari lebih lanjut tentang manajemen pustaka dan cara menemukan serta menginstal pustaka di dokumentasi pustaka PlatformIO.

Tugas - instal pustaka WiFi dan MQTT Arduino

Instal pustaka Arduino.

  1. Buka proyek lampu malam di VS Code.

  2. Tambahkan hal berikut ke akhir file platformio.ini:

    lib_deps =
        seeed-studio/Seeed Arduino rpcWiFi @ 1.0.5
        seeed-studio/Seeed Arduino FS @ 2.1.1
        seeed-studio/Seeed Arduino SFUD @ 2.0.2
        seeed-studio/Seeed Arduino rpcUnified @ 2.1.3
        seeed-studio/Seeed_Arduino_mbedtls @ 3.0.1
    

    Ini mengimpor pustaka WiFi dari Seeed. Sintaks @ <number> merujuk pada nomor versi spesifik dari pustaka tersebut.

    💁 Anda dapat menghapus @ <number> untuk selalu menggunakan versi terbaru dari pustaka, tetapi tidak ada jaminan bahwa versi terbaru akan berfungsi dengan kode di bawah ini. Kode di sini telah diuji dengan versi pustaka ini.

    Ini adalah semua yang perlu Anda lakukan untuk menambahkan pustaka. Saat PlatformIO membangun proyek berikutnya, ia akan mengunduh kode sumber untuk pustaka ini dan mengompilasinya ke dalam proyek Anda.

  3. Tambahkan hal berikut ke lib_deps:

    knolleary/PubSubClient @ 2.8
    

    Ini mengimpor PubSubClient, sebuah klien MQTT Arduino.

Hubungkan ke WiFi

Wio Terminal sekarang dapat dihubungkan ke WiFi.

Tugas - hubungkan ke WiFi

Hubungkan Wio Terminal ke WiFi.

  1. Buat file baru di folder src bernama config.h. Anda dapat melakukannya dengan memilih folder src, atau file main.cpp di dalamnya, lalu memilih tombol New file dari explorer. Tombol ini hanya muncul saat kursor Anda berada di atas explorer.

    Tombol file baru

  2. Tambahkan kode berikut ke file ini untuk mendefinisikan konstanta untuk kredensial WiFi Anda:

    #pragma once
    
    #include <string>
    
    using namespace std;
    
    // WiFi credentials
    const char *SSID = "<SSID>";
    const char *PASSWORD = "<PASSWORD>";
    

    Ganti <SSID> dengan SSID WiFi Anda. Ganti <PASSWORD> dengan kata sandi WiFi Anda.

  3. Buka file main.cpp.

  4. Tambahkan direktif #include berikut ke bagian atas file:

    #include <PubSubClient.h>
    #include <rpcWiFi.h>
    #include <SPI.h>
    
    #include "config.h"
    

    Ini menyertakan file header untuk pustaka yang Anda tambahkan sebelumnya, serta file header konfigurasi. File header ini diperlukan untuk memberi tahu PlatformIO agar membawa kode dari pustaka. Tanpa secara eksplisit menyertakan file header ini, beberapa kode tidak akan dikompilasi dan Anda akan mendapatkan kesalahan kompilasi.

  5. Tambahkan kode berikut di atas fungsi setup:

    void connectWiFi()
    {
        while (WiFi.status() != WL_CONNECTED)
        {
            Serial.println("Connecting to WiFi..");
            WiFi.begin(SSID, PASSWORD);
            delay(500);
        }
    
        Serial.println("Connected!");
    }
    

    Kode ini melakukan loop saat perangkat tidak terhubung ke WiFi, dan mencoba menghubungkan menggunakan SSID dan kata sandi dari file header konfigurasi.

  6. Tambahkan pemanggilan fungsi ini di bagian bawah fungsi setup, setelah pin dikonfigurasi.

    connectWiFi();
    
  7. Unggah kode ini ke perangkat Anda untuk memeriksa apakah koneksi WiFi berfungsi. Anda seharusnya melihat ini di monitor serial.

    > Executing task: platformio device monitor <
    
    --- Available filters and text transformations: colorize, debug, default, direct, hexlify, log2file, nocontrol, printable, send_on_enter, time
    --- More details at http://bit.ly/pio-monitor-filters
    --- Miniterm on /dev/cu.usbmodem1101  9600,8,N,1 ---
    --- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
    Connecting to WiFi..
    Connected!
    

Hubungkan ke MQTT

Setelah Wio Terminal terhubung ke WiFi, perangkat ini dapat terhubung ke broker MQTT.

Tugas - hubungkan ke MQTT

Hubungkan ke broker MQTT.

  1. Tambahkan kode berikut ke bagian bawah file config.h untuk mendefinisikan detail koneksi ke broker MQTT:

    // MQTT settings
    const string ID = "<ID>";
    
    const string BROKER = "test.mosquitto.org";
    const string CLIENT_NAME = ID + "nightlight_client";
    

    Ganti <ID> dengan ID unik yang akan digunakan sebagai nama klien perangkat ini, dan nanti untuk topik yang dipublikasikan dan disubscribe oleh perangkat ini. Broker test.mosquitto.org bersifat publik dan digunakan oleh banyak orang, termasuk siswa lain yang sedang mengerjakan tugas ini. Memiliki nama klien MQTT dan nama topik yang unik memastikan kode Anda tidak akan berbenturan dengan kode orang lain. Anda juga akan membutuhkan ID ini saat membuat kode server nanti dalam tugas ini.

    💁 Anda dapat menggunakan situs web seperti GUIDGen untuk menghasilkan ID unik.

    BROKER adalah URL broker MQTT.

    CLIENT_NAME adalah nama unik untuk klien MQTT ini di broker.

  2. Buka file main.cpp, dan tambahkan kode berikut di bawah fungsi connectWiFi dan di atas fungsi setup:

    WiFiClient wioClient;
    PubSubClient client(wioClient);
    

    Kode ini membuat klien WiFi menggunakan pustaka WiFi Wio Terminal dan menggunakannya untuk membuat klien MQTT.

  3. Di bawah kode ini, tambahkan hal berikut:

    void reconnectMQTTClient()
    {
        while (!client.connected())
        {
            Serial.print("Attempting MQTT connection...");
    
            if (client.connect(CLIENT_NAME.c_str()))
            {
                Serial.println("connected");
            }
            else
            {
                Serial.print("Retying in 5 seconds - failed, rc=");
                Serial.println(client.state());
    
                delay(5000);
            }
        }
    }
    

    Fungsi ini menguji koneksi ke broker MQTT dan menyambungkan kembali jika tidak terhubung. Fungsi ini melakukan loop sepanjang waktu saat tidak terhubung dan mencoba menyambungkan menggunakan nama klien unik yang didefinisikan dalam file header konfigurasi.

    Jika koneksi gagal, fungsi ini mencoba lagi setelah 5 detik.

  4. Tambahkan kode berikut di bawah fungsi reconnectMQTTClient:

    void createMQTTClient()
    {
        client.setServer(BROKER.c_str(), 1883);
        reconnectMQTTClient();
    }
    

    Kode ini menetapkan broker MQTT untuk klien, serta menetapkan callback saat pesan diterima. Kemudian mencoba menyambungkan ke broker.

  5. Panggil fungsi createMQTTClient dalam fungsi setup setelah WiFi terhubung.

  6. Ganti seluruh fungsi loop dengan hal berikut:

    void loop()
    {
        reconnectMQTTClient();
        client.loop();
    
        delay(2000);
    }
    

    Kode ini dimulai dengan menyambungkan kembali ke broker MQTT. Koneksi ini dapat dengan mudah terputus, jadi ada baiknya untuk secara rutin memeriksa dan menyambungkan kembali jika diperlukan. Kemudian memanggil metode loop pada klien MQTT untuk memproses pesan apa pun yang masuk pada topik yang disubscribe. Aplikasi ini bersifat single-threaded, sehingga pesan tidak dapat diterima pada thread latar belakang, oleh karena itu waktu pada thread utama perlu dialokasikan untuk memproses pesan apa pun yang menunggu pada koneksi jaringan.

    Akhirnya, penundaan selama 2 detik memastikan tingkat cahaya tidak dikirim terlalu sering dan mengurangi konsumsi daya perangkat.

  7. Unggah kode ke Wio Terminal Anda, dan gunakan Serial Monitor untuk melihat perangkat terhubung ke WiFi dan MQTT.

    > Executing task: platformio device monitor <
    
    source /Users/jimbennett/GitHub/IoT-For-Beginners/1-getting-started/lessons/4-connect-internet/code-mqtt/wio-terminal/nightlight/.venv/bin/activate
    --- Available filters and text transformations: colorize, debug, default, direct, hexlify, log2file, nocontrol, printable, send_on_enter, time
    --- More details at http://bit.ly/pio-monitor-filters
    --- Miniterm on /dev/cu.usbmodem1201  9600,8,N,1 ---
    --- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
    Connecting to WiFi..
    Connected!
    Attempting MQTT connection...connected
    

💁 Anda dapat menemukan kode ini di folder code-mqtt/wio-terminal.

😀 Anda telah berhasil menghubungkan perangkat Anda ke broker MQTT.


Penafian:
Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI Co-op Translator. Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini.