Агуулгын хүснэгт:

IoT хялбар болсон: Алсын цаг агаарын мэдээллийг авах: Хэт ягаан туяа ба агаарын температур ба чийгшил: 7 алхам
IoT хялбар болсон: Алсын цаг агаарын мэдээллийг авах: Хэт ягаан туяа ба агаарын температур ба чийгшил: 7 алхам
Anonim
IoT хялбар болсон: Алсын цаг агаарын мэдээллийг авах: Хэт ягаан туяа, агаарын температур ба чийгшил
IoT хялбар болсон: Алсын цаг агаарын мэдээллийг авах: Хэт ягаан туяа, агаарын температур ба чийгшил

Энэхүү гарын авлагад бид хэт ягаан туяа (хэт ягаан туяа), агаарын температур, чийгшил гэх мэт алсын мэдээллийг авах болно. Эдгээр өгөгдөл нь маш чухал бөгөөд ирээдүйд цаг уурын станцад ашиглагдах болно.

Диаграм блок нь эцэст нь юу авахыг харуулдаг.

Зураг
Зураг

Алхам 1: Монголбанк - Билл материал

NodeMCU (ESP8266-12E) - 9.00 доллар

Чийглэг ба температур мэдрэгч (DHT22) - USD10.00

Хэт ягаан туяаны мэдрэгч - 4.00 ам

OLED ам.доллар 12.00

Талхны самбар - USD1.00

Алхам 2: Аналог хэт ягаан туяаны мэдрэгч

Аналог хэт ягаан туяаны мэдрэгч
Аналог хэт ягаан туяаны мэдрэгч
Аналог хэт ягаан туяаны мэдрэгч
Аналог хэт ягаан туяаны мэдрэгч
Аналог хэт ягаан туяаны мэдрэгч
Аналог хэт ягаан туяаны мэдрэгч

Энэхүү хэт ягаан туяаны мэдрэгч нь гэрлийг мэдрэх спектрээс олж авсан хэт ягаан туяаны пропорциональ гаралтыг бий болгодог. Энэ нь хэт ягаан туяаны фотодиод (галлий нитрид дээр суурилсан) ашигладаг бөгөөд энэ нь 240-370нм гэрлийн долгионыг (UVB болон UVA спектрийн ихэнх хэсгийг хамардаг) илрүүлдэг. Фотодиодоос гарах дохионы түвшин маш бага, нано-ампер түвшинд байдаг тул модуль нь дохиог илүү уншигдах вольтын түвшинд (0-ээс 1В хүртэл) өсгөхийн тулд үйлдлийн өсгөгч суурилуулсан болно.

Мэдрэгч ба оп-өсгөгчийг VCC-ийг 3.3VDC (эсвэл 5VDC), GND-ийг тэжээлийн газардуулгад холбох замаар тэжээх боломжтой. Аналог дохиог OUT pin -ээс авах боломжтой.

Түүний гаралт нь милливольт байх бөгөөд манай NodeMCU -ийн аналог оролтоор унших болно. Уншсаны дараа утгыг кодоор илүү сайн зохицуулахын тулд бид үүнийг "хөрвүүлэх" (эсвэл "газрын зураг") хийх ёстой. Бид үүнийг readSensorUV () функцээр хийж болно:

/ * Хэт ягаан туяаны мэдрэгчийг mV -ээр уншиж, хэт ягаан туяаны индексийн тооцооллыг дуудах */

хүчингүй readSensorUV () {байт numOfReadings = 5; dataSensorUV = 0; for (int i = 0; i <numOfReadings; i ++) {dataSensorUV+= analogRead (sensorUVPin); саатал (200); } dataSensorUV /= numOfReadings; dataSensorUV = (dataSensorUV * (3.3 / 1023.0)) * 1000; Serial.println (dataSensorUV); indexCalculate (); }

Хэт ягаан туяаны өгөгдөлтэй болсны дараа бид дээрх хүснэгтэд заасан хэт ягаан туяаны индексийг хялбархан тооцоолж чадна. IndexCalculate () функц нь бидний хувьд үүнийг хийх болно.

/ * Хэт ягаан туяаны индексийн тооцоо */

void indexCalculate () {if (dataSensorUV <227) indexUV = 0; өөр бол (227 <= dataSensorUV && dataSensorUV <318) indexUV = 1; өөр бол (318 <= dataSensorUV && dataSensorUV <408) indexUV = 2; өөр бол (408 <= dataSensorUV && dataSensorUV <503) indexUV = 3; өөр бол (503 <= dataSensorUV && dataSensorUV <606) indexUV = 4; өөр бол (606 <= dataSensorUV && dataSensorUV <696) indexUV = 5; өөр бол (696 <= dataSensorUV && dataSensorUV <795) indexUV = 6; өөр бол (795 <= dataSensorUV && dataSensorUV <881) indexUV = 7; өөр бол (881 <= dataSensorUV && dataSensorUV <976) indexUV = 8; өөр бол (976 <= dataSensorUV && dataSensorUV <1079) indexUV = 9; өөр бол (1079 <= dataSensorUV && dataSensorUV <1170) indexUV = 10; өөр indexUV = 11; }

Алхам 3: Дэлгэц суурилуулах: OLED

Дэлгэц суурилуулах: OLED
Дэлгэц суурилуулах: OLED
Дэлгэц суурилуулах: OLED
Дэлгэц суурилуулах: OLED

Туршилтын зорилгоор бид хэт ягаан туяаны тоолууртаа OLED -ийг оруулах болно (Энэ алхам нь бүрэн сонголт биш юм).

Туршилтын явцад Цуваа мониторыг ашиглах нь зөв, гэхдээ та прототипээ PC-ээс хол байрлуулах горимд ашиглахад юу болж байна вэ? Үүний тулд үндсэн шинж чанарууд болох OLED дэлгэц болох SSD1306 -ийг суулгацгаая.

  • Дэлгэцийн хэмжээ: 0.96"
  • I2C IIC SPI цуврал
  • 128X64
  • Цагаан OLED LCD LED

Цахилгааны диаграмыг дагаж манай OLED -ийн 4 зүүг холбоно уу.

  • VCC нь 3.3V хүртэл ажилладаг
  • GND газар унав
  • SCL нь NodeMCU (GPIO 2) ==> D4 руу ордог
  • SDA нь NodeMCU (GPIO 0) ==> D3 руу ордог

Дэлгэцийг холбосны дараа түүний номын санг Arduino IDE дээрээ татаж аваад суулгацгаая: Daniel Eichhorn -ийн боловсруулсан "SSD1306 дэлгэцийн ESP8266 OLED драйвер" (Та 3.0.0 буюу түүнээс дээш хувилбарыг ашиглаж байгаа эсэхээ шалгаарай!).

Номын санг SSD1306Wire.h дээрээс олж болох Arduino IDE дээрээ суулгаарай

IDE -ийг дахин эхлүүлсний дараа номын санг аль хэдийн суулгасан байх ёстой.

Номын сан нь W2.h номын санг ашиглан OLED дэлгэц рүү нэвтрэх I2C протоколыг дэмждэг.

/ * OLED */

#include "SSD1306Wire.h" #include "Wire.h" const int I2C_DISPLAY_ADDRESS = 0x3c; const int SDA_PIN = 0; const int SCL_PIN = 2; SSD1306 Утасны дэлгэц (I2C_DISPLAY_ADDRESS, SDA_PIN, SCL_PIN);

OLED дэлгэцтэй хамт ашиглах зарим чухал API -г жагсаая. Бүрэн жагсаалтыг дээрх GITHub дээрээс олж болно.

A. Дэлгэцийн хяналт:

хүчингүй init (); // Дэлгэцийг эхлүүлэх

void displayOn (хүчингүй); // Void displayOff (void) дээр дэлгэцийг асаах; // Дэлгэцийг идэвхгүй болгох (хоосон); // Орон нутгийн пикселийн буферийг хүчингүй болгох flipScreenVertically (); // Дэлгэцийг дээш нь эргүүл

B. Текстийн үйлдлүүд:

void drawString (int16_t x, int16_t y, String текст); // (xpos, ypos, "Текст")

хүчингүй setFont (const char* fontData); // Одоогийн фонтыг тохируулна.

Боломжтой үндсэн фонтууд:

  • ArialMT_Plain_10,
  • ArialMT_Plain_16,

  • ArialMT_Plain_24

OLED өөрөө болон түүний номын санг хоёуланг нь суулгасны дараа үүнийг шалгах энгийн програм бичье. IDE дээрээ доорх кодыг оруулна уу, үр дүн нь дээрх зурагт үзүүлсэн шиг харагдах болно.

* OLED */

#include "SSD1306Wire.h" #include "Wire.h" const int I2C_DISPLAY_ADDRESS = 0x3c; const int SDA_PIN = 0; const int SCL_PIN = 2; SSD1306 Утасны дэлгэц (I2C_DISPLAY_ADDRESS, SDA_PIN, SCL_PIN); void setup () {Serial.begin (115200); displaySetup (); } void loop () {} / * OLED дээр тохиргооны өгөгдлийг эхлүүлэх * / void displaySetup () {display.init (); // дэлгэцийн дэлгэцийг эхлүүлэх.clear (); // Дэлгэцийн дэлгэцийг цэвэрлэ.flipScreenVertically (); // Дэлгэцийг дээрээс нь доош харуул дэлгэц.display (); // Өгөгдлийг дэлгэц дээр тавих Serial.println ("Дэлгэцийн тестийг эхлүүлэх"); display.setFont (ArialMT_Plain_24); display.drawString (30, 0, "OLED"); // (xpos, ypos, "Текст") display.setFont (ArialMT_Plain_16); display.drawString (18, 29, "Туршилтыг эхлүүлсэн"); display.setFont (ArialMT_Plain_10); display.drawString (10, 52, "Serial BaudRate:"); display.drawString (90, 52, String (11500)); display.display (); // Дэлгэцийн саатал дээр өгөгдөл оруулах (3000); }

Дээрх програмыг миний GitHub дээрээс татаж авах боломжтой.

NodeMCU_OLED_Test

Алхам 4: Орон нутгийн хэт ягаан туяаны тоолуур

Орон нутгийн хэт ягаан туяаны тоолуур
Орон нутгийн хэт ягаан туяаны тоолуур
Орон нутгийн хэт ягаан туяаны тоолуур
Орон нутгийн хэт ягаан туяаны тоолуур

Одоо OLED дэлгэц суурилуулснаар бид зайгаа холбож, хэт ягаан туяаны тоолуур ашиглан алсын зайнаас туршилт хийх боломжтой боллоо.

#тодорхойлох SW_VERSION "UV_Sensor_V.1"

/ * Хэт ягаан туяаны мэдрэгч */ #тодорхойлох мэдрэгчUVPin A0 int dataSensorUV = 0; int indexUV = 0; / * OLED */ #include "SSD1306Wire.h" #include "Wire.h" const int I2C_DISPLAY_ADDRESS = 0x3c; const int SDA_PIN = 0; const int SCL_PIN = 2; SSD1306 Утасны дэлгэц (I2C_DISPLAY_ADDRESS, SDA_PIN, SCL_PIN); void setup () {Serial.begin (115200); displaySetup (); } void loop () {readSensorUV (); дэлгэцUV (); саатал (1000); } / * OLED дээр тохиргооны өгөгдлийг эхлүүлж харуулах * / void displaySetup () {display.init (); // display display.clear (); // Дэлгэцийн дэлгэцийг цэвэрлэ.flipScreenVertically (); // Дэлгэцийг дээрээс нь доош харуул дэлгэц.display (); // Өгөгдлийг дэлгэц дээр тавих Serial.println ("Хэт ягаан туяаны мэдрэгчийн туршилтыг эхлүүлэх"); display.setFont (ArialMT_Plain_24); display.drawString (10, 0, "MJRoBot"); display.setFont (ArialMT_Plain_16); display.drawString (0, 29, "Хэт ягаан туяаны мэдрэгчийн тест"); display.setFont (ArialMT_Plain_10); display.drawString (0, 52, "SW Ver.:"); display.drawString (45, 52, SW_VERSION); display.display (); саатал (3000); } / * Хэт ягаан туяаны мэдрэгчийг mV -ээр уншиж, хэт ягаан туяаны индексийн тооцооллыг дууд * / void readSensorUV () {byte numOfReadings = 5; dataSensorUV = 0; for (int i = 0; i <numOfReadings; i ++) {dataSensorUV+= analogRead (sensorUVPin); саатал (200); } dataSensorUV /= numOfReadings; dataSensorUV = (dataSensorUV * (3.3 / 1023.0)) * 1000; Serial.println (dataSensorUV); indexCalculate (); } / * Хэт ягаан туяаны индексийн тооцоолол * / void indexCalculate () {if (dataSensorUV <227) indexUV = 0; өөр бол (227 <= dataSensorUV && dataSensorUV <318) indexUV = 1; өөр бол (318 <= dataSensorUV && dataSensorUV <408) indexUV = 2; өөр бол (408 <= dataSensorUV && dataSensorUV <503) indexUV = 3; өөр бол (503 <= dataSensorUV && dataSensorUV <606) indexUV = 4; өөр бол (606 <= dataSensorUV && dataSensorUV <696) indexUV = 5; өөр бол (696 <= dataSensorUV && dataSensorUV <795) indexUV = 6; өөр бол (795 <= dataSensorUV && dataSensorUV <881) indexUV = 7; өөр бол (881 <= dataSensorUV && dataSensorUV <976) indexUV = 8; өөр бол (976 <= dataSensorUV && dataSensorUV <1079) indexUV = 9; өөр бол (1079 <= dataSensorUV && dataSensorUV <1170) indexUV = 10; өөр indexUV = 11; } /* Хэт ягаан туяаны утгыг локал OLED дээр харуулах* / void displayUV () {display.clear (); display.setFont (ArialMT_Plain_16); display.drawString (20, 0, "Хэт ягаан туяаны мэдрэгч"); display.drawString (0, 23, "UV (mV):"); display.drawString (80, 23, String (dataSensorUV)); display.drawString (0, 48, "Хэт ягаан туяаны индекс:"); display.setFont (ArialMT_Plain_24); display.drawString (82, 42, String (indexUV)); display.display (); }

Дээрх кодыг миний GitHun -аас татаж авах боломжтой: NodeMCU_UV_Sensor_OLED.ino

Алхам 5: Агаарын температур ба чийгшлийг хэмжих DHT22 суурилуулах

Агаарын температур ба чийгшлийг хэмжих DHT22 суурилуулах
Агаарын температур ба чийгшлийг хэмжих DHT22 суурилуулах
Агаарын температур ба чийгшлийг хэмжих DHT22 суурилуулах
Агаарын температур ба чийгшлийг хэмжих DHT22 суурилуулах

Цаг агаарын мэдээллийг авахад хамгийн их ашиглагддаг мэдрэгчийн нэг бол харьцангуй чийгшил, температурын дижитал DHT22 (эсвэл ах нь DHT11) юм. Энэ нь багтаамжийн чийгшил мэдрэгч ба термистор ашиглан хүрээлэн буй орчны агаарыг хэмжиж өгөгдлийн зүү дээр дижитал дохио цацдаг (аналог оролтын зүү шаардлагагүй).

Мэдрэгч нь 3.3V-аас 5V хүртэлх хүчдэлтэй байх ёстой бөгөөд -40oC-аас +80oC хүртэл температурт +/- 0.5oC нарийвчлалтай, харьцангуй чийгшилт +/- 2% хүртэл ажиллах ёстой. Мэдрэх хугацаа нь дунджаар 2 секунд (унших хоорондох хамгийн бага хугацаа) гэдгийг санах нь зүйтэй. Adafruit сайт нь DHT22 болон түүний дүү DHT11 -ийн талаар маш их мэдээлэл өгдөг. Дэлгэрэнгүй мэдээллийг DHT22/11 заавар хуудаснаас авна уу.

DHT22 нь 4 тээглүүртэй (мэдрэгч рүү харсан, 1 -р зүү хамгийн зүүн талд байна):

  1. VCC (бид NodeMCU -ээс 3.3V -тэй холбогдох болно);
  2. Өгөгдөл гарах;
  3. Холбогдоогүй ба
  4. Газар.

Мэдрэгчийг ихэвчлэн 20м -ээс бага зайд ашиглахад Data ба VCC тээглүүр хооронд 10К эсэргүүцэл холбох шаардлагатай. Гаралтын зүү нь NodeMCU зүү D3 -тэй холбогдоно (дээрх диаграмыг үзнэ үү). Мэдрэгчийг манай модульд суулгасны дараа DHT номын санг Adafruit GitHub репозитороос татаж аваад Arduino -ийн номын сангийн файлд суулгаарай. Arduino IDE -ийг дахин ачаалсны дараа "DHT мэдрэгчийн номын сан" суулгасан байх ёстой.

Кодын эхэнд бид дараах мөрүүдийг оруулах ёстой.

/* DHT22*/

#"DHT.h" оруулах #DHTPIN D2 тодорхойлох #DHTTYPE DHT22 DHT dht (DHTPIN, DHTTYPE) тодорхойлох; float hum = 0; хөвөх температур = 0;

Мэдрэгчийг унших шинэ функц бий болно.

/ * DHT дата авах */

void getDhtData (void) {float tempIni = temp; float humIni = хум; temp = dht.readTemperature (); hum = dht.readHumidity (); if (isnan (hum) || isnan (temp)) // Уншиж чадаагүй эсэхийг шалгаад эрт гарч (дахин оролдоно уу). {Serial.println ("DHT мэдрэгчээс уншиж чадсангүй!"); temp = tempIni; hum = humIni; буцах; }}

Хэт ягаан туяа ба DHT мэдрэгчийг агуулсан бүрэн кодыг миний GitHub дээрээс татаж авах боломжтой: NodeMCU_UV_DHT_Sensor_OLED

Алхам 6: ThingSpeak.com руу өгөгдөл илгээх

ThingSpeak.com руу өгөгдөл илгээх
ThingSpeak.com руу өгөгдөл илгээх
ThingSpeak.com руу өгөгдөл илгээх
ThingSpeak.com руу өгөгдөл илгээх
ThingSpeak.com руу өгөгдөл илгээх
ThingSpeak.com руу өгөгдөл илгээх

Одоогийн байдлаар бид NodeMCU ESP12-E-ийг Arduino-ийн ердийн болон энгийн самбар болгон ашиглаж байна. Мэдээжийн хэрэг, бид энэхүү гайхамшигтай бяцхан чипийн бодит боломжийг зөвхөн "маажсан" бөгөөд одоо диваажинд хөөрөх цаг болжээ! Эсвэл одод илүү дээр! Өө … үүл рүү!;-)

Эхлээд үзье!

  1. Нэгдүгээрт, та ThinkSpeak.com дээр данстай байх ёстой
  2. Суваг үүсгэх зааврыг дагаж сувгийнхаа ID болон API түлхүүрийг бичээрэй
  3. Доорх кодыг WiFi сүлжээ болон Thinkspeak итгэмжлэлийн мэдээллээр шинэчилнэ үү
  4. IDE дээр програмыг ажиллуулна уу

Кодыг хамгийн чухал хэсгүүдэд тайлбарлая.

Нэгдүгээрт, ESP8266 номын сан руу залгаж, WiFi клиентийг тодорхойлж, өөрийн чиглүүлэгч болон Thinkspeak итгэмжлэлийг тодорхойлъё.

/* ESP12-E & Thinkspeak*/

#WiFiClient үйлчлүүлэгчийг оруулах; const char* MY_SSID = "Таны SSD ID энд байна"; const char* MY_PWD = "Таны нууц үг эндээс"; const char* TS_SERVER = "api.thingspeak.com"; String TS_API_KEY = "ТАНЫ СУВАГ API ТҮЛХҮҮР БИЧИХ";

Хоёрдугаарт, IoT төслүүдийн хувьд маш чухал номын санг оруулъя: SimpleTimer.h:

/ * TIMER */

#SimpleTimer таймер оруулах;

Гуравдугаарт, setup () хийх явцад бид цуваа холболтыг эхлүүлж, connectWiFi () функцийг дуудаж, таймеруудыг тодорхойлно. Кодын мөр: timer.setInterval (60000L, sendDataTS); ThinkSpeak суваг руу мэдээлэл оруулахын тулд 60 секунд тутамд sendDataTS () функцийг дуудах болно.

хүчингүй тохиргоо ()

{… Serial.begin (115200); саатал (10); … ConnectWifi (); timer.setInterval (60000L, sendDataTS); …}

Эцэст нь хэлэхэд, () давталтын үед таймерыг эхлүүлэх цорын ганц тушаал л шаардлагатай болно.

хоосон давталт ()

{… Timer.run (); // SimpleTimer -ийг эхлүүлнэ}

Доороос та Thinkspeak холбоог зохицуулахад ашигладаг хоёр чухал үүргийг харж болно.

Таны WiFi сүлжээнд ESP12-E холболт:

/***************************************************

*WiFi холболт ********************************************* ***/ void connectWifi () {Serial.print ("Холбогдож байна"+*MY_SSID); WiFi.begin (MY_SSID, MY_PWD); while (WiFi.status ()! = WL_CONNECTED) {саатал (1000); Serial.print ("."); } Serial.println (""); Serial.println ("WiFi холбогдсон"); Serial.println (""); }

ESP12-E нь ThinkSpeak руу өгөгдөл илгээх:

/***************************************************

*Thinkspeak суваг руу мэдээлэл илгээх **************************************** ******/ void sendDataTS (void) {if (client.connect (TS_SERVER, 80)) {String postStr = TS_API_KEY; postStr += "& field1 ="; postStr += String (dataSensorUV); postStr += "& field2 ="; postStr += String (indexUV); postStr += "& field3 ="; postStr += String (temp); postStr += "& field4 ="; postStr += String (хум); postStr += "\ r / n / r / n"; client.print ("POST /update HTTP /1.1 / n"); client.print ("Хост: api.thingspeak.com / n"); client.print ("Холболт: хаах / n"); client.print ("X-THINGSPEAKAPIKEY:" + TS_API_KEY + "\ n"); client.print ("Агуулгын төрөл: application/x-www-form-urlencoded / n"); client.print ("Агуулга-Урт:"); client.print (postStr.length ()); client.print ("\ n / n"); client.print (postStr); саатал (1000); } илгээсэн ++; client.stop (); }

Бүрэн кодыг миний GitHub дээрээс олж болно: NodeMCU_UV_DHT_Sensor_OLED_TS_EXT

Та кодоо NodeMCU -д байршуулсны дараа. Гадны батерейг холбоод нарны доор хэмжилт хийцгээе. Би алсын станцыг дээвэр дээр тавиад дээрх зургуудад үзүүлсэн шиг ThingSpeak.com дээр мэдээлэл авч эхлэв.

Алхам 7: Дүгнэлт

Дүгнэлт
Дүгнэлт

Урьдын адил энэ төсөл нь бусад хүмүүст электроникийн ертөнцөд аялахад нь тусална гэж найдаж байна!

Дэлгэрэнгүй мэдээлэл, эцсийн кодыг авахын тулд миний GitHub хадгаламж руу зочилно уу: RPi-NodeMCU-Weather-Station

Бусад төслүүдийн талаар MJRoBot.org миний блогоос үзнэ үү

Хүлээж байгаарай! Дараагийн заавар нь бид Raspberry Pi вэб сервер дээр суурилсан алсын цаг уурын станцаас өгөгдлийг төв рүү дамжуулах болно.

Зураг
Зураг

Дэлхийн өмнөд хэсгээс мэндчилгээ дэвшүүлье!

Дараагийн зааварчилгаагаараа уулзацгаая!

Баярлалаа, Марсело

Зөвлөмж болгож буй: