Sisällysluettelo:

Sääasema: ESP8266, jossa on syvä uni, SQL, piirtäminen pulloilla ja piirtämällä: 3 vaihetta
Sääasema: ESP8266, jossa on syvä uni, SQL, piirtäminen pulloilla ja piirtämällä: 3 vaihetta

Video: Sääasema: ESP8266, jossa on syvä uni, SQL, piirtäminen pulloilla ja piirtämällä: 3 vaihetta

Video: Sääasema: ESP8266, jossa on syvä uni, SQL, piirtäminen pulloilla ja piirtämällä: 3 vaihetta
Video: Kendi Devre Kartınızı Üretmek İster misiniz? | PCBWAY PCB Siparişi ve Üretim Aşamaları 2024, Heinäkuu
Anonim
Sääasema: ESP8266 Syvä lepotila, SQL, piirtäminen Flask & Plotlyn avulla
Sääasema: ESP8266 Syvä lepotila, SQL, piirtäminen Flask & Plotlyn avulla

Olisiko hauskaa tietää parvekkeen lämpötila, kosteus tai valon voimakkuus? Tiedän, että olisin. Joten tein yksinkertaisen sääaseman tällaisten tietojen keräämiseksi. Seuraavat osat ovat vaiheita, jotka otin yhden rakentamiseen.

Aloitetaan!

Vaihe 1: Sääasema valo-, lämpötila- ja kosteusantureilla

Sääasema valo-, lämpötila- ja kosteusanturilla
Sääasema valo-, lämpötila- ja kosteusanturilla
Sääasema valo-, lämpötila- ja kosteusanturilla
Sääasema valo-, lämpötila- ja kosteusanturilla
Sääasema valo-, lämpötila- ja kosteusanturilla
Sääasema valo-, lämpötila- ja kosteusanturilla
Sääasema valo-, lämpötila- ja kosteusanturilla
Sääasema valo-, lämpötila- ja kosteusanturilla

Kun suunnittelin sääaseman rakentamista, haaveilin täydellisestä sääasemasta, jossa on tuulen nopeus, sateen mittaus, täyden spektrin aurinkosensori, mutta osoittautui, että se ei olisi halpaa ja ostokustannukset voivat päättyä vähintään 100 dollaria. Luovuin kaikista vaihtoehdoista ja aloin rakentaa sellaisen, jonka hinta on 10 dollaria, enemmän tai vähemmän. 10 dollaria on sääaseman peruskomponenttien hinta, kuten alla olevat osat.

Tässä ovat osat:

1. ESP8266 Wemos -brändi maksaa 2,39 dollaria Aliexpressissä. Suosittelen Wemos -tuotemerkkiä, koska sen EPS8266 on helpompi ohjelmoida, päivittää ja siinä on 4 Mt flash tai enemmän.

2. Wemos Charger-Boost Shield maksaa 1,39 dollaria. Tämä on toinen etu tämän merkin käytöstä. Siinä on tehostuskortti litiumakulle (nimellisjännite = 3,7 V) 5 volttiin ESP8266: lle. Levyllä on myös latausvaihtoehto, jonka suurin latausvirta = 1M.

*Huomautus: Litium -akun lataamiseen/tehostamiseen on halvempi vaihtoehto. Tämä maksaa 1,77 dollaria 5 kpl. Kuitenkin, kun käytin tätä korttia ESP8266: lle (joko Wemosin tai paljaalle ESP8266: lle), ESP8266: n syväuninen tila käynnisti nollaus heti sen jälkeen, kun ESP8266 oli tehty unen palautus-lepotilaan, mikä on erittäin ärsyttävää. Jos tiedät, mitä tapahtui, lähetä minulle postilaatikko.

3. Wemosilla on myös useita kilpiä lämpötilalle ja kosteudelle, mutta aion rakentaa yksittäisistä komponenteista. Valovastus (tai valosta riippuva vastus-ldr, halpa), kirkkausanturi, kuten BH1780 tai TSL2561 (noin 0,87-0,89 c kpl), lämpötila-anturi, kuten DS18B20 (kukin 75 c), ja kosteus- ja lämpötilayhdistelmä, kuten DHT22 (2,35 dollaria täällä) tai SHT21 (2,20 dollaria täällä). Anturin kokonaiskustannukset ~ 4 dollaria.

4. Litium -akku. Pelasin yhden 7,4 V: n Canonin akusta, joka on kaksi sarjassa olevaa 3,7 V: n akkua tai 18650 litiumakku. Jokainen 18650 maksaa noin 5 dollaria kappale. Minulla on kuva, joka näyttää kameran akun repimisen. Ole kuitenkin varovainen, oikosulku muovisuojuksen läpi leikattaessa voi aiheuttaa äärimmäistä lämpöä ja palaa.

5. Piirilevy, hyppyjohdin, lanka, juotos, aikasi, ehkä joitakin virheenkorjaustaitoja.

Anna johdinkomponenttien yhdessä noudattaa yllä olevaa kaaviota.

Katso sitten tehtävää asetussilmukasta. Se on yksinkertaisesti yhden tehtävän suoritus ja päättyy lepotilaan.

void setup () {Serial.begin (115200); Serial.println ("Aloitussolmun nimi" + Jono (SENSORNAME)); setup_wifi (); viive (100); Wire.begin (); pinMode (ldrPin, INPUT); SHT21. Alku (); if (! tsl.begin ()) {Serial.print ("TSL2561 ei löydy"); kun taas (1); } viive (100); ldr = analoginen luku (ldrPin); tsl.enableAutoRange (tosi); tsl.setIntegrationTime (TSL2561_INTEGRATIONTIME_13MS); viive (100); sensor_event_t tapahtuma; tsl.getEvent (& tapahtuma); jos (tapahtuma.valo) lux = tapahtuma.valo; else Serial.println ("Anturin ylikuormitus");

h = SHT21.getHumidity ();

t = SHT21.getTemperature (); tempSensor.setWaitForConversion (false); tempSensor.begin (); viive (100); if (tempSensor.getDeviceCount () == 0) {Serial.printf ("DS18x20 ei löydy pinasta %d / n", ds18b20); Sarja.huuhtelu (); viive (1000); } viive (100); tempSensor.requestTemperatures (); t18 = tempSensor.getTempCByIndex (0); Serial.printf ("\ nValo: %d lux / t", lux); Serial.printf ("LDR: %d /1024 / t", ldr); Serial.printf ("T: %0.2f *C / t", t); Serial.printf ("H:%0.2f / t", h); Serial.printf ("HIC: %0.2f / t", hic); viive (100); client.setServer (mqtt_palvelin, mqtt_port); client.setCallback (takaisinsoitto); yhdistä uudelleen (); viive (100); ESP.deepSleep (3e8); // 300 miljoonaa mikrosekuntia, 300 sekuntia, 5 minuuttia; }

Virheenkorjauksen tai asetusten määrittämisen aikana komennolla ESP.deepsleep () saat sarjakuvauksen jatkuvasti. Kuten aina, koko koodi, joka ladataan ESP8266: een, on täällä (GitHub).

Muista laittaa hyppy RST: n ja D0/GPIO16: n väliin, jotta herätys käynnistyy syvän unen jälkeen.

Nyt on aika ladata koodi Arduino IDE: llä ESP8266: een.

Vaihe 2: MQTT: joustava väline tietojen julkaisemiseen ja tilaamiseen

MQTT: joustava väline tietojen julkaisemiseen ja tilaamiseen
MQTT: joustava väline tietojen julkaisemiseen ja tilaamiseen
MQTT: joustava väline tietojen julkaisemiseen ja tilaamiseen
MQTT: joustava väline tietojen julkaisemiseen ja tilaamiseen

Ensinnäkin pidän yhä enemmän MQTT: n käyttämisestä tietojen lähettämiseen ja vastaanottamiseen eri antureiden ja asiakkaiden välillä kotona. Tämä johtuu siitä, että joustavuus lähettää rajattomasti aiheeseen luokiteltuja tietoja ja rajoittamaton määrä asiakkaita tilaamaan yksi aihe MQTT -välittäjältä. Toiseksi en ole pätevä keskustelemaan MQTT: stä perusteellisesti. Tutustuin MQTT: hen joskus viime vuonna (2017), kun seurasin sääaseman ja antureiden käyttöönoton oppaita Node-RED: n avulla. Joka tapauksessa yritän parhaani mukaan esitellä teille joitain tietoja. Toinen hyvä paikka aloittaa on Wikipedia.

Jos sinulla ei ole aikaa lukea teoriasta ja halusit perustaa MQTT -välittäjän, lähetin toisen opetusohjelman vain tekemään niin. Etsi tämä viesti ja vieritä alas vaiheeseen 4.

Selittääkseni, mikä on käsitykseni mukaan Message Queuing Telemetry Transport (MQTT), olen laatinut yllä olevan kaavion. Lyhyesti sanottuna MQTT on ISO-standardi, ja sellaisten tuotteiden, kuten hyttyset ja hyttysasiakas, kaksi pakettia, joita käytin rakentaa MQTT-välittäjä Raspberry Pi: lle, on täytettävä tämä standardi. MQTT -välittäjästä tulee sitten väline julkaisijoille, jotka voivat lähettää viestin ja tilaajat kuunnella kohdeaihetta.

Arduino PubSubclient -kirjaston ja ArduinoJsonin yhdistelmä sen tekijän knollearyn ja bblanchonin ansiosta helpottaa suunnittelijoille ja kehittäjille työkalujen sarjaa antureista kohdelaitteisiin tai loppuasiakkaaseen.

Siirry eteenpäin luomalla tietokanta ja näyttää joitakin tietoja.

Vaihe 3: Tallenna tiedot SQL: ään ja näytä ne verkkopalvelimella

Tallenna tiedot SQL -palveluun ja näytä ne verkkopalvelimella
Tallenna tiedot SQL -palveluun ja näytä ne verkkopalvelimella
Tallenna tiedot SQL -palveluun ja näytä ne verkkopalvelimella
Tallenna tiedot SQL -palveluun ja näytä ne verkkopalvelimella

Luo tietokanta verkkopalvelimelle sqlite3: lla. Asenna sqlite3 Rapberry Pi -ohjelmaan seuraavasti:

sudo apt-get install sqlite3

luonut tietokannan ja taulukon kirjoittamalla terminaaliin:

sqlite3 sääasema. db

LUO TAULUKON säätiedot (id INT PRIMARY KEY, the time DATETIME, ldr INT, tls2561 INT, ds18b20 REAL, tsht21 REAL, hsht21 REAL);

.exit // poistuaksesi sqlite -komentoriviltä ja palataksesi Linux -päätelaitteeseen

Kuunnellakseni sääaseman julkaisemaa aihetta käytin Paho -kirjastoa Pythonin kanssa:

#! /usr/bin/python3# hyväksytty: > # binh nguyen, august 04, 2018, from time import localtime, strftime, sleep import paho.mqtt.client as mqtt import sqlite3, json

mqtt_topic = 'balcony/weatherstation'

mqtt_username = "johndoe" mqtt_password = "password" dbfile = "/path/to/databse/weatherstation.db" mqtt_broker_ip = '192.168.1.50'

# the callback for when the client receives a connack response from the server.

def on_connect(client, userdata, flags, rc): print("connected with result code "+str(rc)) client.subscribe(mqtt_topic) # the callback for when a publish message is received from the server. def on_message(client, userdata, msg): thetime = strftime("%y-%m-%d %h:%m:%s", localtime())

topic = msg.topic

payload = json.dumps(msg.payload.decode('utf-8')) sql_cmd = sql_cmd = """insert into weatherdata values ({0}, '{1}', {2[ldr]}, {2[tsl2561]}, {2[ds18b20]}, {2[tsht21]}, {2[hsht21]})""".format(none, time_, payload) writetodb(sql_cmd) print(sql_cmd) return none

def writetodb(sql_cmd):

conn = sqlite3.connect(dbfile) cur = conn.cursor() cur.execute(sql_command) conn.commit()

client = mqtt.client()

client.on_connect = on_connect client.on_message = on_message client.username_pw_set(username=mqtt_username, password=mqtt_password) client.connect(mqtt_broker_ip, 1883, 60) sleep(1) client.loop_forever()

to display data from use another sql command to query data from the database such as:

sql_command = """ select * from weatherdata order by thetime desc limit 1000;"

this sql command is included in the app.py that uses flask framework and plotty to make a web server and plotting a graph.

the complete code is hosted on the github.

if the esp8266 cannot read the ds18b20, it assigned a value of -127 as the temperature which skews the relative range of other readable temperatures. i cleaned up those values by set a null value to those equals to -127:

sqlite3 weatherstation.db

sqlite3> update weatherdata set ds18b20 = null where ds18b20 = -127;

to set up an environment for this mini web server, i used the shared libraries on raspberry pi. a virtualenv is a better option if the web server is hosted on a powerful computer. start the web server by:

python3 app.py

press control + c to stop the server.

the web server is set to auto-refreshed for every 60 seconds. you can change the interval in index.html file:

battery performance:

i did not measure the current between the normal state or sleep state of esp8266. many others did so. the first google search turned to this page. the normal state of esp8266 consumes about 100ma depends on the rate of transmitting and wifi activity. the deep-sleep state needs in the range of micro a, which a thousand times less.

for 5-minute interval between sleeping and waking up, one single lithium 18650 (2000mah) could fuel my weather station for 12 days. the same battery only enough for esp 8266 ran less than a day with a normal working state. the one i took from the camera battery pack (did not know the capacity) was enough to run the weather station with deep sleep for 5-6 days.

thank you for spending time with me to this end.

Suositeltava: