مازول های 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");
}




