محیط آردوینو برای ESP8266
 
				در این مقاله نحوه نصب ماژول ESP8266 را در محیط آردوینو در سیستم عامل ویندوز بررسی می شود.( در دیگر سیستم عامل ها، مشابه همین روش عمل می شود)
انجمن ESP8266 افزونه ای را برای Arduino IDE فراهم کرده است که به کاربران اجازه می دهد تا ماژول ESP8266 را با استفاده از محیط برنامه نویسی آردوینو کامپایل و برنامه ریزی کنید.
پیش نیاز: نصب محیط برنامه نویسی آردوینو Arduino IDE
قبل از شروع نصب، مطمئن شوید که آخرین نسخه Arduino IDE را در کامپیوتر تان نصب کرده اید. اگر این کار را نکردید، آن را حذف و دوباره نصب کنید. در غیر این صورت ممکن است درست عمل نکند. آخرین نسخه نرم افزار Arduino IDE در سایت شرکت آردوینو به آدرس زیر قابل دسترس می باشد:
https://www.arduino.cc/en/software
نصب افزونه ماژول ESP8266 در محیط آردوینو
برای نصب ESP8266 در Arduino IDE خود، مراحل زیر را دنبال کنید:
1. در Arduino IDE ، وارد گزینه File> Preferences شوید:

2. همانطور که در شکل زیر مشاهده می شود، مقدار زیر را
http://arduino.esp8266.com/stable/package_esp8266com_index.json
در قسمت Additional Boards Manager URLs وارد می کنید. سپس، روی دکمه “OK” کلیک کنید:

نکته: اگر از قبل URL ماژول ESP32 را دارید، می توانید URL ها را با ویرگولبه صورت زیر جدا کنید:
https://dl.espressif.com/dl/package_esp32_index.json, http://arduino.esp8266.com/stable/package_esp8266com_index.json
3. به منوی Tools رفته و سپس گزینه Board و در ادامه Boards Manager… را انتخاب کنید.

4. عبارت ESP8266 را جستجو کنید و سپس مشابه تصویر زیر، بر روی دکمه Install کلیک کنید.

5. پس از چند ثانیه افزونه ESP8266 نصب خواهد شد.

آزمایش نصب
جهت آزمایش نصب افزونه ESP8266، می توانید با استفاده از یکی از مثال های ESP8266 ، اقدام کنید:
برنامه LED چشمک زن
قطعات مورد نیاز
- ماژول ESP8266
- LED
- مقاومت 330 اهم
- برد برد (Bread Board)
- سیم های جامپر
برای راحتی آزمایش، پیشنهاد می شود از برد توسعه NodeMCU به جهت دارا بودن مدار برنامه ریزی داخلی استفاده کنید.
آپلود کردن برنامه
ابتدا مطمئن شوید که NodeMCU به سیستم متصل شده است. در ادامه از منوی Tools و سپس Board ، گزینه NodeMCU 1.0 را انتخاب کنید.

حال از منوی Tools و سپس Port ، پورت شناخته شده توسط سیستم را انتخاب کنید.

سپس کدهای زیر را داخل محیط ویرایش ، کپی کنید:
| #include<ESP8266WiFi.h>#include"Adafruit_MQTT.h"#include"Adafruit_MQTT_Client.h"#include<ArduinoJson.h>#include<Wire.h>#include<OneWire.h>#include<DallasTemperature.h>//#include <Streaming.h>#include"SSD1306Wire.h"// legacy include: `#include "SSD1306.h"`#defineONE_WIRE_BUS        0// DS18B20 pin GPIO10#definepin_buzzer          D4#definepin_LED_red         D7#definepin_LED_green       D6#definepin_LED_blue        D5#definepin_push_button     D0#definepin_SCK             D1#definepin_SDK             D2intpush_button=0;/************************* WiFi Access Point *********************************/#defineWLAN_SSID       "HeroLink"#defineWLAN_PASS       "HeroLink@123"/************************* Adafruit.io Setup *********************************/#defineAIO_SERVER      "broker.herolink.ir"#defineAIO_SERVERPORT  1883// use 8883 for SSL#defineAIO_USERNAME    "...your AIO username (see https://accounts.adafruit.com)..."#defineAIO_KEY         "...your AIO key..."/************ Global State (you don't need to change this!) ******************/// Create an ESP8266 WiFiClient class to connect to the MQTT server.WiFiClient client;// or... use WiFiFlientSecure for SSL//WiFiClientSecure client;// Setup the MQTT client class by passing in the WiFi client and MQTT server and login details.Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);/****************************** Feeds ***************************************/// Setup a feed called 'potValue' for publishing.// Notice MQTT paths for AIO follow the form: <username>/feeds/<feedname>Adafruit_MQTT_Publish potValue =Adafruit_MQTT_Publish(&mqtt, "/feeds/potValue");Adafruit_MQTT_Publish robot_alive =Adafruit_MQTT_Publish(&mqtt, "/robot/alive");Adafruit_MQTT_Publish tempPublish =Adafruit_MQTT_Publish(&mqtt, "/temp");Adafruit_MQTT_Publish humdPublish =Adafruit_MQTT_Publish(&mqtt, "/humd");Adafruit_MQTT_Publish weatherPublish =Adafruit_MQTT_Publish(&mqtt, "/weather");// Setup a feed called 'ledBrightness' for subscribing to changes.Adafruit_MQTT_Subscribe ledBrightness =Adafruit_MQTT_Subscribe(&mqtt, "/feeds/ledBrightness");/*************************** Sketch Code ************************************/OneWire oneWire(ONE_WIRE_BUS);DallasTemperature DS18B20(&oneWire);// Initialize the OLED display using Wire library  SSD1306Wire  display(0x3c, pin_SDK, pin_SCK);  //D2=SDK  D1=SCK  As per labeling on NodeMCU       voidsetup() {  Serial.begin(9600);  delay(10);  setup_LED();  setup_buzzer();  setup_LCD();  setup_WIFI();  setup_MQTT();  pinMode(pin_push_button, INPUT);  // setup OneWire bus  DS18B20.begin();  drawFontFaceDemo();}floatgetTemperature() {  //Serial << "Requesting DS18B20 temperature..." << endl;  floattemp;  do{    DS18B20.requestTemperatures();     temp =DS18B20.getTempCByIndex(0);    delay(100);  } while(temp ==85.0||temp ==(-127.0));  returntemp;}voidloop() {  // Ensure the connection to the MQTT server is alive (this will make the first  // connection and automatically reconnect when disconnected).  See the MQTT_connect  // function definition further below.    push_button =digitalRead(pin_push_button);  Serial.println(push_button);  if(push_button==1)  {    IntCallback();  }      floathumd=0.0;// = sht20.readHumidity();                  // Read Humidity    floattemp=0.0;// = sht20.readTemperature();               // Read Temperature    floattemperature =getTemperature();    temp =temperature;        Serial.print("Time:");    Serial.print(millis());    Serial.print(" Temperature:");    Serial.print(temp, 1);    Serial.print("C");    Serial.print(" Humidity:");    Serial.print(humd, 1);    Serial.print("%");    Serial.println();    DynamicJsonDocument doc(1024);    doc["temp"] =temp;    doc["humid"]   =humd;        chardataString[100];    serializeJson(doc, dataString);        if(!weatherPublish.publish(dataString)) {      Serial.println(F("Failed"));    } else{      Serial.println(F("OK!"));    }        delay(1000);  displayWeather(temp,humd);/*  drawFontFaceDemo();  delay(1000);  drawRectDemo();  delay(1000);  void drawCircleDemo();  delay(1000);*/    MQTT_connect();  // this is our 'wait for incoming subscription packets' busy subloop  // try to spend your time here  Adafruit_MQTT_Subscribe *subscription;  while((subscription =mqtt.readSubscription(200))) {    //Serial.print(subscription);      //ledBrightValue = atoi((char *)ledBrightness.lastread);      //Serial.println(ledBrightValue);      //Serial.println((char *)ledBrightness.lastread);            //analogWrite(ledPin, ledBrightValue);                /*    if (subscription == &robot_move) {      //move_stop();      //Serial.println((char *)robot_move.lastread);       // char* tmp1 = strtok((char *)robot_move.lastread, "{");        // char* tmp2 = strtok((char *)tmp1[1], "}");                // Serial.println((char *)tmp2[0]);        StaticJsonDocument<200> doc;         DeserializationError error = deserializeJson(doc, (char *)robot_move.lastread);            // Test if parsing succeeds.            if (error) {              Serial.print(F("deserializeJson() failed: "));              Serial.println(error.f_str());              return;            }           // x = doc["x"];           // y = doc["y"];            //Serial.println(x, 6);    }*/  }  // Now we can publish stuff! // uint16_t AdcValue = analogRead(A0);  /*if((AdcValue > (potAdcValue + 7)) || (AdcValue < (potAdcValue - 7))){    potAdcValue = AdcValue;    Serial.print(F("Sending pot val "));    Serial.print(potAdcValue);    Serial.print("...");    if (! potValue.publish(potAdcValue)) {      Serial.println(F("Failed"));    } else {      Serial.println(F("OK!"));    }  }*/  // ping the server to keep the mqtt connection alive  // NOT required if you are publishing once every KEEPALIVE seconds  /*  if(! mqtt.ping()) {    mqtt.disconnect();  }  */}// Function to connect and reconnect as necessary to the MQTT server.// Should be called in the loop function and it will take care if connecting.voidMQTT_connect() {  int8_t ret;  // Stop if already connected.  if(mqtt.connected()) {    return;  }  Serial.print("Connecting to MQTT... ");  uint8_t retries =3;  while((ret =mqtt.connect()) !=0) { // connect will return 0 for connected       Serial.println(mqtt.connectErrorString(ret));       Serial.println("Retrying MQTT connection in 5 seconds...");       mqtt.disconnect();       delay(5000);  // wait 5 seconds       retries--;       if(retries ==0) {         // basically die and wait for WDT to reset me         while(1);       }  }  Serial.println("MQTT Connected!");}voiddisplayWeather(floattemp,floathumid){  chartemp_str[8]; // Buffer big enough for 7-character float  charhumid_str[8]; // Buffer big enough for 7-character float  dtostrf(temp, 6, 2, temp_str); // Leave room for too large numbers!  dtostrf(humid, 6, 2, humid_str); // Leave room for too large numbers!  chartemp_string[24];  strcpy(temp_string, "Temp: ");  strcat(temp_string, temp_str);  charhumid_string[24];  strcpy(humid_string, "Humd: ");  strcat(humid_string, humid_str);  display.clear();  display.setTextAlignment(TEXT_ALIGN_LEFT);  display.setFont(ArialMT_Plain_16);  display.drawString(30, 0, "Herolink.ir");  display.setFont(ArialMT_Plain_16);  display.drawString(0, 15, temp_string);  display.setFont(ArialMT_Plain_16);  display.drawString(0, 32, humid_string);  display.display();}voiddrawFontFaceDemo() {  // clear the display  display.clear();    // Font Demo1    // create more fonts at http://oleddisplay.squix.ch/    display.setTextAlignment(TEXT_ALIGN_LEFT);    display.setFont(ArialMT_Plain_10);    display.drawString(0, 0, "Hello world");    display.setFont(ArialMT_Plain_16);    display.drawString(0, 10, "Hello world");    display.setFont(ArialMT_Plain_24);    display.drawString(0, 26, "Hello world");  // write the buffer to the display  display.display();}voiddrawRectDemo() {  // clear the display  display.clear();      // Draw a pixel at given position    for(inti =0; i < 10; i++) {      display.setPixel(i, i);      display.setPixel(10-i, i);    }    display.drawRect(12, 12, 20, 20);    // Fill the rectangle    display.fillRect(14, 14, 17, 17);    // Draw a line horizontally    display.drawHorizontalLine(0, 40, 20);    // Draw a line horizontally    display.drawVerticalLine(40, 0, 20);   // write the buffer to the display  display.display();}voiddrawCircleDemo() {  // clear the display  display.clear();    for(inti=1; i < 8; i++) {    display.setColor(WHITE);    display.drawCircle(32, 32, i*3);    if(i %2==0) {      display.setColor(BLACK);    }    display.fillCircle(96, 32, 32-i*3);  }  // write the buffer to the display  display.display();}voidIntCallback(){ //Serial.print("Stamp(ms): "); //Serial.println(millis()); digitalWrite(pin_buzzer,LOW) ; //Turn on active buzzer  delay(1000);  digitalWrite(pin_buzzer,HIGH) ; //Turn on active buzzer  delay(1000);}voidsetup_LED(){  for(inti=1;i<4;i++)  {    analogWrite(pin_LED_red,(i/1)*10);    analogWrite(pin_LED_green,(i/2)*10);    analogWrite(pin_LED_blue,(i/3)*10);    delay(1000);  }  analogWrite(pin_LED_red,10);  analogWrite(pin_LED_green,0);  analogWrite(pin_LED_blue,0);  }voidsetup_buzzer(){  pinMode(pin_buzzer,OUTPUT) ;  for(inti=0;i<3;i++)  {    digitalWrite(pin_buzzer,LOW) ; //Turn on active buzzer    delay(100);    digitalWrite(pin_buzzer,HIGH) ; //Turn on active buzzer    delay(100);  }}voidsetup_LCD(){  display.init();  display.flipScreenVertically();  display.setFont(ArialMT_Plain_10);}voidsetup_WIFI(){  // Connect to WiFi access point.  Serial.println();   Serial.print("Connecting to ");  Serial.println(WLAN_SSID);  WiFi.begin(WLAN_SSID, WLAN_PASS);  while(WiFi.status() !=WL_CONNECTED) {    delay(500);    Serial.print(".");  }  Serial.println();  Serial.println("WiFi connected");  Serial.println("IP address: ");  Serial.println(WiFi.localIP());  change_status(1);}voidsetup_MQTT(){  voidMQTT_connect();  // Setup MQTT subscription for ledBrightness feed.  mqtt.subscribe(&ledBrightness);  change_status(2);}voidchange_status(intstatus_){  switch(status_)  {      case1://WIFI Connected          analogWrite(pin_LED_red,0);          analogWrite(pin_LED_green,0);          analogWrite(pin_LED_blue,10);        break;      case2://MQTT Connected          analogWrite(pin_LED_red,0);          analogWrite(pin_LED_green,10);          analogWrite(pin_LED_blue,0);        break;  }  digitalWrite(pin_buzzer,LOW) ; //Turn on active buzzer  delay(100);  digitalWrite(pin_buzzer,HIGH) ; //Turn on active buzzer  delay(100);} | 
روی آیکن آپلود کلیک کنید و چند ثانیه صبر کنید تا پیام “Done uploading.” درکادر پایین سمت چپ نمایش داده شود.

شماتیک مدار
همانطور که در شماتیک زیر مشاهده می شود، LED را به NodeMCU متصل شده است. LED باید به پایه GPIO 2 (D4) متصل شود.

اگر همه مراحل را به درستی پیش رفته اید، LED باید هر یک ثانیه چشمک بزند.
 
                         
									 
									 
									 
									 
									 
									
دیدگاهتان را بنویسید