مقدمه
آنچه در این آموزش یاد می گیرید
- Nodemcu چیست و مشخصات آن چگونه است
- نحوه نصب بوردهای مبتنی بر ESP8266 در Arduino IDE
- چگونگی برنامه ریزی Nodemcu توسط Arduino IDE
- معرفی بردهایی که می توانند جایگزین
Nodemcu چیست؟
امروزه کاربردهای IOT روز به روز درحال افزایش است و اتصال اشیا بهم از اهمیت زیادی برخوردار است. روش های مختلفی برای اتصال اشیا به یکدیگر وجود دارد که از جمله آنها اتصال با استفاده از پروتکل WiFi است.
Nodemcu یک پلتفروم متن باز مبتنی بر ESP8266 می باشد که قابلیت اتصال اشیا بهم و انتقال اطلاعات از طریق Wifi را فراهم می سازد بعلاوه با فراهم آوردن برخی کاربردهای مهم میکروکنترلرها از جمله GPIO، PWM، ADC و … می تواند به تنهایی بسیاری از نیازهای پروژه را برطرف سازد. اما مشخصات کلی این بورد به شرح زیر است:
- راحتی استفاده
- قابلیت برنامه نویسی با زبان برنامه نویسی lua یا Arduino IDE
- قابلیت استفاده بصورت access point یا station
- قابلیت استفاده در کاربردهای Event-driven API
- دارای آنتن داخلی
- دارای 13 پایه GPIOT، 10 کانال PWM، I2C، SPI، ADC، UART و 1-Wire
چگونه Nodemcu را با Arduino IDE پروگرم کنیم؟
برای استفاده از Arduino IDE به منظور پروگرم کردن Nodemcu ابتدا باید این بورد را به نرم افزار معرفی کنید. برای این کار کد زیر را کپی کرده و گام پیش رو را انجام دهید:
http://arduino.esp8266.com/stable/package_esp8266com_index.json
گام اول) در منوی file بخش preferences در قسمت Additional Board Manager URLs کد کپی شده را وارد کنید و Ok را بزنید.
گام دوم) به منوی Tools بخش Boards>Boards Manager رفته و کلمه Esp8266 را در تب موجود سرچ کنید و بوردهای Esp8266 را نصب کنید، پس از پایان مراحل نصب لیبل نصب شده برروی بوردهای Esp8266 ظاهر می گردد.
برای استفاده از پایه های دیجیتال باید از شماره های GPIO استفاده کرد بطور مثال پایه D7 بورد با GPIO13 معرفی شده پس در برنامه هرجا نیاز به استفاده از D7 داشتید باید با پایه 13 تنظیمات راانجام دهید. از پایه D2(GPIO4) بعنوان SDA و از D1(GPIO5) بعنوان SCL می توانید استفاده کنید.
کنترل یک LED از طریق یک صفحه HTTP با استفاده از NodeMCU
با استفاده از Nodemcu می توانید از طریق وایفای به مودم خود متصل شوید و با ساخت یک صفحه HTTP پنل مدنظر خود را بسازید و دستورات لازم را اعمال کنید.
در این نمونه در صفحه HTTP با اعمال کلید های On و Off می توانید یک LED یا رله و یا … کنترل کنید.
در کد زیر SSID و password مودم خود را در بخش مربوطه بنویسید و آنرا از طریق Arduino IDE روی Nodemcu خود آپلود کنید (سایر تنظیمات را به حالت پیشفرض رها کنید):
کد
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
/* Set these to your desired credentials. */
const char *ssid = "*****"; //Enter your WIFI ssid
const char *password = "*****"; //Enter your WIFI password
ESP8266WebServer server(80);
void handleRoot() {
server.send(200, "text/html", "<form action=\"/LED_BUILTIN_on\" method=\"get\" id=\"form1\"></form><button type=\"submit\" form=\"form1\" value=\"On\">On</button><form action=\"/LED_BUILTIN_off\" method=\"get\" id=\"form2\"></form><button type=\"submit\" form=\"form2\" value=\"Off\">Off</button>");
}
void handleSave() {
if (server.arg("pass") != "") {
Serial.println(server.arg("pass"));
}
}
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
delay(3000);
Serial.begin(115200);
Serial.println();
Serial.print("Configuring access point...");
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());
server.on ( "/", handleRoot );
server.on ("/save", handleSave);
server.begin();
Serial.println ( "HTTP server started" );
server.on("/LED_BUILTIN_on", []() {
digitalWrite(LED_BUILTIN, 1);
Serial.println("on");
handleRoot();
});
server.on("/LED_BUILTIN_off", []() {
digitalWrite(LED_BUILTIN, 0);
Serial.println("off");
handleRoot();
});
}
void loop() {
server.handleClient();
}
چه بردهای دیگری را می توانم بجای NodeMCU استفاده کنم؟
Board | Cost $ | Voltage | GPIO | ADC | PWM | UART | SPI | I2C | Internal antenna | Special Features |
---|---|---|---|---|---|---|---|---|---|---|
Nodemcu | 8.39 | 5 | 13 | 1 | 10 | 2 | Yes | Yes | Yes | User LED – RESET and FLASH Buttons |
Esp8266-01 module | 4.55 | 3.3 | 2 | 1 | 0 | 1 | No | No | Yes | - |
Wemos D1 mini | 2.04 | 5 | 11 | 1 | 10 | 3 | Yes | Yes | Yes | RESET and FLASH Buttons |
Witty Cloud | 16.50 | 5 | 9 | 1 – connected to LDR | 9 | 1 | Yes | Yes | Yes | LDR – RGB – 3x Buttons – User LED |
Esp8266-12 Module | 4.99 | 3.3 | 13 | 1 | 12 | 3 | Yes | Yes | Yes | - |
ESP8266-12E module | 4.50 | 3.3 | 17 | 1 | 4 | 2 | Yes | Yes | Yes | - |
ESP-201 | 6.59 | 3.3 | 15 | 1 | 15 | 2 | Yes | Yes | Yes | - |
Adafruit HUZZAH | 11.99 | 5 | 9 | 1 | 9 | 2 | Yes | Yes | Yes | RESET and User Buttons – User LED |
BRKWSO1 | 23.88 | 3.3 | 9 | - | - | 1 | - | - | No | - |
Comments (37)
سلام من میخواستم که یه رله رو از طریق گوشی و nodemcu کنترل کنم به این شکل که nodemcu به عنوان هات اسپات باشه و گوشی هم از طریق برنامه نویسی سوکت به nodemcu داده ارسال کنه
خیلی تحقیق کردم ولی راهی پیدا نکردم
ممکنه راهنمایی کنید
سلام.
کاربردی که میخواید شدنی هست. برای این کار میتونید از آموزش زیر استفاده کنید.
https://www.instructables.com/ESP8266-and-Relay-Control-Using-Smartphone/
سلام من یک مشکلی که و این پروژه داشتم اینه که وقتی میزنم تا کامپایل و آپلود بشه خطا میده نمیدونم برا چیه! اونم با اینکه تمام کتابخونه ها رو نصب کردم.
لطفاً منو راهنمایی کنید.
اینم متن خطا:
Arduino: 1.8.19 (Windows 10), Board: “NodeMCU 1.0 (ESP-12E Module), 80 MHz, Flash, Disabled (new aborts on oom), Disabled, All SSL ciphers (most compatible), 32KB cache + 32KB IRAM (balanced), Use pgm_read macros for IRAM/PROGMEM, 4MB (FS:2MB OTA:~1019KB), 2, v2 Lower Memory, Disabled, None, Only Sketch, 115200”
sketch_feb12a:11:10: fatal error: ESPWiFi.h: No such file or directory
compilation terminated.
exit status 1
ESPWiFi.h: No such file or directory
This report would have more information with
“Show verbose output during compilation”
بعد روی خط کد espwifi.h خیره و قرمز میشه همون خط کد، لطفاً منو راهنمایی کنید
سلام.
احتمالا بوردتون رو به درستی انتخاب نکردید. این ارور معمولا به خاطر این اتفاق هست. بوردتون رو میتونید تو قسمت Tools -> Board -> ESP8266 Boards از بین بوردهای ESP8266 مثل Generic ESP8266 Module انتخاب کنید.
با سلام
پس از آپلود کد چرا توی سریال مانیتور هیچی نمینویسه ؟؟؟؟؟
سلام.
نرخ baudrate توی سریال مانیتور رو چک کنید که حتما مساوی 115200 باشه.
سلام چرا همه منابع با اردوینو یاد دادن
یه منبع پیدا نمیشه اصولی با زبان c یاد داده باشه؟ممنون میشم اگر سورسی سراغ داریدمعرفی کنید
بی زحمت جواب پیامم رو ایمیل کنیدممنون
سلام.
زبان آردوینو به دلیل ساده فهمیده شدنش و همچین اوپن سورس بودنش در سالهای اخیر بسیار مورد توجه قرار گرفته و محبوب شده. به همین علت اکثر منابع آموزش با آردوینو رو در دستور کار قرار دادن.
Arduino: 1.8.19 (Windows 8), Board: “NodeMCU 0.9 (ESP-12 Module), 80 MHz, Flash, Disabled (new aborts on oom), Disabled, All SSL ciphers (most compatible), 32KB cache + 32KB IRAM (balanced), Use pgm_read macros for IRAM/PROGMEM, 4MB (FS:2MB OTA:~1019KB), v2 Lower Memory, Disabled, None, Only Sketch, 115200”
Executable segment sizes:
ICACHE : 32768 – flash instruction cache
IROM : 274104 – code in flash (default or ICACHE_FLASH_ATTR)
IRAM : 28945 / 32768 – code in IRAM (IRAM_ATTR, ISRs…)
DATA : 1496 ) – initialized variables (global, static) in RAM/HEAP
RODATA : 1040 ) / 81920 – constants (global, static) in RAM/HEAP
BSS : 26432 ) – zeroed variables (global, static) in RAM/HEAP
Sketch uses 305585 bytes (29%) of program storage space. Maximum is 1044464 bytes.
Global variables use 28968 bytes (35%) of dynamic memory, leaving 52952 bytes for local variables. Maximum is 81920 bytes.
esptool.py v3.0
Serial port COM3
Connecting…….._____….._____….._____….._____….._____….._____….._____
Traceback (most recent call last):
File “C:\Users\Kharazmi_Pc\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2/tools/upload.py”, line 66, in
esptool.main(cmdline)
File “C:/Users/Kharazmi_Pc/AppData/Local/Arduino15/packages/esp8266/hardware/esp8266/3.0.2/tools/esptool\esptool.py”, line 3552, in main
esp.connect(args.before, args.connect_attempts)
File “C:/Users/Kharazmi_Pc/AppData/Local/Arduino15/packages/esp8266/hardware/esp8266/3.0.2/tools/esptool\esptool.py”, line 529, in connect
raise FatalError(‘Failed to connect to %s: %s’ % (self.CHIP_NAME, last_error))
esptool.FatalError: Failed to connect to ESP8266: Timed out waiting for packet header
esptool.FatalError: Failed to connect to ESP8266: Timed out waiting for packet header
This report would have more information with
“Show verbose output during compilation”
option enabled in File -> Preferences.
سلام من یک مشکلی که داشتم اینه که وقتی میزنم تا کامپایل و آپلود بشه خطا میده نمیدونم برا چیه!
میشه لطف کنید منو راهنمایی کنید.
سلام.
بر اساس متن خطایی که فرستادید کد به درستی کامپایل شده و خطا هنگام آپلود اتفاق افتاده. خطای اتفاق افتاده هم مربوط به عدم ارتباط گرفتن صحیح بین میکروکنترلر و کامپیوتر هست. برای حل این خطا، ابتدا دکمه BOOT رو فشار بدید و نگه دارید و بعد از اون گزینه آپلود رو بزنید. منتظر بمونید تا قسمت Connecting…….._____ ظاهر بشه و بعد از اون دستتون رو از روی دکمه BOOT بردارید. به احتمال زیاد با این کار مشکلتون برطرف میشه. اما اگر با این کار هم مشکل پابرجا موند احتمال زیاد مشکل از خود بورد هست.
Executable segment sizes:
ICACHE : 32768 – flash instruction cache
IROM : 269472 – code in flash (default or ICACHE_FLASH_ATTR)
IRAM : 27385 / 32768 – code in IRAM (IRAM_ATTR, ISRs…)
DATA : 1504 ) – initialized variables (global, static) in RAM/HEAP
RODATA : 1332 ) / 81920 – constants (global, static) in RAM/HEAP
BSS : 26016 ) – zeroed variables (global, static) in RAM/HEAP
سلام من برنامه ام رو روی ESP8266 node mcu کامپایل یا آپلود می کنم خطای بالا ظاهر می شه! مشکل از برد هست؟
سلام.
بنظر خطا نیست و صرفا اطلاعاتی در رابطه با حجم گرفته شده توسط برنامه در میکروکنتره.
سلام وقت بخیر
میخاستم بدونم زمانی که چند برد nodemcu با wifi به هم متصل هستند میشه یک برد گیرنده باشه و هم زمان بتونه دیتا های ارسالی هم زمان رو دریافت کنه و در حین دریافت دیتا به برد های دیگه دیتا بفرسته؟
ممنون
سلام وقت بخیر
ببینید در ارتباط WiFi شبکه به صورت server client با هم ارتباط میگیرن
که هر کدام ip address مختص به خودشون رو دارن ، خوب اینکه میفرمایید همزمان دیتاها ارسال بشن در عمل این امکان وجود نداره
اما آنقدر سرعت تبادل دیتا بالا هست که میتونید بگید تقریبا هم زمان هستند.
باز هم بستگی داره که این هم زمانی از نظر شما چی باشه ؟ برای چه کاربردی بخوایید استفاده کنید؟
سلام برای من این خطا رو میده میشه راهنماییم کنید
Arduino: 1.8.19 (Windows 10), Board: “Generic ESP8266 Module, 80 MHz, Flash, Disabled (new aborts on oom), Disabled, All SSL ciphers (most compatible), 32KB cache + 32KB IRAM (balanced), Use pgm_read macros for IRAM/PROGMEM, dtr (aka nodemcu), 26 MHz, 40MHz, DOUT (compatible), 1MB (FS:64KB OTA:~470KB), 2, nonos-sdk 2.2.1+100 (190703), v2 Lower Memory, Disabled, None, Only Sketch, 115200”
Executable segment sizes:
ICACHE : 32768 – flash instruction cache
IROM : 269472 – code in flash (default or ICACHE_FLASH_ATTR)
IRAM : 27385 / 32768 – code in IRAM (IRAM_ATTR, ISRs…)
DATA : 1504 ) – initialized variables (global, static) in RAM/HEAP
RODATA : 1324 ) / 81920 – constants (global, static) in RAM/HEAP
BSS : 26008 ) – zeroed variables (global, static) in RAM/HEAP
Sketch uses 299685 bytes (31%) of program storage space. Maximum is 958448 bytes.
Global variables use 28836 bytes (35%) of dynamic memory, leaving 53084 bytes for local variables. Maximum is 81920 bytes.
Serial port not selected.
This report would have more information with
“Show verbose output during compilation”
option enabled in File -> Preferences.
سلام
شما پورت سریال مربوطه رو به درستی انتخاب نکرده اید
سلام و احترام. یه پروژه کوچیک با wmos d1 mini برنامه نویسی کردم و حالا مشکلی برام پیش اومده. وقتی ماژول را تو محيط اردوینو پروگرام میکنم یا اینکه تغذیه ماژول رو قطع و وصل میکنم حتما باید ماژول رو یه بار ریست سخت افزاری کنم وگرنه کار نمیکنه. لطفأ راهنمایی بفرمایید خیلی بهش نیاز دارم.
سلام
ببینید کلا هر میکرویی بعد از پروگرام برای اینکه در مد run قرار بگیره باید ریست بشه حالا این ریست شدن میتونه از طریق خود ide و پروگرامر باشه یا به صورت manual باید انجام بشه
سلام
تشکر بابت مطلب مفیدی که به اشتراک گذاشتی.
و یه سوال
برای اینکه خروجی های بیشتری داشته باشیم باید چه تغییری داخل سورس برنامه ایجاد کنیم؟
ممنون
سلام
مننون ازتوجهتون
منظورتون از خروجی بیشتر اگر استفاده از تعداد پایه های بیشتر هست
یعنی بیشتر از چیزی که خود بورد داره میتونید از آی سی های shift register 74hc استفاده کنید
ببینید
الان داخل وب سرور
یک گزینه «خاموش»
و یک گزینه «روشن» وجود داره که این دو گزینه کنترل یک پایه رو بر عهده دارند
قصد دارم از خروجی بیشتری استفاده کنم
پس در نتیجه باید گزینه ها رو بیشترش کنم
سلام مجدد
اگر مایل باشیم آی پی مدار رو به صورت دستی و دلخواه وارد کنیم باید در کدوم قسمت برنامه تغییر ایجاد کنیم؟
ممنون
مایل به پاسخگویی نیستید؟
سلام من وقتی که میخوام کتابخونه رو نصب کنم وقتی سرچ میکنم esp8266 کتابخانه ای که شما نصب کرده اید رو پیدا نمیکنم
با سلام
در لیست کتابخانه ها هیچ چیزی نمی آید یا می آید اسمش متفاوت می باشد؟؟
سلام خسته نباشید
من این مراحل را رفتم
درایور cp2102 را هم ریختم
ولی پورت در برنامه آردوینو شناسایی نمی شود
چجوری می تونم این مشکل را رفع کنم؟
برد را وقتی وصل می کنم ب پورت فقط چشمک می زنه اون ال ای دی
با سلام
ابتدا وارد بخش دیوایس منیجر سیستم خود شده
در بخش Port یا COM باید گزینه ای باشد که زمانی که ماژول را به سیستم وصل و قطع میکنید نمایش داده شود و حذف شود. در صورتی که در بخش های دیگر ظاهر می شود عنوان را در اینجا قرار بدهید.
در صورتی که چیزی برای شما نمایش داده نمیشود یکی از گزینه زیر می باشد.
1. کابل خود را بررسی کنید.
2. کانکتور USB بر روی برد شما مشکل دارد.
سلام بعد از اپلود این پیغامو میده
A fatal esptool.py error occurred: Timed out waiting for packet header
با سلام
سریال مانیور را باز کرده و بر روی 74880 قرار بدهید. یک بار دکمه ریست را بر روی ماژول بزنید. باید داده های مروبط به بوت را به شما نمایش داده شود. در صورتی که نمایش داده شد کافی است زمانی که بر روی گزینه اپلود میزنید دکمه Flash را نگه داشته و یک بار دکمه ریست را بزند و صبر کنید تا پروگرام انجام بشود. پیشنهاد میکنم مود های آپلود و کامپایل را در منو تنظیمات برنامه آردوینو خود فعال کنید تا مراحل آپلود را مشاهده کنید.
سلام وقت بخیر با چه برنامه ای و یا سایتی باید کنترل پایه های ماژول رو در دست بگیرم و اینکه چگونه میتوانم هر پایه ای که دلم میخواد را روشن و خاموش کنم
با سلام
با توجه به برنامه ای که بر روی برد میریزید میتوانید پایه های میکرو را کنترل کنید.
تمامی این موارد در خود نرم افزار آردوینو قرار داده شده است.
نرم افزار را مورد بررسی قرار بدهید متوجه می شوید
سلام تمام درایو ها رو نصب کردم هم درایو cp210x , esp8266 ولی بازهم وقتی میزنم کد اپلود بشه این ارور رو نشون میده
A fatal esptool.py error occurred: Failed to connect to ESP8266: Timed out waiting for packet header
روی خود برد نوشته اول درایور cp 2102 را نصب کنید مرحله دوم بادریت رو روی 9600 قرار بدید من بادریت رو توی کد با سریال بگین روی 9600 قرار دادم
تنها پرتی که دارم پورت 3 هست و NodeMCU 1.0 (ESP-12E Module) قرار میدم توی سریال مانیتور نرم افزار اردوینو مسیج رو میاره اما وقتی روی NodeMCU 0.9 (ESP-12 Module) قرار میدم قسمت مسیجش قرمز میشه و ارور میده اما در هر دو حالت کد هام اپلود نمیشه
با سلام
لطف کنید در بخش انجمن به صورت یک سوال این مشکل را مطرح کرده و عکس ها و داکیمونت های مربوطه را نیز قرار بدهید تا مشکل شما مورد بررسی قرار بگیرد.
یک عکس از دیوایس منیجر نیز زمانی که ماژول به سیستم شما وصل می باشد نیز قرار دهید.
سلام خسته نباشید من یک برد esp_12f node mcu دارم که وقتی میخوام کد رو روش اپلود کنم حین یا بعد از اجرای فر ایند این ارور رو میده A fatal esptool.py error occurred: Failed to connect to ESP8266: Timed out waiting for packet heade
با سلام
این لینک را مطالعه کنید.
در صورتی که همچنان برطرف نشد در همان بخش سوال بپرسید.
سلام من یک مشکلی دارم که وقتی می خواهم کد رو بزنم درست هست یا نه این ارور رو میده
Variables and constants in RAM (global, static), used 28920 / 80192 bytes (36%)
║ SEGMENT BYTES DESCRIPTION
╠══ DATA 1504 initialized variables
╠══ RODATA 1328 constants
╚══ BSS 26088 zeroed variables
. Instruction RAM (IRAM_ATTR, ICACHE_RAM_ATTR), used 60375 / 65536 bytes (92%)
║ SEGMENT BYTES DESCRIPTION
╠══ ICACHE 32768 reserved space for flash instruction cache
╚══ IRAM 27607 code in IRAM
. Code in flash (default, ICACHE_FLASH_ATTR), used 269968 / 1048576 bytes (25%)
║ SEGMENT BYTES DESCRIPTION
╚══ IROM 269968 code in flash
میشه لطفا رهنماییم کنید؟
با سلام
این ارور نیست فقط به شما اعلام میکند این کدی که زدید چقدر از حافظه را اشغال کرده است. و کامپایل به درستی انجام شده است.