ساخت اپلیکیشن اندروید – اتصال به برد nodemcu
اگر اهل کار در حوزه IOT یا خانه های هوشمند باشید به احتمال زیاد در دستگاه هاتون از وای فای هم برای ارتباط بخش های مختلف استفاده کردید ، اما اکثرا مجبور میشیم از اپلیکیشن های آماده ای که برای کار با wifi طراحی شده اند استفاده کنیم که این باعث میشه یک سیستم یکپارچه نداشته باشیم ، توی این آموزش میخوایم نحوه طراحی اپلیکیشن اندرویدی رو آموزش بدیم که قابلیت ارسال دیتا از طریق wifi رو داره و میشه اون رو برای سخت افزار هایی مثل nodemcu به کار برد ، پس با IMAX همراه باشید…
مرحله اول (تهیه ابزار های مورد نیاز)
برای برنامه نویسی اپلیکیشن های اندرویدی میشه از ابزار های مختلفی استفاده کرد(مثل B4A , Xamarin , Android studio , Flutter) اما ما توی این آموزش از نرم افزار اندروید استودیو استفاده میکنیم چراکه افرادی که با اون کار میکنند بیشتر هستند و مشکلاتتون رو راحت تر میتونید رفع کنید ، برای برنامه نویسی با اندروید استودیو میشه از دو زبان کاتلین و جاوا استفاده کرد ، زبان جاوا قبلا بیشتر برای اندروید استفاده میشده اما چندسالی هست که kotlin جای اون رو گرفته و همه دارند به سمت کاتلین میرند ، پس ما هم از کاتلین استفاده میکنیم.
برای شروع لازم هست که اول از همه نرم افزار اندروید استودیو رو نصب کنیم. به دلیل اینکه روند نصب کمی طولانی و دارای جزئیات زیادی هست و آموزش های کاملی برای اینکار داخل اینترنت موجود هست. پیشنهاد میکنم که برای دانلود و نصب از این سایت استفاده کنید:
دانلود، نصب و راه اندازی اندروید استودیو
برای بخش سخت افزار هم از نرم افزار آردوینو و برد nodemcu استفاده میکنیم به همراه یک نمایشگر oled
آموزش جامع راه اندازی OLED با آردوینو
بعد از نصب و باز کردن نرم افزار آردوینو لازم هست که در ابتدا برد nodemcu رو به آردوینو اضافه کنیم (اگر از قبل ندارید). برای این کار میتونید از این لینک استفاده کنید که مراحل را به طور کامل قبلا توضیح دادیم:
راه اندازی برد توسعه NodeMCU
حالا مدارمون رو طبق شماتیک متصل میکنیم ، شماتیک رو در پایین میتونید ببینید:
مرحله دوم (برنامه نویسی)
به دلیل آموزش برنامه نویسی اپلیکیشن به صورت متن کمی مشکل هست، این بخش را به صورت ویدئو تهیه کردیم در ادامه مختصری از مراحلی که در فیلم انجام میشه رو بررسی میکنید:
ابتدا از این لینک کد مورد نیاز برای اپلیکیشن اندروید و nodemcu رو دانلود میکنیم.
سپس کد اپلیکیشن رو ویرایش کرده و یک ورودی متن به کد آن اضافه میکنیم تا بتونیم متنی رو دریافت کرده که بعدا اون رو روی نمایشگر oled نمایش بدیم .
پس از تست اپلیکیشن اندروید، به سراغ تغییر کد های nodemcu میریم و کد ها رو به کد پایین تغییر میدیم:
#include <Arduino.h> #include <ESP8266WiFi.h> #include <ESP8266WebServer.h> #include <EEPROM.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 32 // OLED display height, in pixels #define OLED_RESET -1 #define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32 #define SSID "node mcu" #define PASS "12345678" #define PORT 8888 #define LED LED_BUILTIN #define OUT 16 #define BTN D3 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); WiFiServer server(PORT); WiFiClient client; char res[20]; int val; int c; int x; int y = 0; int compare(char *a, char *b) { for (int i = 0; i < 200; i++) { if (a[i] != b[i]) { return 0; } if (a[i] == '\r' && b[i] == '\r') { return 1; } } } void setup() { pinMode(LED, OUTPUT); pinMode(OUT, OUTPUT); pinMode(BTN, INPUT); digitalWrite(LED, LOW); digitalWrite(OUT, LOW); digitalWrite(BTN, LOW); Serial.begin(115200); WiFi.mode(WIFI_AP); WiFi.softAP(SSID, PASS); server.begin(); Serial.println("Starting the access point..."); Serial.print("ssid : "); Serial.println(SSID); Serial.print("pass : "); Serial.println(PASS); Serial.print("IP address: "); Serial.println(WiFi.softAPIP()); Serial.print("on port "); Serial.println(PORT); if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) { Serial.println("SSD1306 allocation failed"); for (;;) ; // Don't proceed, loop forever } display.clearDisplay(); display.setTextSize(1); // Normal 1:1 pixel scale display.setTextColor(SSD1306_WHITE); display.setCursor(0, 0); // Start at top-left corner display.print("ssid : "); display.println(SSID); display.print("pass : "); display.println(PASS); display.display(); } void loop() { client = server.available(); if (client) { if (client.connected()) { digitalWrite(LED, LOW); Serial.println("Client Connected"); } while (client.connected()) { if (client.available()) { String line = client.readStringUntil('\n'); Serial.println(line); if (line =="state:0\r") { Serial.println("seted low"); digitalWrite(OUT, LOW); client.write("state:0\n"); } if (line=="state:1\r") { Serial.println("seted high"); client.write("state:1\n"); digitalWrite(OUT, HIGH); } if(line.startsWith("text:")){ line.replace("text:",""); display.clearDisplay(); display.setTextSize(1); // Normal 1:1 pixel scale display.setCursor(0, 0); // Start at top-left corner display.println(line); } } if (digitalRead(BTN) == LOW) { if (digitalRead(OUT) == HIGH) { digitalWrite(OUT, LOW); client.write("state:0\n"); } else { digitalWrite(OUT, HIGH); client.write("state:1\n"); } while (digitalRead(BTN) == LOW) delay(10); } } client.stop(); Serial.println("Client Disconect"); } else { digitalWrite(LED, HIGH); delay(100); digitalWrite(LED, LOW); delay(100); } }
توجه داشته باشید که برای عملکرد صحیح کد nodemcu لازم هست که کتابخونه های “Adafruit_GFX” و “Adafruit_SSD1306” رو به آردوینو اضافه کرده باشید.
مرحله سوم (تست و خروجی)
همونطور که در ویدئو پایین مشاهده میکنید وضعیت led رو میشه از طریق اپلیکیشن تغییر داد و اگر هم که دکمه روی nodemcu رو فشار بدیم وضعیت چراغ در اپلیکیشن اندروید هم تغییر میکنه ، همچنین با وارد کردن متن در اپلیکیشن میتونیم اون رو روی oled مشاهده کنیم.
توجه داشته باشید که ما خروجیمون رو پایه 16 قرار دادیم که به led روی nodemcu هم متصل هست. ولی اون led فعال صفر هست یعنی وقتی بهش صفر بدیم روشن میشه. برای همین زمانی که اپلیکیشن وضعیت روشن رو نشون میده ال ای دی خاموش هست.
سلام ببخشید میشه با این برنامه ای که نوشتید ماژ رو از راه دور هم کنترل کرد
سلام خیر این برنامه برای شبکه محلی هست و باید مستقیم ارتباط بین ماژول و اپلیکیشن برقرار باشه
عالیییی
ممنون از شما🙏