ผู้เขียน หัวข้อ: การเรียนรู้ครั้งที่ 2 [Basic ESP32] การใช้งานพอร์ตในโหมดดิจิทัลเอาท์พุท  (อ่าน 6956 ครั้ง)

admin

  • Administrator
  • Hero Member
  • *****
  • กระทู้: 706
    • ดูรายละเอียด
    • อีเมล์
การใช้งานพอร์ตในโหมดดิจิทัลเอาต์พุทเบื้องต้น
ศึกษาการใช้งานพอร์ตในแต่ละขาให้ทำงานในโหมดดิจิทัลเอาต์พุต โดยให้ ESP32 ส่งสัญญาณออกมาทางของพอร์ตที่ต้องการที่เป็นลอจิก 0,1 และใช้ LED ต่อไว้ที่ขาพอร์ตเพื่อแสดงผลของลอจิกที่ส่งออกมา

วงจรที่ใช้ทดลอง

หน้าตาของชิพ ESP32 เป็นดังรูป


และถูกทำขึ้นเป็นผลิตภัณฑ์ที่ใช้ชื่อว่า ESP32-WROOM-32 module










เพื่อให้ง่ายต่อการนำไปใช้งานเนื่องจากโมดูลต้องการไฟเลี้ยง 3.3V ดังนั้นจึงมีหลายเจ้าที่นำโมดูลนี้ไปสร้างเป็นโมดูล ESP32 ซึ่งภายในจะประกอบด้วย
-ESP32-WROOM-32 module
-ไอซีเรกกูเลต 3.3V โดยรับแรงดันมาจากพอร์ต USB
-ชิพแปลง USB เป็น UART เพื่อใช้ในการอัพโหลดโปรแกรมและการติดต่อสื่อสารแบบอนุกรม
-ชุดควบคุมการเข้าโหมดโปรแกรมตัวเองอัตโนมัติ

สำหรับในการเรียนรู้ชุดนี้เลือกใช้ ESP32 ของ DOIT ซึ่งเป็นโมดูลขนาด 30 ขา (เนื่องจากเป็นที่นิยมมากสุดและราคาต่ำสุด)
ข้อสังเกต Vin,GND และ 3.3V,GND จะอยู่คู่กันและตรงข้ามกันโดยจะอยู่ด้านคอนเน็คเตอร์ USB ดังรูป


รายละเอียด(บางส่วนเฉพาะที่ใช้งานบ่อย) ของ ESP32 DOIT


การต่อวงจรทดลอง
ในกรณีที่ใช้ BreadBoard ในการต่อวงรทดลอง เมื่อวาง ESP32 DOIT ลง BreadBoard จะเหลือช่องใช้งานเพียงด้านเดียวดังรูป


การแก้ไขทำได้โดยใช้ BreadBoard จำนวน 2 ตัว


กีดตัดกระดาษกาวสองหน้าด้านหลังแยกส่วนแถวไฟเลี้ยงออกดังรูป


นำไปต่อด้านข้างแทน(หรือเอาออกไม่ใช้ก็ได้)


นำเข้ามาประกบเข้าด้วยกัน


วางโมดูล ESP32 ลงจะมีช่องให้ใช้งานทั้งสองด้านดังรูป
« แก้ไขครั้งสุดท้าย: มกราคม 08, 2019, 11:02:54 AM โดย admin »

admin

  • Administrator
  • Hero Member
  • *****
  • กระทู้: 706
    • ดูรายละเอียด
    • อีเมล์

ฟังก์ชั่นที่ใช้งานในการทดลองนี้

รูปแบบ คำอธิบาย
pinMode(pin, mode); pin: หมายเลขขาที่ต้องการเซตโหมด
mode: INPUT, OUTPUT, INPUT_PULLUP
digitalWrite(pin,value); pin: หมายเลข ขาที่ต้องการเขียนลอจิกออกพอร์ต
value: ค่าลอจิกที่ต้องการส่งออก HIGH or LOW
delay(ms); ms: ตัวเลขที่หยุดค้างของเวลาหน่วยมิลลิวินาที (unsigned long)
หมายเหตุ
   1. หมายเลข pin สามารถใช้ตัวเลข GPIO ได้โดยตรง
   2. ขาพอร์ต GPIO34, GPIO35, GPIO36, GPIO39 ใช้งานได้เฉพาะอินพุทเท่านั้น
« แก้ไขครั้งสุดท้าย: มกราคม 07, 2019, 10:40:49 PM โดย admin »

admin

  • Administrator
  • Hero Member
  • *****
  • กระทู้: 706
    • ดูรายละเอียด
    • อีเมล์
การใช้งานพอร์ตในโหมดดิจิทัลเอาต์พุตเบื้องต้น
การใช้งานนี้เป็นการส่งลอจิก 0,1 ออกทางขาพอร์ตการเขียนโค้ดจะเหมือนกับการเขียนใน Arduino นั่นก็หมายถึงต้องใช้ฟังก์ชั่น pinMode ใน setup เพื่อกำหนดให้ขาทำงานในโหมดเอาต์พุต และใช้ digitalWrite เพื่อส่งลอจิกออกทางขาพอร์ตที่ต้องการ

หมายเหตุ
ขาพอร์ต GPIO34, GPIO35, GPIO36, GPIO39 ใช้งานได้เฉพาะอินพุทเท่านั้น

โจทย์การทดลอง
-เชื่อมต่อ LED 4 digit เข้ากับพอร์ตดิจิตอลตามวงจร
-เขียนโปรแกรมไฟวิ่งที่มีรูปแบบและเป็นระเบียบ (ไม่ใช่การติดดับแบบสุ่ม)


วงจรที่ใช้ทดลอง
ผังวงจร

เมื่อต่อวงจรบน BreadBoard


ตัวอย่างโค้ดโปรแกรม [1]
โค๊ด: [Select]
#define LED1 21
#define LED2 19
#define LED3 18
#define LED4 5
void send2port(char data);
void setup()
{
pinMode(LED1,OUTPUT);
pinMode(LED2,OUTPUT);
pinMode(LED3,OUTPUT);
pinMode(LED4,OUTPUT);
}
void loop()
{
send2port(0b0000);
delay(200);
send2port(0b1111);
delay(200);     
}
void send2port(char data)
{
    digitalWrite(LED1,data & 1 ? 1:0);
    digitalWrite(LED2,data & 2 ? 1:0);
    digitalWrite(LED3,data & 4 ? 1:0);
    digitalWrite(LED4,data & 8 ? 1:0);
}
งานที่มอบหมาย
-เชื่อมต่อ LED 8 digit เข้ากับพอร์ตดิจิตอลโดยให้นักศึกษาออกแบบการเชื่อมต่อเพิ่มเติมจากตัวอย่าง
-เขียนโปรแกรมไฟวิ่งที่มีรูปแบบและเป็นระเบียบ (ไม่ใช่การติดดับแบบสุ่ม)


ตัวอย่างโค้ดโปรแกรม [2]
โค๊ด: [Select]
#define LED1 32
#define LED2 33
#define LED3 25
#define LED4 26
#define LED5 27
#define LED6 14
#define LED7 12
#define LED8 13   
void send2port(char data);
char pattern[]={0b00000000,
                0b00000001,
                0b00000011,
                0b00000111,
                0b00001111,
                0b00011110,
                0b00111100,
                0b01111000,
                0b11110000,
                0b11100000,
                0b11000000,               
                0b10000000,               
                0b00000000,
                0b11111111,
                0b00000000,
                0b11111111,
                0b00000000,
                0b11111111,
                0b10000001,
                0b01000010,
                0b00100100,
                0b00011000,               
                0b00111100,
                0b01111110,
                0b11111111,
                0b01111110,               
                0b00111100,
                0b00011000};
void setup()
{
  Serial.begin(115200);
  pinMode(LED1,OUTPUT);
  pinMode(LED2,OUTPUT);
  pinMode(LED3,OUTPUT);
  pinMode(LED4,OUTPUT);
  pinMode(LED5,OUTPUT);
  pinMode(LED6,OUTPUT);
  pinMode(LED7,OUTPUT);
  pinMode(LED8,OUTPUT);
  delay(50); 
}
void loop()
{
  char i;
  for(i=0;i<(sizeof(pattern)/sizeof(char));i++)
  {
  send2port(pattern[i]);
      Serial.println(pattern[i],DEC);
      delay(500);
  }
  for(i=0;i<(sizeof(pattern)/sizeof(char));i++)
  {
      send2port(pattern[i]);
      Serial.println(pattern[i],DEC);
      delay(200);
  }
  for(i=0;i<(sizeof(pattern)/sizeof(char));i++)
  {
      send2port(pattern[i]);
      Serial.println(pattern[i],DEC);
      delay(100);
  }
  for(i=0;i<(sizeof(pattern)/sizeof(char));i++)
  {
      send2port(pattern[i]);
      Serial.println(pattern[i],DEC);
      delay(50);
  }
}
void send2port(char data)
{
    digitalWrite(LED1,data & 1 ? 1:0);
    digitalWrite(LED2,data & 2 ? 1:0);
    digitalWrite(LED3,data & 4 ? 1:0);
    digitalWrite(LED4,data & 8 ? 1:0);
    digitalWrite(LED5,data & 16 ? 1:0);
    digitalWrite(LED6,data & 32 ? 1:0);
    digitalWrite(LED7,data & 64 ? 1:0);
    digitalWrite(LED8,data & 128 ? 1:0);       
}
ผลการรันจากโค้ดตัวอย่าง [1]
<a href="https://www.youtube.com/v/zHeLCRcQios" target="_blank" class="new_win">https://www.youtube.com/v/zHeLCRcQios</a>
« แก้ไขครั้งสุดท้าย: มกราคม 08, 2019, 10:55:06 AM โดย admin »

admin

  • Administrator
  • Hero Member
  • *****
  • กระทู้: 706
    • ดูรายละเอียด
    • อีเมล์

admin

  • Administrator
  • Hero Member
  • *****
  • กระทู้: 706
    • ดูรายละเอียด
    • อีเมล์