มาลอง GPIO แบบ Output ของ ESP-01 กัน

บทความที่แล้วเราได้ความรู้เรื่องการเอา ESP-01 มาประยุกต์ทำ Web Server แบบง่ายๆสามารถเอามารับค่าจากหน้า Web แล้วมาสั่งงานให้ LED บน Board ติดหรือสว่าง บทความนี้ก็จะทำคล้ายๆกันแต่จะทำผ่านขา GPIO ของ ESP8266

มารู้จักขา GPIO กันก่อน

ขา GPIO คือ ขาของ MCU ที่ถูกกำหนดให้ทำงานได้ 2 ลักษณะคือ เป็นขา Output คือเราสามารถสั่งให้ขานี้ส่งข้อมูลออกไป ปกติก็จะเป็น HIGH หรือ LOW หรือลอจิก 1 กับ 0 และสามารถกำหนดให้เป็นขา Input รับสถานะจากภายนอกเช่น รับค่าจาก Switch (ซึ่งจะเล่าในครั้งต่อไป)

ในบทความนี้จะมาลองให้เห็นเรื่องเอาขา GPIO มาต่อแบบ Output ดู

รูป pinout ของ ESP8266
รูป pinout ของ ESP8266

จริงๆบนตัว ESP8266 มันจะมีขาที่ทำงานเป็น GPIO อยู่เยอะมาก (ดูตามรูปแถบสีน้ำเงิน) แต่ Board ESP-01 รุ่นประหยัดของเรา ถึงเค้าจะใช้ ESP8266 มาต่อลง Board แต่เค้าต่อขา GPIO ออกมาให้เราใช้ตั้ง … 2 ขาตามรูปเลยครับ (ขาอื่นๆปล่อยลอยเอาไว้ไม่ได้ใช้งาน)

Pin layout ของ ESP-01
pinout ของ ESP-01

ถ้าถามว่ามีขา GPIO เยอะๆแล้วมีประโยชน์ยังไงก็คิดง่ายๆเราสามารถเอาขา GPIO ดังกล่าวออกไปต่อควบคุม Switch ไฟบ้านได้มากเท่าที่ขา GPIO มีเลย อย่าง ESP-01 ถ้าต่อจริงๆก็สามารถเอาไปควบคุมอุปกรณ์ภายนอกได้ 2 ตัวครับ ก็ไม่เป็นไรมีให้ 2 ขาก็ 2 ขาเดี๋ยวลองมาใช้กันดูครับ

ก่อนจะเล่น GPIO มารู้จักอุปกรณ์อีกตัวก่อน เจ้า “LED” ครับ

มันคือไดโอดชนิดเปร่งแสงได้ (LED ย่อมาจาก light-emitting diode) ตัวมันจะมีขาให้กระแสไหลได้ทางเดียวโดยปกติ (ถ้าไม่มีใครมากวนตีนแกล้งคุณ) ขาของ LED ขายาวจะเป็นขา A (ใส่ไฟบวก) ขาสั้นจะเป็นขา K (ใส่กราวด์) เมื่อเราจ่ายไฟให้มัน ตัวมันจะส่องแสงออกมาตามหน้าตาสีของมัน ปกติแรงดันตกคร่อมจะบนตัวมันจะอยู่ประมาณ 1.5-2V กินกระแสประมาณ 20 mA (อย่ายึดติดกับตัวเลขพวกนี้นะครับจำไว้คร่าวๆเผื่อจะไปคำนวนแรงดันตกคร่อมก็พอ … เพราะมันมีพวก Power LED ที่กินไฟเยอะกว่านี้อีก)

หน้าตาของหลอด LED มีหลายสีหลายขนาดตามแต่จะเลือกใช้
หน้าตาของหลอด LED มีหลายสีหลายขนาดตามแต่จะเลือกใช้
โดยปกติขายาวจะใส่ไฟบวก ขาสั้นใส่ไฟลบหรือ 0 V
โดยปกติขายาวจะใส่ไฟบวก ขาสั้นใส่ไฟลบหรือ 0 V

 

ลองเอา LED มาเสียบเข้ากับมิเตอร์แล้วบิดวัด LED ดูถ้าต่อถูกมันจะสว่างขึ้นมา
ลองเอา LED มาเสียบเข้ากับมิเตอร์แล้วบิดวัด LED ดูถ้าต่อถูกมันจะสว่างขึ้นมา

ผมเอา LED 2 ตัวเอาขาบวกมาต่อกับตัวต้านทาน 500Ω เพื่อแบ่งแรงดันไม่ให้หลอดสว่างมากเกินไปแล้วร่วมขาลบบัดกรีลงติดกับขา GPIO

GPIO 0  –> 500Ω –> ขา A ของ LED สีแดง ขา K ลง กราวด์
GPIO 2  –> 500Ω –> ขา A ของ LED สีเขียว ขา K ลง กราวด์

ถ้าดูบนบอร์ดทดลองก็จะต่อประมาณนี้
ถ้าดูบนบอร์ดทดลองก็จะต่อประมาณนี้
จับบัดกรีเข้าให้แน่นเรียบร้อย
จับบัดกรีเข้าให้แน่นเรียบร้อย
ต่อกับขา GPIO 0 กับ GPIO 2
ต่อกับขา GPIO 0 กับ GPIO 2
เสร็จแล้วหน้าตาเป็นแบบนี้ LED หัวโตๆจะได้เห็นชัดๆ
เสร็จแล้วหน้าตาเป็นแบบนี้ LED หัวโตๆจะได้เห็นชัดๆ
อีกมุม
อีกมุม

จากที่เราต่อวงจรตามนี้ถ้าเราส่ง HIGH ออกมาที่ GPIO ทั้ง 2 ขาได้หลอด LED ก็จะสว่างว่าแล้วมาเขียน Program กัน

เขียน Program รับค่าจากหน้า Web มีปุ่มกด ON / OFF ของ LED ทั้ง 3 ตัว

เรามี LED ใช้แสดงได้ 3 ตัวบน Board ลองเขียนหน้าเวปรับค่าส่งไป เปิดปิด LED กันและมีปุ่มเช็คสถานะว่า ตอนนี้ LED ตัวไหน ON หรือ OFF อยู่บ้าง

ลองไล่การทำงานดูครับ

  • pinMode(led1, OUTPUT); คือกำหนดให้ขา led1 เป็น GPIO แบบ Output
  • digitalWrite(led1, HIGH); ส่ง High ออกขา led1
  • digitalRead(led1) คืออ่านค่าจากขา led1 ว่าเป็น Low หรือ High

ไม่ยากเนอะ 😉 ลองดูผลงานกัน

หน้าจอที่เปิดบน Browser ทำเป็นปุ่มแยกควบคุม LED และมีปุ่มดูสถานะอันล่าง
หน้าจอที่เปิดบน Browser ทำเป็นปุ่มแยกควบคุม LED และมีปุ่มดูสถานะอันล่าง
กดให้ LED บน board สว่าง (สีน้ำเงิน)
กดให้ LED บน board สว่าง (สีน้ำเงิน)
กดให้หลอดสีแดงสว่าง GPIO 0 HIGH
กดให้หลอดสีแดงสว่าง GPIO 0 HIGH
กดให้หลอดสีเขียวสว่าง GPIO 2 HIGH
กดให้หลอดสีเขียวสว่าง GPIO 2 HIGH
กดให้สว่างให้หมดเลย
กดให้สว่างให้หมดเลย
กดเช็คสถานะดูว่าหลอดไหนสว่างอยู่บ้าง
กดเช็คสถานะดูว่าหลอดไหนสว่างอยู่บ้าง

ตอนนี้เราก็รู้จัก GPIO ในสถานะ Output ล่ะโดยปกติเวลาเราจะสั่งให้มันทำงานอะไรเราก็สั่งผ่าน GPIO นี่แหล่ะออกไป งานบางงานก็สั่งเป็น Output บางงานก็สั่งเป็น Input

ดู Code อันสุดท้ายของบทความนี้

ไม่เฉลยนะว่าเป็น program อะไรลองเอาไปไล่การทำงานดูครับ ขำๆ งวดหน้าเจอกันกับการใช้ GPIO แบบ Input บ้าง

ความคิดเห็น