โครงงาน

WiFi (ESP8266) Home Control/Monitoring และถ่ายภาพส่งเข้ามือถือด้วย Telegram Apps พัฒนาด้วยภาษา LabVIEW

อมรเทพ ผันสิน

amornthep@qwavesys.com

 

 

 

 

โครงงานนี้จะเป็นการนำ 2 โปรแกรมยอดนิยมมาใช้งานร่วมกัน คือ LabVIEW และ Aroduino IDE มาสร้างงานทางด้าน IoT เป็นการถ่ายภาพแล้วส่งเข้ามือถือด้วย Telegram Apps เริ่มน่าสนใจแล้วใช่ไหมครับ เพื่อไม่เป็นการเสียเวลาเชิญอ่านต่อได้เลยครับ

 

 

          กระแสความนิยมการสิ่งประดิษฐ์จำพวก Internet of Things (IoT) เริ่มมาแรงอย่างชุดไม่อยู่จริงๆ ครับ โดยส่วนตัวแล้วผมมองว่าเป็นช่วงเวลาที่ประจวบเหมาะที่สุดที่จะเรียนรู้ หรือพัฒนาผลิตภัณฑ์เทคโนโลยีด้าน IoT เป็นตัวเอง เนื่องจากความพร้อมหลายๆ ด้าน อาทิ ด้านข้อมูล, ด้านต้นทุนอุปกรณ์และด้านเทคโนโลยี ถ้าดูเรื่องข้อมูลก่อนทุกวันนี้แทบจะพูดได้ว่าข้อมูลทุกอย่างสามารถเรียนรู้และหาได้จากโลกอินเทอร์เน็ต คุณผู้อ่านควรใช้ข้อมูลดังกล่าวให้เป็นประโยชน์มากที่สุด แต่ให้ระลึกไว้เสมอว่าไม่ว่าวันนี้คุณจะมีไอเดียเจ๋งๆ อย่างไร มันไม่ใช่ประเด็นสำคัญในโลกยุคปัจจุบันแล้วครับ เพราะถ้าคุณคิดได้คนอื่นก็อาจจะคิดได้เช่นกัน ลอง Google ดูสิครับ แต่จะมีสักกี่คนที่หยิบจับซอฟต์แวร์ และฮาร์ดแวร์มาทดลองสร้างสิ่งประดิษฐ์หรือนวัตกรรมเพื่อใช้งานจริงๆ ดังนั้นการที่มีข้อมูลมากเกินไปก็เป็นผลเสียเช่นเดียวกัน ซึ่งอาจจะทำให้คุณท้อถอยกับความคิดหรือไอเดียเจ๋งของคุณเองก็เป็นได้ ผู้เขียนแนะนำว่าถ้าคุณอยากประดิษฐ์อะไรก็อย่าเพิ่งท้อลุยไปให้สุดครับ

 

          ด้านความพร้อมด้านต้นทุนอุปกรณ์ ในที่นี้หมายถึงต้นทุนด้านฮาร์ดแวร์ ในบทความนี้เราจะได้เรียนรู้การสร้างแอพพลิชัน IoT ด้วยฮาร์ดแวร์ต้นทุนต่ำ อาทิ ชิฟ WiFi ESP8266 ซึ่งมีราคาไม่กี่ร้อยบาท และโมดูลกล้อง ArduCAM ราคาประมาณพันกว่าบาท เมื่อนำมารวมกันประกอบกันและเขียนโปรแกรมให้ทำงานตามต้องการ ก็สามารถสร้างแอพพลิเคชัน IoT เจ๋งๆ ได้แล้วครับ ในบทความนี้เราจะได้เรียนรู้ถึง 2 โครงงาน คือ “อ่านค่าเซนเซอร์อุณหภูมิ และคุมรีเลย์ ผ่านอินเทอร์เน็ตโดยใช้ Telegram App บนมือถือ” และ “Home Monitoring ส่งภาพเข้า Telegram Apps บนมือถือ” จะเห็นได้ว่าเป็นแอพพลิเคชัน IoT พื้นฐานที่หลายๆ คนสนใจ เพราะสามารถนำเอาเทคโนโลยีด้าน Internet of Things มาใช้งานอย่างใกล้ตัว อาทิ การเปิด-ปิดอุปกรณ์ไฟฟ้าทางไกลผ่านระบบอินเทอร์เน็ต ควบคุมผ่านมือถือหรือแม้แต่ อุปกรณ์ Home Monitoring ที่สามารถส่งภาพเข้ามือถือตามเงื่อนไขที่กำหนด อาทิ เมื่อตรวจจับสิ่งเคลื่อนไหวได้ก็ให้ส่งภาพหรือแม้แต่สั่งให้ถ่ายภาพจากมือถือก็สามารถทำได้ครับ

 

          สุดท้ายด้านความพร้อมด้านเทคโนโลยี ลองดูโครงสร้างของระบบ Internet of Things (IoT) ตามรูปด้านล่างจะเห็นได้ว่า ณ ปัจจุบัน เราสามารถเข้าถึงเทคโนโลยีทุกส่วนของระบบโด้โดยง่าย และต้นทุนต่ำกว่าในอดีตเป็นอย่างมาก ในส่วนแรกคือ Things เป็นอุปกรณ์ที่อยู่ในระบบ อาจจะเป็นพวกเซนเซอร์ หรือสมองกลขนาดเล็กประมวลผลและส่งข้อมูลเข้าระบบนิยมใช้โปรโตคอล WiFi หรือ Bluetooth ในส่วนถัดมาที่น่าสนใจที่สุดก็คือ Mobile Devices ซึ่งในบทความนี้เราจะได้ใช้ Telegram Apps ซึ่งเป็นแอพพลิเคชันแชต (Chat) บนมือถือ ที่รองรับทุกแพล็ตฟอร์ม และใช้งานได้ฟรี ถ้าใครคุ้นเคยกับการคุยผ่าน LINE หรือ WhatsApp สำหรับ Telegram ก็ทำงานแบบเดียวกันแต่เราสามารถนำเอา Telegram มาประยุกต์ใช้กับอุปกรณ์ในระบบ Internet of Things ได้อย่างมีประสิทธิภาพ โดยในบทความนี้เราจะใช้ Telegram เป็นตัวควบคุมอุปกรณ์ IoT ผ่านอินเทอร์เน็ต สามารถรับภาพถ่ายจากกล้องเข้ามายังมือถือได้อีกด้วย ไปติดตามรายละเอียดของบทความนี้กันเลยครับ

 

 

 

รูปที่ 1 โครงสร้างพื้นฐานของระบบ Internet of Things

 

 

 

รูปที่ 2 บอร์ด ESP8266 Wemos D1 mini รุ่น LabVIEW Version

 

 

การติดตั้ง ESP8266 Board Package

 

          ก่อนการใช้งานเราต้องติดตั้ง Board Package เนื่องจากว่าฮาร์ดแวร์ ESP8266 นั้นมิได้เป็นฮาร์ดแวร์มาตรฐานที่รองรับโดย Arduino Organization ดังนั้นฮาร์ดแวร์อื่นๆ ที่ต้องการใช้งานร่วมกับ Arduino IDE จะต้องมี Board Package เป็นของตนเอง ซึ่งจะประกอบไปด้วยฮาร์ดแวร์ไลบารี่ต่างๆ ตัวคอมไพเลอร์ และโปรแกรมเมอร์ที่จะต้องใช้งานร่วมกับฮาร์ดแวร์นั้นๆ โดย ESP8266 Community (esp8266.com) คือศูนย์กลางที่พัฒนา Board Package และไลบารี่ต่างๆ ที่ใช้งานร่วมกับ ESP8266 ฮาร์ดแวร์ โดยเป็น Community ในรูปแบบ Open-Source ที่เปิดให้ทุกคนมีส่วนร่วมในการพัฒนาและปรับปรุงซอฟต์แวร์ได้อย่างเปิดเผย รวมถึงการเป็นผู้รับรองว่า บอร์ด ESP8266 Development Kit รุ่นใดที่ได้รับการรองรับและได้เพิ่มเติมเข้ามาใน Official Board Package ของ ESP8266

 

          บอร์ด ESP8266 LabVIEW Version นั้นจะแตกต่างจากบอร์ด ESP8266 ทั่วไป เนื่องจากจะต้องมี BootCode รุ่นเฉพาะที่จะต้องติดตั้งมาพร้อมกับฮาร์ดแวร์ เพื่อใช้งานร่วมกับ LabVIEW Library เท่านั้น ดังนั้น Board Package นั้นแตกต่างทั้งในเรื่องของไลบารี่การคอนฟิกค่าต่างๆ และเครื่องมือการโปรแกรมเมอร์ ดังนั้นจึงต้องทำขึ้นมาพิเศษเพื่อรองรับ ESP8266 Development Kit รุ่นต่างๆ ที่รองรับการเขียนด้วยภาษา LabVIEW ที่จะออกมาในอนาคต

 

          วิธีการติดตั้ง Board Package สามารถทำได้เปิด Arduino IDE เวอร์ชัน 1.6.5 (เนื่องจากว่าความเสถียรของโปรแกรมผู้เขียนจึงเลือกใช้เวอร์ชัน 1.6.5) แต่ในกรณีที่ผู้อ่านต้องการใช้เวอร์ชันที่สูงกว่านี้ก็สามารถทำได้ แต่ผู้เขียนจะไม่รับผิดชอบกับผลลัพธิ์ที่อาจจะไม่ตรงกับบทความนี้ เปิดโปรแกรม Arduino IDE 1.6.5 เข้าไปที่ “File > Preferences” เพิ่ม URL ดังนี้ “http://iosys.link/lvembedded/package_qwavesys_index.json” แสดงดังรูปที่ 3

 

 

 

รูปที่ 3 หน้าต่างหลักของ Arduino IDE 1.6.5

 

 

          ในช่อง “Additional Boards Manager URL” ให้กรอกลิงค์ที่อยู่ของ Board Package ในกรณีนี้ให้กรอก “http://iosys.link/lvembedded/package_qwavesys_index.json” ตามรูป ในกรณีที่เครื่องนี้ต้องการใช้ Board Package หลายตัว สามารถเพิ่มได้โดยใช้เครื่องหมาย “,” คั่นระหว่างลิงค์ของ Board Package ที่ต้องการจะติดตั้งดังรูปที่ 4

 

 

 

รูปที่ 4 หน้าต่าง Preferences ทำการเพิ่ม URL ของ Board Package

 

 

          เมื่อเพิ่มลิงค์ของ Board Package เสร็จเรียบร้อย ให้กลับมาที่หน้าต่างหลักของ Arduino IDE จากนั้นไปที่ Tools>Board>Boards Manager เพื่อทำการติดตั้ง “Embedded LabVIEW Arduino” แสดงดังรูปที่ 5

 

 

 

รูปที่ 5 หน้าต่างหลักของ Arduino IDE เลือก “Board Manager”

 

 

          เลือก “Embedded LabVIEW Arduino” เวอร์ชันล่าสุด จากนั้นคลิก Install โดยไฟล์ทั้งหมดจะมีขนาดประมาณ 150 MB ในกรณีที่อินเตอร์เน็ตช้าจะใช้เวลาดาวน์โหลดนานพอสมควร ในกรณีที่ไม่สามารถติดตั้งได้ ให้ตรวจสอบ Web Proxy ในองค์กร หรือหน่วยงานของท่านเองว่าได้มีการตั้งค่าบล็อกไม่ให้โปรแกรมวิ่งออกไปดาวน์โหลดไฟล์จากภายนอกหรือไม่ ผู้เขียนพบปัญหานี้บ่อยพอสมควร โดยเฉพาะอย่างยิ่งเครื่องคอมพิวเตอร์ที่อยู่ในสถานศึกษาต่างๆ วิธีการแก้ไขเบื้องต้นให้แจ้งฝ่าน IT ให้ตรวจสอบแก้ไข หรืออีกทางหนึ่งคือต้องใช้อินเทอร์เน็ตที่ไม่ได้วิ่งผ่าน Proxy อาทิ ADSL อินเทอร์เน็ตตามบ้านทั่วไป

 

          ในกรณีที่ท่านไม่สามารถติดตั้งแบบออนไลน์ได้ สามารถก็อปปี้ไฟล์ Board Package จากอีกเครื่องหนึ่งที่ติดตั้งไปแล้ว ไปยังอีกเครื่องได้ โดยจะต้องก็อปปี้ไปวางอยู่ที่เดียวกัน (*หมายเหตุ ในกรณีที่ใช้ Arduino IDE สูงกว่า 1.6.5 ลิงค์ที่เก็บของ Board Package จะเปลี่ยนไปเป็น “..\AppData\Local\Arduino15\..”) ดังแสดงในรูปที่ 6

 

 

รูปที่ 6 Path ของไฟล์ QwaveSys Board Package

 

 

 

รูปที่ 7 หน้าต่าง Board Manager จะแสดงรายการ Package ที่ติดตั้งไปแล้วในเครื่อง และที่ยังไม่ได้ติดตั้ง

 

 

          เมื่อติดตั้งเสร็จแล้วจะมีบอร์ด ESP8266 “LabVIEW Version” แสดงดังรูปที่ 9 และเมื่อเปิดโปรแกรม LabVIEW 2014 ขึ้นมา เข้าไปที่ “Tool>Arduino Compatible Compiler for LabVIEW” จะแสดงบอร์ด ESP8266 รุ่น LabVIEW Version ซึ่งจะเหมือนกับ Arduino IDE ทุกประการ แสดงว่าติดตั้งเสร็จสมบูรณ์พร้อมใช้งาน

 

 

 

รูปที่ 8 บอร์ดต่างๆ ที่รองรับการเขียนด้วย Arduino IDE

 

 

 

รูปที่ 9 หน้าต่างบอร์ดที่รองรับของ Arduino Compatible Compiler for LabVIEW

 

 

การติดตั้งและใช้งานไลบารี่ “QwavSys ESP8266 LabVIEW Library” เบื้องต้น

 

          ESP8266 LabVIEW Library คือ ไลบารี่พิเศษที่พัฒนาโดย Q-Wave Systems Co.,Ltd ให้สามารถโปรแกรมโค้ด LabVIEW ลงในฮาร์ดแวร์ ESP8266 (WiFi SoC) ใช้งานแบบ Embedded Appliation ได้ทันที โดยผู้อ่านสามารถดาวน์โหลดไฟล์ติดตั้งได้จาก http://ftp.iosys.link/repository/ เลือกดาวน์โหลดไฟล์ล่างสุดที่มีนามสกุล “.vip” (*เป็นไฟล์ที่มีนามสกุลของ VIPM ซอฟต์แวร์ เป็นตัวจัดการติดตั้ง Toolkit ต่างๆ ใน LabVIEW) ตัวอย่างเช่น “q_wave_systems_lib_esp8266_home_education-1.0.0.7” โดย ณ วันที่เขียนบทความ เวอร์ชันล่าสุดคือ 1.0.0.7 (*กรุณาตรวจสอบเวอร์ชันใหม่ๆ อยู่เสมอ) เมื่อดับเบิ้ลคลิกเพื่อติดตั้งจะแสดงหน้าต่างดังนี้ และเมื่อติดตั้งเสร็จสมบูรณ์สามารถเรียกใช้งานไลบารี่ต่างๆ ได้จาก LabVIEW Function Pallet แสดงดังรูปที่ 11

 

 

 

รูปที่ 10 หน้าต่างติดตั้ง “QwavSys ESP8266 LabVIEW Library”

 

 

 

รูปที่ 11 แสดงฟังก์ชันต่างๆ ของ “QwavSys ESP8266 LabVIEW Library”

 

 

          โดย ณ ปัจจุบันไลบารี่เวอร์ชัน 1.0.0.7 จะฟังก์ชันที่เกี่ยวกับ WiFi ESP8266 และ Hardware Interface ที่พร้อมใช้งานดังรายการต่อไปนี้ ซึ่งในอนาคตจะมีการพัฒนาฟังก์ชันต่างๆ ให้เพิ่มขึ้นเรื่อยๆ โปรดติดตามและอัพเดจเวอร์ชันใหม่ๆ อยู่เสมอ

 

  • HTTP,HTTP(S) POST,GET Function
  • HTTP,HTTP(S) Upload (สามารถอัพโหลดไฟล์ข้อมูล และไฟล์ภาพ)
  • NETPIE MicroGear (MQTT)
  • Timer,Tiker,EEPROM,Debug,DeepSleep,Watchdogs,PWM
  • Soft Serial Library
  • Smart Config
  • DHTxx DHTxx Temperature&Humidity Sensor
  • DS18x20 Digital Temperature Sensor
  • MAX31855 – Thermocouple K-Type Sensor
  • OLED Graphic Display (SDD1306 Driver) 128x64
  • RTC DS1307,DS3231,MCP79410
  • Servo Motor Control
  • Serial EEPROM 24AA025E49 (ARD-LTC2499 Shield)
  • LTC2499 24 bit SPI-ADC
  • MCP3208 12bit SPI -ADC
  • ArduCAM Mini 2MP (OV2640)
  • RFID MFRC522
  • 7 Segment Display

 

 

ทำความรู้จักโมดูลกล้อง ArduCAM Mini

 

          ณ ปัจจุบัน ตามความคิดเห็นของผู้เขียน ArduCAM Mini (www.arducam.com) เป็นโมดูลกล้องขนาดเล็กและใช้งานง่ายที่สุด โดยตัวกล้องมีความละเอียดสูง 2 ล้านพิกเซล ตามสเปกของกล้องระบุว่าได้ปรับปรุงประสิทธิภาพและการเชื่อมต่อให้ใช้งานได้ง่ายขั้น ด้วย CMOS เซนเซอร์ รุ่น OV2640 จึงทำให้มีขนาดเล็กขนาดประมาณเหรียญสิบบาทไทย การเชื่อมต่อทำได้ง่ายโดยใช้พอร์ต SPI และ I2C โดยการส่งคำสั่งเพื่อให้กล้องทำงานจะส่งผ่าน I2C ซึ่งไม่ต้องการ Speed ที่สูงมาก แต่การส่งข้อมูลภาพจะส่งผ่าน SPI ด้วย Speed สูงสุด 8MHz ขึ้นอยู่กับปริมาณข้อมูลชนิดของภาพและขนาดของภาพ

 

          ข้อดีอีกอย่างของโมดูลกล้อง ArduCAM ก็คือ สามารถถอดเปลี่ยนเลนส์ได้ตามความต้องการ โดยสามารถหาซื้อเลนส์ต่างๆ ได้จากเว็บไซต์ผู้ผลิต โดยเลนส์จะต้องมีสเปกดังนี้ M12xP0.5 หรือ CS mount ในบทความนี้เราจะใช้โมดูลกล้อง ArduCAM เชื่อมต่อกับ ESP8266 เขียนโปรแกรมด้วยภาษา LabVIEW จากนั้นสร้าง IoT แอพพลิชันส่งรูปภาพและข้อความแจ้งเตือนเข้ามือถือโดยใช้แอพพลิเคชัน Telegram

 

 

 

รูปที่ 12 โมดูลกล้อง ArduCAM mini และ Specification

 

 

 

รูปที่ 13 การจัดขา (Pin-Out) การเชื่อมต่อ ArduCAM เข้ากับ ESP8266

 

  

 

รูปที่ 14 OV2640_Init.vi

 

  

 

รูปที่ 15 OV2640_SetJPEG.vi

 

 

ตัวอย่างคำธิบายไลบารี่ ของกล้อง ArduCAM mini 2MP

 

          “OV2640_Init.vi” เป็นการ Initialize ของโมดูลกล้องทำครั้งแรกของโปรแกรมเพียงครั้งเดียว โดยต้องกำหนดขา “CS” ที่เชื่อมต่อกับ ESP8266 ตัวอย่างเช่น กำหนดเป็น GPIO16 เป็นต้น

 

 

 

รูปที่ 16 ตัวอย่างไลบารี่ LabVIEW ที่ใช้กับโมดูลกล้อง ArduCAM Mini 2MP

 

 

          “OV2640_SetJPEG.vi” เป็นการกำหนดขนาดภาพที่ต้องการในรูปแบบ JPEG (*ปกติแล้วไลบารี่ของ ArduiCAM สามารถกำหนด File Format ได้หลายรูปแบบ แต่ในกรณีนี้ทางผู้เขียนเลือกใช้เฉพาะ JPEG เนื่องจากใช้งานสะดวกและภาพมีขนาดเล็ก) สังเกตได้ว่าขนาดภาพเล็กสุดคือ 160x120 pixel และขนาดใหญ่สุดระดับ HD คือ 1600x1200 Pixel สิ่งที่ต้องคำนึงถึงก็คือขนาดภาพจะมีความสัมพันธ์กับความเร็วในการอัพโหลดรูปขึ้น Server เสมอ เนื่องจากว่าประสิทธิภาพด้าน Upload ของ ESP8266 นั้นต่ำว่าด้าน Download เป็นอย่างมาก ดังนั้นควรเลือกขนาดภาพให้เหมาะสมกับแอพพลิเคชัน

 

 

การเขียนโปรแกรม WiFi แอพพลิเคชันเบื้องต้น

 

          ผู้เขียนทราบดีว่าสำหรับมือใหม่จะต้องใช้เวลาศึกษาในช่วงแรก ดังนั้น “QwavSys ESP8266 LabVIEW Library” จึงสร้าง Template มาให้ 2 แบบพร้อมใช้งานได้ทันที เพื่อลดเวลาในการพัฒนาเหมาะกับผู้เริ่มต้นที่ต้องการสร้าง WiFi แอพพลิเคชันอย่างรวดเร็ว สามารถปรับแต่ค่าพารามิเตอร์ต่างๆ ได้ด้วยตนเอง เรามาทำความรู้จัก WiFi Application Template กันครับ

 

 

 

รูปที่ 17 การใช้งาน Template WiFi Application (แบบ SSID และ Smart Config)

 

 

          “Template WiFi SSID” คือโปรแกรมย่อยที่สร้างมาให้ในเบื้องต้นแล้ว สามารถเขียนโค้ดเพิ่มเติมเข้าไปได้ทันที โดยในส่วนของ WiFi จะสามารถกำหนดค่าคงที่เข้าไปได้เลย ในกรณีนี้มี 2 พารามิเตอร์ที่สำคัญก็คือ “SSID” คือชื่อของ WiFi Network ที่ต้องการจะเชื่อมต่อ อาทิ “MyWiFi” และ “PASSPHARSE” คือ Password ของ WiFi ที่ต้องการเชื่อมต่อ อาทิ “123456” ข้อดีของ Template นี้คือ ตั้งค่าง่ายและโดยกำหนดค่าคงที่ของ SSID และ PASS ไว้ในโค้ดเลย แต่ข้อเสียคือ ถ้าต้องการเปลี่ยนไปเชื่อมต่อ WiFi ในระบบ Network อื่น จะต้องทำการ Program ลงอุปกรณ์ใหม่ทุกครั้ง

 

 

 

รูปที่ 18 Template แบบ Fixed SSID และ Password

 

 

          “Template WiFi Smart Config” คือ โปรแกรมย่อยที่สร้างมาให้ใช้งานร่วมกับ Smart Config Apps เพื่อตั้งค่า WiFi ให้กับอุปกรณ์โดยอัตโนมัติ โดยผู้ใช้งานสามารถกำหนดให้ Reset Password และตั้งค่า WiFi ใหม่ได้ด้วยการกด Switch ที่ต่ออยู่กับ GPIO นั้นๆ โดยปกตินิยมใช้ GPIO0 เป็น Pin ที่กำหนดการตั้งค่า Smart Config แสดงดังรูปที่ 19

 

 

 

รูปที่ 19 Template แบบ ใช้ Smart Config โดยการตั้งค่าโดยใช้ Apps

 

 

 

รูปที่ 20 แอพพลิเคชัน ESP-TOUCH

 

 

Smart Config แอพพลิเคชัน “ESP-TOUCH”

 

          Smart Config คือ Open-Source แอพพลิเคชันที่พัฒนาโดยบริษัท Espressif ผู้ผลิตชิฟ ESP8266 โดยกำหนดเป็น Protocol เฉพาะที่ใช้สำหรับกำหนดค่า WiFi ให้กับอุปกรณ์ ESP8266 รุ่นต่างๆ โดยผู้อ่านสามารถสร้าง Apps ของคุณได้เองโดยการดาวน์โหลดซอร์สโค้ดได้ตามลิงค์นี้ http://espressif.com/en/products/software/esp-touch/overview มีทั้งระบบ Android และ iOS โดยผู้ใช้สามารถปรับแต่งโลโก้และหน้าต่าง UI เป็นของตัวเองได้

 

          ตัวอย่างในบทความนี้จะนำ “ESP Smart Config” ที่เป็น Andoid Apps โดยปรับแต่งจากโค้ดต้นฉบับ จากนั้น Submit เข้าสู่ Play Store ของ Android สำหรับผู้ที่มีพื้นฐานเรื่องการพัฒนา Apps บนมือถืออยู่แล้ว สามารถพัฒนาต่อยอดได้โดยทันที ทั้งนี้บริษัท Espressif ยังแจกจ่ายซอร์สโค้ดของ Apss อื่นๆ ซึ่งสามารถดาวน์โหลดได้จากที่นี่ http://espressif.com/en/products/software

 

 

 

รูปที่ 21 Android Apps “ESP Smart Config”

 

 

          การใช้งานในเบื้องต้น เพียงแค่เชื่อมต่อมือถือเข้ากับ WiFi ในระบบ เปิดแอพ “ESP Smart Config” ป้อนค่า Password ของ WiFi จากนั้นกด “Confirm” จากนั้น Apps จะแสกนหา อุปกรณ์ ESP8266 ในบริเวณโดยรอบโดยอัตโนมัติ โดยเมื่อพบว่ามีอุปกรณ์ที่อยู่ในโหมด Smart Config เช่นเดียวกัน ก็จะส่งค่า SSID และ Password จาก Apps ไปให้กับอุปกรณ์โดยอัตโนมัติ ซึ่งจะจัดเก็บในหน่วยความจำแบบ Flash Memory ในตัวชิฟ ESP8266

 

          ดังนั้น เมื่อเปิด-ปิดอุปกรณ์ทุกครั้ง ตัว ESP8266 จะเชื่อมต่อเข้าระบบ WiFi ที่กำหนดไว้แบบอัตโนมัติ กรณีที่ต้องการ Reset Password หรือต้องเชื่อมต่อเข้าระบบ WiFi อื่นๆ ทำได้โดยที่อุปกรณ์ต้องกด Switch ที่ต่ออยู่กับ GPIO0 ของ ESP8266 (*อาจจะเป็น GPIO อื่นๆ ขึ้นอยู่กับการตั้งค่าในโปรแกรม) เพื่อให้เข้าโหมด Smart Config จากนั้นเปิด Apps ทำซ้ำตามขั้นตอนที่กล่าวมาข้างต้น สำหรับ “Template WiFi” ยังมีคุณสมบัติที่ให้นักพัฒนาสามารถเขียนโปรแกรม ตามสถานะของ WiFi ได้อีกด้วย โดยแบ่งเป็น 7 สถานะดังต่อไปนี้

 

  • WL_IDLE_STATUS (0) คือ อุปกรณ์อยู่ในสถานะ IDLE ไม่ทำงานใดๆ
  • WL_NO_SSID_AVAI (1) คือ ไม่สามารถเชื่อมต่อ WiFi ได้เนื่องจาก Scan ค้นหา SSID ที่กำหนดไว้ไม่พบ
  • WL_SCAN_COMPLETED (2) คือ ค้นหา SSID ต่างๆ ในระบบเรียบร้อย เตรียมพร้อมสำหรับการเชื่อมต่อ
  • WL_CONNECTED (3) คือ อุปกรณ์เชื่อมต่อเข้ากับ WiFi เรียบร้อยแล้ว พร้อมใช้งาน
  • WL_CONNECT_FAILED (4) คือ สถานะที่ไม่สามารถเชื่อมต่อกับ WiFi SSID นั้นๆ ได้
  • WL_CONNECTION_LOST (5) คือ เป็นสถานะที่ขาดการติดต่อกับ WiFi ในระบบชั่วคราว
  • WL_DISCONNECTED (6) คือ สถานะที่เกิดปัญหาบางอย่างที่ไม่สามารถเชื่อมต่อกับ WiFi

 

 

 

รูปที่ 22 สถานะต่างๆ ของ WiFi Status

 

 

          ข้อดีของการทราบสถานะของ WiFi ก็คือเราสามารถออกแบบโปรแกรมให้ทำงานตาม Event ที่เกิดขึ้นได้ ส่วนใหญ่เราจะกำหนด โปรแกรมหลักไว้ใน “WL-CONNECTED 3” เท่านั้น เพราะอุปกรณ์เชื่อมต่อเข้าระบบ WiFi เรียบร้อยแล้ว ก็ให้ไปทำงานต่างๆ เช่น อ่านค่าจากเซนเซอร์ ส่งค่าขึ้นเก็บบนระบบ Cloud Server โดยถ้าไม่ได้กำหนดการทำงานเช่นนี้ ตัวอุปกรณ์อ่านจะทำงานตลอดเวลาโดยที่ไม่จำเป็น อีกนัยหนึ่งเราสามารถเขียนโปรแกรมให้อุปกรณ์ไปทำงานบางอย่างในกรณีที่ไม่สามารถเชื่อมต่อเข้าระบบ WiFi ได้ โดยใส่โค้ดไว้ใน “WL_DISCONNECTED 6” เพื่อแจ้งเตือน User ทราบหรือไปทำงานอื่นๆ เป็นต้น

 

 

การใช้งาน Telegram Messaging App

 

          Telegram คือ แอพพลิเคชันแชต (Chat) ที่มีความปลอดภัยสูงเพื่อการสื่อสารพูดคุยที่รองรับทุกแพล็ตฟอร์มใช้งานได้ฟรี ถ้าใครคุ้นเคยกับการคุยผ่าน LINE หรือ WhatsApp ก็น่าจะเข้าใจได้ดี เพราะ Telegram ใช้งานเหมือนกันทุกประการ แต่ Telegram มีจุดเด่นด้านความเสถียร (Speed) และด้านความปลอดภัย (Security) กำลังเป็นที่นิยมสูงมาก โดยเพิ่งฉลอง 100 ล้าน Active User เมื่อเดือนกุมภาพันธ์ 2016 ที่ผ่านมา ซึ่งได้รับความนิยมเพิ่มขึ้นเรื่อยๆ และมีแนวโน้มผู้ใช้งานมากขึ้นอย่างต่อเนื่อง โดยมีสโลแกนว่า “a new era of messaging” เลยทีเดียว

 

 

 

รูปที่ 23 รองรับทุกแพล็ตฟอร์ต ทั้ง Mobile, Web App และ Native App

 

 

          ในฐานะนักพัฒนาโปรแกรม ผู้เขียนเลือกใช้ Telegram เพราะว่ารองรับการสร้าง BOT Account หรือบัญชีผู้ใช้เสมือนได้อย่างไม่จำกัด และมี API ต่างๆ มีคู่มือการใช้งาน ให้กับนักพัฒนาใช้งานได้โดยตรง จุดนี้คือข้อแตกต่างหลักๆ เมื่อเทียบกับแอพแชตอื่นๆ เพราะทาง Telegram เปิดให้นักพัฒนาใช้งาน API สร้าง BOT เพื่อสร้างแอพพลิเคชันด้าน Internet of Things ได้โดยง่าย โดยผู้อ่านสามารถศึกษาเพิ่มเติมเกี่ยวกับ Bots API ได้จากเว็บไซต์นี้ https://core.telegram.org/bots/api

 

 

 

รูปที่ 24 เพิ่ม “BotFather” เป็นเพื่อน

 

 

 

รูปที่ 25 สร้าง Account BOT

 

 

การสร้าง BOT บัญชีผู้ใช้งานเสมือน ใน Telegram

 

          เมื่อติดตั้งโปรแกรม Telegram เรียบร้อยแล้ว ให้ค้นหาเพื่อนที่ชื่อว่า “BotFather” แสดงดังรูปที่ 24 ซึ่งก็คือ BOT ตัวหนึ่งเช่นเดียวกัน ทำหน้าที่เป็นผู้ช่วยให้กับเราเพื่อสร้าง BOT ของเราเอง โดยจะช่วยกำหนดค่าต่างๆ ที่จำเป็น แสดงดังขั้นตอนต่อไปนี้

 

          เมื่อเพิ่ม “BotFather” เป็นเพื่อนแล้ว จากนั้นให้กดปุ่ม “Start” เพื่อเริ่มต้นใช้งาน ในขั้นตอนนี้จะเป็นเหมือนการคุยโต้ตอบกับ BotFather เพื่อช่วยเหลือเราในการสร้างบัญชี BOT ของเรา ให้กดที่ “/newbot” แสดงดังรูปที่ 25 เราจะต้องกำหนดชื่อ Username 2 ครั้ง โดยชื่อแรกจะเป็น User Name และชื่อที่สองจะเป็น BotName (โดยนิยมใช้คำว่า bot ต่อท้าย เพราะเราจะใช้ชื่อนนี้ในการแสดงตัวตนของ Bot) ตัวอย่างการกำหนดชื่อดังนี้

 

  • User Name = “Qwave”
  • Bot Name= “QwaveBot”

 

          เมื่อสร้างชื่อ BOT เรียบร้อย เราจะได้ HTTP API Key เฉพาะซึ่งเป็นหมายเลขบัญชีเฉพาะของ BOT เราเอง ซึ่งจะต้องใช้กำหนดในการเขียนโปรแกรมและพูดคุยกับ BOT ต่อไป เราควรเก็บหมายเลข API นี้ไว้ให้ดีห้ามสูญหาย

 

 

 

รูปที่ 26 API Key ของ BOT ที่สร้างขึ้น

 

 

          เมื่อสร้างบัญชี BOT เรียบร้อยแล้ว ต่อไปเราจะมาทดสอบการใช้งานในเบื้องต้นผ่าน HTTP API ดังนี้ โดยพิมพ์ตามลิงค์นี้ https://api.telegram.org/bot201557947:AAE4hwwDs9yXU1RvS_5OqbUj8Vz-mLWl7d0/getupdates ในหน้าเว็บบราว์เซอร์ จะต้องกำหนด API Key ของ BOT ให้ถูกต้อง ถ้าเสร็จสมบูรณ์ จะแสดงผลดังรูปที่ 27

 

 

 

รูปที่ 27 การทดสอบ API ในหน้า Web Browser

 

 

          จากนั้นให้สร้าง Group และเพิ่ม BOT เข้ามาเป็นเพื่อนให้อยู่ในกรุ๊ปที่สร้างขึ้น ตามรูปที่ 28 ซึ่งผู้เขียนทดลองสร้างกรุ๊ปที่ชื่อว่า “MyHomeIoT” โดยมีสมาชิกในกรุ๊ปเป็นบัญชีของผู้เขียนเองและ BOT ที่สร้างขึ้นมา หลังจากนั้นทดลองส่งข้อความในกรุ๊ป ผู้เขียนทดลองส่งข้อความ “/999” เข้าไปในกรุ๊ป (*การตั้งค่าเริ่มต้นของ BOT จะมองเห็นข้อความที่ตามหลัง “/” เท่านั้น แต่เราก็สามารถตั้งค่าภายหลังได้) จุดประสงค์เพื่อให้ BOT รับข้อความ “999” เพื่อนำไปใช้งานเป็น Command ต่อไป

 

 

 

รูปที่ 28 ทดลองส่งข้อความให้ BOT ใน Groups

 

 

 

รูปที่ 29 การหา Group ID ของ BOT

 

 

          จากนั้นทดสอบการใช้งาน HTTP API อีกครั้งหนึ่ง โดยพิมพ์ลิงค์เดิมในหน้าเว็บบราว์เซอร์ จากนั้นเราจะเห็นว่ามีข้อความ “/999” แสดงผลขึ้นมาในหน้าเว็บแสดงดังรูปที่ 29 ข้อมูลที่เราต้องการก็คือ Group ID (ดังในกรอบสีแดง) จะเห็นได้ว่า Group ID = “-138440579” (ID ของกรุ๊ปจะนำหน้าด้วยเครื่องหมาย “-” เสมอ) ณ ตอนนี้เราจะได้ข้อมูลของ BOT ที่สำคัญเพื่อนำไปเขียนโปรแกรมพูดคุยกับ BOT ต่อไป

 

  • User Name = “Qwave”
  • Bot Name= “QwaveBot”
  • Bot API Key = “201557947:AAE4hwwDs9yXU1RvS_5OqbUj8Vz-mLWl7d0”
  • Group API Key = “-138440579”

 

 

สรุปคำสั่ง Telegram HTTP API ที่ใช้งานบ่อยๆ

  

          Getting updates คือ การรับตรวจสอบสถานะ ณ ปัจจุบันของ BOT โดยเราจะใช้คำสั่งนี้เพื่อรับค่าข้อความจาก BOT

  • https://api.telegram.org/bot[API Key]/getupdates

 

          Send Message คือ การส่งข้อความไปให้ BOT ตามตัวอย่างคือส่งข้อความ “Hello” ไปให้ BOT โดยตรง

  • https://api.telegram.org/bot[API Key]/sendMessage?&text=Hello

 

          Send Message เข้า Group คือ การส่งข้อความเข้าไปในกรุ๊ป เช่นส่ง “Hello” เข้าไปตาม Group ID

  • https://api.telegram.org/bot[API Key]/sendMessage?chat_id=[Group ID]&text=Hello

 

          ขั้นตอนต่อไปให้ลองส่งข้องความเข้า Group กัน โดยพิมพ์ลิงค์ด้านล่างในหน่าเว็บบราว์เซอร์ จากนั้นเราจะได้รับข้อความแจ้งเตือนเข้ามาใน Telegram App ถ้าไม่ได้รับข้อความให้ตรวจสอบ API Key และ Group ID ให้ถูกต้อง ตัวอย่างเช่น https://api.telegram.org/bot201557947:AAE4hwwDs9yXU1RvS_5OqbUj8Vz-mLWl7d0/sendMessage?chat_id=-129603056&text=Hello ดังแสดงในรูปที่ 3

 

 

 

รูปที่ 30 ทดลองส่งข้อความ “Hello” เข้า Group

 

 

          การส่งข้อความภาษาไทยใน Telegram สามารถทำได้เช่นเดียวกันโดยเราต้องแปลงข้อความภาษาไทยเป็น URL Encode ครับ โดยผู้เขียนใช้เว็บ http://www.url-encode-decode.com/ จากนั้นทดลองพิมพ์คำว่า “สวัสดี” เราจะได้ URL Encode ดังนี้ “%E0%B8%AA%E0%B8%A7%E0%B8%B1%E0%B8%AA%E0%B8%94%E0%B8%B5”

 

 

 

รูปที่ 31 การแปลงข้อความภาษาไทยให้เป็น URL Encode

 

  

          ทดลองส่งข้อความภาษาไทย เข้า Group โดยพิมพ์ลิงค์ (https://api.telegram.org/bot201557947:AAE4hwwDs9yXU1RvS_5OqbUj8Vz-mLWl7d0/sendMessage?chat_id=-129603056&text=%E0%B8%AA%E0%B8%A7%E0%B8%B1%E0%B8%AA%E0%B8%94%E0%B8%B5) ในหน้าเว็บบราว์เซอร์อีกครั้งหนึ่ง จากนั้นเราจะได้รับแจ้งเตือนข้อความคำว่า “สวัสดี” เข้ามาในกรุ๊ปดังแสดงในรูปที่ 32

 

  

 

รูปที่ 32 การส่งข้อความภาษาไทย “สวัสดี” เข้า Group Telegram

 

 

 

รูปที่ 33 อุปกรณ์ต้นแบบที่ใช้ทดสอบในบทความนี้

 

 

โครงงานที่ 1. อ่านค่าเซนเซอร์อุณหภูมิ และคุมรีเลย์ และ Telegram App

 

          รายการฮาร์ดแวร์ที่ใช้ในแอพพลิเคชันนี้คือ  

 

  • บอร์ด ESP8266 Wemos D1 mini (LabVIEW Version)
  • โมดูล “DHT22 mini Shield” เซนเซอร์อุณหภูมิและความชื้นสัมพัทธ์
  • โมดูล “Relay mini Shield” รองรับโหลดกระแสสูงสุด 10A

 

 

 

รูปที่ 34 System Diagram ของระบบ Home Control/Monitoring ผ่าน Internet

 

 

          System Diagram  

  

          ESP8266 จะเชื่อมต่อกับ DHT22 เซนเซอร์อุณหภูมิและความชื้นสัมพัทธ์ และรีเลย์ 1 ช่อง รองรับ AC โหลดกระแสสูงสุด 10A โดยระบบจะเชื่อมต่อผ่าน WiFi เข้ากับ Internet จากนั้นทางผู้ใช้งานจะมี Telegram App ที่ติดตั้งบนมือถือ และสร้าง BOT พร้อมใช้งานเรียบร้อยแล้ว

 

          โปรแกรมของ LabVIEW ในส่วนแรกคือการตั้งค่าเริ่มต้น โดยในจุดที่ 1. คือ การตั้งค่า WiFi SSID และ Password ให้กับ ESP8266 ในส่วนที่ 2. คือการกำหนด BOT API Key ที่ได้จากขั้นตอนการสร้าง BOT และในส่วนที่ 3. คือ Group ID ที่ได้จากขั้นตอนก่อนหน้านี้ สังเกตว่าเราจะใช้ฟังก์ชันการรวม String ต่างๆ เพื่อให้ง่ายในการกำหนดค่า Key ต่างๆ แสดงดังรูปที่ 35

 

 

 

รูปที่ 35 โปรแกรมในส่วนของการตั้งค่าต่างๆ

 

 

          โปรแกรมในส่วนนี้คือ การใช้ฟังก์ชันต่างๆ ใน LabVIEW เพื่อกรองข้อความที่ได้จากคำสั่ง “getupdates” โดยข้อความทั้งหมดแสดงดังรูปที่ 36 แต่ข้อความที่เราสนใจคือ Text ที่ส่งมาเท่านั้น ในกรณีนี้คือ “999”

 

 

รูปที่ 36 ข้อมูล RAW ที่ได้จากคำสั่ง “getupdates”

 

 

 

รูปที่ 37 โปรแกรมในส่วนของการกรองข้อความ เพื่อหา Message ที่ส่งมา

 

 

          ในส่วนของโปรแกรมที่รับคำสั่ง “/TurnON” แสดงดังรูปที่ 38 โดยจะให้ Digital Out ในกรณีนี้ใช้ GPIO5 มีสถานะเป็น High จากนั้นจะเรียก HTTPS Get ฟังก์ชันเพื่อส่งข้อความกลับไปที่ Telegram โดยส่งคำว่า “เปิดไฟให้แล้วนะค่ะ...” โดยข้อความจะอยู่ในรูปแบบ URL Encode ตามที่อธิบายไปแล้วในหัวข้อข้างต้น

 

 

 

รูปที่ 38 โปรแกรมในส่วนของการควบคุม Relay และส่งค่ากลับไปที่ Telegram Apps

  

 

          ถัดมาในส่วนของโปรแกรมอ่านค่าอุณหภูมิจาก DHT22 Sensor แสดงดังรูปที่ 39 ก. โดยเรียกฟังก์ชัน “DHT_Read.vi” จากนั้นอ่านค่า Humidity และ Celsius ออกมา เมื่อรวมกับคำว่า “อุณหภูมิขณะนี้คือ ” (ทำการ URL Encode เรียบร้อยแล้ว) จะได้เป็นข้อความที่สมบูรณ์ จากนั้นส่งกลับไปที่ Telegram ด้วยฟังก์ชัน HTTP Get จะได้ผลลัพธ์แสดงดังรูปที่ 39

 

 

 

รูปที่ 39 โปรแกรมในส่วนอ่านค่า เซนเซอร์อุณหภูมิและความชื้นสัมพัทธ์ จาก DHT22

 

 

          ในส่วนสุดท้ายเมื่อโปรแกรมโค้ดลงไปใน ESP8266 แล้วทดลองใช้อย่างเต็มรูปแบบ จะได้ผลลัพธ์แสดงดังรูปที่ 40 โดยในส่วนของ Command คำสั่งว่า “/Start” จะเป็นส่งข้อความแจ้งว่าคำสั่งที่ใช้งานได้มีอะไรบ้าง โดยผู้ใช้งานสามารถคลิกที่คำสั่งได้ทันทีไม่ต้องพิมพ์ใหม่ทุกครั้ง ซึ่งสะดวกแก่การใช้งานอย่างมาก (*สำหรับซอร์สโค้ดทั้งหมดในบทความนี้สามารถดาวน์โหลดได้จากเว็บไซต์ http://electronics.se-ed.com/download)

 

 

 

 

รูปที่ 40 การใช้งานอย่างเต็มรูปแบบที่ Telegram App

  

 

 

รูปที่ 41 ภาพต้นแบบของ ESP8266 และโมดูลกล้องที่ใช้ในบทความนี้

 

 

 

รูปที่ 42 System Diagram ของระบบ Home Monitoring ถ่ายภาพส่งเข้า Telegram ผ่าน Internet

 

 

โครงงานที่ 2. Home Monitoring ส่งภาพเข้า Telegram Apps

 

          คำสั่ง Telegram API ในการส่งภาพคือ https://api.telegram.org/bot201557947:AAE4hwwDs9yXU1RvS_5OqbUj8Vz-mLWl7d0/sendPhoto?chat_id=-129603056&[Photo Data]

 

          ในส่วนของโปรแกรม แสดงได้ดังรูปที่ 43 โดยการทำงานของโค้ดในเบื้องต้นก็คือ โปรแกรมจะรอรับค่าจาก Switch กดปุ่มที่อยู่ GPIO0 จากนั้น ถ้ามีการกดปุ่มกล้องจะถ่ายภาพแล้วจะอัพโหลดรูปถ่าย JPEG ไปที่ Telegram ตาม API Key และ Group ID ที่ระบุไว้ จากนั้นจะวนลูปรอรับค่าสถานะของ Switch แบบนี้ไปเรื่อยๆ

 

 

 

รูปที่ 43 โปรแกรมถ่ายภาพ และส่งภาพเข้า Telegram Apps

 

          คำอธิบายโปรแกรม  

 

          1. เรียกฟังก์ชัน “OV2640_Init.vi” เป็นการสั่ง Initial กล้องที่เชื่อมต่อไว้ที่ขา CS ตามที่กำหนด ในกรณีนี้ต่อไว้ที่ GPIO16 ของ ESP8266 โดยเราสามรถกำหนดขา CS อื่นๆ เพื่อใช้งานได้ อาทิเช่น ถ้าใช้บอร์ด ESP8266 รุ่นอื่นๆ ก็สามารถเลือกใช้งาน Pin Map ตามลักษณะการจัดขาของบอร์ดได้แสดงดังรูปที่ 44

 

 

 

รูปที่ 44 ฟังก์ชัน “OV2640_Init.vi”

 

 

          2. เรียกใช้ฟังก์ชัน “OV2640_SetJPEG.vi” เพื่อกำหนดขนาดภาพที่ต้องการ โดยสามารถกำหนดขนาดเล็กสุดได้ตั้งแต่ 160x120 ไปจนถึงขนาดใหญ่สุด 1600x1200 โดยถ้ากำหนดภาพขนาดใหญ่ จะทำให้ไฟล์ของภาพมีขนาดใหญ่ตามไปด้วย และจะส่งผลให้การ Upload ภาพไปที่ Telegram ช้าตามไปด้วย จากการทดสอบภาพขนาด 650x480 จะใช้เวลาในการอัพโหลดประมาณ 1-2 วินาที ทั้งนี้ขึ้นอยู่กับประสิทธิภาพของ WiFi ด้วย

 

 

 

รูปที่ 45 ฟังก์ชัน “OV2640_SetJPEG.vi”

 

 

          3. เป็นโปรแกรมในส่วนของการกำหนดขาเชื่อมต่อ Digital In ของสวิตช์แบบปุ่มกด ในกรณีนี้ต่อไว้ที่ขา GPIO0 ของ ESP8266 โดยจะมีฟังก์ชัน Debounce เพิ่มเติมเข้ามา เพื่อกำหนดช่วงเวลาหน่วงการรับค่าจากสวิตช์ ในกรณีนี้จะหน่วงเวลาไว้ที่ 100 ms สาเหตุที่ต้องมีฟังก์ชันนี้ก็เพราะว่าโปรแกรมจะได้ทำงานตามจังหวะการกดสวิตช์อย่างถูกต้องนั่นเอง

 

 

 

รูปที่ 46 โปรแกรมในส่วนกำหนดขาของ Switch ที่ GPIO0

 

 

          4. โปรแกรมในส่วนนี้จะเป็นการกำหนด BOT API Key และ Group ID ที่ได้จากการสร้าง BOT ในขั้นตอนแรก ซึ่งก็เพื่อกำหนดว่าให้ Telegram ส่งรูปภาพไปยังที่ใด เมื่อใช้งานร่วมกับฟังก์ชัน “Concatenate Strings” จะทำให้เรากำหนดค่า API Key ในโค้ดได้โดยง่าย

 

 

 

รูปที่ 47 โปรแกรมในส่วนของ BOT API ที่ใช้ส่งภาพเข้า Telegram

 

 

          5. เรียกใช้ฟังก์ชัน “OV2640_Capture.vi” เป็นการสั่งให้กล้องเริ่มต้นถ่ายภาพ และเก็บข้อมูลภาพไว้ใน Buffer โดยส่งขนาดของรูปในหน่วย Bytes ออกมาให้ทราบ โดยถ้ากำหนดภาพขนาดใหญ่ก็จะได้ไฟล์ใหญ่ตามไปด้วย โดยข้อมูล Image Size ที่ได้มาจะนำมาคำนวณเพื่อแบ่งข้อมูลออกเป็นส่วนๆ เพื่อ Upload ภาพได้เร็วขึ้นดังจะได้อธิบายในหัวข้อถัดไป

 

 

 

รูปที่ 48 ฟังก์ชัน “OV2640_Capture.vi”

 

 

          6. เป็นโปรแกรมในส่วนของการกำหนดค่า HTTPS Upload โดยกำหนด Server Path ให้ชี้ไปที่ “api.telegram.org” และกำหนดชนิดของข้อมูลเป็น “Photo” จากนั้นใช้ฟังก์ชัน FIFO_Open.vi เพื่อสั่งให้กล้องเริ่มต้นการส่งข้อมูลภาพออกจากหน่วยความจำแบบ FIFO (First In First Out)

 

 

 

รูปที่ 49 โปรแกรมในส่วน HTTPS Upload

 

 

 

รูปที่ 50 ฟังก์ชัน FIFO_Open.vi

 

 

          7. เป็นโปรแกรมในส่วนของการคำนวณขนาดภาพ เพื่อแบ่งซอยออกเป็นชุดย่อยๆ เพื่อให้ง่ายต่อการอัพโหลดภาพ และเพิ่มความเร็วในการอัพโหลดรูปภาพไปยัง Telegram Server โดยการทำงานจะเรียกใช้ฟังก์ชัน “Quotient&Remainder” เป็นฟังก์ชันการหารแบบเอาเศษ จากตัวอย่างดังรูปที่ 51 สมมุติว่าขนาดภาพคือ 1,000 Bytes และกำหนดให้แบ่งซอยทีละ 256 Bytes เราจะได้ว่า สามารถแบ่งข้อมูลได้เป็น 4 ชุด โดยข้อมูลชุดแรกจะมีข้อมูลเพียง 232 Byte เท่านั้น

 

 

 

รูปที่ 51 การคำนวณเพื่อแบ่งซอยข้อมูลภาพออกเป็นส่วนๆ เพื่อให้อัพโหลดข้อมูลภาพได้เร็วขึ้น

 

 

          8.โปรแกรมในส่วนนี้จะเป็นการอัพโหลดไฟล์ภาพไปยัง Telegram Server ที่กำหนดไว้ โดยเรียกฟังก์ชัน For Loop เพื่อแบ่งการอัพโหลดออกเป็นส่วนๆ ในกรณีนี้สมมุติว่าภาพมีขนาด 1,000 Bytes ดังนั้นจะต้องอัพโหลดเป็นจะนวน 4 ครั้ง ครั้งละ 256 Bytes แต่ในครั้งแรก จะอัพโหลดเพียง 232 Bytes เพราะเป็นการหารไม่ลงตัวแสดงดังรูปที่ 52 การอัพโหลดภาพโดยขาดข้อมูลส่วนใดส่วนหนึ่งไปนั้น จะทำให้ได้ภาพที่ไม่สมบูรณ์และไม่สามารถเปิดได้บน Telegram Apps

 

 

 

รูปที่ 52 ตัวอย่างการอัพโหลดรูปที่ไม่สมบูรณ์

 

 

 

รูปที่ 53 โปรแกรมในส่วนอัพโหลดภาพไปที่ Telegram Server

 

 

          9.เรียกใช้งานปิดการใช้งานฟังก์ชัน “FIFO” และ “HTTPS Uplad” เพื่อคืนหน่วนความจำ RAM ให้กับ ESP8266 ไปใช้งานในส่วนอื่นๆ ต่อไป ในกรณีนี้เราใช้ “While Loop” เพื่อวนลูปการทำงานอย่างซ้ำๆ โดยโปรแกรมจะวนลูปไปรอรับค่าจากสวิตช์แบบปุ่มกดที่ GPIO0 ว่ามีการกดหรือไม่ ถ้ามีก็จะถ่ายภาพและส่งเข้า Telegram แต่ถ้าไม่มีก็จะไม่ทำงานส่วนของ Upload สังเกตได้จาก “Case Structure” ดังรูปที่ 54

 

 

 

รูปที่ 54 โปรแกรมในส่วนปิดการทำงานของกล้อง และฟังก์ชันอัพโหลด

 

 

          ตัวอย่างการแสดงผลของภาพที่ Telegram Apps จะแสดงดังรูปที่ 55 โดยระยะถ่ายภาพที่ดีที่สุดจะอยู่ที่ประมาณ 3 ฟุต แต่ตัวกล้อง ArduCAM สามารถที่จะปรับหมุนโฟกัสเพื่อให้ภาพคมชัดตามความต้องการได้

 

 

 

รูปที่ 55 ตัวอย่างรูปภาพที่ส่งเข้า Telegram Apps

 

  

  

 

          ผู้เขียนหวังว่าผู้อ่านจะได้รับประโยชน์จากบทความนี้ไม่มากก็น้อย ถ้าต้องการติดต่อผู้เขียน หรือสอบถามเพิ่มเติมเกี่ยวกับบทความนี้สามารถอีเมล์หาผู้เขียนโดยตรงได้ที่ amornthep@qwavesys.com ในส่วนของซอร์สโค้ดทั้งหมดที่พัฒนาขึ้นในบทความนี้ สามารถดาวน์โหลดได้จากเว็บไซต์ http://electronics.se-ed.com/download ครับ

 

สงวนลิขสิทธิ์ ตามพระราชบัญญัติลิขสิทธิ์ พ.ศ. 2539 www.thailandindustry.com
Copyright (C) 2009 www.thailandindustry.com All rights reserved.

ขอสงวนสิทธิ์ ข้อมูล เนื้อหา บทความ และรูปภาพ (ในส่วนที่ทำขึ้นเอง) ทั้งหมดที่ปรากฎอยู่ในเว็บไซต์ www.thailandindustry.com ห้ามมิให้บุคคลใด คัดลอก หรือ ทำสำเนา หรือ ดัดแปลง ข้อความหรือบทความใดๆ ของเว็บไซต์ หากผู้ใดละเมิด ไม่ว่าการลอกเลียน หรือนำส่วนหนึ่งส่วนใดของบทความนี้ไปใช้ ดัดแปลง โดยไม่ได้รับอนุญาตเป็นลายลักษณ์อักษร จะถูกดำเนินคดี ตามที่กฏหมายบัญญัติไว้สูงสุด