NodeMCU MQTT Iot Project - Kytkinpainike: 4 vaihetta
NodeMCU MQTT Iot Project - Kytkinpainike: 4 vaihetta
Anonim
Image
Image

OSOYOO NodeMCU IOT Aloituspakkaus

Seuraa meitä Facebookissa, löydä uusi julkaistu tuotteemme ja jaa ideasi ja video tuotteidemme luovasta käytöstä. Meiltä saat rahat takaisin tai lahjoituksia! Facebook:

Youtube:

Tässä oppitunnissa liitämme kytkinpainikkeen NodeMCU: hon ja lähetämme kytkimen tilan MQTT -välittäjälle. Kun painiketta painetaan, NodeMCU julkaisee painikkeen tilan "painettuna" MQTT -välittäjälle ja MQTT -asiakas tilaa nämä viestit. Kun painike vapautetaan, “ei painettu” lähetetään.

Vaihe 1: Valmistelu

Yhteyskaavio
Yhteyskaavio

Laitteisto:

NodeMCU -levy x 1

Kytkinpainike x 1

1K vastus x 1

Leipälauta x 1

Hyppyjohdot

Ohjelmisto:

Arduino IDE (versio 1.6.4+)

ESP8266 -korttipaketti ja sarjaportin ohjain

MQTT -asiakas (MQTTBox täällä)

Arduino -kirjasto: PubSubClient

Vaihe 2: Yhteyskaavio

Tässä oppitunnissa käytämme D2: ta (GPIO4) kytkimen ohjaamiseen, asenna laitteisto kytkentäkaavion mukaan.

Huomautus: 1k-vastusta käytetään alasvetovastana, Tällaisessa piirissä, kun kytkin on suljettu, NodeMCU-tulo on loogisessa korkeassa arvossa, mutta kun kytkin on auki, alasvetovastus vetää syöttöjännitettä alas (looginen nolla -arvo), mikä estää määrittelemättömän tilan tulossa.

Vaihe 3: Koodi

Koodi
Koodi
Koodi
Koodi

Kopioi alla oleva koodi Arduino IDE: hen:

/ * _ _ _ _ _ _ _ _ _ _ * / _ / / _) / _ / | | | | / _ / / _ / / _) _ / | / *| | _ | | _ | | _ | | | _ | | | _ | | | _ | ((_ | | _ | | | | | * / _/ (_/ / _/ / _ | / _/ / _ (_) _) _/ | _ | _ | _ | * (_/ * Käytä NodeMCU lähettää kytkimen painikkeen tilan MQTT -asiakkaalle WiFi -yhteyden kautta * Opetusohjelman URL -osoite: * CopyRight www.osoyoo.com */ #include #include

int BUTTON_PIN = D2; // -painike on kytketty GPIO -nastaan D1

// Päivitä nämä verkkoosi sopivilla arvoilla. const char*ssid = "********"; // laita wifi ssid tänne const char*password = "********"; // laita wifi -salasanasi tähän. const char* mqtt_server = "välittäjä.mqttdashboard.com"; // const char* mqtt_server = "iot.eclipse.org";

WiFiClient espClient;

PubSubClient -asiakas (espClient); pitkä lastMsg = 0; char msg [50];

void setup_wifi () {

viive (100); // Aloitamme yhdistämällä WiFi -verkkoon Serial.print ("Connecting to"); Sarja.println (ssid); WiFi.begin (ssid, salasana); while (WiFi.status ()! = WL_CONNECTED) {delay (500); Serial.print ("."); } satunnaisiemen (micros ()); Serial.println (""); Serial.println ("WiFi -yhteys"); Serial.println ("IP -osoite:"); Serial.println (WiFi.localIP ()); }

mitätön takaisinsoitto (char* aihe, tavu* hyötykuorma, allekirjoittamaton int pituus)

{} // lopeta soittopyyntö

void reconnect () {

// Kierrä, kunnes muodostamme yhteyden uudelleen (! Client.connected ()) {Serial.print ("Yritetään MQTT -yhteyttä…"); // Luo satunnainen asiakastunnus String clientId = "ESP8266Client-"; clientId += Merkkijono (satunnainen (0xffff), HEX); // Yritä muodostaa yhteys // jos MQTT -välittäjälläsi on asiakkaan tunnus, käyttäjätunnus ja salasana // muuta seuraava rivi tilaksi if (client.connect (clientId, userName, passWord)) if (client.connect (clientId.c_str ())) {Serial.println ("kytketty"); // kun olet muodostanut yhteyden MQTT -välittäjään, tilaa komento, jos jokin asiakas.subscribe ("OsoyooCommand"); } else {Serial.print ("epäonnistui, rc ="); Serial.print (client.state ()); Serial.println ("yritä uudelleen 5 sekunnin kuluttua"); // Odota 5 sekuntia ennen viiveen uudelleen yrittämistä (5000); }}} // lopeta uudelleen yhdistäminen ()

void setup () {

Sarja.alku (115200); setup_wifi (); client.setServer (mqtt_server, 1883); client.setCallback (takaisinsoitto); pinMode (BUTTON_PIN, INPUT); }

void loop () {

if (! client.connected ()) {reconnect (); } client.loop (); pitkä nyt = millis (); int -tila; // lähetä viesti 2 sekunnin välein, jos (nyt - lastMsg> 2000) {lastMsg = now; tila = digitalRead (BUTTON_PIN); String msg = "Painikkeen tila:"; if (tila == KORKEA) {msg = msg+ "Painettu"; char -viesti [58]; msg.toCharArray (viesti, 58); Serial.println (viesti); // julkaista anturitiedot MQTT -välittäjälle client.publish ("OsoyooData", viesti); } else {msg = msg+ "Ei paina"; char -viesti [58]; msg.toCharArray (viesti, 58); Serial.println (viesti); // julkaista anturitiedot MQTT -välittäjälle client.publish ("OsoyooData", viesti); }}}

Muokkaa koodia vastaamaan omia WiFi- ja MQTT -asetuksiasi seuraavasti: 1) Hotspot -määritys: Etsi koodirivin alapuolelta, kirjoita oma SSID ja salasana.

const char* ssid =”oma_pisteen_tunnus”; const char* salasana = “oma_pisteen_salasana”;

2) MQTT -palvelimen osoiteasetus: Voit käyttää omaa MQTT -välittäjän URL -osoitetta tai IP -osoitetta asettaaksesi mqtt_server -arvon yläpuolelle. Voit myös käyttää jotakin kuuluisaa ilmaista MQTT-palvelinta projektin testaamiseen, kuten "broker.mqtt-dashboard.com", "iot.eclipse.org" jne.

const char* mqtt_server =”välittäjä.mqtt-dashboard.com”;

3) MQTT -asiakasasetukset Jos MQTT -välittäjäsi vaatii asiakastunnuksen, käyttäjätunnuksen ja salasanan todennuksen, sinun on muutettava

jos (client.connect (clientId.c_str ()))

Vastaanottaja

if (client.connect (clientId, userName, passWord)) // laita clientId/userName/passWord tähän

Jos näin ei ole, pidä ne oletusarvoisina. Valitse sen jälkeen vastaava korttityyppi ja porttityyppi alla kuvatulla tavalla ja lataa luonnos NodeMCU: hon.

  • Taulu:”NodeMCU 0.9 (ESP-12-moduuli)”
  • Suorittimen taajuus:”80 MHz” Salaman koko:”
  • 4M (3M SPIFFS)”
  • Latausnopeus: "115200"
  • Portti: Valitse oma sarjaporttisi NodeMCU: lle

Vaihe 4: MQTT -asiakasasetukset

MQTT -asiakasasetukset
MQTT -asiakasasetukset
MQTT -asiakasasetukset
MQTT -asiakasasetukset

Jos et tiedä kuinka määrittää MQTT-asiakas, käy viimeisessä artikkelissamme:

Aiheasetukset: Julkaistava aihe: OsoyooCommand

Tilattava aihe: OsoyooData

Juokseva tulos

Kun lataus on suoritettu, jos wifi -yhteyspisteen nimi ja salasana -asetus on kunnossa ja MQTT -välittäjä on kytketty, avaa sarjamonitori, näet seuraavan tuloksen: Pidä tätä painiketta painettuna, sarjamonitori näyttää “Painikkeen tila: painettu” joka toinen sekunti; kun vapautat tämän painikkeen, sarjamonitori lähettää "Painikkeen tila: Ei painettu" -painiketta 2 sekunnin välein.

Suositeltava: