Chiptron.cz využil naší microESP desku s čidlem CO2 a sepsal o tomto zařízení článek. Za sepsání článku a sdílení dokumentace děkujeme.
Rozhodl jsem si postavit svůj vlastní ekosystém malých a nenápadných zařízení, ze kterých budu odesílat data na server. Teplota, tlak, hluk, CO2, koncentraci prachových částic atd.
Celý koncept jsem založil na desce od LaskaKit s názvem MicroESP, která je osazena modulem EPS12 a navíc obsahuje i nabíjecí obvod třeba ze solárního panelu nebo jiného zdroje přes dvoupinový konektor.
Jako vstup slouží čtyřpinový konektor se dvěma GPIO a napájením s 3.3V. Dva GPIO jsou vybrány jako výchozí pro I2C, ale pokud I2C nechceš, můžeš je použít prostě jako GPIO nebo 1-wire sběrnici.
Jako službu, která ukládá a zobrazuje údaje na webu a v aplikaci jsem vybral The IoT Guru Cloud.
MicroESP
Desku jsem popsal už výše. Maximální nabíjecí napětí je 9V, takže při napájení z solárního panelu je vhodný solár se jmenovitým napětím 5 nebo 6V. Nabíjecí proud může být až 400 mA a je dán hodnotou R11.
Více informací se dozvíte přímo na githubu laskarduino.
https://github.com/LaskaKit/microESP
Celá deska je velmi úsporná a samotná deska v režimu nejhlubšího spánku dosahuje spotřeby asi 25 uA.
The IoT Guru Cloud
The IoT Guru Cloud je služba, které ukládá data, která pošlu přes HTTP GET request (podporuje i MQTT), zároveň je mohu i přečíst (opět HTTP nebo MQTT).
Služba může a nemusí být placená a záleží jen na tobě, jestli jestli chceš data veřejná či nikoliv a jak dlouho mají být uchovávána.
Služba se skládá ze Zařízení – Uzlů a Polí.
The IoT Guru Cloud má spoustu přehledných návodů, jak jejich službu využívat. V Arduino knihovnách najdeš i knihovnu pro použití The IoT Guru Cloud, takže použití je neskutečně snadné.
https://iotguru.cloud/tutorials
CO2 čidlo – SCD41
Jako čidlo jsem vybral SCD41, které má I2C sběrnici, je možné ho napájet z 3.3V, je velmi úsporné – vhodné na bateriové napájení.
O SCD41 jsem se rozepsal v tomto článku https://chiptron.cz/articles.php?article_id=294
Využil jsem oficiálního vývojového kitu od Sensirion, ale další verze bude s modulem přímo od laskakit.cz.
Krabička
Krabičku jsem navrhl v primitivním návrhovém online “programu” tinkercad. Krabička se skládá ze třech částí – krabičky, víka a krytu na čidlo. Jejich spojení jsem docílil pomocí malých 2mm vrutů.
Krabička se dobře tiskne a je potřeba pouze jedna podpěra u krabičky zařízení.
Vytvořil jsem menší a větší krabičku lišící se velikostí baterie. Menší krabička je uzpůsobena pro baterii o velikosti 48x30x6 mm s kapacitou 900 mAh.
Větší krabička je navržena pro větší baterii – 2500 mAh o velikosti 50x40x10 a jemu podobné.
Větší kapacita se hodí pro čidlo CO2 i přesto, že SCD41 je velmi úsporné. Výdrž závisí od intervalu měření a připojování se na Wi-Fi.
Pokud budeš mít zájem o stl soubor na některou z krabiček, napiš nám na náš mail a my ti jej rádi zašleme.
Propojení
Propojení microESP a SCD41 je naprosto triviální. Prostě jen zapájíš čtyři drátky mezi microESP a SCD41, k microESP můžeš zapájet i konektor s roztečí 2.54mm nebo prostě jen hřebínek. To samé platí pro vstup ze solárního panelu (nebo uzpůsobené nabíječky).
3.3V – 3.3V
GND – GND
SCL – SCL
SDA – SDA
Pro měření napětí akumulátoru je potřeba propájet pájecí propojku ADC na desce. Stejně tak je nutné propájet i pájecí propojku SLEEP pro povolení probuzení.
Výstup dat
Jak jsem zmínil výše, data posílám na The IoT Guru Cloud. K hodnotám z čidel se dostaneš buď přes webové rozhraní, pomocí jejich aplikace pro chytrý telefon, můžeš si je stáhnout MQTT protokolem nebo GET requestem.
Statistiky pro jednotlivá pole jsou zobrazena v graf – 24 hodin, týden, měsíc, rok od počátku věků.
Mobilní aplikace
Kód
/*
* Home Monitor - microESP with CO2 sensor SCD41
*
* Made by chiptron.cz (2021)
*/
#include <ESP8266WiFi.h>
#include <IoTGuru.h>
#define WakeUpDuration 900 // wake-up duration
#include <Wire.h>
#include "SparkFun_SCD4x_Arduino_Library.h" // https://github.com/sparkfun/SparkFun_SCD4x_Arduino_Library
SCD4x co2sensor; // CO2 sensor
String userShortId = "userShortID";
String deviceShortId = "deviceShortID";
String deviceKey = "deviceKey";
String nodeKey = "NodeKey";
IoTGuru iotGuru = IoTGuru(userShortId, deviceShortId, deviceKey);
const char* ssid = "SSID";
const char* password = "PASSWORD";
void setup() {
int count = 0;
int co2 = 0;
float batV = 0.0;
Serial.begin(115200);
delay(100);
// Measure battery voltage
batV = float((analogRead(A0)*1000)/1024); // calculate battery voltage
batV = float((batV*(100+310))/100); // voltage divider R1 = 100k; R2 = 310k
Serial.print("Battery voltage: "); Serial.print(batV/1000); Serial.println(" V");
if(batV <= 3600) // check if the voltage is lower than 3.6V
{
Serial.println("LOW BATTERY VOLTAGE");
Serial.flush();
ESP.deepSleep(1800 * 1000000, WAKE_RF_DEFAULT);
}
Wire.begin();
if (co2sensor.begin(false, true) == false)
{
Serial.println("SCD41 was not set correctly. Check the connection.");
Serial.flush();
delay(100);
ESP.deepSleep(WakeUpDuration * 1000000, WAKE_RF_DEFAULT);
}
if (co2sensor.startLowPowerPeriodicMeasurement() == true)
{
Serial.println("Low power mode enabled.");
}
// Switch to WiFi mode
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
if(count >= 20)
{
Serial.println("SSID or Password is not valid");
Serial.flush();
delay(100);
ESP.deepSleep(WakeUpDuration * 1000000, WAKE_RF_DEFAULT);
}
count++;
}
Serial.println("");
//Set check in duration, the default is 60000 milliseconds.
iotGuru.setCheckDuration(60000);
//Set the debug printer.
iotGuru.setDebugPrinter(&Serial);
delay(100);
iotGuru.check();
if (co2sensor.readMeasurement()) // wait for a new data (approx 30s)
{
Serial.println();
Serial.print("CO2(ppm):"); Serial.print(co2sensor.getCO2()); Serial.print(" ppm");
Serial.print("\tTemperature(C):"); Serial.print(co2sensor.getTemperature(), 1); Serial.print(" degC");
Serial.print("\tHumidity(%RH):"); Serial.print(co2sensor.getHumidity(), 1); Serial.print(" %RH");
Serial.println();
iotGuru.sendHttpValue(nodeKey, "co2", co2sensor.getCO2());
iotGuru.sendHttpValue(nodeKey, "vbat", batV/1000);
iotGuru.sendHttpValue(nodeKey, "temp", co2sensor.getTemperature());
iotGuru.sendHttpValue(nodeKey, "hum", co2sensor.getHumidity());
}
Serial.println("Going to sleep...");
Serial.flush();
delay(100);
ESP.deepSleep(WakeUpDuration * 1000000, WAKE_RF_DEFAULT);
}
void loop() {
// put your main code here, to run repeatedly:
}
9 Responses
Dobrý den,
Prosím o znovu nahrání .stl souborů. Odkazy jsou nefunkční. Děkuji.
Dobrý den, bohužel se nám nedaří soubory znovu nahrát a tak Vám je zašleme e-mailem.
Dobrý den, mohl bych také poprosit o zaslání .stl souborů do emailu? 🙂 Mockrát děkuji.
Dobrý den,
dne bych šel spíš do tohohle řešení – navíc používá ESP32-C3, takže je i úspornější
https://github.com/LaskaKit/ESP32-C3_OLED_kit/blob/main/README_CZ.md
Dobry den, poprosil by som nahrat stl suborh na obidva typy krabiciek.
Dakujem.
Zdravím, přidáno do článku.
Dobry den, poprosil by som Vas pomoct mi s kompilaciou programu. Neustale miukazuje chybu Esp8266 kniznica chyba. Uz som skusil stiahnut asi 5 druhov, stale ta ista chyba. Vedeli by sta mi dat link na ich stiahnutie? Pripadne ake, dalsie nastavenia spravit, aby bol program skompilovany spravne. Dakujem.
Dobry den,
muzete se sdilet vypis z konzole s tou chybou? diky
Dobry den, problem je v tom, ze Vami uverejneny program je pre veriu 1 LaskaKit microESP ten obsahuje ESP8266, nova verzia 3 microESP obsahuje ESP32-C3.
Vedeli by ste prosim uverejnit program s novou verziou ESP32-C3 ?
Dakujem.