مازول های ESP8266 برد های توسعه مختلفی دارند . در این بین برد های D1 Mini به دلیل حجم کوچک و همچنین وجود شیلد های مختلف ، از محبوبیت بالایی بر خوردارند . شیلد های مختلفی برای این برد ها وجود دارد که به راحتی می توانید آن را بر روی برد خود نصب کنید و قابلیت جدیدی به پروژه خود اضافه کنید . در این آموزش قصد داریم به راه اندازی برخی از شیلد های کاربردی این برد بپردازیم . تنوع شیلد های D1 Mini بسیار زیاد است و هر ساله مدل های جدیدتری از این شیلد ها طراحی و ساخته می شوند . برخی از این شیلد ها بسیار کاربردی هستند مانند شیلد رله ، شیلد های سنسور دما و رطوبت . در زیر برخی از این شیلد ها به همراه کد های راه اندازی شرح داده شده اند .
1- شیلد DS18B20 :
این شیلد بر پایه یک سنسور DS18B20 می باشد که می تواند دما را با دقت خوبی اندازه گیری کند . DS18B20 یک سنسور دمای کالیبره شده با خروجی 1Wire است . تنها از طریق یک پین می توان خروجی این سنسور را دریافت نمود . در این شیلد پایه دیتای DS18B20 به پین GPIO2 از برد D1 Mini متصل است . از این شیلد برای اندازه گیری دما می توان استفاده کرد .
شیلد DS18B20 را بر روی برد خود قرار داده و کد های زیر را بر روی برد D1 Mini خود آپلود کنید :
#include <OneWire.h> // OneWire DS18S20, DS18B20, DS1822 Temperature Example OneWire ds(D2); // on pin D4 (a 4.7K resistor is necessary) void setup(void) { Serial.begin(9600); } void loop(void) { byte i; byte present = 0; byte type_s; byte data[12]; byte addr[8]; float celsius, fahrenheit; if ( !ds.search(addr)) { ds.reset_search(); delay(250); return; } if (OneWire::crc8(addr, 7) != addr[7]) { Serial.println("CRC is not valid!"); return; } // the first ROM byte indicates which chip switch (addr[0]) { case 0x10: type_s = 1; break; case 0x28: type_s = 0; break; case 0x22: type_s = 0; break; default: Serial.println("Device is not a DS18x20 family device."); return; } ds.reset(); ds.select(addr); ds.write(0x44, 1); // start conversion, with parasite power on at the end delay(1000); present = ds.reset(); ds.select(addr); ds.write(0xBE); // Read Scratchpad for ( i = 0; i < 9; i++) { data[i] = ds.read(); } // Convert the data to actual temperature int16_t raw = (data[1] << 8) | data[0]; if (type_s) { raw = raw << 3; // 9 bit resolution default if (data[7] == 0x10) { raw = (raw & 0xFFF0) + 12 - data[6]; } } else { byte cfg = (data[4] & 0x60); if (cfg == 0x00) raw = raw & ~7; // 9 bit resolution, 93.75 ms else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms } celsius = (float)raw / 16.0; fahrenheit = celsius * 1.8 + 32.0; Serial.print(" Temperature = "); Serial.print(celsius); Serial.print(" Celsius, "); Serial.print(fahrenheit); Serial.println(" Fahrenheit"); }
2- شیلد رله :
این شیلد شامل یک رله 7A تک کنتاکت به همراه مدار بافر آن است که می توانید در پروژه های مختلف از آن استفاده کنید . کنتاکت های NO و NC رله به یک ترمینال متصل اند . با استفاده از این شیلد می توانید مدارات با تغذیه برق شهری را کنترل کنید .در این شیلد GPIO5 به مدار کنترل رله متصل است . برای راه اندازی این شیلد ابتدا شیلد را بر روی برد خود قرار داده و سپس کد های زیر را بر روی برد خود آپلود کنید :
const int relayPin = D1; const long interval = 2000; // pause for two seconds int relayState = LOW; unsigned long previousMillis = 0; void setup() { pinMode(relayPin, OUTPUT); } void loop() { unsigned long currentMillis = millis(); // if enough millis have elapsed if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; // toggle the relay relayState = !relayState; digitalWrite(relayPin, relayState); } }
3- شیلد WS2812 :
این شیلد شامل یک WS2812 است که قابلیت نمایش 16 میلیون رنگ مختلف را دارد . WS2812 تنها از طریق یک پین کنترل می شود . برای راه اندازی این شیلد می توانید از کتابخانه Adafruit_NeoPixel استفاده کنید . در این شیلد پین دیتا WS2812 به پین D4 متصل است . شیلد را بر ریو D1 Mini قرا رداده و سپس کد های زیر را بر روی برد خود آپلود کنید :
#include <Adafruit_NeoPixel.h> #define PIN D4 #define LED_NUM 7 // When we setup the NeoPixel library, we tell it how many pixels, and which pin to use to send signals. Adafruit_NeoPixel leds = Adafruit_NeoPixel(LED_NUM, PIN, NEO_GRB + NEO_KHZ800); void setup() { leds.begin(); // This initializes the NeoPixel library. } void led_set(uint8 R, uint8 G, uint8 B) { for (int i = 0; i < LED_NUM; i++) { leds.setPixelColor(i, leds.Color(R, G, B)); leds.show(); delay(150); } } void loop() { led_set(10, 0, 0);//red led_set(0, 0, 0); led_set(0, 10, 0);//green led_set(0, 0, 0); led_set(0, 0, 10);//blue led_set(0, 0, 0); }
4- شیلد DHT11 :
این شیلد دارای یک سنسور دما و رطوبت AM2303 با رابط I2C و 1Wire است . از سیلد می توانید برای اندازه گیری دما و رطوبت در شبکه های مبتنی بر IoT استفاده کنید . اضافه کردن یک شیلد باتری و همچنین یک باتری لیپو می توانید دمای هر نقطه ای امکان سیم کشی ندارد را اندازه گیری کنید . برای تست این شیلد می توانید کد های زیر را بر روی برد خود آپلود کنید :
#include "DHT.h" #define DHTPIN D4 // what pin we're connected to // Uncomment whatever type you're using! #define DHTTYPE DHT12 // DHT 11 //#define DHTTYPE DHT22 // DHT 22 (AM2302) //#define DHTTYPE DHT21 // DHT 21 (AM2301) // Initialize DHT sensor. // Note that older versions of this library took an optional third parameter to // tweak the timings for faster processors. This parameter is no longer needed // as the current DHT reading algorithm adjusts itself to work on faster procs. DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); Serial.println("DHTxx test!"); dht.begin(); } void loop() { // Wait a few seconds between measurements. delay(2000); // Reading temperature or humidity takes about 250 milliseconds! // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor) float h = dht.readHumidity(); // Read temperature as Celsius (the default) float t = dht.readTemperature(); // Read temperature as Fahrenheit (isFahrenheit = true) float f = dht.readTemperature(true); // Check if any reads failed and exit early (to try again). if (isnan(h) || isnan(t) || isnan(f)) { Serial.println("Impossible de lire la sonde DHT!"); return; } // Compute heat index in Fahrenheit (the default) float hif = dht.computeHeatIndex(f, h); // Compute heat index in Celsius (isFahreheit = false) float hic = dht.computeHeatIndex(t, h, false); Serial.print("Humidity: "); Serial.print(h); Serial.print(" %\t"); Serial.print("Temperature: "); Serial.print(t); Serial.print(" *C "); Serial.print(f); Serial.print(" *F\t"); Serial.print("Heat index: "); Serial.print(hic); Serial.print(" *C "); Serial.print(hif); Serial.println(" *F"); }