11 KiB
Valdykite savo naktinę lemputę internetu - Wio Terminal
IoT įrenginys turi būti užprogramuotas taip, kad naudotų MQTT protokolą ir bendrautų su test.mosquitto.org, siųsdamas telemetrijos duomenis su šviesos jutiklio rodmenimis bei priimdamas komandas LED valdymui.
Šioje pamokos dalyje prijungsite savo Wio Terminal prie MQTT brokerio.
Įdiekite WiFi ir MQTT Arduino bibliotekas
Norint bendrauti su MQTT brokeriu, reikia įdiegti keletą Arduino bibliotekų, kurios leis naudoti Wio Terminal WiFi lustą ir bendrauti per MQTT. Kurdami Arduino įrenginiams, galite naudoti daugybę bibliotekų, kurios yra atvirojo kodo ir suteikia įvairias funkcijas. Seeed skelbia bibliotekas, leidžiančias Wio Terminal bendrauti per WiFi. Kiti kūrėjai yra paskelbę bibliotekas, skirtas MQTT brokeriams, ir jūs naudosite jas savo įrenginyje.
Šios bibliotekos pateikiamos kaip šaltinio kodas, kurį galima automatiškai importuoti į PlatformIO ir sukompiliuoti jūsų įrenginiui. Tokiu būdu Arduino bibliotekos veiks bet kuriame įrenginyje, palaikančiame Arduino sistemą, jei tik įrenginys turi specifinę aparatūrą, reikalingą tai bibliotekai. Kai kurios bibliotekos, pavyzdžiui, Seeed WiFi bibliotekos, yra skirtos tik tam tikrai aparatūrai.
Bibliotekos gali būti įdiegtos globaliai ir sukompiliuotos, jei reikia, arba konkrečiam projektui. Šiai užduočiai bibliotekos bus įdiegtos į projektą.
✅ Daugiau apie bibliotekų valdymą ir kaip jas rasti bei įdiegti galite sužinoti PlatformIO bibliotekų dokumentacijoje.
Užduotis - įdiekite WiFi ir MQTT Arduino bibliotekas
Įdiekite Arduino bibliotekas.
-
Atidarykite naktinės lemputės projektą VS Code.
-
Pridėkite šį kodą į
platformio.ini
failo pabaigą: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
Tai importuoja Seeed WiFi bibliotekas. Sintaksė
@ <number>
nurodo specifinę bibliotekos versiją.💁 Galite pašalinti
@ <number>
, kad visada naudotumėte naujausią bibliotekos versiją, tačiau nėra garantijos, kad naujesnės versijos veiks su žemiau pateiktu kodu. Šis kodas buvo išbandytas su šia bibliotekos versija.Tai viskas, ką reikia padaryti norint pridėti bibliotekas. Kitą kartą, kai PlatformIO kompiliuos projektą, jis atsisiųs šių bibliotekų šaltinio kodą ir įtrauks jį į jūsų projektą.
-
Pridėkite šį kodą į
lib_deps
:knolleary/PubSubClient @ 2.8
Tai importuoja PubSubClient, Arduino MQTT klientą.
Prisijunkite prie WiFi
Dabar Wio Terminal gali būti prijungtas prie WiFi.
Užduotis - prisijunkite prie WiFi
Prijunkite Wio Terminal prie WiFi.
-
Sukurkite naują failą
src
aplanke, pavadintąconfig.h
. Tai galite padaryti pasirinkęsrc
aplanką arbamain.cpp
failą viduje ir paspaudę Naujo failo mygtuką naršyklėje. Šis mygtukas pasirodo tik tada, kai jūsų žymeklis yra virš naršyklės. -
Pridėkite šį kodą į failą, kad apibrėžtumėte konstantas savo WiFi prisijungimo duomenims:
#pragma once #include <string> using namespace std; // WiFi credentials const char *SSID = "<SSID>"; const char *PASSWORD = "<PASSWORD>";
Pakeiskite
<SSID>
savo WiFi SSID. Pakeiskite<PASSWORD>
savo WiFi slaptažodžiu. -
Atidarykite
main.cpp
failą. -
Pridėkite šias
#include
direktyvas failo viršuje:#include <PubSubClient.h> #include <rpcWiFi.h> #include <SPI.h> #include "config.h"
Tai įtraukia antraštinius failus bibliotekoms, kurias pridėjote anksčiau, taip pat konfigūracijos antraštinį failą. Šie antraštiniai failai reikalingi, kad PlatformIO įtrauktų bibliotekų kodą. Jei šių antraštinių failų aiškiai neįtrauksite, kai kurie kodai nebus sukompiliuoti ir gausite kompiliavimo klaidų.
-
Pridėkite šį kodą virš
setup
funkcijos:void connectWiFi() { while (WiFi.status() != WL_CONNECTED) { Serial.println("Connecting to WiFi.."); WiFi.begin(SSID, PASSWORD); delay(500); } Serial.println("Connected!"); }
Šis kodas kartoja, kol įrenginys neprisijungia prie WiFi, ir bando prisijungti naudodamas SSID ir slaptažodį iš konfigūracijos antraštinio failo.
-
Pridėkite šios funkcijos iškvietimą
setup
funkcijos apačioje, po to, kai sukonfigūruojami pinai.connectWiFi();
-
Įkelkite šį kodą į savo įrenginį, kad patikrintumėte, ar WiFi ryšys veikia. Tai turėtumėte matyti serijiniame monitoriuje.
> 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!
Prisijunkite prie MQTT
Kai Wio Terminal prisijungia prie WiFi, jis gali prisijungti prie MQTT brokerio.
Užduotis - prisijunkite prie MQTT
Prisijunkite prie MQTT brokerio.
-
Pridėkite šį kodą į
config.h
failo apačią, kad apibrėžtumėte prisijungimo duomenis MQTT brokeriui:// MQTT settings const string ID = "<ID>"; const string BROKER = "test.mosquitto.org"; const string CLIENT_NAME = ID + "nightlight_client";
Pakeiskite
<ID>
unikaliu ID, kuris bus naudojamas kaip šio įrenginio kliento pavadinimas ir vėliau kaip temos, kurias šis įrenginys publikuoja ir prenumeruoja, pavadinimai. test.mosquitto.org brokeris yra viešas ir naudojamas daugelio žmonių, įskaitant kitus studentus, dirbančius su šia užduotimi. Turėdami unikalų MQTT kliento pavadinimą ir temos pavadinimus, užtikrinsite, kad jūsų kodas nesikirs su kitų žmonių kodu. Šio ID jums taip pat reikės, kai vėliau kursite serverio kodą šiai užduočiai.💁 Galite naudoti tokią svetainę kaip GUIDGen, kad sugeneruotumėte unikalų ID.
BROKER
yra MQTT brokerio URL.CLIENT_NAME
yra unikalus šio MQTT kliento pavadinimas brokeriui. -
Atidarykite
main.cpp
failą ir pridėkite šį kodą poconnectWiFi
funkcijos ir viršsetup
funkcijos:WiFiClient wioClient; PubSubClient client(wioClient);
Šis kodas sukuria WiFi klientą, naudodamas Wio Terminal WiFi bibliotekas, ir naudoja jį MQTT klientui sukurti.
-
Po šio kodo pridėkite:
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); } } }
Ši funkcija tikrina ryšį su MQTT brokeriu ir prisijungia iš naujo, jei ryšys nutrūksta. Ji kartoja, kol nėra prisijungusi, ir bando prisijungti naudodama unikalų kliento pavadinimą, apibrėžtą konfigūracijos antraštiniame faile.
Jei prisijungimas nepavyksta, bandoma iš naujo po 5 sekundžių.
-
Pridėkite šį kodą po
reconnectMQTTClient
funkcijos:void createMQTTClient() { client.setServer(BROKER.c_str(), 1883); reconnectMQTTClient(); }
Šis kodas nustato MQTT brokerį klientui, taip pat nustato atgalinio iškvietimo funkciją, kai gaunama žinutė. Tada bandoma prisijungti prie brokerio.
-
Iškvieskite
createMQTTClient
funkcijąsetup
funkcijoje po to, kai prisijungiama prie WiFi. -
Pakeiskite visą
loop
funkciją šiuo kodu:void loop() { reconnectMQTTClient(); client.loop(); delay(2000); }
Šis kodas pradeda nuo prisijungimo prie MQTT brokerio patikrinimo. Šie ryšiai gali lengvai nutrūkti, todėl verta reguliariai tikrinti ir prisijungti iš naujo, jei reikia. Tada jis iškviečia
loop
metodą MQTT kliente, kad apdorotų bet kokias žinutes, kurios ateina į prenumeruojamą temą. Ši programa yra vienos gijos, todėl žinutės negali būti gaunamos fone, todėl pagrindinėje gijoje reikia skirti laiko laukiančių žinučių apdorojimui.Galiausiai, 2 sekundžių uždelsimas užtikrina, kad šviesos lygiai nebūtų siunčiami per dažnai ir sumažina įrenginio energijos suvartojimą.
-
Įkelkite kodą į savo Wio Terminal ir naudokite serijinį monitorių, kad pamatytumėte, kaip įrenginys prisijungia prie WiFi ir 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
💁 Šį kodą galite rasti code-mqtt/wio-terminal aplanke.
😀 Jūs sėkmingai prijungėte savo įrenginį prie MQTT brokerio.
Atsakomybės apribojimas:
Šis dokumentas buvo išverstas naudojant AI vertimo paslaugą Co-op Translator. Nors siekiame tikslumo, prašome atkreipti dėmesį, kad automatiniai vertimai gali turėti klaidų ar netikslumų. Originalus dokumentas jo gimtąja kalba turėtų būti laikomas autoritetingu šaltiniu. Dėl svarbios informacijos rekomenduojama profesionali žmogaus vertimo paslauga. Mes neprisiimame atsakomybės už nesusipratimus ar klaidingus interpretavimus, atsiradusius naudojant šį vertimą.