Orodha ya maudhui:
- Hatua ya 1: BoM - Muswada wa Nyenzo
- Hatua ya 2: Sensorer ya UV ya Analog
- Hatua ya 3: Kusanidi Onyesho: OLED
- Hatua ya 4: Mita ya UV ya Mitaa
- Hatua ya 5: Kusanikisha DHT22 kwa Vipimo vya Joto Hewa na Unyevu
- Hatua ya 6: Kutuma Takwimu kwa ThingSpeak.com
- Hatua ya 7: Hitimisho
Video: IoT Imefanywa Rahisi: Kukamata Takwimu za hali ya hewa ya mbali: Joto la UV na Hewa na Unyevu: Hatua 7
2024 Mwandishi: John Day | [email protected]. Mwisho uliobadilishwa: 2024-02-01 14:42
Kwenye mafunzo haya, tutakamata data ya mbali kama UV (Mionzi ya Ultra-Violet), joto la hewa na unyevu. Takwimu hizo zitakuwa muhimu sana na zitatumika katika Kituo cha hali ya hewa kamili kamili.
Mchoro wa block unaonyesha kile tutapata mwisho.
Hatua ya 1: BoM - Muswada wa Nyenzo
NodeMCU (ESP8266-12E) - USD 9.00
Sensorer ya Unyevu na Joto (DHT22) - USD10.00
Sensorer ya UV - USD 4.00
OLED USD 12.00
Bodi ya mkate - USD1.00
Hatua ya 2: Sensorer ya UV ya Analog
Sensorer hii ya UV hutoa pato la analog sawia na mionzi ya Ultra-Violet inayopatikana kwenye wigo wa kuhisi mwanga. Inatumia picha ya UV (kulingana na Gallium Nitride), ambayo inaweza kugundua taa ya 240-370nm (ambayo inashughulikia UVB na wigo mwingi wa UVA). Kiwango cha ishara kutoka kwa photodiode ni ndogo sana, katika kiwango cha nano-ampere, kwa hivyo moduli imeingiza kipaza sauti cha kufanya kazi ili kukuza ishara kwa kiwango cha volt kinachosomeka zaidi (0 hadi 1V).
Sensor na op-amp zinaweza kuwezeshwa, kwa kuunganisha VCC hadi 3.3VDC (au 5VDC) na GND kwenye uwanja wa umeme. Ishara ya analog inaweza kupatikana kutoka kwa pini ya OUT.
Pato lake litakuwa katika millivolts na litasomwa na Ingizo la Analog ya NodeMCU yetu. Mara tu ikisomwa, tunapaswa "kuibadilisha" (au "ramani") ili maadili yashughulikiwe vizuri na nambari. Tunaweza kuifanya na kazi kusomaSensorUV ():
/ * Soma Sensorer ya UV katika mV na piga hesabu ya faharisi ya UV * /
kusoma utupuSensorUV () {byte numOfReadings = 5; dataSensorUV = 0; kwa (int i = 0; i <numOfReadings; i ++) {dataSensorUV + = analogRead (sensorUVPin); kuchelewesha (200); } dataSensorUV / = numOfReadings; dataSensorUV = (dataSensorUV * (3.3 / 1023.0)) * 1000; Serial.println (dataSensorUV); indexCalculate (); }
Mara tu tunapokuwa na data ya UV tunaweza kuhesabu kwa urahisi faharisi ya UV kama ilivyoainishwa kwenye jedwali hapo juu. Faharisi ya kaziCalculate () itatufanyia:
/ * Hesabu ya UV Index * /
index batiliCalculate () {if (dataSensorUV <227) indexUV = 0; vinginevyo ikiwa (227 <= dataSensorUV && dataSensorUV <318) indexUV = 1; vinginevyo ikiwa (318 <= dataSensorUV && dataSensorUV <408) indexUV = 2; vinginevyo ikiwa (408 <= dataSensorUV && dataSensorUV <503) indexUV = 3; vinginevyo ikiwa (503 <= dataSensorUV && dataSensorUV <606) indexUV = 4; vinginevyo ikiwa (606 <= dataSensorUV && dataSensorUV <696) indexUV = 5; vinginevyo ikiwa (696 <= dataSensorUV && dataSensorUV <795) indexUV = 6; vinginevyo ikiwa (795 <= dataSensorUV && dataSensorUV <881) indexUV = 7; vinginevyo ikiwa (881 <= dataSensorUV && dataSensorUV <976) indexUV = 8; vinginevyo ikiwa (976 <= dataSensorUV && dataSensorUV <1079) indexUV = 9; vinginevyo ikiwa (1079 <= dataSensorUV && dataSensorUV <1170) indexUV = 10; mwingine indexUV = 11; }
Hatua ya 3: Kusanidi Onyesho: OLED
Kwa madhumuni ya kujaribu, tutajumuisha OLED kwenye mita yetu ya UV (Hatua hii ni ya hiari kabisa).
Ni sawa wakati wa majaribio, kutumia Monitor Serial, lakini ni nini kinachotokea wakati unatumia prototypes zako mbali na PC yako katika hali ya kusimama pekee? Kwa hilo, wacha tuweke onyesho la OLED, SSD1306, ambayo sifa kuu ni:
- Ukubwa wa onyesho: 0.96"
- I2C IIC SPI Serial
- 128X64
- Nyeupe OLED LCD LED
Fuata mchoro wa umeme na unganisha pini 4 za OLED yetu:
- VCC huenda kwa 3.3V
- GND huenda chini
- SCL inakwenda NodeMCU (GPIO 2) ==> D4
- SDA inakwenda NodeMCU (GPIO 0) ==> D3
Mara tu tuunganishe onyesho, wacha tupakue na kusanikisha maktaba yake kwenye Arduino IDE yetu: "ESP8266 OLED Dereva ya onyesho la SSD1306" iliyoundwa na Daniel Eichhorn (Hakikisha unatumia Toleo la 3.0.0 au kubwa!).
Sakinisha maktaba kwenye IDE yako ya Arduino, ambayo inaweza kupatikana kwenye SSD1306Wire.h
Mara tu unapoanza tena IDE, maktaba inapaswa kuwa tayari imewekwa.
Maktaba inasaidia itifaki ya I2C kufikia onyesho la OLED kwa kutumia maktaba ya Wire.h iliyojengwa:
/ * OLED * /
# pamoja na "SSD1306Wire.h" # pamoja na "Wire.h" const int I2C_DISPLAY_ADDRESS = 0x3c; const int SDA_PIN = 0; const int SCL_PIN = 2; Onyesho la SSD1306Wire (I2C_DISPLAY_ADDRESS, SDA_PIN, SCL_PIN);
Wacha tuorodhe API muhimu ambayo itatumika na onyesho letu la OLED. Orodha kamili inaweza kupatikana kwenye GITHub iliyotolewa hapo juu.
A. Udhibiti wa Kuonyesha:
utupu init (); // Anzisha onyesho
onyesha batiliOn (batili); // Washa onyesho kwenye onyesho batiliOff (batili); // Badili maonyesho wazi wazi (batili); // Futa bafa ya saizi ya pikseli ya ndani batili flipScreenVertically (); // Pindua onyesho chini
Uendeshaji wa Nakala:
Utupu wa kutekaString (int16_t x, int16_t y, maandishi ya Kamba); // (xpos, ypos, "Nakala")
batili setFont (const char * fontData); // Inaweka font ya sasa.
Fonti chaguo-msingi zinazopatikana:
- ArialMT_Plain_10,
-
ArialMT_Plain_16,
- ArialMT_Plain_24
Mara tu OLED yenyewe na Maktaba yake imewekwa, wacha tuandike mpango rahisi wa kuijaribu. Ingiza na nambari iliyokolea kwenye IDE yako, matokeo yanapaswa kuwa onyesho kama inavyoonyeshwa kwenye picha hapo juu:
* OLED * /
# pamoja na "SSD1306Wire.h" # pamoja na "Wire.h" const int I2C_DISPLAY_ADDRESS = 0x3c; const int SDA_PIN = 0; const int SCL_PIN = 2; Onyesho la SSD1306Wire (I2C_DISPLAY_ADDRESS, SDA_PIN, SCL_PIN); kuanzisha batili () {Serial.begin (115200); onyeshaSetup (); } kitanzi batili () {} / * Anzisha na uonyeshe data ya usanidi kwenye OLED * / void displaySetup () {display.init (); // anzisha onyesho la kuonyesha. wazi (); // Onyesha onyesho la kuonyesha.flipScreenVertically (); // Pindua onyesho la kichwa chini. Onyesha (); // Weka data kwenye onyesho la Serial.println ("Kuanzisha Mtihani wa Kuonyesha"); onyesha.setFont (ArialMT_Plain_24); onyesha.drawString (30, 0, "OLED"); // (xpos, ypos, "Nakala") onyesha.setFont (ArialMT_Plain_16); onyesha.drawString (18, 29, "Mtihani umeanzishwa"); onyesha.setFont (ArialMT_Plain_10); onyesha.drawString (10, 52, "Serial BaudRate:"); onyesha DrawString (90, 52, String (11500)); onyesha.display (); // Weka data juu ya kucheleweshwa kwa onyesho (3000); }
Programu hapo juu inaweza kupakuliwa kutoka kwa GitHub yangu:
NodeMCU_OLED_Test
Hatua ya 4: Mita ya UV ya Mitaa
Sasa, pamoja na onyesho la OLED limesanikishwa, tunaweza kuunganisha betri na kufanya vipimo kadhaa vya mbali kutumia "Mita ya UV"
#fafanua SW_VERSION "UV_Sensor_V.1"
/ * UV Sensor * / #fafanua sensaUVPin A0 int dataSensorUV = 0; int indexUV = 0; / * OLED * / # pamoja na "SSD1306Wire.h" # pamoja na "Wire.h" const int I2C_DISPLAY_ADDRESS = 0x3c; const int SDA_PIN = 0; const int SCL_PIN = 2; Onyesho la SSD1306Wire (I2C_DISPLAY_ADDRESS, SDA_PIN, SCL_PIN); kuanzisha batili () {Serial.begin (115200); onyeshaSetup (); } kitanzi batili () {readSensorUV (); onyeshaUV (); kuchelewesha (1000); } / * Anzisha na onyesha data ya usanidi kwenye OLED * / batili displaySetup () {display.init (); // anzisha onyesho la kuonyesha. wazi (); // Onyesha onyesho la kuonyesha.flipScreenVertically (); // Pindua onyesho la kichwa chini. Onyesha (); // Weka data kwenye onyesho Serial.println ("Kuanzisha Mtihani wa Sensorer ya UV"); onyesha.setFont (ArialMT_Plain_24); onyesha.drawString (10, 0, "MJRoBot"); onyesha.setFont (ArialMT_Plain_16); kuonyesha.drawString (0, 29, "Mtihani wa Sensorer ya UV"); onyesha.setFont (ArialMT_Plain_10); onyesha.drawString (0, 52, "SW Ver.:"); onyesha DrawString (45, 52, SW_VERSION); onyesha.display (); kuchelewesha (3000); } / * Soma Sensorer ya UV katika mV na piga hesabu ya faharisi ya UV * / utupu readSensorUV () {byte numOfReadings = 5; dataSensorUV = 0; kwa (int i = 0; i <numOfReadings; i ++) {dataSensorUV + = analogRead (sensorUVPin); kuchelewesha (200); } dataSensorUV / = numOfReadings; dataSensorUV = (dataSensorUV * (3.3 / 1023.0)) * 1000; Serial.println (dataSensorUV); indexCalculate (); } / * Hesabu ya UV Index * / index batiliCalculate () {if (dataSensorUV <227) indexUV = 0; vinginevyo ikiwa (227 <= dataSensorUV && dataSensorUV <318) indexUV = 1; vinginevyo ikiwa (318 <= dataSensorUV && dataSensorUV <408) indexUV = 2; vinginevyo ikiwa (408 <= dataSensorUV && dataSensorUV <503) indexUV = 3; vinginevyo ikiwa (503 <= dataSensorUV && dataSensorUV <606) indexUV = 4; vinginevyo ikiwa (606 <= dataSensorUV && dataSensorUV <696) indexUV = 5; vinginevyo ikiwa (696 <= dataSensorUV && dataSensorUV <795) indexUV = 6; vinginevyo ikiwa (795 <= dataSensorUV && dataSensorUV <881) indexUV = 7; vinginevyo ikiwa (881 <= dataSensorUV && dataSensorUV <976) indexUV = 8; vinginevyo ikiwa (976 <= dataSensorUV && dataSensorUV <1079) indexUV = 9; vinginevyo ikiwa (1079 <= dataSensorUV && dataSensorUV <1170) indexUV = 10; mwingine indexUV = 11; } / * Onyesha Maadili ya UV kwenye OLED ya ndani / onyesho batiliUV () {display.clear (); onyesha.setFont (ArialMT_Plain_16); kuonyesha.drawString (20, 0, "UV Sensor"); onyesha.drawString (0, 23, "UV (mV):"); onyesha.drawString (80, 23, String (dataSensorUV)); kuonyesha.drawString (0, 48, "UV Index:"); onyesha.setFont (ArialMT_Plain_24); onyesha.drawString (82, 42, String (indexUV)); onyesha.display (); }
Nambari iliyo hapo juu inaweza kupakuliwa kutoka kwa GitHun yangu: NodeMCU_UV_Sensor_OLED.ino
Hatua ya 5: Kusanikisha DHT22 kwa Vipimo vya Joto Hewa na Unyevu
Moja ya sensorer zinazotumiwa sana kwa kunasa data ya hali ya hewa ni DHT22 (au ni ndugu DHT11), unyevu wa dijiti na sensorer ya joto. Inatumia sensorer ya unyevu unyevu na kipima joto kupima hewa inayozunguka na kutema ishara ya dijiti kwenye pini ya data (hakuna pini za pembejeo za analog zinazohitajika).
Sensor inapaswa kuwezeshwa kati ya 3.3V na 5V na itafanya kazi kutoka -40oC hadi + 80oC kwa usahihi wa +/- 0.5oC kwa joto na +/- 2% kwa Unyevu wa jamaa. Pia ni muhimu kuzingatia kwamba kipindi chake cha kuhisi ni wastani wa sekunde 2 (wakati mdogo kati ya usomaji). Tovuti ya Adafruit hutoa habari nyingi juu ya wote, DHT22 na kaka yake DHT11. Kwa maelezo zaidi, tafadhali tembelea ukurasa wa Mafunzo ya DHT22 / 11.
DHT22 ina pini 4 (inakabiliwa na sensorer, pini 1 ndio kushoto zaidi):
- VCC (tutaunganisha kwa 3.3V kutoka NodeMCU);
- Takwimu nje;
- Haijaunganishwa na
- Ardhi.
Mara moja kawaida utatumia sensa kwa umbali chini ya 20m, kontena la 10K linapaswa kuunganishwa kati ya pini za Takwimu na VCC. Pini ya Pato itaunganishwa na NodeMCU pin D3 (angalia mchoro hapo juu). Mara tu sensor inaposanikishwa kwenye moduli yetu, pakua maktaba ya DHT kutoka kwa ghala la Adafruit GitHub na uiweke kwenye faili yako ya Maktaba ya Arduino. Mara tu unapopakia tena IDE yako ya Arduino, "maktaba ya sensorer ya DHT" inapaswa kusakinishwa.
Mwanzoni mwa nambari, lazima tujumuishe mistari:
/ * DHT22 * /
# pamoja na "DHT.h" #fafanua DHTPIN D2 #fafanua DHTTYPE DHT22 DHT dht (DHTPIN, DHTTYPE); kuelea hum = 0; kuelea temp = 0;
Kazi mpya itaundwa kusoma sensor:
/ * Pata data ya DHT * /
batili getDhtData (batili) {float tempIni = temp; kuelea humIni = hum; temp = dht. soma Joto (); hum = dht. somo Unyenyekevu (); ikiwa (isnan (hum) || isnan (temp)) // Angalia ikiwa kuna usomaji wowote umeshindwa na utoke mapema (kujaribu tena). {Serial.println ("Imeshindwa kusoma kutoka kwa sensorer ya DHT!"); temp = tempIni; hum = humIni; kurudi; }}
Nambari kamili ikiwa ni pamoja na sensorer za UV na DHT zinaweza kupakuliwa kutoka kwa GitHub yangu: NodeMCU_UV_DHT_Sensor_OLED
Hatua ya 6: Kutuma Takwimu kwa ThingSpeak.com
Kufikia sasa, tumetumia tu NodeMCU ESP12-E kama bodi ya kawaida na ya kawaida ya Arduino. Kwa kweli, "tumekwaruza" tu uwezo halisi wa chipu hiki cha kuvutia na sasa ni wakati wa kuondoka kwenda mbinguni! Au bora kwa nyota! Ehr… kwa wingu!;-)
Wacha tuanze!
- Kwanza, lazima uwe na akaunti kwenye ThinkSpeak.com
- Fuata maagizo ya kuunda Kituo na uzingatie Kitambulisho chako na Andika Kitufe cha API
- Sasisha nambari iliyo hapa chini na mtandao wako wa WiFi na sifa za Thinkspeak
- Endesha programu kwenye IDE
Wacha tupe maoni nambari muhimu zaidi ya nambari:
Kwanza, wacha tuite maktaba ya ESP8266, tufafanue mteja wa WiFi na tufafanue sifa zako za Router na Thinkspeak:
/ * ESP12-E & Thinkspeak * /
#jumuisha mteja wa Wateja wa WiFi; const char * MY_SSID = "ID yako ya SSD HAPA"; const char * MY_PWD = "NENO LAKO HAPA"; const char * TS_SERVER = "api.thingspeak.com"; Kamba TS_API_KEY = "CHANNEL YAKO ANDIKA KIWANGO CHA API";
Pili, wacha tujumuishe maktaba muhimu sana kwa miradi ya IoT: SimpleTimer.h:
/ * KIPIMA * /
# pamoja na Timer Timer timer;
Tatu, wakati wa usanidi (), tutaanzisha mawasiliano ya serial, piga kazi connectWiFi () na tufafanue vipima muda. Kumbuka kuwa mstari wa nambari: timer.setInterval (60000L, sendDataTS); itaita kazi sendDataTS () kila sekunde 60, ili kupakia data kwenye kituo cha ThinkSpeak.
kuanzisha batili ()
{… Serial.begin (115200); kuchelewesha (10); … UnganishaWifi (); timer.setInterval (60000L, sendDataTS); …}
Mwishowe lakini sio uchache, wakati wa kitanzi (), amri pekee inahitajika ni kuanzisha kipima muda na ndivyo ilivyo!
kitanzi batili ()
{… Timer.run (); // Huanzisha SimpleTimer}
Chini, unaweza kuona kazi mbili muhimu zinazotumika kushughulikia mawasiliano ya Thinkspeak:
Uunganisho wa ESP12-E na mtandao wako wa WiFi:
/***************************************************
* Kuunganisha WiFi *************************************************** *** / void connectWifi () {Serial.print ("Kuunganisha kwa" + * MY_SSID); WiFi.anza (MY_SSID, MY_PWD); wakati (WiFi.status ()! = WL_CONNECTED) {kuchelewesha (1000); Printa ya serial ("."); } Serial.println (""); Serial.println ("WiFi Imeunganishwa"); Serial.println (""); }
ESP12-E kutuma data kwa ThinkSpeak:
/***************************************************
* Kutuma Takwimu kwenye Kituo cha Thinkspeak *********************************************** ****** / void sendDataTS (batili) {if (client.connect (TS_SERVER, 80)) {String postStr = TS_API_KEY; postStr + = "& uwanja1 ="; postStr + = Kamba (dataSensorUV); postStr + = "& shamba2 ="; postStr + = Kamba (indexUV); postStr + = "& uwanja3 ="; postStr + = Kamba (temp); postStr + = "& uwanja4 ="; postStr + = Kamba (hum); postStr + = "\ r / n / r / n"; alama ya mteja ("POST / sasisha HTTP / 1.1 / n"); mteja.print ("Mwenyeji: api.thingspeak.com / n"); alama ya mteja ("Uunganisho: funga / n"); alama ya mteja ("X-THINGSPEAKAPIKEY:" + TS_API_KEY + "\ n"); mteja.print ("Aina ya Maudhui: matumizi / x-www-form-urlencoded / n"); alama ya mteja ("Urefu wa Yaliyomo:"); alama ya mteja (postStr.length ()); alama ya mteja ("\ n / n"); alama ya mteja (postStr); kuchelewesha (1000); } imetumwa ++; mteja.acha (); }
Nambari kamili inaweza kupatikana kwenye GitHub yangu: NodeMCU_UV_DHT_Sensor_OLED_TS_EXT
Mara baada ya kuwa na nambari iliyopakiwa kwenye NodeMCU yako. Wacha tuunganishe betri ya nje na tufanye kipimo chini ya jua. Ninaweka Kituo cha Remote juu ya paa na kuanza kunasa data kwenye ThingSpeak.com kama inavyoonekana kwenye picha hapo juu.
Hatua ya 7: Hitimisho
Kama kawaida, natumahi mradi huu unaweza kusaidia wengine kupata njia yao katika ulimwengu wa kusisimua wa umeme!
Kwa maelezo na nambari ya mwisho, tafadhali tembelea Hifadhi yangu ya GitHub: RPi-NodeMCU-Kituo cha Hali ya Hewa
Kwa miradi zaidi, tafadhali tembelea blogi yangu: MJRoBot.org
Endelea kufuatilia! Mafunzo yafuatayo tutatuma data kutoka kituo cha hali ya hewa ya mbali hadi katikati, kwa msingi wa seva ya Wavuti ya Raspberry Pi:
Saludos kutoka kusini mwa ulimwengu!
Tukutane kwenye mafunzo yangu yafuatayo!
Asante, Marcelo
Ilipendekeza:
Onyesho rahisi la hali ya hewa kwa kutumia Raspberry PI na hali ya hewa ya CyntechHAT: Hatua 4
Onyesho rahisi la hali ya hewa kwa kutumia Raspberry PI na Cyntech WeatherHAT: * Mnamo 2019 Yahoo ilibadilisha API, na hii iliacha kufanya kazi. Sikujua mabadiliko hayo. Mnamo Septemba ya 2020 mradi huu umesasishwa kutumia OPENWEATHERMAP API Angalia sehemu iliyosasishwa hapa chini, habari hii iliyobaki bado ni nzuri
Kituo cha Hali ya Hewa cha NaTaLia: Kituo cha Hali ya Hewa ya Arduino Inayotumiwa Imefanywa kwa Njia Sahihi: Hatua 8 (na Picha)
Kituo cha Hali ya Hewa cha NaTaLia: Kituo cha Hali ya Hewa ya Arduino Inayotumiwa Imefanywa kwa Njia Sawa: Baada ya mwaka 1 wa kufanikiwa katika maeneo 2 tofauti ninashiriki mipango yangu ya mradi wa kituo cha hali ya hewa na kuelezea jinsi ilibadilika kuwa mfumo ambao unaweza kuishi kwa muda mrefu vipindi kutoka kwa nguvu ya jua. Ukifuata
Joto la Raspberry PI na Ukataji wa unyevu, Kituo cha hali ya hewa ya Wingu, Wifi na Takwimu za rununu: Hatua 6
Joto la Raspberry PI na Ukataji wa Unyevu, Kituo cha Hali ya Hewa ya Wingu, Wifi na Takwimu za rununu: Ukiwa na kifaa cha Raspberry PI unaweza kuingia data ya joto na unyevu nje, kwenye chumba, chafu, maabara, chumba cha kupoza au maeneo mengine yoyote bure kabisa. Mfano huu tutatumia kuingiza hali ya joto na unyevu.Device itaunganishwa kwenye mtandao v
ESP32 Kulingana na M5Stack M5stick C Hali ya hewa Monitor na DHT11 - Fuatilia Unyevu wa Joto na Kiashiria cha Joto kwenye M5stick-C Pamoja na DHT11: 6 Hatua
ESP32 Kulingana na M5Stack M5stick C Hali ya hewa Monitor na DHT11 | Fuatilia Unyevu wa Joto na Kiashiria cha Joto kwenye M5stick-C Pamoja na DHT11: Halo jamani, katika mafundisho haya tutajifunza jinsi ya kusanikisha sensa ya joto ya DHT11 na m5stick-C (bodi ya maendeleo na m5stack) na kuionyesha kwenye onyesho la m5stick-C. Kwa hivyo katika mafunzo haya tutasoma joto, unyevu & joto i
Mshumaa wa Hali ya Hewa - Hali ya hewa na Joto kwa haraka: 8 Hatua
Mshumaa wa Hali ya Hewa - Hali ya Hewa na Joto kwa haraka: Kutumia mshumaa huu wa kichawi, unaweza kujua hali ya joto na hali ya sasa nje mara moja