در قسمت قبلی آموزش ESP8266 به بررسی مواردی همچون نحوه انتخاب ماژول ESP8266 و نحوه پیکربندی سخت افزاری این ماژول پرداختیم. در این قسمت قصد داریم چند پروژه ساده را با استفاده از این ماژول پیاده سازی کنیم تا درک بهتری از نحوه عملکرد پردازنده ESP8266 داشته باشید.
در این مقاله به بررسی چهار پروژه زیر خواهیم پرداخت:
ابتدا با نحوه کنترل یک LED ساده آشنا خواهیم شد. پینهای GPIO در ESP8266 را میتوان بهگونهای تنظیم کنید که بتواند عملکردهای مختلفی از جمله ورودی، خروجی، خروجیهای PWM و همچنین، پروتکلهای ارتباطی SPI یا I2C را داشته باشد. در این پروژه یاد میگیرید که چگونه از پینهای GPIO ماژول بهعنوان خروجی استفاده کنید.
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 به این معنی است که خروجی روی ولتاژ تنظیم شده است.
در پروژه دوم از این مقاله، قصد داریم وضعیت یک پین 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 شروع کنید.
در این پروژه نیز از فریمورک aREST استفاده خواهیم کرد. این فریمورک امکان دسترسی به اندازهگیری از راه دور را فراهم میکند. aREST یک فریمورک کامل برای کنترل از راه دور بوردهای ESP8266 (شامل فضای ابری) است در ادامه بارها از این فریمورک استفاده خواهیم کرد. برای کسب اطلاعات بیشتر به آدرس زیر مراجعه کنید.
https://github.com/openhomeautomation/iot-esp8266-packt
1 2 3 4 5 | #include "ESP8266WiFi.h" #include <aREST.h> #include "DHT.h" |
1 2 3 | #define DHTPIN 5 #define DHTTYPE DHT11 |
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; |
1 | dht.begin(); |
1 2 3 | rest.variable("temperature",&temperature); rest.variable("humidity",&humidity); |
1 2 3 | humidity = dht.readHumidity(); temperature = dht.readTemperature(); |
۱۲. حالا بورد 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 انجام میدهیم.
نویسنده شو !
سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.