کنترل وسایل خانه ۴ (نهایی)

خوب سورس برنامه رو توی قسمت قبل دیدید، الان میخوایم بریم و روی برد آپلودش کنیم و ببینیم چطوری کار میکنه و درنهایت بریم و خاموش روشن کردن با گوشه‌های مانیتور رو آماده کنیم! سورس رو ببینیم، توضیح میدم که چطوری کار میکنه


#include <Ethernet.h> //کتابخونه‌ی اترنت
#include <SPI.h> //کتابخونه‌ی سریال

int lamp1 = 4;
int lamp2 = 5;
// اینجا پایه‌هایی که قراره وصل بشن به رله رو مشخص میکنیم


byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xE3}; //اختصاص یه مک‌آدرس به دستگاه
byte ip[] = {192,168,2,20}; //ای‌پی دستگاه (رنج ای‌پی خودتون به بزارین به جای ۲ ممکنه یه عدد دیگه باشه با ای‌پی خودتون نگاه کنین)
byte gateway[] = {192,168,2,1}; //گت‌وی آی‌پی یا ای‌پی مودم
byte subnet[] = {255,255,255,0}; //این رو ثابت بذارین

EthernetServer server(80); //خوندن پورت 80 روی آی‌پی
String readString; //متغیر برای اینکه بدونیم کدوم دکمه رو زده کاربر

void setup() //مقداردهی اولیه
{
  Serial.begin(9600);
  while(!Serial);
 
  pinMode(lamp1,OUTPUT);
  pinMode(lamp2,OUTPUT);
 
  Ethernet.begin(mac,ip,gateway,subnet);
  Serial.print("Server Connected."); //چاپ کردن در سریال مانیتور
  Serial.println(Ethernet.localIP());
}

void loop() //حلقه‌ی تکرار شونده‌ی برنامه
{

  //Create a Client Connection
  EthernetClient client = server.available();
  if (client)
  {
    while (client.connected())
    {
      if (client.available())
      {
        char c = client.read();
        if (readString.length() < 100)
          {
            readString+=c;  //readString = readString + c
          }
          
        if (c=='\n')
        {
          Serial.println(readString);
          
          client.println("HTTP/1.1 200 OK");    //Send new page
          client.println("Content-Type:text/html");
          client.println();
          //ارسال یک صفحه‌ی اچ‌تی‌ام‌ال به کاربر
          client.println("<html>");
          client.println("<head>");
          client.println("<meta charset='utf8'>");
          client.println("<style>body{margin:60px 0px; text-align:center} a{text-decoration:none;width:75px;height:50px;border-color:black;border-top:2px solid;border-bottom:2px solid;border-right:2px solid;border-left:2px solid;border-radius:10px 10px 10px;padding:8px;text-align:center;} a:hover{color:green;}</style>"); //استایل برای نمایش بهتر دکمه‌ها
          
          client.println("<title>Rozito.ir</title>");
          client.println("</head>");
          
          client.println("<body>");
          client.println("<H1>لینوکس برای زندگی</H1>");
          client.println("<hr />");
          client.println("<br />");
          
          client.println("<a href=\"/?button1on\"\">روشن کردن</a>");
          client.println("<a href=\"/?button1off\"\">خاموش کردن</a>");
          
          client.println("<br />");
          client.println("<br />");
          client.println("<br />");
          
          client.println("<a href=\"/?button2on\"\">روشن کردن</a>");
          client.println("<a href=\"/?button2off\"\">خاموش کردن</a>");
          
          client.println("<br />");
          client.println("<br />");
          client.println("<br />");
          
          client.println("<h4>Programmer : SSShojaei</h4>");
          client.println("<br />");
          client.println("</body>");
          client.println("</html>");
          
          delay(1);
          client.stop();
          
          //--------------------------------------
          //بررسی یو‌آر‌ال
          if (readString.indexOf("?button1on")>0)
          {
            digitalWrite(lamp1,LOW);
          }
          
          if (readString.indexOf("?button1off")>0)
          {
            digitalWrite(lamp1,HIGH);
          }
          //--------------------------------------
          
          //--------------------------------------
          if (readString.indexOf("?button2on")>0)
          {
            digitalWrite(lamp2,LOW);
          }
          
          if (readString.indexOf("?button2off")>0)
          {
            digitalWrite(lamp2,HIGH);
          }
          //--------------------------------------
          // خالی کردن مجدد متغیر برای اینکه دکمه‌های بعدی رو بتونه بخونه
          readString = "";
          
        }
      }
    }
  }
}

خوب یه سری نکات رو لازمه بگم، سریال مانیتور جایی که میشه ترافیک پورت سریال رو دید، آیکونش یه ذره‌بین هست بالا سمت راست arduino ide که میتونین ببینینش، الان توی این سورس این اتفاق افتاده، ما یه سرور درست کردیم که به کلاینت به صفحه‌ی وب برمیگردونه، کاربر هر دکمه‌ای رو زد به لینک اضافه میشه و ما با متغیر readString میفهمیدم کدوم رو زده و با شرط های ساده پایه رو خاموش یا روشن میکنیم. الان اگر سورس رو آپلود کنید و با کابل RJ45 (لن) شیلد اترنت رو به مودم وصل کنین، میتونین کارتون رو تست کنین

 

خوب کافیه لامپ یا هر چیزی میخواین رو وصل کنین به رله ها و کنترلشون کنین، رله دقیقا یه کلید برقه پس مثل یه کلید بهش وصل کنین چیزایی رو که میخواین. بریم و روشن و خاموش کردنش رو بسپاریم به موس و گوشه‌های مانیتور

توی گنوم میتونین از اکستنشن customcorner استفاده کنین و توی سایر دسکتاپ ها هم راهش رو میشه راحت پیدا کرد. با این اکستنشن میشه به گوشه‌های مانیتور یه دستور داد، توضیحش تا همینجا بمونه برمیگردیم بهش. میخوایم با ترمینال لامپ رو خاموش و روشن کنیم، نیاز به یه مرورگر تحت ترمینال داریم تا مثل فایرفاکس یا هر مرورگری لینک رو باز کنه برامون و لامپ رو روشن یا خاموش کنه! بروزر links یا w3m دوتا از مرورگرهای ساده و خوب تحت ترمینال هستن یکی رو نصب کنین و باهاش لینک روشن شدن لامپ رو باز کنین (http://192.168.2.20/?button1on) برای روشن کردن لامپ من هست.


w3m "http://192.168.2.20"

رو توی ترمینال بزنم لامپ روشن میشه و خاموش کردن هم که مشخصه! ما باید این دستور رو به گوشه‌های مانیتور بدیم

خوب همه چیز آماده هست پروژه رو تست کنید و لذت ببرین خوب برای اینکه بشه از هرجای دنیا وسایل رو کنترل کرد لازمه که یه ای‌پی استاتیک بگیرین از ISPتون که احتمالا حدود ۵ تومن در ماه میگیره ازتون ولی میتونین از هرجایی خونتون رو کنترل کنین.

فرم نظر دهی


تصویر امنیتی جدید تصویر امنیتی
116890
TodayToday84
YesterdayYesterday155
This_WeekThis_Week244
This_MonthThis_Month2678
All_DaysAll_Days116890