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

 

Tags:
About Author: USER_4