» elektroniikka » Työläs »Kasvihuoneen tai kasvihuoneen hallinta mistä päin maailmaa tahansa (toteutusesimerkki)

Kasvihuoneen tai kasvihuoneen hallinta kaikkialta maailmasta (esimerkki toteutuksesta)

1 Laitekonsepti



Tämän kehityksen tarkoituksena on kerätä tietoja paikallisilta antureilta, lähettää nämä tiedot Internetiin. Käyttäjä pystyy tarkastelemaan antureista tulevaa tietoa kaikkialla maailmassa ja etäpäättämään tiettyjen paikallisesti antureiden vieressä sijaitsevien toimilaitteiden aktivoinnista

Projekti käyttää Työläs UNO ja WiFi-moduuli ESP8266-01. Tiedot siirretään pilveen ThingSpeak.com -verkkopalvelun kautta, ja laitteet aktivoidaan MIT AppInventorilla kehitetyn android-sovelluksen kautta.

Kasvihuoneen tai kasvihuoneen hallinta kaikkialta maailmasta (esimerkki toteutuksesta)


IoT on käsite fyysisten esineiden (”asioiden”) tietoverkosta, joka on varustettu sisäänrakennetulla tekniikalla vuorovaikutukseen toistensa tai ulkoisen ympäristön kanssa, pitäen tällaisten verkkojen organisointia ilmiönä, joka voi rakentaa uudelleen taloudellisia ja sosiaalisia prosesseja, poistaen ihmisten osallistumisen tarpeen osasta toimia ja toimintoja.


Tämän internet-projektin pääpaino on ThingSpeak.com-palvelu. Paikallinen UNO / ESP-01 -laite vastaanottaa tietoja antureilta ja tietoja toimilaitteiden tilasta, lähettää sen Internetin “tallennukseen” tietyn ThingSpeak.com-tilakanavan (ThingSpeak.com Status Channel) kautta, sama paikallinen laite vastaanottaa dataa, " lukeminen ”toiselta datakanavalta,” toimeenpanolaitteiden kanavalta ”(ThingSpeak.com -toimilaitekanavat).



Tiedot kerätään lämpötila- ja suhteellisen kosteuden anturin, maaperän lämpötilan ja kosteuden sekä ympäristön valotunnistimen avulla. Nämä tiedot lähetetään ThingSpeak-palvelupilveen.

Siellä on kaksi toimeenpanolaitetta - tämä on vesisähköpumppu ja lamppu. Heidän ON / OFF-tila lähetetään myös pilvelle. Esimerkiksi anturien tiedot voivat näyttää kasvihuoneen tai kasvihuoneen nykyisen tilan. Käyttäjä hallitsee toimeenpanolaitteita android-sovelluksen avulla.


2 Luettelo tarvittavista komponenteista



Kaikki linkit ovat vain tiedoksi.






2 x LEDiä (punainen ja vihreä)
1 x
- $3.00
220 V lamppu
2 x 330 ohmin vastus (käytetään LEDien kanssa)
2 x 10K ohmin vastus (käytetään DHT22: n ja LDR: n kanssa)
1 x 4K7 ohmin vastus (käytetään DS18B20: n kanssa)
prototyyppien aluksella
hyppääjiä
Ulkoinen virtalähde releen 5V DC

3 Rautaosa



Nyt sinun on kytkettävä kaikki anturit kuvan osoittamalla tavalla.



Ihanteellinen ratkaisu olisi koota ja testata projekti osittain.

Seuraavassa järjestyksessä:
1. Asenna ja testaa kaikki anturit
2.Asenna ESP-01 ja määritä se vähintään
3. Muuta ESP-01-asetus lopulliseen kokoonpanoon ja testiin
4. Määritä ThingSpeak Status Channel
5. Asenna ThingSpeak-koodi Arduinoon ja tarkista pilvien anturien tila
6. Kehitä Android-ohjelman ensimmäinen versio tarkistaaksesi anturien tilaviestit
7. Asenna toimilaitteet
8. Määritä ThingSpeak-toimilaitteiden kanavat
9. Asenna ja testaa koodit johtolaitteille Arduinolle
10. Tee toinen versio ohjelmasta androidilla koko laitekokoonpanolle.

4 Anturiliitäntä





Projekti käyttää joitain kirjastoja, jotka sisältyvät. On tarpeen tarkistaa niiden saatavuus. Näiden kirjastojen alkuperäinen kokoonpano on seuraava:
// DS18B20
# Sisällytä 
# Sisällytä 
#define ONE_WIRE_BUS 5 // DS18B20 nastassa D5
OneWire oneWire (ONE_WIRE_BUS);
DallasTemperature DS18B20 (& oneWire);
int groundTemp = 0;

// DHT
#sisältää "DHT.h"
# sisällytä 
int pinoDHT = 11;
int tipoDHT = DHT22;
DHT-dht (pinoDHT, tipoDHT);
int airTemp = 0;
int airHum = 0;

// LDR (vaalea)
#define ldrPIN 1
int valo = 0;

// Maaperän kosteus
#määritä maaperäHumPIN 0
int groundHum = 0;


Nyt alustamme anturit ja näytämme ne terminaalissa:
tyhjä asennus ()
{
  Serial.begin (9600);
  DS18B20.begin ();
  dht.begin ();
}

tyhjä silmukka ()
{
  readSensors ();
  näyttöanturit ();
  viive (10000);
}

Ja lopuksi kirjoitamme kaksi toimintoa: toinen lukee anturien lukemat ja toinen näyttää ne näytöllä:
/ ********* Lue antureiden arvo ************* /
tyhjä readSensors (tyhjä)
{
  airTemp = dht.readTemperature ();
  airHum = dht.readHumidity ();

  DS18B20.requestTemperatures ();
  soilTemp = DS18B20.getTempCByIndex (0); // Anturi 0 tallentaa maaperän lämpötilan Celsiuksessa
  
  soilHum = kartta (analoginen lukema (soilHumPIN), 1023, 0, 0, 100);
 
  valo = kartta (analoginen lukumäärä (ldrPIN), 1023, 0, 0, 100); // LDRDark: 0 ==> vaalea 100%

}

/ ********* Näyttöanturien arvo ************* /
tyhjä näyttöSensorit (tyhjä)
{
  Serial.print ("airTemp (oC):");
  Serial.println (airTemp);
  Sarjajälki ("airHum (%):");
  Serial.println (airHum);
  Serial.print ("soilTemp (oC):");
  Serial.println (soilTemp);
  Sarjajälki ("soilHum (%):");
  Serial.println (soilHum);
  Sarjajälki ("kevyt (%):");
  Serial.println (vaalea);
  Serial.println ("");
}


Valokuvassa näkyy, kuinka tiedot näytetään näytöllä.


Lähdekoodi voidaan ladata tekijältä.

4 ESP8266-01-peruskokoonpano



Nopein tapa "puhua" moduulin kanssa on AT-komento. Prosessorilla on jo AT-komentoprosessori. Oletusasetuksena on, että moduulin tehdasasetukset ovat 115200 baudia, asetukset on asetettava 9600 baudia.

Ensinnäkin, sinun on kytkettävä moduuli kuvan osoittamalla tavalla



( Huomaa, että ESP-01: n Tx-liitäntä on kytketty UNO: n Tx-liitäntään, aivan kuten Rx-liittimet on kytketty toisiinsa. Tämä yhteys vaihdetaan myöhemmin. ).

Yhdistä sitten UNO tietokoneeseen, avaa IDE ja lataa löytyvä esimerkki. Tämä on tyhjä koodi, joten ESP-01: n ja UNO: n välillä ei ole ristiriitoja. Tämä koodi ladattiin Ardunioon ennen ESP-01: n kytkemistä siihen, jotta voidaan varmistaa, että Ardunio ei käytä Tx- ja Rx-nastaita mihinkään muuhun.
Nyt sinun on avattava IDE Serial Monitor, asetettava tiedonsiirtonopeudeksi 115200 asetuksissa ja lähetettävä AT-komento IDE Serial Monitoriin. ESP-01: n pitäisi lähettää vastaus OK

Nyt sinun on muutettava tiedonsiirtonopeutta ESP-01-moduulissa. Anna tämä komento IDE: ssä

AT + CIOBAUD = 9600


Voi tapahtua, että ESP-01 palaa tehdasasetuksiin, sinun on käytettävä toista komentoa:

AT + UART_DEF = , , , , 


Esimerkiksi 9600 baudia / 8 databittiä / 1 lopetusbitti eikä pariteetti- ja virtauksenhallintaa

AT + UART_DEF = 9600,8,1,0,0


Muuta nyt IDE-asetusten tiedonsiirtonopeus arvoon 9600 ja lähetä AT-komento, OK-vastauksen pitäisi tulla.
Seuraavaksi sinun on vaihdettava moduuli STA-tilaan, jotta se voi muodostaa yhteyden verkon tukiasemaan.

AT + CWMODE = 1


Kirjoita komento, jotta moduuli voi muodostaa yhteyden verkkoon AT + CWJAP = "verkon_nimi", "verkon_nimi_1"jossa NETWORK_NAME Onko verkon nimi ja network_name_1 - verkon salasana (salasanan ja verkon nimen on oltava lainausmerkeissä)
Jos näet vastauksen WIFI KYTKETTY WIFI SAI IP: N, sitten yhteys muodostetaan. Varmista IP-osoite komennolla
AT + CIFSR
.

Näyttöön ilmestyvä osoite, jota voit käyttää tulevaisuudessa. Kun olet määrittänyt moduulin, voit kytkeä sen pysyvästi, mutta tätä varten sinun on vaihdettava sen kytkentäpiiri kuvan osoittamalla tavalla.


• ESP-01 RX (keltainen) -> UNO-napa D7
• ESP-01 TX (oranssi) -> UNO-nasta D6
• ESP-01 Ch-Pd (ruskea) -> Vcc (3,3 V)
• ESP-01 nollaus (sininen) -> UNO-napa D8
• ESP-01 Vcc (punainen) -> 3,3 V
• ESP-01 Gnd (musta) -> UNO GND

Huomaa, että ohjelmistosarjakirjasto käyttää UNO Pin D7 -tappia kuten tx ja se kytketään ESP-01: n lähtöön RXsamalla kun UNO-pin D6 kuten rxkytketty ESP-01: een TX.

Kirjoita pieni koodi varmistaaksesi oikean yhteyden ja ESP-01-moduulin kokoonpanon
#sisältää 
SoftwareSerial esp8266 (6.7); // Rx ==> Tappi 6; TX ==> Pin7

#define speed8266 9600

tyhjä asennus ()
{
  esp8266.begin (nopeus8266);
  Serial.begin (nopeus8266);
  Serial.println ("ESP8266 asennustesti - käytä AT-koodauksia");
}

tyhjä silmukka ()
{
  kun taas (esp8266.on käytettävissä ())
  {
    Sarjakuvaus (esp8266.read ());
  }
  while (Sarjakuvaus saatavissa ())
  {
    esp8266.write (Serial.read ());
  }
}


Nyt muutama AT-joukkue. Katso tulokset sarjamonitorista.



* AT =====> ESP8266 palaa OK
* AT + RST =====> ESP8266 käynnistyy uudelleen ja palaa OK
* AT + GMR =====> ESP8266 palauttaa AT-version; SDK-versio; id; kunnossa
* AT + CWMODE? => ESP8266 palauttaa tilan tyypin
* AT + CWLAP ===> ESP8266 palauttaa läheiset tukiasemat
* AT + CIFSR ===> ESP8266 palauttaa suunnitellun IP: n

Ohjelmakoodin voi ladata osoitteesta

6 anturien ja ESP-01: n liitäntä




Kun kaikki anturit on kytketty ja tarkistettu, samoin kuin ESP-01-moduuli on tarkistettu, tiedot on valmisteltava Internetissä lähettämistä varten.

7 ThingSpeak





Yksi projektin tärkeimmistä osista on avoin Internet-alusta, jonka avulla voit kerätä tietoja antureista, käsitellä ja analysoida niitä. Siirry tähän luodaksesi tilisi. Seuraavaksi sinun on luotava kanava, jossa on 2 toimilaitetta, 5 anturia ja yksi varmuuskopiokenttä.
• Kenttä 1: Toimilaite 1 (laite 1)
• Kenttä 2: Toimilaite 2 (laite 2)
• Kenttä 3: Ilman lämpötila oC (ilman lämpötila Celsius-asteina)
• Filed 4: Ilman suhteellinen kosteus% (suhteellinen kosteus%)
• Kenttä 5: Maaperän lämpötila oC: ssa (Maaperän lämpötila grammoina Celsius)
• Kenttä 6: Maaperän kosteus% (maaperän kosteus%)
• Kenttä 7: Valaistus% (valaistus%)
• Kenttä 8: Varaosa

Kenttä 8 on varattu tulevaa laajennusta tai virheenkorjausta varten. Tässä projektissa sitä käytetään viestintävirhelaskurina Arduino / ESP-01: n ja ThingSpeak.com: n välillä.

Kun olet luonut tilakanavan, sinun on tallennettava näppäimet kuvan osoittamalla tavalla.

8 Anturin tilan lähettäminen pilveen



Tällä hetkellä meillä on konfiguroitu pilvipalvelu ja anturimme keräävät tietoja paikallisesti. Nyt sinun on otettava nämä tiedot ja lähetettävä ne pilveen ThingSpeak.com -sivustolla.

Jotta voit kirjoittaa tietoja ThingSpeak-kanavalle, sinun on lähetettävä GET-merkkijono. Tämä tehdään kolmessa vaiheessa.
Lähetä komento "Käynnistä cmd"
AT + CIPSTART = "TCP", "184.106.153.149", 80

Jousen lisäpituus

AT + CIPSEND = 116


Ja lopuksi, GET-merkkijono, joka kirjoittaa tietomme varattuihin tilakanavakenttiin.

GET / päivittää? Api_key = sinun_saved_key_here & field1 = pump & fieldlamp = 0 & field3 = airTemp & field4 = airHum & field5 = soilTemp & field6 = soilHum & field7 = light & field8 = spare


Huomaa, että meidän ei pitäisi kirjoittaa tietoja kanavalle enempää kuin kerran 16 sekunnissa.

Lähetetty koodi tekee kaiken tämän.
// Asutunne
Merkkijono statusChWriteKey = "KIRJOITTAMINEN TÄTÄ"; // Tilakanavan tunnus: 385184

#sisältää 
SoftwareSerial EspSerial (6, 7); // Rx, Tx
#define HARDWARE_RESET 8

// DS18B20
# Sisällytä 
# Sisällytä 
#define ONE_WIRE_BUS 5 // DS18B20 nastassa D5
OneWire oneWire (ONE_WIRE_BUS);
DallasTemperature DS18B20 (& oneWire);
int groundTemp = 0;

// DHT
#sisältää "DHT.h"
# sisällytä 
int pinoDHT = 11;
int tipoDHT = DHT22;
DHT-dht (pinoDHT, tipoDHT);
int airTemp = 0;
int airHum = 0;

// LDR (vaalea)
#define ldrPIN 1
int valo = 0;

// Maaperän kosteus
#määritä maaperäHumPIN 0
int groundHum = 0;

// Ajastimien kanssa käytettävät muuttujat
long writeTimingSeconds = 17; // ==> Määritä näytteen aika sekunneissa tietojen lähettämistä varten
pitkä startWriteTiming = 0;
kauan kulunutWriteTime = 0;

// Toimilaitteiden kanssa käytettävät muuttujat
boolean pump = 0;
boolean lamppu = 0;

int vara = 0;
boolen virhe;

tyhjä asennus ()
{
  Serial.begin (9600);
  
  pinMode (HARDWARE_RESET, OUTPUT);
  
  digitalWrite (HARDWARE_RESET, HIGH);
  
  DS18B20.begin ();
  dht.begin ();

  EspSerial.begin (9600); // Comunicacao com Modulo WiFi
  EspHardwareReset (); // Palauta Modulo WiFi
  startWriteTiming = millis (); // "kellon" käynnistäminen
}

tyhjä silmukka ()
{
  alku: // tarra
  virhe = 0;
  
  kulunutWriteTime = millis () - startWriteTiming;
  
  if (kulunutWriteTime> (writeTimingSeconds * 1000))
  {
    readSensors ();
    writeThingSpeak ();
    startWriteTiming = millis ();
  }
  
  if (virhe == 1) // Lähetä uudelleen, jos lähetys ei ole valmis
  {
    Serial.println ("<<<< VIRHE >>>>");
    viive (2000);
    aloita; // siirry etikettiin "start"
  }
}

/ ********* Lue antureiden arvo ************* /
tyhjä readSensors (tyhjä)
{
  airTemp = dht.readTemperature ();
  airHum = dht.readHumidity ();

  DS18B20.requestTemperatures ();
  soilTemp = DS18B20.getTempCByIndex (0); // Anturi 0 tallentaa maaperän lämpötilan Celsiuksessa
             
  valo = kartta (analoginen lukumäärä (ldrPIN), 1023, 0, 0, 100); // LDRDark: 0 ==> vaalea 100%
  soilHum = kartta (analoginen lukema (soilHumPIN), 1023, 0, 0, 100);

}

/ ********* Conexao com TCP com Thingspeak ******* /
void writeThingSpeak (tyhjä)
{

  startThingSpeakCmd ();

  // preparacao da merkkijono GET
  Merkkijono getStr = "GET / update? Api_key =";
  getStr + = statusChWriteKey;
  getStr + = "& field1 =";
  getStr + = merkkijono (pumppu);
  getStr + = "& field2 =";
  getStr + = merkkijono (lamppu);
  getStr + = "& field3 =";
  getStr + = merkkijono (airTemp);
  getStr + = "& field4 =";
  getStr + = merkkijono (airHum);
  getStr + = "& field5 =";
  getStr + = merkkijono (soilTemp);
  getStr + = "& field6 =";
  getStr + = merkkijono (soilHum);
  getStr + = "& field7 =";
  getStr + = merkkijono (kevyt);
  getStr + = "& field8 =";
  getStr + = merkkijono (vapaa);
  getStr + = "\ r \ n \ r \ n";

  sendThingSpeakGetCmd (getStr);
}

/ ********* Palauta ESP ************* /
tyhjä EspHardwareReset (tyhjä)
{
  Serial.println ("Nollataan .......");
  digitalWrite (HARDWARE_RESET, LOW);
  viive (500);
  digitalWrite (HARDWARE_RESET, HIGH);
  viivästyminen (8000); // Tempo välttämätön para começar a ler
  Serial.println ("RESET");
}

/ ********* Aloita viestintä ThingSpeakin kanssa ************** /
tyhjä startThingSpeakCmd (tyhjä)
{
  EspSerial.flush (); // limpa o puskuri antaa gravarin käyttöön
  
  Merkkijono cmd = "AT + CIPSTART = \" TCP \ ", \" ";
  cmd + = "184.106.153.149"; // Endereco IP de api.thingspeak.com
  cmd + = "\", 80 ";
  EspSerial.println (cmd);
  Serial.print ("enviado ==> Käynnistä cmd:");
  Serial.println (cmd);

  if (EspSerial.find ("Virhe"))
  {
    Serial.println ("AT + CIPSTART-virhe");
    palata;
  }
}

/ ********* lähetä GET cmd ThingSpeakiin ************* /
Merkkijono sendThingSpeakGetCmd (merkkijono getStr)
{
  Merkkijono cmd = "AT + CIPSEND =";
  cmd + = merkkijono (getStr.length ());
  EspSerial.println (cmd);
  Serial.print ("enviado ==> pituus cmd:");
  Serial.println (cmd);

  if (EspSerial.find ((char *) ">"))
  {
    EspSerial.print (getStr);
    Serial.print ("enviado ==> getStr:");
    Serial.println (getStr);
    viivytys (500); // tempo para processar o GET, sem este delay apresenta kiire varattu ei próximo comando

    Merkkijono messageBody = "";
    kun taas (EspSerial.a available ())
    {
      Merkkijono = EspSerial.readStringUntil ('\ n');
      if (juovan pituus () == 1)
      {// todellinen sisältö alkaa tyhjän rivin jälkeen (jonka pituus on 1)
        messageBody = EspSerial.readStringUntil ('\ n');
      }
    }
    Serial.print ("MessageBody vastaanotettu:");
    Serial.println (messageBody);
    paluu messageBody;
  }
  muu
  {
    EspSerial.println ("AT + CIPCLOSE"); // hälytyskäyttäjä
    Serial.println ("ESP8266 CIPSEND ERROR: RESENDING"); // Lähetä uudelleen ...
    vapaa = vara + 1;
    virhe = 1;
    palauta "virhe";
  }
}

Voit nähdä edistymisen Sarjamonitorissa.

Lähdekoodi voi ladata osoitteesta

9 android-sovellus - osa yksi



Ensin sinun on luotava käyttöliittymä. Kuvassa näkyvät tärkeimmät näkyvät ja näkymättömät elementit.



Sen jälkeen sinun on luotava lohkoja. Valikkokohteet vastaavat kuvakaappausnumeroita.

1 Tilamuuttujat, jotka tulisi julistaa globaaleiksi

2 Joka toinen sekunti (kello1: stä riippuen) menettelyä kutsutaan "ReadArduino"


Menetelmä palauttaa niiden muuttujien arvot, jotka tulisi näyttää näytöllä. Tässä tapauksessa toimilaitteiden tila-arvo (0 ja 1) muutetaan “ON” ja “OFF” paremman havainnon saamiseksi.

Nämä arvot (Tila) näytetään vastaavissa ”Pikavalinnat”

3 ReadArduino-rutiini lukee oleellisesti tilakanavan ThingSpeakissa. Joten, sinun on määritettävä URL, joka lähetetään Thingspeakille. Tätä varten 3 globaalia muuttujaa on ilmoitettava ja yhdistettävä, jotta luodaan URL, joka lähetetään ThingSpeakille. GET tulisi lähettää verkkokomponentille nimeltä «ArduFarmBotStatusCh»

4 Edellisestä komennosta saatu teksti saapuu JSon-muodossa. Tämä teksti on käsiteltävä niin, että jokainen kenttä luetaan ja tallennetaan vastaavaan globaalimuuttujaan.

5 Viimeinen tehtävä on kutsua ”Hälytys” -menettely, joka analysoi kahden maa-anturin tilan. Jos lämpötila on liian matala (meidän tapauksessamme 10 ° C), näyttöön tulee viesti. Sama kosteudelle, jos se on alle 60%.

Huomaa, että olemme määritellyt toisen ajastimen (Clock2), joka on ohjelmoitu toimimaan joka sekunti. Tarvitaan vain viestin tekstin värin "vaihtaminen" (valkoisesta punaiseen). Viesti vilkkuu.

Sovelluskoodin voi ladata osoitteesta

10 Toimilaitteiden kytkentä




Komennot pumpun ja lampun kytkemiseksi päälle ja pois päältä vastaanotetaan etäyhteyden kautta. Ardunion lähtö aktivoi releen ja LEDin ottaen nämä komennot. Kuvassa näkyy, kuinka toimilaitteet on kytkettävä. Huomaa, että GND-relelähtö EI KYTKETTY GND-ulostuloonUNO. Tällä tavoin on vähemmän tehohäiriöitä, kun rele on käynnissä.

11 kanavatoimilaitteiden (toimilaitekanavat) kokoonpano




Kaikki toimet toistavat tilakanavan määrittämisohjeet. Kullekin laitteelle on tarpeen luoda kaksi kanavaa. Kirjoita jokaiselle kanavalle kanavan tunnus, luku- ja kirjoitusnäppäimet. Me kirjoitamme vain kunkin kanavan ensimmäiseen kenttään. Esimerkki:
Kanavan tunnus 375598 ==> Punainen LED (pumppu)
◦ Kenttä1 = 0 ==> Pump OFF
◦ Kenttä1 = 1 ==> Pump ON
2. Kanavan tunnus 375599 ==> LED vihreä (lamppu)
◦ Kenttä1 = 0 ==> Lamppu POIS
◦ Kenttä 1 = 1 ==> Lamppu palaa

11 lataus- ja testauskooditoimilaitetta Arduniossa.



Kun lähetimme tietoja pilvelle, "kirjoitimme" nämä tiedot ThingSpeakiin. Tilakanava, "lähettämällä" (lähettämällä) nämä tiedot. Nyt meidän on "luettava" tiedot toimilaitekanavalta, "hyväksyttävä" (ladattava) nämä tiedot.

Lähetä tämä lähettämällä GET-merkkijono ja tämä menettely koostuu 3 vaiheesta.
"Käynnistä cmd"
AT + CIPSTART = "TCP", "184.106.153.149", 80

Linjan pituus
AT + CIPSEND = 36

Ja itse GET-merkkijono
GET / kanavat / 375598 / kentät / 1 / viimeinen

Kanavat luetaan 10 sekunnin välein

GET: n lähettämisen jälkeen meidän on hyväksyttävä ThingSpeakin vastaus. Vastauksen on oltava joko 0 tai 1 jokaiselle kanavalle. Jos on muita arvoja, niin emme yksinkertaisesti sivuuta niitä.

Tärkein ero tämän osan ja edellisen välillä on vain funktiossa readThingSpeak (merkkijonon tunnus)
Alla on koodi, joka suorittaa kuvatut toimenpiteet.

// Asutunne
Merkkijono canalID1 = "999999"; // Toimilaite1
Merkkijono canalID2 = "999999"; // Toimilaite2

#sisältää 
SoftwareSerial EspSerial (6, 7); // Rx, Tx
#define HARDWARE_RESET 8

// Ajastimien kanssa käytettävät muuttujat
pitkä readTimingSeconds = 10; // ==> Määritä näytteenottoaika sekunteina tietojen vastaanottamiseksi
pitkä startReadTiming = 0;
kauan kulunutReadTime = 0;

// Releet
#define ACTUATOR1 10 // PUNAINEN LED ==> Pumppu
#define ACTUATOR2 12 // VIHREÄ LED ==> Lamppu
boolean pump = 0;
boolean lamppu = 0;

int vara = 0;
boolen virhe;

tyhjä asennus ()
{
  Serial.begin (9600);
  
  pinMode (ACTUATOR1, OUTPUT);
  pinMode (ACTUATOR2, OUTPUT);
  pinMode (HARDWARE_RESET, OUTPUT);

  digitalWrite (ACTUATOR1, HIGH); // o modeulo relé é ativo em LOW
  digitalWrite (ACTUATOR2, HIGH); // o modeulo relé é ativo em LOW
  digitalWrite (HARDWARE_RESET, HIGH);

  EspSerial.begin (9600); // Comunicacao com Modulo WiFi
  EspHardwareReset (); // Palauta Modulo WiFi
  startReadTiming = millis (); // "kellon" käynnistäminen
}

tyhjä silmukka ()
{
  alku: // tarra
  virhe = 0;
  
  elapsedReadTime = millis () - startReadTiming;

  if (kulunutReadTime> (readTimingSeconds * 1000))
  {
    int-komento = readThingSpeak (canalID1);
    if (komento! = 9) pump = komento;
    viive (5000);
    komento = readThingSpeak (canalID2);
    if (komento! = 9) lamppu = komento;
    takeActions ();
    startReadTiming = millis ();
  }
  
  if (virhe == 1) // Lähetä uudelleen, jos lähetys ei ole valmis
  {
    Serial.println ("<<<< VIRHE >>>>");
    viive (2000);
    aloita; // siirry etikettiin "start"
  }
}

/ ********* Suorita toimenpiteet perustuen ThingSpeak-komentoihin ************* /
mitätöntoimenpiteet (tyhjä)
{
  Serial.print ("Pump:");
  Serial.println (pumppu);
  Serial.print ("Lamppu:");
  Serial.println (lamppu);
  if (pump == 1) digitalWrite (ACTUATOR1, LOW);
  else digitalWrite (ACTUATOR1, HIGH);
  if (lamppu == 1) digitalWrite (ACTUATOR2, LOW);
  else digitalWrite (ACTUATOR2, HIGH);
}

/ ********* Lue Toimilaitteet-komento ThingSpeakista ************* /
int readThingSpeak (merkkijonon tunnus)
{
  startThingSpeakCmd ();
  int komento;
  // preparacao da merkkijono GET
  Merkkijono getStr = "GET / kanavat /";
  getStr + = kanavaID;
  getStr + = "/ kentät / 1 / viimeinen";
  getStr + = "\ r \ n";

  Merkkijono messageDown = sendThingSpeakGetCmd (getStr);
  if (messageDown [5] == 49)
  {
    komento = messageDown [7] -48;
    Serial.print ("Komento vastaanotettu:");
    Serial.println (komento);
  }
  else komento = 9;
  paluukomento;
}

/ ********* Palauta ESP ************* /
tyhjä EspHardwareReset (tyhjä)
{
  Serial.println ("Nollataan .......");
  digitalWrite (HARDWARE_RESET, LOW);
  viive (500);
  digitalWrite (HARDWARE_RESET, HIGH);
  viivästyminen (8000); // Tempo välttämätön para começar a ler
  Serial.println ("RESET");
}

/ ********* Aloita viestintä ThingSpeakin kanssa ************** /
tyhjä startThingSpeakCmd (tyhjä)
{
  EspSerial.flush (); // limpa o puskuri antaa gravarin käyttöön
  
  Merkkijono cmd = "AT + CIPSTART = \" TCP \ ", \" ";
  cmd + = "184.106.153.149"; // Endereco IP de api.thingspeak.com
  cmd + = "\", 80 ";
  EspSerial.println (cmd);
  Serial.print ("enviado ==> Käynnistä cmd:");
  Serial.println (cmd);

  if (EspSerial.find ("Virhe"))
  {
    Serial.println ("AT + CIPSTART-virhe");
    palata;
  }
}

/ ********* lähetä GET cmd ThingSpeakiin ************* /
Merkkijono sendThingSpeakGetCmd (merkkijono getStr)
{
  Merkkijono cmd = "AT + CIPSEND =";
  cmd + = merkkijono (getStr.length ());
  EspSerial.println (cmd);
  Serial.print ("enviado ==> pituus cmd:");
  Serial.println (cmd);

  if (EspSerial.find ((char *) ">"))
  {
    EspSerial.print (getStr);
    Serial.print ("enviado ==> getStr:");
    Serial.println (getStr);
    viivytys (500); // tempo para processar o GET, sem este delay apresenta kiire varattu ei próximo comando

    Merkkijono messageBody = "";
    kun taas (EspSerial.a available ())
    {
      Merkkijono = EspSerial.readStringUntil ('\ n');
      if (juovan pituus () == 1)
      {// todellinen sisältö alkaa tyhjän rivin jälkeen (jonka pituus on 1)
        messageBody = EspSerial.readStringUntil ('\ n');
      }
    }
    Serial.print ("MessageBody vastaanotettu:");
    Serial.println (messageBody);
    paluu messageBody;
  }
  muu
  {
    EspSerial.println ("AT + CIPCLOSE"); // hälytyskäyttäjä
    Serial.println ("ESP8266 CIPSEND ERROR: RESENDING"); // Lähetä uudelleen ...
    vapaa = vara + 1;
    virhe = 1;
    palauta "virhe";
  }
}


Voit ladata sen osoitteesta

12 komentojen lähettämistä laitteille



Tässä vaiheessa meillä on konfiguroitu toimilaitekanava, joka muuttaa kentän 1 arvoa jokaiselle laitteelle. Meidän on varmistettava, että laitteet toimivat komennot oikein. Projektin lopussa tähän käytetään android-sovellusta, mutta se voidaan tehdä myös selaimen kautta.

Kytke pumppu päälle (punainen LED palaa)
https://api.thingspeak.com/update?api_key=Сохраненный_ключ_канала_1&field1=1

Pumppu pois (punainen LED ei pala)
https://api.thingspeak.com/update?api_key=Tallennettu Channel_key_1 & field1 = 0

Kytke lamppu päälle (vihreä LED palaa)
https://api.thingspeak.com/update?api_key=Tallennettu Channel_key_2 & field1 = 1

Sammuta lamppu (vihreä LED ei pala)
https://api.thingspeak.com/update?api_key=Tallennettu kanava_avain2 ja kenttä1 = 0


14 Android-ohjelman päättäminen




Edellisessä osassa oli yksinkertainen ohjelma, joka “luki” tiedot kanavalta ja näytti ne näytöllä. Nyt meidän on tehtävä ohjelmasta “kirjoittamaan” komennot toimilaitteen Channaliin, jotta ohjain voi lukea nämä komennot ja lamppu pumpun kanssa toimivat vastaavasti.

Jotta käyttäjä voi lähettää komentoja, sovelluksessa on kaksi painiketta jokaista laitetta kohti. Jos päällä, sininen, jos pois päältä, punainen.

Napsauttamalla sovelluksen painikkeita näet tulos sarjanäytössä.

Koodin voi ladata osoitteesta

15 Lopullinen kokoonpano



Tässä vaiheessa on täysin valmis android-sovellus, täysin koottu “rauta” osa, mutta ohjaimessa ei ole koodia, joka jatkuvasti luettaisiin tietoja ja lähettäisi komentoja pilvelle. Sinun tarvitsee vain yhdistää kaikki aiemmin kirjoitetun koodin fragmentit.Koodissa on tietysti ylimääräisiä vahvistusvaihtoehtoja (esimerkiksi jos ESP-01 jäätyy). Tätä varten ajoittain, ennen jokaista luku- tai kirjoituskomentoa, AT-komento lähetetään.Ja jos vastaus OK ei tullut moduulista, moduuli käynnistetään pakollisesti ohjelmallisesti.

Koko projektikoodi voidaan ladata osoitteesta

Osoitteesta voit saada päivityksiä ohjelmatiedostoihin.

Voit myös lukea kommentteja lähdelinkkiin, jos jotain ei ole selvää.
8.3
8.6
8.4

Lisää kommentti

    • hymyillähymyileexaxakunnossadontknowyahoonea
      pomonaarmutyperyskylläkyllä-kylläaggressiivinensalaisuus
      anteeksitanssidance2dance3anteeksihelpjuomat
      pysäytysystäväthyvägoodgoodpillipyörtyäkieli
      savutaputusCrayjulistaapilkallinenDon-t_mentiondownload
      lämpöirefullaugh1MDAkokousmoskingnegatiivinen
      not_ipopcornrangaistaluettupelästyttääpelottaaetsi
      kiusatathank_youtämäto_clueumnikakuuttisuostua
      huonoBeeeblack_eyeblum3punastuaylpeilläikävystyminen
      sensuroituhassutussecret2uhatavoittoyusun_bespectacled
      SHOKrespektlolprevedtervetuloakrutoyya_za
      ya_dobryiauttajane_huliganne_othodifludkieltolähellä

Suosittelemme lukemaan:

Anna se älypuhelimelle ...