آموزش آردوینو اینترنت اشیا IOT برد ESP8266 برد Nodemcu برد ویموس Wemos نمایشگر Segment

کنترل سون سگمنت با وب سرور آردوینو Webserver و نمایش اعداد

نوشته شده توسط CiferTech

تا به امروز سنسورهای و قطعات قبل توجهی را با استفاده از صفحات وب به کمک وب‌سرور ESP8266 راه‌اندازی کرده‌ا‌یم، در این آموزش به سراغ یک از قطعات پر استفاده در الکترونیک خواهیم رفت یعنی نمایشگر هفت قطعه‌ای یا سون سگمنت، در این پست به شما آموزش خواهم داد که چگونه با راه‌اندازی یک وب سرور، عدد مد نظر را در سون سگمنت نمایش دهید. در ادامه آموزش سگمنت با وب سرور با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

راه اندازی سگمنت با وب سرور - دیجی اسپارک

 


سون سگمنت


نمایشگرهای سون سگمنت از جمله قطعات پرطرفدار، برای نمایش متن یا عدد هستند. این قطعات در انواع کاتد و آنود مشترک یافت می‌شوند. در نوع آند مشترک تمام پین‌های مثبت قطعات به یکدیگر متصل هستند و کاربر با استفاده از پین های منفی قادر به راه اندازی این قطعات خواهد بود و در نوع کاتد مشترک نیز به همین ترتیب. به هر یک از هفت LED موجود در این بسته بندی، یک قطعه یا سگمنت گفته می شود زیرا هنگام روشن شدن، بخشی از یک رقم عددی را برای نمایش تشکیل می دهد. همچنین از یک ال ای اضافی نیز بعضی ۷SEGMENT ها استفاده می شود که نشانگر یک نقطه اعشاری است،

 


وب سرور WebServer


وب سرورها برنامه هایی هستند که مسئولیت آن ها قبول کردن درخواست های Http است که از سمت کاربران ارسال می شود، وب سرور ها در پاسخ اطلاعاتی را ارسال می کنند که ما معمولا به نام صفحات Html می‌شناسیم. خب حالا فرض کنیم که در مرورگر https://digispark.ir را سرچ کردیم، اتفاقی که می‌افتد به این شکل است که مرورگر شما یک درخواست به دامنه‌ای با نام digispark.ir ارسال می‌کند. در حالت عادی زمانی که شما آدرس سایتی را در مرورگر جست و جو می‌کنید از حروف انگلیس استفاده می‌کنید یعنی کلماتی قابل فهم برای انسان اما در واقع برای ورود به یک سایت باید از طریق ip آن اقدام کنید، اینجاست که مفهومی به نام DNS وارد کار می‌شود، پس در واقع زمانی که شما URL سایتی را جستجو می کنید مرورگر از طریق سرویس DNS، آی پی مربوط را پیدا می‌کند و درخواستی ارسال خواهد کرد.

 


برد ESP8266


تراشه های ESP8266 از موارد محبوب در زمینه اینترنت اشیا هستند که نسبت به دیگر نمونه ها کیفیت بهتر و همچنین قیمت پایین تری نیز دارند، هسته مرکزی این ماژول ESP8266 EX می باشد که در واقع زیر این شیلد فلزی قرار گرفته است، در ضمن این شیلد فلزی به منظور کاهش نویز و همچنین محافظت از قطعات SMD حساس این ماژول قرار داده شده است. این ماژول ها در سری های مختلفی تولید می‌شوند از جمله esp01 و esp12، در واقع تفاوتی که مدل ها با یکدیگر دارند تعداد GPIO ها و همچنین حافظه آن ها است البته معمولا از نظر ظاهری نیز تفاوت هایی که با یکدیگر دارند که قابل تشخیص است. این ماژول ها از شبکه WIFI داخلی پشتیبانی می‌کنند، این میکرو کنترلر ها اولین بار در سال ۲۰۱۴ به بازار عرضه شدند. ESP8266 دارای ۱۳ GPIO و همچنین یک ورودی آنالوگ (A0) است.

 


شرح پروژه سگمنت با وب سرور


در پروژه سگمنت با وب سرور ابتدا با راه‌اندازی یک وب سرور به کمک برد ESP8266 و ایجاد یک صفحه وب، اقدام به کنترل یک ۷segment می کنیم. به این صورت که حالات مورد نیاز را در کد تعریف و برای هر حالت یک Button در صفحه وب تعریف می کنیم، که با تریگ کردن هر Button حالت ۷segment تغییر کند.

آموزش سگمنت با وب سرور - دیجی اسپارک

 


وسایل مورد نیاز


برد ESP8266

نمایشگر سگمنت ۷SEGMENT

وسایل ساخت سگمنت با وب سرور آردوینو - دیجی اسپارک

 


شماتیک و اتصالات


برای راه‌اندازی، اتصالات را طبق جدول و شماتیک زیر برقرار کنید. هر بخش از ۷segment به یک از حرف از a تا f نام گذاری شده، دقت داشته باشید در این آموزش از یک سون‌سگمنت آند مشترک استفاده می کنیم همچنین هنگام برقرار کردن اتصالات در هر پین سون‌سگمنت از یک مقاومت ۱k برای عدم صدمه رسیدم به قطعات استفاده کنید.

 

اتصالات سگمنت به برد ESP8266 - دیجی اسپارک

روش کد گذاری پایه های سون سگمنت - دیجی اسپارک

شماتیک اتصالات سگمنت به برد Nodemcu ESP8266 - دیجی اسپارک

 


کد پروژه سگمنت با وب سرور


مثل همیشه بخش مهمی از کد و قسمت هایی که نیاز به توضیح دارند را باهم مرور خواهیم کرد. در خط اول کتابخانه مورد نیاز را فراخوانی خواهیم کرد.

#include <ESP8266WiFi.h>

 

در این دو خط اطلاعات شبکه وای‌فای مد نظر رو وارد می کنیم، تا در روند اجرای پروژه ESP به این وای‌فای متصل شود.

const char* ssid = "C1F3R"; 
const char* password = "314159265";

 

در این چند خط متغیر های مورد نیاز را تعریف خواهیم کرد.

int a = 0;    
int b = 1;      
int c = 2;  
int d = 3;  
int e = 4;    
int f = 5;  
int g = 16;

 

در این بخش وب سرور شروع بکار خواهد کرد.

server.begin();

 

در این بخش برای نمایش هر عدد یک شرط تایین می کنیم که در آن حالت ورودی و خروجی هر پایه مشخص شده.

if (request.indexOf("/Req=0") != -0)  {
  digitalWrite(a, LOW);
  digitalWrite(b, LOW);
  digitalWrite(c, LOW);
  digitalWrite(d, LOW);       // 0
  digitalWrite(e, LOW);
  digitalWrite(f, LOW);
  digitalWrite(g, HIGH);
  value=0;
}

 

این قسمت مربوط به ظاهر وب سرور و همچنین تعریف فانکشن های مختلف است.

client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println(""); //  
  client.println("<!DOCTYPE HTML>");
  client.println("<html>");
  client.print(value); 
  client.print("<br><br>");
  client.print("<a href=\"/Req=0\"\"><button>0 </button></a><br/>");
  client.print("<a href=\"/Req=1\"\"><button>1 </button></a><br/>");
  client.print("<a href=\"/Req=2\"\"><button>2 </button></a><br/>");
  client.print("<a href=\"/Req=3\"\"><button>3 </button></a><br/>");
  client.print("<a href=\"/Req=4\"\"><button>4 </button></a><br/>");
  client.print("<a href=\"/Req=5\"\"><button>5 </button></a><br/>");
  client.print("<a href=\"/Req=6\"\"><button>6 </button></a><br/>");
  client.print("<a href=\"/Req=7\"\"><button>7 </button></a><br/>");
  client.print("<a href=\"/Req=8\"\"><button>8 </button></a><br/>");
  client.print("<a href=\"/Req=9\"\"><button>9 </button></a><br/>"); 
  client.print("</html>");
  delay(50);

 

کد کامل پروژه سگمنت با وب سرور

#include <ESP8266WiFi.h>

const char* ssid = "C1F3R"; 
const char* password = "314159265";
  
int a = 0;    
int b = 1;      
int c = 2;  
int d = 3;  
int e = 4;    
int f = 5;  
int g = 16; 

WiFiServer server(80);
 
void setup() {
  Serial.begin(115200);
  delay(10);

pinMode(a, OUTPUT); 
pinMode(b, OUTPUT); 
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);  
pinMode(e, OUTPUT);  
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);  
 
  // Connect to 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");
 
  // Start the server
  server.begin();
  Serial.println("Server started");
  
  Serial.print("Use this URL to connect: ");
  Serial.print("http://");    
  Serial.print(WiFi.localIP());
  Serial.println("/");
 
}
 
void loop() {
  // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
 
  Serial.println("new client");
  while(!client.available()){
    delay(1);
  }
 
  // Read the first line of the request
  String request = client.readStringUntil('\r');
  Serial.println(request);
  client.flush();

 int value = 0;

if (request.indexOf("/Req=0") != -0)  {
  digitalWrite(a, LOW);
  digitalWrite(b, LOW);
  digitalWrite(c, LOW);
  digitalWrite(d, LOW);       // 0
  digitalWrite(e, LOW);
  digitalWrite(f, LOW);
  digitalWrite(g, HIGH);
  value=0;
}

if (request.indexOf("/Req=1") != -1)  {
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);       // 1
  digitalWrite(e, LOW);
  digitalWrite(f, LOW);
  digitalWrite(g, HIGH);
  value=1;
}
if (request.indexOf("/Req=2") != -1)  {  
  digitalWrite(a, LOW);
  digitalWrite(b, LOW);
  digitalWrite(c, HIGH);      // 2
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, HIGH);
  digitalWrite(g, LOW);
  value=2;
}
if (request.indexOf("/Req=3") != -1)  { 
  digitalWrite(a, LOW);
  digitalWrite(b, LOW);
  digitalWrite(c, LOW);
  digitalWrite(d, LOW);      // 3
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, LOW);
  value=3;
}
if (request.indexOf("/Req=4") != -1)  {  
  digitalWrite(a, HIGH);
  digitalWrite(b, LOW);
  digitalWrite(c, LOW);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);     // 4
  digitalWrite(f, LOW);
  digitalWrite(g, LOW);
  value=4;
}
if (request.indexOf("/Req=5") != -1)  { 
  digitalWrite(a, LOW);
  digitalWrite(b, HIGH);
  digitalWrite(c, LOW);
  digitalWrite(d, LOW);
  digitalWrite(e, HIGH);     // 5
  digitalWrite(f, LOW);
  digitalWrite(g, LOW);
  value=5;
}
if (request.indexOf("/Req=6") != -1)  {  
  digitalWrite(a, LOW);
  digitalWrite(b, HIGH);
  digitalWrite(c, LOW);
  digitalWrite(d, LOW);    // 6
  digitalWrite(e, LOW);
  digitalWrite(f, LOW);
  digitalWrite(g, LOW);
  value=6;
}
if (request.indexOf("/Req=7") != -1)  {  
  digitalWrite(a, LOW);
  digitalWrite(b, LOW);
  digitalWrite(c, LOW);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);   // 7
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
  value=7;
}
if (request.indexOf("/Req=8") != -1)  { 
  digitalWrite(a, LOW );
  digitalWrite(b, LOW);
  digitalWrite(c, LOW);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);     // 8
  digitalWrite(f, LOW);
  digitalWrite(g, LOW);
  value=8;
}
if (request.indexOf("/Req=9") != -1)  {  
  digitalWrite(a, LOW);
  digitalWrite(b, LOW);
  digitalWrite(c, LOW);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);    // 9
  digitalWrite(f, LOW);
  digitalWrite(g, LOW);
  value=9;
}  

  
  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println(""); //  
  client.println("<!DOCTYPE HTML>");
  client.println("<html>");
  client.print(value); 
  client.print("<br><br>");
  client.print("<a href=\"/Req=0\"\"><button>0 </button></a><br/>");
  client.print("<a href=\"/Req=1\"\"><button>1 </button></a><br/>");
  client.print("<a href=\"/Req=2\"\"><button>2 </button></a><br/>");
  client.print("<a href=\"/Req=3\"\"><button>3 </button></a><br/>");
  client.print("<a href=\"/Req=4\"\"><button>4 </button></a><br/>");
  client.print("<a href=\"/Req=5\"\"><button>5 </button></a><br/>");
  client.print("<a href=\"/Req=6\"\"><button>6 </button></a><br/>");
  client.print("<a href=\"/Req=7\"\"><button>7 </button></a><br/>");
  client.print("<a href=\"/Req=8\"\"><button>8 </button></a><br/>");
  client.print("<a href=\"/Req=9\"\"><button>9 </button></a><br/>"); 
  client.print("</html>");
  delay(50);
  Serial.println("Client disonnected");
  Serial.println("");
 
}

 

پروژه سگمنت با وب سرور برد Nodemcu - دیجی اسپارک

 


جمع بندی


در نهایت با استفاده از سون‌سگمنت آند مشترک و یک برد ESP8266، یک وب سرور راه‌اندازی کردیم و با استفاده از یک صفحه وب، عدد مورد نظر را در سون‌سگمنت نمایش دادیم. با استفاده از کد این آموزش و توسعه آن نیز می توانید اعداد، حروف و اشکال دلخواه را نمایش دهید.

 

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

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

درباره نویسنده

CiferTech

تبادل نظر و رفع عیب با ثبت دیدگاه

۲ دیدگاه