در قسمت قبلی آموزش ESP8266 به بررسی مواردی همچون نحوه انتخاب ماژول ESP8266 و نحوه پیکربندی سخت افزاری این ماژول پرداختیم. در این قسمت قصد داریم چند پروژه ساده را با استفاده از این ماژول پیاده سازی کنیم تا درک بهتری از نحوه عملکرد پردازنده ESP8266 داشته باشید.
در این مقاله به بررسی چهار پروژه زیر خواهیم پرداخت:
- نحوه کنترل یک LED
- نحوه خواندن دادهها از پین GPIO
- نحوه دریافت محتوای یک وبسایت
- نحوه خواندن دادهها از یک سنسور دیجیتال
کنترل یک LED
ابتدا با نحوه کنترل یک LED ساده آشنا خواهیم شد. پینهای GPIO در ESP8266 را میتوان بهگونهای تنظیم کنید که بتواند عملکردهای مختلفی از جمله ورودی، خروجی، خروجیهای PWM و همچنین، پروتکلهای ارتباطی SPI یا I2C را داشته باشد. در این پروژه یاد میگیرید که چگونه از پینهای GPIO ماژول بهعنوان خروجی استفاده کنید.
- اولین قدم اضافه کردن یک LED به پروژه است. در این پروژه شما به اجزای زیر نیاز خواهید داشت:
- مرحله بعدی اتصال LED و مقاومت به بورد ESP8266 است. برای انجام این کار، اول باید مقاومت را روی برد بورد نصب کرد.
- سپس LED را روی برد بورد نصب کنید و طولانیترین پین LED (آند) را به یک پین از مقاومت وصل کنید.
- سپس سر دیگر مقاومت را به پین GPIO 5 از ESP8266 و سر دیگر LED را به زمین متصل کنید. اگر مراحل را درست انجام داده باشید باید شکل زیر را ببینید.5. حال میخواهیم LED را با برنامهنویسی ماژول ESP8266 روشن کنیم. مقدمات و نیازمندی های برنامه نویسی ماژول در قسمت اول بررسی شدند. اکنون کدی که برای انجام این کار به آن نیاز دارید، بدین صورت است :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | // Import required libraries #include <ESP8266WiFi.h> void setup() { // Set GPIO 5 as output pinMode(5, OUTPUT); // Set GPIO 5 on a HIGH state digitalWrite(5, HIGH); } void loop() { } |
در این کد پین GPIO 5 بهعنوان خروجی تنظیم و سپس روی حالت HIGH قرار داده میشود. حالت HIGH به این معنی است که پین در وضعیت فعال قرار دارد و ولتاژ مثبت (3.3 ولت) در آن وجود دارد. حالت LOW به این معنی است که خروجی روی ولتاژ تنظیم شده است.
- اکنون میتوانید کد را کپی و در Arduino IDE جای گذاری کنید.
- سپس کد را طبق دستورالعملهای مقاله قبل، روی بورد آپلود کنید. وقتی این کار را انجام دهید، بلافاصله LED روشن میشود. با استفاده از تابع digitalWrite (5، LOW) در کد میتوانید دوباره آن را خاموش کنید. شما میتوانید کد را تغییر دهید. برای مثال، کد را میتوانید به نحوی تغییر دهید که ESP8266 هر ثانیه LED را روشن و خاموش کند.
خواندن دادههای پین GPIO
در پروژه دوم از این مقاله، قصد داریم وضعیت یک پین GPIO را بخوانیم. بدین منظور از پین مشابه پروژه قبلی استفاده میکنیم. به همین دلیل میتوانید LED و مقاومتی که قبلاً استفاده کردید را از روی بورد جدا کنید.
حال این پین GPIO 5 را به یک سیم به منبع تغذیه مثبت روی بردبورد وصل کنید و یک سیگنال 3.3 ولتی را در پین برقرار کنید.
خواندن دادههای پین کار سادهای است. کد کاملی که در این قسمت استفاده میشود، به شرح زیر است:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | // Import required libraries #include <ESP8266WiFi.h> void setup(void) { // Start Serial (to display results on the Serial monitor) Serial.begin(115200); // Set GPIO 5 as input pinMode(5, INPUT);} void loop() { // Read GPIO 5 and print it on Serial port Serial.print("State of GPIO 5: "); Serial.println(digitalRead(5)); // Wait 1 second delay(1000); } |
ما خیلی راحت پین را بهعنوان ورودی تنظیم میکنیم، مقدار آن را میخوانیم و هر ثانیه آن را چاپ میکنیم. این کد را کپی کرده و در Arduino IDE جایگذاری میکنیم، سپس آن را با استفاده از دستورالعملهای ذکر شده در مقاله قبلی در بورد آپلود میکنیم. این نتیجهای است که باید در سریال مانیتور ببینید:
1 | State of GPIO 5: 1 |
همانطور که میبینید مقدار پرینت شده، 1 است (سطح منطقی HIGH). این همان چیزی است که انتظار داشتیم، زیرا پین را به منبع تغذیه مثبت وصل کردیم. به همین ترتیب میتوانید تست کنید که اگر پین را به زمین وصل کنید، مقدار بازگشتی صفر خواهد بود.
دریافت محتوای یک وبسایت
آخرین پروژهای که در این مقاله بررسی میکنیم، این است که با اتصال ماژول به وایفای، محتوای یک صفحه از وبسایت را دریافت کنیم. بدین منظور از www.example.com استفاده خواهیم کرد. از این ادرس عمدتاً برای اهداف آزمایشی استفاده میشود.
کدی که در این پروژه از آن استفاده میکنیم، به شرح زیر است:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | // Import required libraries #include <ESP8266WiFi.h> // WiFi parameters constchar* ssid = "your_wifi_network"; constchar* password = "your_wifi_password"; // Host constchar* host = "www.example.com"; void setup() { // Start Serial Serial.begin(115200); // We start by connecting to a WiFi network Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } int value = 0; void loop() { Serial.print("Connecting to "); Serial.println(host); // Use WiFiClient class to create TCP connections WiFiClient client; const int httpPort = 80; if (!client.connect(host, httpPort)) { Serial.println("connection failed"); return; } // This will send the request to the server client.print(String("GET /") + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n"); delay(10); // Read all the lines of the reply from server and print them to Serial while(client.available()){ String line = client.readStringUntil('\r'); Serial.print(line); } Serial.println(); Serial.println("closing connection"); delay(5000); } |
این یک کد ابتدایی است: ابتدا یک ارتباط با وبسایت example.com برقرار میکنیم و سپس یک درخواست GET برای دریافت محتوای صفحه ارسال میکنیم. با استفاده از کد while (client.available())، دادههای ورودی را دریافت و در سریال مانیتور چاپ میکنیم.
حال میتوانید این کد را کپی و در Arduino IDE جایگذاری کنید. سپس آن را با استفاده از دستورالعملهایی که در مقاله قبلی گفته شد روی بورد آپلود کنید. این کار را میتوانید در قسمت Connecting Your Module to Your Wi-Fi Network انجام دهید. در نهایت چیزی که در سریال مانیتور میبینید، به شرح زیر است:
این در واقع محتوای صفحه با کد HTML خالص است.
خواندن دادههای یک سنسور دیجیتال
در بخش آخر از این مقاله، قصد داریم یک سنسور دیجیتال را به ماژول ESP8266 متصل کنیم و دادههای آن را بخوانیم. به طور مثال، از یک سنسور DHT11 استفاده خواهیم کرد که برای دریافت دادههای مرتبط با دما و رطوبت محیط کاربرد دارد.
حال کار را با اتصال این سنسور به ESP8266 شروع کنید.
- ابتدا سنسور را روی بردبورد نصب کنید. سپس اولین پین سنسور را به VCC (سیم قرمز)، پین دوم را به پین شماره 5 ماژول ESP8266 و پین چهارم سنسور را به GND وصل کنید. این چیزی است که در پایان به نظر میرسد :
در این پروژه نیز از فریمورک aREST استفاده خواهیم کرد. این فریمورک امکان دسترسی به اندازهگیری از راه دور را فراهم میکند. aREST یک فریمورک کامل برای کنترل از راه دور بوردهای ESP8266 (شامل فضای ابری) است در ادامه بارها از این فریمورک استفاده خواهیم کرد. برای کسب اطلاعات بیشتر به آدرس زیر مراجعه کنید.
- حال باید بورد را پیکربندی کنیم. کدی که در این قسمت نیاز داریم، طولانی است، بنابراین بخش های مهم آن را در این مقاله بررسی خواهیم کرد و کل پروژه را در GitHub زیر می توانید دریافت و راه اندازی کنید.
https://github.com/openhomeautomation/iot-esp8266-packt
- کار با اضافه کردن کتابخانههای مورد نیاز کد شروع میشود:
1 2 3 4 5 | #include "ESP8266WiFi.h" #include <aREST.h> #include "DHT.h" |
- برای نصب کتابخانهها، کافی است به جستوجوی آنها در قسمت library manager در Arduino IDE بپردازیم. در مرحله بعد باید پینی را که سنسور DHT به آن متصل است، تعریف کنیم:
1 2 3 | #define DHTPIN 5 #define DHTTYPE DHT11 |
- پس از آن، نمونهای از سنسور DHT را تعریف میکنیم:
1 | DHT dht(DHTPIN، DHTTYPE، 15)؛ |
- سپس باید نام و رمز عبور وای فای را وارد کنید. کدی که به این منظور باید استفاده کنید، به صورت زیر است:
1 2 3 | const char* ssid = "wifi-name"; const char* password = "wifi-pass"; |
- در مرحله بعد دو متغیر تعریف میکنیم که اندازهگیریهای سنسور را ثبت میکنند. این دو متغیر که مربوط به دما و رطوبت هستند، عبارتاند از:
1 2 3 | float temperature; float humidity; |
- در تابع setup() و در اسکچ، سنسور را مقداردهی اولیه میکنیم:
1 | dht.begin(); |
- در تابع setup امکان دسترسی به متغیرها را در aREST API فراهم میکنیم تا بتوانیم از راه دور و از طریق وای فای به آنها دسترسی داشته باشیم:
1 2 3 | rest.variable("temperature",&temperature); rest.variable("humidity",&humidity); |
- نهایتاً با استفاده از تابع loop اندازهگیریهای انجام شده توسط سنسور را میخوانیم.
1 2 3 | humidity = dht.readHumidity(); temperature = dht.readTemperature(); |
- حال زمان تست پروژه است! همه کدها را کپی و در داخل محیط Arduino IDE جای گذاری کنید. مطمئن شوید که کتابخانه Arduino aREST را از طریق library manager در Arduino نصب کردهاید.
۱۲. حالا بورد ESP8266 را در حالت بوتلودر قرار دهید و کد را در بورد آپلود کنید. پس از آن، بورد را ریست کنید. سپس Serial monitor را باز کنید. اگر همه مراحل را درست انجام داده باشید، باید آدرس IP بورد را ببینید.
- حالا میتوانیم از راه دور به اندازهگیریهای سنسور دسترسی داشته باشیم. کافی است در مرورگر خود عبارت زیر را تایپ کنید:
192.168.115.105/temperature
باید بلافاصله پاسخ بورد را که مقدار دما را نشان میدهد، دریافت کنید:
1 2 3 4 5 6 7 | { "temperature": 25.00, "id": "1", "name": "esp8266", "connected": true } |
همین کار را میتوانید در مورد رطوبت نیز انجام دهید.
توجه داشته باشید که در اینجا از aREST API استفاده کردیم که در مقالههای دیگر هم از آن استفاده خواهیم کرد. برای کسب اطلاعات بیشتر میتوانید به لینک زیر مراجعه کنید:
تبریک، شما اولین پروژههای خود را با استفاده از ماژول ESP8266 به پایان رساندید!
چیزهایی که در این قسمت یاد گرفتید را تست کنید تا بیشتر در مورد پیکربندی ماژول ESP8266 یاد بگیرید.
خلاصه
در این مقاله با روش انجام چند پروژه ساده با استفاده از ماژول Wi-Fi ESP8266 آشنا شدیم. ابتدا یاد گرفتیم که چگونه یک خروجی ساده را با کنترل وضعیت یک LED کنترل کنیم. سپس، نحوه خواندن وضعیت یک پین دیجیتال روی ماژول را یاد گرفتیم. در نهایت روش خواندن دادههای یک سنسور دیجیتال را فراگرفتیم. این کار را با استفاده از فریمورک aREST انجام دادیم که در ادامه بارها از آن استفاده خواهیم کرد.
در مقاله بعدی، مستقیماً به سراغ موضوع اصلی میرویم و اولین پروژه اینترنت اشیاء را با استفاده از ESP8266 انجام میدهیم.