ทดสอบใช้งานบอร์ด Controller ร่วมกับ LoRaWAN by CAT

ทดสอบใช้งานบอร์ด Controller ร่วมกับ LoRaWAN by CAT

วันนี้จะมาเล่า ผลการทดลองที่ผมและพี่ๆเพื่อนๆ Maker พร้อมด้วยทีมงาน LoRa IoT by CAT ได้นัดหมายกันเพื่อจะทดสอบการทำงานระหว่างบอร์ดคอนโทรลเลอร์ต่างๆ ที่นอกเหนือจาก บอร์ดจากค่าย ST ที่ทาง ทีมงาน CAT ได้จับมือเดินสายอบรมเผยแพร่ บริการ LoRa IoT ที่ CAT กำลังจะเปิดให้บริการ โดยผมเองได้มีโอกาสเข้าร่วมการอบรมพิเศษ รอบประถมฤกษ์ ที่จัดขึ้นที่ จุฬาฯ ในวันที่ 1-2 กุมภาพันธ์ 2561 ที่ผ่านมา จากการเข้าร่วมครั้งนั้น สังเกตปัญหาที่เกิดขึ้นกับผู้เข้าร่วมที่เป็นน้อง นักศึกษา สาขาวิชาอื่นๆที่ไม่มีพื้นด้านการเขียนโปรแกรม พบว่ามีความยากลำบากในการทำความเข้าใจเนื้อหาอยู่พอสมควร น่าจะเนื่องด้วยเครื่องมือและรูปแบบในการพัฒนาของ ST นั้นมีความลึกซึ้งซับซ้อนตามสไตล์เทคโนโลยีเพื่อการผลิตและพัฒนาผลิตภัณฑ์ ส่วนตัวผมมองว่าเครื่องมือซับซ้อนที่ว่า จัดว่าเตรียมมาให้อย่างครบครันและซะใจสาย Hardware อย่างผมพอสมควรเลยทีเดียวเพราะสามารถดีบั๊กค่าต่างๆรวมถึงเข้าถึงรีจิสเตอร์ภายในผ่านเครื่องมือต่างๆได้อย่างง่ายดาย

แต่พอมามองในมุมของน้องนักศึกษาที่เข้าร่วมด้วย เห็นอุปสรรคชัดเจนเลยว่าน้องๆที่ไม่มีพื้นจะย่อยเนื้อหาได้ยากมาก จนถึงกับมีเอ่ยปากกัน จึงได้สอบถามว่าน้องมีพื้นมาอย่างไรบ้าง น้องก็บอกว่าตนเองฝึกฝนและศึกษาด้วยตนเองผ่านมาจากสภาพแวดล้อมของ Arduino Platform ผมก็จึงเสวนาต่อจนได้ความว่า ตัวเขามีโครงการที่ทำระบบมอนิเตอร์คุณภาพอากาศแบบไร้สายโดยจะติดตั้งบนรถยนต์ที่เคลื่อนที่ด้วย เดิมใช้การส่งผ่าน 3G และระบบก็ทำงานได้แล้วในระดับนึง แต่เห็นว่าทาง ทีมงาน CAT เข้ามาแนะนำการใช้งาน LoRa มองว่าเป็นรูปแบบการสื่อสารที่น่าสนใจและน่าจะเหมาะกับโครงการของตน จึงเข้ามาเรียนรู้ด้วย แต่เกิดอาการ Learning Shock เพราะเจอจังๆเข้ากับเครื่องมือของ ST ก็ถึงกับหงายเงิบไปเลยเหมือนกัน ผมเองก็ได้แต่ให้กำลังใจว่าสู้ๆ อย่างน้อยเราก็ได้มีโอกาสศึกษาตรงนี้แล้วก็ให้มองว่าเป็นประสบการณ์ไป สรุปวันนั้นก็จบการอบรมกันชนิดความรู้ทะลักหัวกันไปตามๆกันเพราะเนื้อหาอัดแน่นมากเทียบกับเวลาที่ใช้เพราะครั้งนี้เป็นครั้งแรก ในการจัดการอบรมถือว่าเป็นการทดลองสอนเพื่อทดสอบเนื้อหาก่อนที่จะมีการจัดอบรมจริงๆไปในตัว ก็มีการพูดคุยแนะนำว่าควรปรับเนื้อหาอย่างไรไปด้วยเช่นกัน

หลังจากจบกิจกรรมผมก็มีความคิดขึ้นว่า เป็นแบบนี้ในตอนนี้หากต้องการพัฒนาคงต้องพึ่งพาบอร์ดจากค่าย ST อย่างแน่นอน เพราะเป็นบอร์ดเดียวที่มีการทดลองกับทางเครือข่ายของ CAT แล้ว แต่ด้วยเห็นว่าอุปสรรคในการเรียนรู้กับผู้สนใจกลุ่มอื่นๆที่ไม่ได้มีพื้นมาก่อน เขาเหล่านั้นจะทำอย่างไร และเราจะทำอย่างไรได้บ้างให้เขาเหล่านั้นเข้าถึงและใช้งานเครือข่ายของ CAT ได้ง่ายขึ้นและสามารถพัฒนาอยู่บนสภาพแวดล้อมอื่นๆที่ทุกคนคุ้นเคยได้ จึงตัดสินใจปรึกษาและขอนัดหมายเพื่อนำบอร์ดอื่นๆเข้าทดสอบกับทีมงาน CAT โดยใช้พื้นที่ของ จุฬาฯ ในการทดสอบเพราะมีสัญญาณที่สามารถใช้ทดสอบได้ และถ้าสมมติฐานเป็นจริง ผมก็อยากจะร่วมผลักดันกับ อ. ในการเปิดพื้นที่ให้ผู้สนใจได้เข้ามาใช้มาเรียนรู้กับเจ้าเทคโนโลยีตัวนี้

จึงเป็นที่มาในการทดลอง ในวันที่ 20 กุมภาพันธ์ 2561 โดยสถานที่ ที่เราใช้ในการตั้งฐานการทดสอบใช้เป็น Co Working Space ของคณะวิศวกรรม ซึ่งตั้งอยู่ที่ ชั้น 6 อาคาร 100 ปี วิศว จุฬาฯ เมื่อถึงเวลานัดหมายทีมงานและผู้เกี่ยวข้องก็มารวมตัวกัน โดยผมนั้นได้เตรียมบอร์ดเท่าที่จะหาในบ้านเรามาด้วย รายการของบอร์ดก็มีความหลากหลายมาก ประกอบด้วย บอร์ด LoPy จาก Pycom ที่พัฒนาโดยใช้ภาษา microPython ตามมาด้วย บอร์ด TTGO ซึ่งเป็นบอร์ด หน้าตาดุดันโดยที่ภายในได้รวมการทำงานของ ESP32 กับชิพ LoRa พร้อมจอ OLED มาพร้อมให้ในบอร์ดเดียว และท้ายสุดคือบอร์ด RaspberryPi ที่ประกบกับบอร์ดสื่อสารโมดูล LoRa พร้อมด้วย โมดูล GPS

เราเริ่มต้นด้วยทีมงาน CAT สร้างแอคเคาท์ให้เพื่อใช้งานพร้อมมอบ Key ที่จำเป็นต่างๆในการสื่อสารกับ gateway ของ CAT ที่ให้บริการ โดยครั้งนี้เราทดสอบด้วยรูปแบบการยืนยันตนของ NODE แบบ ABP แต่แว่วว่าในอนาคต CAT น่าจะให้บริการในลักษณะของ OTAA ด้วยฉะนั้นวันนี้ค่าที่จำเป็นในการเข้าเชื่อมต่อในรูปแบบของ ABP จึงมีดังนี้

DEV_EUI
DEV_ADDR
NETWORK_KEY
APP_KEY

โดยค่าทั้งหมดนั้น ทางทีม CAT เป็นผู้กำหนดให้ ถึงตรงนี้บางท่านที่ทดลองเล่นกันเป็นส่วนตัวมาบ้างคงจะมีคำถามว่า อ้าว ทำไม DEV_EUI ทำไมไม่ดึงจากค่าของบอร์ดละ ครับคำถามนี้ผมก็สงสัยจึงสอบถามกับทีมงานว่าทำไมถึงเลือกแนวทางนี้ ทางทีมงานก็ให้เหตุผลที่น่าสนใจว่า กรณีว่าเราจะเอาจากบอร์ดจริงๆก็ทำได้และมันก็ทำให้ unique ได้ง่ายกว่าด้วย แต่ข้อเสียมันก็มีอยู่นั่นคือ หากเรายึดถือค่าดังกล่าวในการอ้างอิงเกิดวันนึงบอร์ดนั้นพังแล้วจำเป็นต้องเปลี่ยนบอร์ดใหม่ เลขชุดเก่าก็จะยกเลิกไปตามบอร์ดที่เสีย พอแบบนี้เราก็ต้องไปแก้ไขหรือกำหนดค่าตามค่าจากบอร์ดใหม่ที่มาทดแทน แต่ถ้าเกิดเราใช้ค่าที่ สร้างขึ้นมาโดยทีม CAT เป็นคนช่วยสร้างให้มันย่อม unique บนโครงข่ายของ CAT อย่างแน่นอน แต่ครับแต่ แต่ถ้าเอาบอร์ดที่ ref ด้วยค่าแบบนี้ไปเข้ากับเครือข่าย LoRaWAN อื่น อาจจะเจอการชนกันของค่านี้ก็เป็นได้ เพราะค่านี้มันเกิดจากการกำหนดเองต่างหาก ย่อมมีโอกาสชนได้ แต่ก็แลกมาด้วยความสะดวกที่เราสามารถเปลี่ยนบอร์ดใหม่ทดแทนแล้วกำหนดค่าตามเดิมได้ทันที ก็ต้องวางแผนและมองเรื่องนี้ไว้ให้ดีกรณีใครที่ต้องการทำ บริการที่สามารถเกาะข้ามไปข้ามมาระหว่างเครือข่ายของ CAT กับเครือข่ายอื่นๆที่อาจจะเป็น gateway ที่สร้างกันขึ้นมาเองหรือผู้ให้บริการเจ้าอื่นๆ

เอาละเราได้ค่าต่างๆมาแล้ว คราวนี้ก็มาถึงช่วงสำคัญนั่นคือการเพิ่ม ENDPOINT ให้กับ NODE ของเราผ่านทางหน้าจัดการของ CAT ซึ่งหน้าต่างนี้คนที่พึ่งเข้าอบรมกับทาง CAT เมื่อไม่กี่วันที่ผ่านน่าจะคุ้นตากันบ้างแล้ว โดยเราจะกำหนดกันที่ส่วนของ Routing Profile ตรงนี้ทาง CAT ก็ทำการบ้านมาดี มีให้กำหนดได้ทั้งแบบ HTTP และ MQTT โดยตอนนี้ส่วนของ MQTT จะยังไม่เปิดให้ทดลองใช้ ทางทีมทดสอบเลยเลือกสร้าง HTTP API ไว้ลองรับการส่งข้อมูลจาก ระบบของ CAT ลงไป โดยในวันนี้ทาง CAT เองก็ได้ให้ลองใส่ค่า endpoint ที่เป็นของ cayenne ลงไปด้วยเพื่อทดสอบตามฟอร์แมตที่ CAT ใช้นำเสนออยู่เวลาที่จัดอบรม แต่ด้วยความซนทีมงานเราก็เลือกเพิ่มส่วนที่เชื่อมต่อไปยัง server ที่เรามีเข้าไปด้วย จากตรงนี้ทุกท่านจะเห็นว่าการส่งต่อข้อมูลจาก โครงข่ายของ CAT ทำออกมาได้เรียบง่ายและใช้งานได้ดีทีเดียวหลักง่ายๆคือ อะไรก็ตามที่ผ่านเข้ามาจากเครือข่ายของ CAT จะยิงส่งต่อไปยังปลายทางที่เรากำหนดไว้ได้เลย สบายๆ

หลังจากที่เรากำหนด Routing Profile เสร็จแล้วก็จะเป็นส่วนสำคัญที่ทุกคนรอคอยแล้วนั่นคือส่วนที่เราจะเพิ่ม node ที่จะเข้ามาใช้งานกับเครือข่ายนั่นเอง ขั้นตอนก็ไม่ได้มีอะไรยุ่งยาก เพียงแค่เปิดหน้าต่าง ใน TAB ของ Device Management เข้ามาที่หน้าต่างนี้จะมีส่วนให้เราเพิ่ม node ที่ต้องการใช้งานหน้าต่างที่แสดงก็เรียบง่ายเข้าใจง่าย มี UX ที่ออกแบบไว้ดีพอสมควร โดยลำดับจะแสดงไว้ดังภาพ

แค่นี้ก็เป็นอันเสร็จเรียบร้อย พร้อมทำงานทางฝั่งหลังบ้านแล้ว กลับมาที่ฝั่งบอร์ดที่เราเตรียมมาทดสอบบ้าง พระเอกของเราวันนี้มีด้วยกันสองแบบคือ แบบ ที่พัฒนาด้วย microPython และ Arduino Platform

สำหรับท่านที่ มี บอร์ด TTGO อยู่ในมือคงใจร้อนกันแล้วงั้นผม ประเดิมให้ก่อนเลยละกัน ส่วน LoPy ผมขอยกมาทึหลังเพราะคาดว่าหลายท่านยังไม่ได้ถอยมาเป็นของตัวเองกันซักเท่าไหร่

เริ่มที่ เราเปิดโปรแกรม Arduino ขึ้นมา จากนั้นทำการเพิ่ม Library ตัวนึงเข้าไปนั่นคือ
https://github.com/orenonline/arduino-lmic-as923

อ๊ะๆ เดี๋ยวก่อน ผมเชื่อว่าสิ่งที่ทุกคนรีบทำหลังจากบรรทัดนี้คือ รีบโหลดและลงเพื่อทดสอบแน่ๆ ยังก่อนๆอ่านต่ออีกซักนิด เจ้า Lib ตัวนี้ มันไม่ได้ถูกเขียนมาให้ใช้กับ ESP32 ได้ทันที เมื่อเราคอมไพล์แล้วจะเจอ ERROR มาฟาดหน้าเราอย่างแรง อาจจะทำให้ใจฟ่อลงไปได้ ตรงนี้ น้องพฤก Maker หนุ่มวิศวะโทรฯ จุฬา (https://www.facebook.com/pruk.sasithong) ได้ขจัดปัญหาดังกล่าวไว้ให้แล้ว เพราะว่าบอร์ด TTGO ที่ใช้ทดสอบก็คือบอร์ดของน้องเขานั่นเอง โดย LIB ที่ทำการแก้ไขแล้วสามารถ โหลดกันได้ที่นี่ครับ

http://binahead.com/web/wp-content/uploads/2018/02/LMIC-Arduino-AS923-upper-master.zip

เอาล่ะหลังจากโหลดมากันแล้วก็นำไปติดตั้งกันตามปกติได้เลยครับ คราวนี้ก็เพียงเปิดไฟล์ตัวอย่างที่เป็นตัวอย่างของการเชื่อมต่อแบบ ABP ขึ้นมา และใส่ค่าที่เราได้จากทีมงาน CAT ลงไปแล้วก็อัพโหลดลงบอร์ด ก็เป็นอันเรียบร้อยเอาไปเทสโลด ส่วนผลลัพธ์เดี๋ยวผมขอนำเสนอในช่วงท้ายหลังจากพูดถึง LoPy เสร็จแล้วนะครับ
มาๆ มาว่ากันต่อ จริงๆเรื่องนี้ควรเล่าช่วงแรก แต่มันมีของต้องเล่าเยอะเลยยกมาเล่าตอนท้ายแทนดีกว่า บอร์ดที่เราเลือกมาทดสอบอีกตัวนั้นคือ LoPy จากบ. Pycom ตัวบอร์ดออกแบบโดยใช้ ESP32 เป็นส่วนทำงานประกบมากับภาคสื่อสารที่เป็น LoRa ตรงนี้ต้องบอกเลยว่าทีมงาน Pycom ออกแบบบอร์ดมาได้ดีและน่าใช้มาก ต่อในส่วนของการพัฒนา Pycom เลือกใช้ ภาษา microPython เป็นภาษาในการใช้พัฒนา บางท่านอาจจะแหยงๆในแว้บแรก หากว่าไม่เคยใช้งานภาษานี้มาก่อน แต่บอกได้เลยว่า คู่มือและตัวอย่างของ Pycom ทำไว้ได้ดีมากจนผมเองที่พึ่งจะจับมันไม่กี่วันก็ตกหลุมรักความสะดวกและเป็นขั้นเป็นตอนไปในทันที ใครสนใจสามารถเข้าไปอ่านเรียกน้ำย่อยกันก่อนได้ที่ https://docs.pycom.io/ เอามาถึงในส่วนของการทดลองเลยละกัน ในส่วนของเบสิกการใช้งานผมอาจจะขอยกยอดไปก่อนนะครับ ไว้เราหาเวลามานั่งทำความเข้าใจในการพัฒนาบนภาษา microPython กันอีกทีนึงนะครับ

สำหรับการทดลองเราสามารถทำได้ง่ายๆโดยก่อนอื่นเราต้องติดตั้งเครื่องมือที่ใช้ทำงานกันก่อน โดยในเว็บของ Pycom จะแนะนำไว้ด้วยกันสองตัวคือ ATOM และ Visual Studio Code โดยทางทีม Pycom จะมีปลั๊กอินตัวหนึ่งชื่อ Pymakr เพื่อใช้เป็นเครื่องมือในการพัฒนา ทุกท่านสามารถทำตามได้จากเนื้อหาในคู่มือดังนี้

https://docs.pycom.io/chapter/gettingstarted/installingsoftware.html

ต่อมาเราก็แค่เชื่อมต่อบอร์ดเข้ากับคอมพิวเตอร์ของเรา และ เปิดตัวอย่างสำหรับการสื่อสารในรูปแบบ ABP ขึ้นมาตามคำแนะนำใน Document ได้เลย

https://docs.pycom.io/chapter/tutorials/lopy/lorawan-abp.html

วิธีการก็ง่ายๆไม่ซับซ้อนเพียง คัดลอกตัวอย่างลงมาวางใน ไฟล์ main.py จากนั้นทำการแก้ไขค่า key ต่างๆตามที่ได้รับจากทีมงานของ CAT

แต่ตัวอย่างนี้จะขาดอยู่อย่างนั่นคือ การกำหนด EUI แต่ก็ไม่ได้เป็นอุปสรรคอะไร เพราะทางผมได้นำส่งบอร์ดส่วนนึงให้กับทางทีมงาน CAT ไปก่อนวันนัดทดสอบเพื่อให้ทางทีมงาน CAT ได้ไปลองเล่นทำความคุ้นเคยมาก่อน ผลคือ ทีมงานได้ทดลองเบื้องต้นมาก่อนแล้วระดับนึงทำให้วันนี้เราเบาใจไปได้เปราะว่าบอร์ด LoPy ทำงานได้แน่นอน โดยทีมงาน CAT ได้เสียบบอร์ดทดสอบการทำงานให้ดูโดยเปิดหน้าต่างการแสดงของ Logger ก็ได้ผลลัพธ์ว่ามีการเชื่อมต่อเข้ามาจริงๆ ด้วยความรีบร้อนละคนตื่นเต้นผมจึงรีบเพิ่มเติมคำสั่งส่วนที่เหลือลงไป ดังนี้

ก็เป็นอันเสร็จ เราจึงอัพโหลดไฟล์เข้าบอร์ดผ่านคำสั่งทันที แต่มีเหตุให้ต้องตกใจ นั่นคือ เมื่ออัพไปแล้วเจ้าบอร์ดตัวดีมันก็นิ่งไปเสียเฉยๆ เอาไงดีได้แต่มองตากันเลิกลัก หันไปหาทีมงานของ CAT ว่าของเขาทำอย่างไรทำไมจึงได้ทางทีมก็ต่อบอร์ดให้ดูว่ามีการส่งสัญญาณเข้า เอ..เอายังไงดี ทางผมเลยตัดสินใจ อัพเฟริมแวร์เพราะคิดว่าอาจจะเป็นเพราะเวอร์ชั่นผมไม่ตรงกันหรือไม่เพราะระหว่างที่ ทดสอบมาสองสามวัน ทาง Pycom จะส่งข้อความมาให้อัพผ่านทางโปรแกรเม upgrade firmware บ่อยมาก (มารู้ตอนหลังว่าบางครั้งไม่ต้องบ้าจี้ตามก็ได้ถ้าไม่ใช่อัพเดธร้ายแรงอะไร) ผมจึงทำการอัพทันที แต่แว้บสุดท้ายก่อนกดอัพเห็นตัวหนังสือเบ้งๆว่า เวอร์ชั่นเฟริมแวร์ที่กำลังจะยัด มีตัว b ห้อยท้ายแต่ไม่ได้เอะใจอะไร กดไปอย่างเร็วพลัน ด้วยความร้อนใจอยากเล่นต่อแล้ว เมื่ออัพเสร็จทำการอัพโหลดไฟล์เข้าไป ในใจนี่หวังไว้อย่างมั่นเหมาะเอาละมันต้องได้ซักทีแล้วนะ ผลคือนิ่งสนิท(55555 ขำประชดตัวเอง) ไม่เป็นไรคิดได้โดยอึดใจ หันไปหาทีมงาน CAT ขอแลกบอร์ดกับเขาเผื่อว่าบอร์ดเราจะเน่าแล้ว เอามาเสียบแล้วรีบอัพโดยพลัน อ่าว อัพไม่ได้ก็เข้าใจไปเองว่ามันมีปัญหา(จริงแล้วเป็นเรื่องของ loop การทำงานภายใน) เลยสั่งอัพเฟริมแวร์ให้บอร์ดนี้ด้วยเช่นกัน หายนะมันเกิดตอนนี้ ปรากฎหลังจากอัพเฟริมแวร์และอัพโหลดไฟล์แล้ว ทุกอย่างหยุดนิ่งไปหมดจึงส่งต่อกลับไปให้ทางทีม CAT ช่วยใส่ไฟล์ CODE ที่เขาลองมาก่อนที่มันทำงานได้ในตอนแรก แล้วลุ้นด้วยใจจดจ่อ แต่สุดท้ายก็ทำงานไม่ได้เช่นกันระหว่างที่งุนงง กับสิ่งที่เกิด

ขณะเดียวกันนั้นก็มีพี่ทีม (https://www.facebook.com/sweetzteam) ตามมาสมทบ ซึ่งมาพร้อมกับบอร์ดอื่นๆที่อยากใช้ทดสอบในวันนี้ด้วยนั่นคือบอร์ด RaspberryPi และบอร์ดของ Seedstudio แต่ยังไม่ทันพี่ทีมจะได้ขยับตัวผมก็ลากมาช่วยกันแก้ปัญหาตรงหน้าทันที แต่ทุกคนก็ได้ผลลัพธ์ที่เหมือนกัน คือมันนิ่งไปเลย ฟางเส้นสุดท้ายผมโทรตามคุณโอ๋ (https://www.facebook.com/Teerawut.chitphomma) ให้มาช่วยเสริมทัพเพราะผมคาใจกับประเด็นนี้มาก ไม่นานเท่าไหร่นักคุณโอ๋ก็ปรากฏตัวพร้อมบอร์ดสำรองหอบใหญ่กะคร่าวๆก็ราวสิบกว่าบอร์ดได้ พร้อมคำพูดเท่ๆว่า ลูกพี่ให้เอามาด้วยถ้ามีปัญหาจะได้เปลี่ยนเลย ลุยได้เลยครับ แหมะ..ไฟในตัวผมนี่ลุกโชนเลย เหตุการณ์ดำเนินไป เป็นห้วงเวลาหนึ่ง

ทุกคนช่วยกันปล้ำมันอยู่ได้พักใหญ่จนผมเริ่มเอะใจ กับเจ้าตัว b ในขั้นตอนอัพเฟริมแวร์เมื่อกี้ จึงได้สอบถามทีม CAT ว่าเวอร์ชั่นเราไม่ตรงกันใช่ไหมกับอันที่ CAT พึ่งทดสอบไปก่อนที่จะมาเจอกัน ได้ความว่า แม่นแล้วสู ห่วย…แค้นตัวเองแท้ ทันใดนั้นความคิดก็แล่นเข้ามาปะทะที่หัวอย่างจัง นี่เราโดน BETA เวอร์ชั่น เล่นงานเอาเสียแล้ว เพื่อให้แน่ใจ จากที่เสียเวลาหลายรอบผมจึงเปิด เอกสารหาข้อมูลว่าเราจะ debug การทำงานอย่างไรได้บ้างจนไปเจอว่ามันมีคำสั่งให้เราเช็คสถานะการเกาะสัญญาณได้ ผมจึงทำการแทรกคำสั่งนั้นลงไปทันที ผลที่ได้ทำให้ผมสามารถวางมือจากมันได้อย่างหายคาใจ ผลคือ มันสามารถเชื่อมต่อได้ แต่ไปติดปัญหาตรงส่วนการส่งแพคเกจ ด้วยเหตุนี้ผมจึงสรุปแบบรวบตึงว่า คงเป็นเพราะเวอร์ชั่นเฟริมแวร์ที่อัพกันไปตอนล่าสุดแน่ๆ จึงได้ยุติการทดสอบไว้แต่เพียงเท่านั้นเพราะในเว็บของ Pycom ไม่มี เฟริมแวร์เก่าให้เราใช้ทำ Rollback ได้ และได้หันไปทดสอบบอร์ดอื่นๆต่อจนเป็นที่มาของข้อสรุปการทดสอบของวันนี้ โดยในส่วนของ LoPy นั้นผมอิงตามผลลัพธ์ของทีมงาน CAT และบันทึกผลการทำงานผิดพลาด ที่เกิดขึ้นหลังจากที่อัพเฟริมแวร์ ตัวล่าสุด และฝากคุณโอ๋ประสานงานกับทาง Pycom เพื่อหาทางแก้ไขต่อไป ผมคาดว่าน่าจะกลับมาทำงานเป็นปกติหลังจากมีการปรับเฟริมแวร์ใหม่ออกมาอย่างแน่นอน(ซึ่งมันอัพถี่มากให้ตายเถอะแค่ช่วงสองสามวันที่ผมได้บอร์ดมามันมีเวอร์ชั่นให้อัพไม่ซ้ำเลยแต่ละวัน) สำหรับใครที่ถอย LoPy มาแล้วก็ขอให้ระมัดระวังเรื่องนี้นิดนึงนะครับ ผมเจ็บมาก่อนแล้วไม่อยากให้ทุกท่านพลาดแบบเดียวกันครับ

สำหรับผลลัพธ์ หลังจากทดลองกับบอร์ดต่างๆก็ได้ผลลัพธ์ออกมาดังภาพคือมีข้อมูลไหลเข้ามาที่ ระบบของ CAT และสามารถส่งต่อไปยัง server ภายนอกที่เราทำไว้รอรับข้อมูลได้เป็นอย่างดี ดังที่จะเห็นได้จากส่วนของ server ของพี่ทีมที่ช่วยอนุเคราะห์ทดสอบให้ โดยกลไกที่มาใช้รับนั้นจะใช้ widget ที่เป็น HTTP ขึ้นมาทำเป็น API ไว้รอรับและนำค่าไปใช้ต่อได้ทันทีครับ

ท้ายสุดนี้ขอขอบคุณทีมงานทุกคน พี่ๆเพื่อนๆ Maker ที่มาร่วมกันทดสอบเพื่อให้ได้ข้อสรุปในครั้งนี้ด้วยนะครับ และที่จะไม่เอ่ยถึงเลยเสียมิได้คือ คณะวิศวกรรมศาสตร์ จุฬาลงกรณ์มหาวิทยาลัย เจ้าของพื้นที่ ที่เปิดกว้างให้เราได้เข้าใช้เพื่อทดสอบในครั้งนี้ด้วยครับ สำหรับบทความนี้ต้องขอลาไปก่อน พบกันใหม่บทความหน้านะครับ…สวัสดีครับ

ใช้งาน LINE NOTIFY ผ่าน NODE-RED

ใช้งาน LINE NOTIFY ผ่าน NODE-RED

เริ่มต้น ก่อนใช้งานเราต้องสร้าง TOKEN เพื่อใช้งาน LINE NOTIFY กันก่อนโดย เข้าไปเริ่มการใช้งานที่ https://notify-bot.line.me/th/

สำหรับการใช้งานบริการของ LINE NOTIFY นั้น ผู้ใช้ต้องลงทะเบียน LINE ACCOUNT ด้วย E-mail ไว้ก่อน หากใครยังไม่ได้ลงทะเบียนให้ดำเนินการขั้นตอนนี้ให้เรียบร้อยก่อนผ่านทาง Application LINE บนมือถือของแต่ละท่าน หากดำเนินการแล้ว เราสามารถเข้าสู่ระบบได้ด้วย E-mail และรหัสผ่านที่ลงทะเบียนไว้ได้ทันที

เมื่อเข้าสู่ระบบได้แล้วเราต้องทำการเปิดใช้บริการของ LINE NOTIFY เพื่อรับ TOKEN ในการใช้งาน จากเมนู “หน้าของฉัน”

เมื่อเข้ามาจะพบหน้ารายการของบริการที่เราสร้างไว้ หากยังไม่เคยสร้าง จะไม่ปรากฏรายการใดๆ ในที่นี้เราจะทำการสร้าง บริการขึ้นมาใหม่โดยใช้เมนูด้านล่าง

สร้างบริการด้วยการกดที่เมนู “ออก Token”

จะปรากฏหน้าต่างสำหรับกำหนดรายละเอียดของบริการของเราขึ้นมา โดยระบบจะให้เรากำหนดชื่อของบริการ กับเลือกว่าต้องการให้ มีการแจ้งเตือนไปที่ใด เราสามารถเลือกได้ทั้งแบบส่งหา Account ของเราเอง หรือ ว่าส่งแจ้งเตือนเข้าไปยังกลุ่มที่เรามีอยู่ได้ ในที่นี้เราจะเลือกเป็นส่งหาเราแบบตัวต่อตัว

ระบบจะแจ้ง Token สำหรับเข้าถึงบริการให้เรา ตรงนี้ให้เราทำสำเนาและบันทึกไว้เนื่องจากระบบจะไม่มีช่องทางให้เราเรียกดูได้อีกนอกจากลบและสร้างใหม่

เมื่อเราสร้างบริการเสร็จแล้วจะพบว่ามีรายการของบริการ เพิ่มขึ้นมาในรายการ ของบริการที่เชื่อมต่อ ตอนนี้บริการที่เราจะนำไปใช้พร้อมแล้ว จากนี้จะเป็นการสร้าง Flow บน NODE-RED เพื่อเรียกใช้งาน บริการของ LINE NOTIFY

เปิด Flow ที่ต้องการเพิ่มการทำงานของ LINE NOTIFY ขึ้นมา จากนั้นเพิ่ม widget ที่เกี่ยวข้องต่างๆลงไป ดังภาพ โดยหัวใจในการทำงานครั้งนี้คือ widget สำหรับการส่ง http request จากกลุ่มของ function

เมื่อวาง widget เรียบร้อยเราก็จะมาทำการเพิ่ม ในส่วนของค่าพารามิเตอร์ต่างๆเพื่อให้ node-red สามารถ ส่งการแจ้งเตือนไปยังบริการของ Line Notify ได้

การเรียกใช้ บริการของ LINE notify นั้นเปิดช่องทางการใช้งานไว้ที่ https://notify-api.line.me/api/notify และใช้วิธีการส่งข้อมูลแบบ POST เมื่อกำหนดค่าเรียบร้อยแล้วก็ทำการบันทึกด้วยการกดปุ่ม DONE

ในการสื่อสาร กับ server ของบริการ LINE กำหนดรูปแบบการสื่อสารไว้สำหรับการเรียกใช้บริการโดยผู้ใช้จะต้องทำการส่ง Token ไปยัง server ด้วยทุกครั้ง ผ่านทาง การกำหนด HEADER ของ HTTP REQUEST และส่งข้อความที่ต้องการส่งในส่วนของ BODY ซึ่งจะมีรูปแบบดังนี้


POST /api/notify HTTP/1.1\r\n
Host: notify-api.line.me\r\n
Authorization: Bearer {LINE TOKEN}\r\n
Content-Type: application/x-www-form-urlencoded\r\n
\r\n
message=แจ้งเตือน NOTIFY MESSAGE

จากรูปแบบ เราจะนำมากำหนดให้กับ widget ของ node-red เพื่อให้เกิดการทำงานที่สมบูรณ์ โดยการใช้ widget function ในการส่งค่าต่างๆเข้าไปยัง widget http request จากคำอธิบายของ widget http request เราจะสามารถกำหนดส่วนของ http header และ http body ได้โดยกำหนดที่ msg.headers และ msg.payload ในรูปแบบดังนี้


msg.headers = {'content-type':'application/x-www-form-urlencoded','Authorization':'Bearer 9rmA5Rh57w6mvQh3wTs8oWsLNt0mvjdcb9H1Wtjky6s'};
msg.payload = {"message":"สวัสดีจะเรามาเตือนนะ"};
return msg;

เมื่อเรากำหนดค่าทุกอย่างครบถ้วนแล้วเราสามารถ เริ่มใช้งานได้ทันที โดยการสั่ง Deploy จากนั้นทดลองด้วยการกดเรียกการทำงาน ทุกท่านจะได้รับการแจ้งเตือนตามข้อความที่กำหนดไว้ ปรากฏในหน้าต่างของโปรแกรม LINE ของแต่ละท่านทันที


ที่มาและแหล่งข้อมูล
https://notify-bot.line.me/th/
https://www.ioxhop.com/article/47/esp8266-esp8285-กับการส่งการแจ้งเตือนเข้า-line
https://medium.com/dev2pro/ทำ-line-notify-กันไหม-4a2a7d62ac05
https://www.igolf.in.th/2017/4637
https://medium.com/@nattaponsirikamonnet/มาลอง-line-notify-กันเถอะ-พื้นฐาน-65a7fc83d97f
http://iot.aerialcoms.com/th/โครงงาน/9-iot/9-using-line-messaging-api-with-node-red.html

ควบคุม GRATIA (RF SWITCH) ผ่านอินเตอร์เนต ด้วย ESP8266 ผ่าน NETPIE.io

ควบคุม GRATIA (RF SWITCH) ผ่านอินเตอร์เนต ด้วย ESP8266 ผ่าน NETPIE.io

ต้องขอบอกว่าหลังจากหายไปนาน ก็ถึงเวลาปัดฝุ่นบทความที่ยังคั่งค้าง วันนี้ ผมขอเสนอ ลูกเล่นเล็กๆน้อยๆที่จะมาช่วยเติมเต็มประสบการณ์การใช้งาน สวิตช์ GRATIA ในมือของทุกท่านให้มีชีวิตชีวา หวือหวาขึ้นอีกนิด จากที่แค่ทำงานผ่านทางรีโมต RF ในก้าวไปอีกขั้นโดยทำให้ทุกท่านสามารถสั่งการทำงานได้ผ่านอินเตอร์เน็ตโดยวันนี้จะขอใช้ NETPIE.io เป็นสื่อกลางในการสื่อสาร รวมถึงใช้อุปกรณ์ ESP8266 ในการทำหน้าที่ เป็น remote bub เพื่อประสานการทำงานระหว่าง gratia และ netpie

เบื้องต้นเนื้อหาในบทความนี้จะเน้นไปทางการประยุกต์ใช้ เพราะฉะนั้นเนื้อหาที่เป็นส่วนของหลักการและทฤษฎีผมขอยกยอดไว้ไปเล่าต่อในอีกบทความถัดไปนะครับเพื่อให้ท่านที่ต้องการศึกษาและต่อยอดสามารถนำไปประยุกต์ได้หลากหลายขึ้นซึ่งจะยังขาดเนื้อหาของการแกะคำสั่งของรีโมทไร้สายขอให้ติดตามกันได้เร็วๆนี้นะครับ

ก่อนที่จะเข้าสู่เนื้อหา ผมขอพาทุกท่านไปทำความรู้จักกับเจ้า gratia switch กันซักเล็กน้อย ก่อนนะครับว่ามันคืออะไรและมีหลักการทำงานอย่างไร

สวิตช์ gratia นั้น เป็นสวิตช์ไฟ ที่ทำงานในระบบสัมผัสผ่านทางเซนเซอร์แบบคาปาซิทีฟ พร้อมยังสามารถทำงานด้วยรีโมทไร้สายได้อีกด้วย โดยส่วนประกอบภายในจะแบ่งออกเป็นส่วนการทำงานดังนี้

เมื่อเราแยกชิ้นส่วนที่เป็นกระจกครอบด้านหน้าออกจะพบกับส่วนแรกนั่นคือส่วนของสวิตช์สัมผัส

ด้านหลังของแผ่นสวิตช์เราจะพบกับขั้วต่อ และไมโครคอนโทรลเลอร์ซึ่งทำหน้าที่ในการประมวลผลและสั่งการทำงานทั้งหมดทั้งการอ่านค่าการกดสวิตช์ รวมทั้งการควบคุมรีเลย์ในชั้นการทำงานถัดไป

เมื่อเรางัดส่วนของสวิตช์ออกจะพบกับส่วนที่สองซึ่งเป็นส่วนควบคุมการตัดต่อกระแสไฟรวมถึงส่วนการสื่อสารด้วย

เมื่อเราไขนอตและนำชิ้นส่วนที่สองออกมาจะพบกับส่วนของรีเลย์ที่ใช้ในการควบคุมตัดต่อกระแสไฟและ ส่วนของการสื่อสารที่ใช้รับคำสั่งจากรีโมทไร้สาย

และนี่คือหัวใจและช่องทางที่เราจะใช้ในการสื่อสารกับบอร์ด ESP8266 ของเรากัน จะสังเกตได้ว่าโมดูลสื่อสารที่สวิตช์ gratia ใช้นั้นจะเป็นโมดูลสื่อสารภาครับแบบ RF ที่ย่านความถี่ 433 นั่นเอง

เมื่อเราทำความรู้จักับไส้ในของ สวิตช์ gratia ไปแล้วคราวนี้ก็ต้องมาเรียนรู้การใช้งานเบื้องต้นของสวิตช์กันก่อน ในที่นี้ผมจะให้ทุกท่านศึกษากันจาก สื่อของทางบ.เลยนะครับ ขั้นตอนทั้งการติดตั้งและการตั้งค่าใช้งานรีโมท

YouTube Preview Image

http://www.gratiathailand.com/2017/


เอาละครับหลังจากที่ได้ปูพื้นเรื่องของสวิตช์กันไปเป็นที่เรียบร้อยแล้ว คราวนี้ก็ถึงเวลาที่เราจะมาเตรียมการทำงานในส่วนของไมโครคอนโทรลเลอร์ของเรากันบ้าง

สิ่งที่ต้องเตรียมอย่างแรกก็คือ ให้ทุกท่านจัดหา โมดูลสื่อสารแบบ RF 433 โดยเราจะใช้เพียง ภาคส่งเท่านั้น จากนั้นทำการเชื่อมต่อเข้ากับบอร์ดของเราตามรูปได้เลยครับ

ที่มา : https://www.arduinoall.com/product/118/433mhz-wireless-rf-transmitter-and-receiver-module

ภาพการต่อสายสัญญาณ สายสีเหลืองต่อเข้ากับขา DIO5,ขา สายสีแดง ต่อกับขา 5V และ สายสีดำ ต่อกับขา GND ของบอร์ด

เมื่อทำการต่อขาสัญญาณเรียบร้อยแล้วให้ทุกท่าน ดาวน์โหลด Library สำหรับใช้ในการควบคุมไปติดตั้งยังโปรแกรม Arduino

https://goo.gl/ICw74h

จากนั้นเปิดไฟล์ใหม่ขึ้นมาและคัดลอก code ด้านล่างนี้ลงไปและเปลี่ยนค่าสำหรับเชื่อมต่อกับ netpie ทั้งสามส่วนคือ APPID,KEY,SECRET เสร็จแล้วจึง UPLOAD ลงไปยังบอร์ดที่เราเตรียมไว้

#include <AuthClient.h>
#include <MicroGear.h>
#include <MQTTClient.h>
#include <SHA1.h>
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <EEPROM.h>
#include <MicroGear.h>
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>
#include <SPI.h>
#include <livolo.h>

// Please visit netpie.io to get keys
#define APPID   " "
#define KEY     " "
#define SECRET  " "
#define ALIAS   "gratia"

WiFiClient client;
AuthClient *authclient;

char state = 0;

MicroGear microgear(client);
Livolo livolo(5);

//ในการสั่งการทำงานของรีโมท เราจะทำโดยการสั่งผ่านทางฟังก์ชั่น sendButton(unsigned int remoteID, byte keycode)
// remoteID คือรหัสประจำตัวของ remote รหัสตรงนี้ต้องแตกต่างกันในแต่ละชุดส่ง
// keycode  คือรหัสคำสั่งของปุ่มที่ต้องการส่งไปควบคุมสวิตซ์ โดยจะจัดเก็บในรูปแบบรหัส 7 bit
//Keycodes ที่อ่านได้จาก remote: #1: 0, #2: 96, #3: 120, #4: 24, #5: 80, #6: 48, #7: 108, #8: 12, #9: 72; #10: 40, #OFF: 106
void updateIO() {
  Serial.print(">>");
  Serial.println(state);
  switch (state) {
    case '1':
      livolo.sendButton(6400, 0);
      //delay(10);
      Serial.println("key1");
      break;
    case '2':
      livolo.sendButton(6400, 96);
      //delay(10);
      Serial.println("key2");
      break;
    case '3':
      livolo.sendButton(6400, 120);
      //delay(10);
      Serial.println("key3");
      break;
  }
}

void onMsghandler(char *topic, uint8_t* msg, unsigned int msglen) {
  char m = *(char *)msg;
  Serial.print("Incoming message --> ");
  msg[msglen] = '\0';
  Serial.println((char *)msg);
  state = m;
  updateIO();
}

void onConnected(char *attribute, uint8_t* msg, unsigned int msglen) {
  Serial.println("Connected to NETPIE...");
  microgear.subscribe("/gratia/key");
}

void setup() {
  Serial.begin(115200);
  Serial.println("Starting...");

  WiFiManager wifiManager;
  wifiManager.setTimeout(180);

  if (!wifiManager.autoConnect("gratia-hub")) {
    Serial.println("Failed to connect and hit timeout");
    delay(3000);
    ESP.reset();
    delay(5000);
  }

  microgear.on(MESSAGE, onMsghandler);
  microgear.on(CONNECTED, onConnected);

  microgear.init(KEY, SECRET, ALIAS);
  microgear.connect(APPID);
}

void loop() {
  if (microgear.connected()) {
    microgear.loop();
  }
  else {
    Serial.println("connection lost, reconnect...");
    microgear.connect(APPID);
  }
}

เมื่อเรา UPLOAD เสร็จสิ้น ให้เชื่อมต่อเข้าไปยัง บอร์ด โดยใช้การเชื่อมต่อผ่าน WIFI ค้นหา AP ชื่อ gratia-hub จากนั้นเข้าไปตั้งค่าการเชื่อมต่อ WIFI ให้กับบอร์ดของเราเมื่อเชื่อมต่อสำเร็จเราก็พร้อมใช้งานกันแล้ว

ขั้นตอนสุดท้าย โหลดไฟล์หน้าควบคุม ที่สร้างจาก HTML5 นี้ลงไปที่เครื่องของท่าน จากนั้นแก้ไขค่า APPID,KEY,SECRET ให้พร้อมใช้งานร่วมกับ NETPIE จากนั้นเปิดไฟล์ index.html ขึ้นมาก็จะพบหน้าจอพร้อมใช้งานของหน้าต่างรีโมท หากต้องการใช้งานจากหลายๆอุปกรณ์ สามารถอัพโหลดไฟล์นี้ไปยัง เว็บเซิฟเวอร์เพื่อให้สะดวกต่อการเรียกใช้ผ่านอินเตอร์เน็ต

https://goo.gl/bMLfiF

เมื่อเข้าไปยังไฟล์ index.html จะพบหน้ารีโมทจำลองดังภาพ

เมื่อเราเตรียมสภาพแวดล้อมในการทำงานเสร็จครบทุกส่วนแล้ว ต่อไปเราจะทำการผูกค่าของปุ่มรีโมทที่เราสร้างขึ้นเข้ากับปุ่มบนสวิตช์ของ gratia โดยการกดปุ่มบนสวิตช์ gratia ที่ต้องการผูกค่า ค้างไว้จนได้ยินเสียง ปี๊บ หนึ่งครั้ง จากนั้นกดปุ่มรีโมทบนเว็บแอพของเราหากสำเร็จจะได้ยินเสียงตอบรับการตั้งค่าเป็นเสียงปิ๊บจากสวิตช์ gratia ทำซ้ำขั้นตอนดังกล่าวกับปุ่มที่เหลือ คราวนี้ระบบเราก็จะพร้อมใช้แล้วครับ

YouTube Preview Image


ที่มาและแหล่งข้อมูล :
https://github.com/platenspeler/LamPI-2.0/tree/master/transmitters/livolo

LINE BOT API (OFFICIAL) คุม IoT ผ่าน NETPIE.IO ด้วยต้นทุน 0 บาท

LINE BOT API (OFFICIAL) คุม IoT ผ่าน NETPIE.IO ด้วยต้นทุน 0 บาท

หลังจาก ที่ LINE ออก API ตัวใหม่มาซักระยะ และตัว API มีการเปลี่ยนแปลง ผมจึงทำการปรับเนื้อหาให้สอดคล้อง ไว้เป็นสไลด์ที่นำไปใช้สอน จึงได้นำมาอัพเดธให้ทุกท่านเพิ่มเติมด้วย เผื่อใครผ่านมาเห็นบทความนี้ ให้ทำตามเนื้อหาในสไลด์แทนได้เลยนะครับ

สวัสดีครับวันนี้เราจะมาคุยกันเรื่อง ประยุกต์ใช้ LINE BOT กัน โดยจะเป็นเวอร์ชั่น Official (ของแท้อย่างเป็นทางการ) หลายท่านอาจจะเคยลองเล่นในแบบ hack version กันมาบ้างซึ่งมีหลากหลายเจ้าให้เลือกใช้ และก็ด้วยเหตุนั้นละครับ ที่ทางบ.ไลน์เห็นว่าเป็นช่องทางที่นักพัฒนาหลายคนเริ่มให้ความสนใจอย่างหนักหน่วง บ.ไลน์จึงเปิดตัว เจ้า Official ออกมาให้ได้ใช้กันอย่างเป็นกิจจะลักษณะ

ว่าแล้วก็มาเริ่มกันเลย นะครับ วันนี้ ผมจะเล่าตั้งแต่เริ่มจนถึงขั้นเตรียม server เพื่อใช้งานจนจบที่ได้ตัวอย่างการใช้งานกันเลยทีเดียว
เริ่มต้นเรามาทำความรู้จัก เจ้า LINE BOT API กันก่อนว่ามันมีคุณสมบัติอย่างไรและใช้งานยังไงได้บ้างนะครับ ให้ทุกคนเริ่มต้นโดยเข้าไปที่ https://business.line.me/en/ เพื่อที่จะลงทะเบียน Business Account เพราะต้องใช้ในการขอใช้งาน LINE BOT API ในลำดับต่อไป

2016-06-12_17-14-53
2016-06-12_22-48-09

ทำการ login ด้วย Line Account ของเรา

2016-06-12_23-34-04

 ทำการตั้งชื่อ และใส่รูปจากนั้นกด Submit แล้วลุยกันต่อ

2016-06-12_23-36-43

จากนั้นเลือก Start ในส่วนของบริการ BOT API Trial Account เพื่อเริ่มใช้งาน LINE BOT

คราวนี้เราก็จะได้ BOT API มาใช้งานกันแล้วแต่ก่อนจะเริ่มใช้มาทำความเข้าใจบทบาทและผังการทำงานของมันกันคร่าวๆก่อนซึ่งสามารถทำความเข้าใจได้จากผังดังต่อไปนี้

2016-06-12_23-41-22

จากผังจะเห็นว่า BOT API จะทำงานเป็นสื่อกลางระหว่างแอพไลน์ กับ server ของเราโดยจะทำงานแบบสองทาง นั่นคือเราสามารถทั้งส่งและรับข้อความจากผู้ใช้งาน LINE

โดยความสามารถและปริมาณการใช้งานของ API จะถูกแบ่งเป็น สองแบบ คือ Business Partner จะ Full option จัดเต็ม และอีกแบบคือ ฟรี หรือ Trial version คือแบบที่เรากำลังจะทดลองใช้กันจะมีข้อจำกัดชัดๆเลยคือ จะรองรับได้เพียง 50 Line contact และส่งได้เพียงข้อความธรรมดากับ แบบ Rich message แต่ก็เพียงพอสำหรับการทดลองทำอะไรสนุกได้มากมายเลยทีเดียว

2016-06-16_21-58-44
dd

เอาละมาลุยกันต่อ กด “ใช้” เพื่อเข้าใช้งาน

2016-06-16_22-19-08

เราจะพบกับหน้าต่างรายละเอียดต่าง ๆ ของ BOT เรา โดยจะมีรายละเอียดสามส่วนที่เราต้องให้ความสนใจคือ

dfdf

1.ส่วนข้อมูลสำหรับเชื่อมใช้สื่อสารจาก server ของเรามายัง LINE BOT API ประกอบไปด้วย

  • Channel ID                 เป็น ID ของ ช่องทางของ bot เรา
  • Channel Secret เป็นรหัสลับของ ช่องทางของ Bot
  • MID เป็นรหัสประจำตัวของ BOT ซึ่งรหัสนี้จะเป็น key ที่ใช้ในการสื่อสาร

ต่อมาจะเป็นส่วนที่สำคัญอีกสองส่วนซึ่งจะเป็นส่วน ที่ server ของ Line Bot ใช้เป็นช่องทางในการติดต่อกับ ระบบของเรา

ddwww

2.ส่วนกำหนดการเชื่อมต่อเพื่อให้ทาง API ใช้เป็นช่องทางเชื่อมต่อกับระบบเรา จะกำหนดที่บริเวณ Callback URL มาถึงจุดนี้ขอเน้นย้ำกับคนที่กำลังจะต้องใช้งานก่อนนะครับว่า Line ระบุไว้ว่า ปลายทางที่จะให้ API ติดต่อไปนั้นต้องเป็นเว็บที่เป็น HTTPS โดยต้องมีใบรับรองตามรายการที่กำหนดไว้ ซึ่งจำกัดพอสมควรสำหรับใครจะใช้ เว็บ CA ที่เป็นแบบฟรีหรือออกด้วยตัวเอง หมดสิทธิ์นะครับ แต่ใช่ว่าสายทดลองอย่างเราจะหมดหนทาง ไว้ผมจะเล่าต่อในขั้นตอนถัดไป วันนี้ผมจะให้ทุกคนได้เล่นโดยไม่ต้องลงทุนแม้ซักบาทเดียว

yyy

3.ส่วนสุดท้ายหลายคนอาจจะลองแล้วถึงกับงงว่าทำไมกำหนดค่าต่าง ๆตามไกด์ไลน์ครบแล้วแต่ยังไม่สามารถสื่อสารกับทาง API ได้ เนื่องจากว่ามันจะต้องมีการกำหนด IP ในรายการ White list ด้วยเพราะถ้าไม่กำหนด ทางไลน์ก็จะปฏิเสธการสื่อสารที่ส่งเข้ามาจาก server ของเรา

2016-06-23_16-54-47

หลังจากทำความเข้าใจองค์ประกอบในการทำงานร่วมกับ LINE BOT API กันเป็นที่เรียบร้อยแล้ว คราวนี้เราก็จะมาเตรียมสภาพแวดล้อมในการทำงานร่วมกับ เจ้า API ตัวนี้กัน นั่นคือ เว็บ เซิฟเวอร์ที่มีการเข้ารหัสHTTPS (SSL/TLS)  โดยใบรับรองจะต้องอยู่ในรายการที่ทาง LINE ระบุไว้ ความหนักใจจะเริ่มเกาะกุมกัน ณ จุดนี้ เพราะว่า เจ้าใบรับรองที่ว่าเนี่ยไม่สามารถใช้อันที่เป็นแบบ open หรือ ออกเองได้ เพราะงั้นก็ต้องเสียตังค์กันล่ะ แต่เดี๋ยวก่อน หลังจากที่ได้ทำการค้นหาทางออกทั้งจาก Google และ พี่ๆในวงการ ทางสว่างก็พุ่งเข้าใส่จากมิตรสหายร่วมวงการหลายท่านที่ต่างก็ประสานเสียงกันมาว่า Heroku.com ช่วยท่านได้ รออะไรล่ะครับไปกันโลด

2016-07-09_21-42-02

ขั้นแรกก็สมัครกันเลยเพื่อจะเริ่มต้นใช้งานกันในลำดับต่อไป

2016-07-09_21-45-29

เมื่อสมัครสำเร็จเราก็ไปบรรเลงกันต่อ

หลังจากนี้ให้เราสร้าง APP ขึ้นมาโดยตั้งชื่อตามใจชอบได้เลยนะครับ จากนั้นเราจะไป deploy code ของเรากันต่อโดยในครั้งนี้เราจะสร้าง web service ที่ใช้สื่อสารกับ LINE BOT API ด้วยภาษา PHP ซึ่งตัวอย่างนั้นทาง LINE ได้เตรียมตัวอย่างไว้ให้ได้นำมาประยุกต์ใช้ได้อย่างสะดวกซึ่งนอกจาก ภาษา PHP แล้วก็ยังมีอีกหลายภาษาใครถนัดภาษาไหนเลือกกันได้ตามสะดวกเลยจ้า

https://github.com/line
2016-07-09_22-08-39

กลับมาต่อที่การ Deploy งานของเราขึ้นไปยัง server ของ heroku.com ซึ่งทางเว็บได้จัดช่องทางไว้ให้หลากหลายเลือกใช้กันได้ตามสะดวกโดยผมเลือกใช้ Git ของ heroku โดยจะใช้งานผ่านทางโปรแกรมชื่อ “Heroku Toolbelt” โดยขอให้ทุกท่านทำตามขั้นตอนที่ ทางเว็บแนะนำไว้ได้เลยครับ

2016-07-09_22-46-04
https://toolbelt.heroku.com/

เมื่อติดตั้งเสร็จให้ทำการ login ไปยัง heroku โดยกระบวนการทั้งหมดจะทำผ่าน ทาง หน้าต่าง CMD ของวินโดวส์นะครับ

2016-07-09_22-49-22

ต่อมาลงเครื่องมือจำเป็นอื่นๆ ดังนี้ (ถ้าลงไว้อยู่แล้วผ่านไปได้เลยนะครับ)

เมื่อเตรียมพร้อมครบแล้วเราก็ไปกันต่อ หนทางเหลืออีกไม่ไกลแล้ว

ต่อมาสำเนา ตัวอย่าง code php จาก git ของทาง heroku เพื่อทำการต่อเติมและเริ่มการทำงาน

2016-07-09_23-09-52

เราจะได้ตัวอย่าง code มาดังภาพ

2016-07-10_0-02-38

ให้ทำการเพิ่มไฟล์ส่วนการทำงานที่ใช้ติดต่อกับ LINE BOT API ลงไป โดยตัวอย่างจะนำเอา Echo Bot มาประยุกต์เพิ่มเติมส่วนการเชื่อมต่อกับ NETPIE.IO ลงไป

[callback.php]

&lt;?php
&nbsp; require("pub.php");

&nbsp;
&nbsp; $channelId = "--LINE Channel ID--";
&nbsp; $channelSecret = "--LINE Channel Secret--";
&nbsp; $mid = "--LINE BOT MID--";

&nbsp;
&nbsp; $requestBodyString = file_get_contents('php://input');
&nbsp; $requestBodyObject = json_decode($requestBodyString);
&nbsp; $requestContent = $requestBodyObject-&gt;result{0}-&gt;content;
&nbsp; $requestText = $requestContent-&gt;text;
&nbsp; $requestFrom = $requestContent-&gt;from;
&nbsp; $contentType = $requestContent-&gt;contentType;

&nbsp; getMqttfromlineMsg($requestText);
&nbsp;
&nbsp; $headers = array(
&nbsp;&nbsp;&nbsp; "Content-Type: application/json; charset=UTF-8",
&nbsp;&nbsp;&nbsp; "X-Line-ChannelID: {$channelId}", // Channel ID
&nbsp;&nbsp;&nbsp; "X-Line-ChannelSecret: {$channelSecret}", // Channel Secret
&nbsp;&nbsp;&nbsp; "X-Line-Trusted-User-With-ACL: {$mid}", // MID
&nbsp; );

&nbsp;
&nbsp; $responseText = &lt;&lt;&lt; EOM
「{$requestText}」 this is msg echo from Line Bot API。http://binahead.com
EOM;

&nbsp;
&nbsp; $responseMessage = &lt;&lt;&lt; EOM
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "to":["{$requestFrom}"],
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "toChannel":1383378250,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "eventType":"138311608800106203",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "content":{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "contentType":1,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "toType":1,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "text":"{$responseText}"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp; }
EOM;
&nbsp;
&nbsp;
&nbsp;
&nbsp; $curl = curl_init('https://trialbot-api.line.me/v1/events');
&nbsp; curl_setopt($curl, CURLOPT_POST, true);
&nbsp; curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
&nbsp; curl_setopt($curl, CURLOPT_POSTFIELDS, $responseMessage);
&nbsp; curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
&nbsp; curl_setopt($curl, CURLOPT_HTTPPROXYTUNNEL, 1);
&nbsp; curl_setopt($curl, CURLOPT_PROXY, getenv('FIXIE_URL'));
&nbsp; $output = curl_exec($curl);

?&gt;

ในการทำงานร่วมกับ server ของ netpie.io ผมได้แยกไว้อีกไฟล์หนึ่งเพื่อสะดวกต่อการแก้ไขโดยหลัการทำงานคือ เมื่อได้รับข้อความที่ส่งมาจาก Line เราจะนำมาแยกส่วนของ ข้อความออก ด้วยการเรียกฟังก์ชั่น getMqttfromlineMsg($requestText) โดยจะทำการแยกข้อความโดยมีเงื่อนไขคือจะตรวจสอบว่าข้อความที่เข้ามานั้นมีอักขระ “:” เข้ามาด้วยหรือไม่ หากมีให้ทำการแยก และเก็บส่วน แรกไว้เป็น topic และส่วน หลังไว้เป็น message แต่หากไม่พบจะส่งผ่าน message นั้นภายใต้ topic ที่ชื่อว่า “RAW” จากนั้นจะส่งต่อไปยัง ฟังก์ชั่น pubMqtt($topic,$msg) และ put($url,$tmsg) ตามลำดับ โดยในขั้นตอนของ ฟังก์ชั่น put($url,$tmsg) เราจะต้องส่งค่าเข้าไปด้วยกันสองค่าคือ

  • $url    คือ ที่อยู่สำหรับเรียกใช้ REST API ของ NETPIE.IO โดยจะมีส่วนของ topic และ APP ID บรรจุไว้ด้วย
  • $tmsg คือ ข้อความที่ต้องการส่ง

ภายในฟังก์ชั่น put($url,$tmsg) จะทำงานด้วย ฟังก์ชั่น Curl เพื่อสร้าง Header สำหรับสื่อสารไปยัง server ของ netpie.io  จุดที่ต้องแก้ไข คือ ส่วนของ

curl_setopt($ch, CURLOPT_USERPWD, “{YOUR NETPIE.IO APP KEY}:{YOUR NETPIE.IO APP SECRET}”)

ให้เรากำหนดค่า ที่ได้รับจาก netpie ของแต่ละท่าน

ตัวอย่างสำหรับการใช้งาน REST API ของ netpie.io สามารถเข้าศึกษาเพิ่มเติมได้ที่ https://github.com/netpieio/microgear-restapi

[pub.php]

&nbsp;&lt;?php

&nbsp;&nbsp; function pubMqtt($topic,$msg){
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; put("https://api.netpie.io/topic/binahead/$topic?retain",$msg);

&nbsp; }
&nbsp; function getMqttfromlineMsg($lineMsg){

&nbsp;&nbsp;&nbsp; $pos = strpos($lineMsg, ":");
&nbsp;&nbsp;&nbsp; if($pos){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $splitMsg = explode(":", $lineMsg);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $topic = $splitMsg[0];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $msg = $splitMsg[1];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pubMqtt($topic,$msg);
&nbsp;&nbsp;&nbsp; }else{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $topic = "raw";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $msg = $lineMsg;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pubMqtt($topic,$msg);
&nbsp;&nbsp;&nbsp; }
&nbsp; }

&nbsp; function put($url,$tmsg)
{
&nbsp;&nbsp;&nbsp; &nbsp;
&nbsp;&nbsp;&nbsp; $ch = curl_init($url);

&nbsp;&nbsp;&nbsp; curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
&nbsp;&nbsp; &nbsp;
&nbsp;&nbsp;&nbsp; curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
&nbsp;&nbsp; &nbsp;
&nbsp;&nbsp;&nbsp; curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
&nbsp;&nbsp; &nbsp;
&nbsp;&nbsp;&nbsp; curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
&nbsp;&nbsp; &nbsp;
&nbsp;&nbsp;&nbsp; curl_setopt($ch, CURLOPT_POSTFIELDS, $tmsg);

&nbsp;&nbsp;&nbsp; curl_setopt($ch, CURLOPT_USERPWD, "{YOUR NETPIE.IO APP KEY}:{YOUR NETPIE.IO APP SECRET}");
&nbsp;&nbsp; &nbsp;
&nbsp;&nbsp;&nbsp; $response = curl_exec($ch);
&nbsp;&nbsp; &nbsp;
&nbsp;&nbsp;&nbsp; curl_close ($ch);
&nbsp;&nbsp; &nbsp;
&nbsp;&nbsp;&nbsp; return $response;
}

?&gt;

เมื่อทุกท่านปรับแต่งไฟล์เรียบร้อยแล้วเราก็จะได้ไฟล์ใหม่ดังภาพด้านล่างและพร้อมที่จะอัพไฟล์ขึ้น server ของ heroku กันแล้วละครับทีนี้

2016-07-10_0-54-55

มาต่อด้วยการ Deploy App ที่เราพึ่งจะปรับแก้ขึ้นไปยัง heroku ก่อนอื่นเราต้องสร้าง App กันก่อนในที่นี้เราสามารถตั้งชื่อโดยการระบุ ไปในพารามิเตอร์ของคำสั่ง create ได้เลย

2016-07-09_23-08-46

จากนั้นทำการสร้าง Git Repository บน heroku และทำการ push ข้อมูลขึ้นไปยัง git

2016-07-09_23-17-36
2016-07-09_23-18-15
2016-07-09_23-19-23

หากเราอัพโหลดสำเร็จจะพบข้อความดังนี้

2016-07-09_23-21-59

จากนั้นเราจะสั่งให้ instance ทำงานโดย เรียกคำสั่ง heroku ps:scale web=1

2016-07-09_23-24-21

เราสามารถตรวจสอบการทำงานได้โดยคำสั่ง heroku open

2016-07-09_23-25-43

โปรแกรมจะทำการเปิดหน้าเว็บบราวเซอร์ขึ้นมาและแสดงผล

2016-07-09_23-28-17

เป็นอันเสร็จพิธีคราวนี้เราก็ไปดำเนินการต่อในอีกขั้นตอนสำคัญซึ่งหากไม่ทำ service ของเราจะคุยกับ LINE BOT API ไม่ได้เพราะว่า IP ที่ได้รับแจกจากระบบของ heroku จะเป็นแบบ dynamic มันจึงเปลี่ยนแปลงอยู่เรื่อยๆซึ่งนั่นจะทำให้การกำหนด Whitelist ทำได้ยากเพราะฉะนั้นสิ่งที่เราต้องทำอีกอย่างคือการกำหนดให้ IP ของ APP เราเป็นแบบ FIX IP โดยจะทำจากการติดตั้ง Add-Ons เพิ่มเข้าไป พระเอกของเราวันนี้ชื่อว่า Fixie

2016-07-09_23-38-19
2016-07-09_23-39-27

ในขณะที่เราทำการเพิ่ม Add-Ons นั้นจะมีหน้าต่างขึ้นมาแจ้งเตือนว่าไม่สามารถเพิ่ม Add-Ons ได้แถมยังให้เราไปเพิ่มเติมส่วนของข้อมูลบัตรเครดิตเสียอีก (อ่าวไหนว่าฟรี) ไม่ต้องตกใจนะครับ เป็นกระบวนการตามมาตรฐานเพราะว่าหลักการให้บริการของ heroku นั้นเขาจะมีโควตาในการใช้งานระบบอยู่ในระดับหนึ่งและหากเราใช้ทรัพยากรมากเกินโควต้าเมื่อไหร่เขาจึงจะเริ่มคิดเงิน ซึ่งจากการทดลองใช้งานแล้วนั้นพบว่าโควตาฟรีที่ให้มาเพียงพอต่อการใช้งานส่วนตัวหรืองานทดลองของ Maker อย่างเราๆได้อย่างสบายๆไม่ต้องกังวลใจไปครับ เพราะฉะนั้นก็เพียงแค่ให้ทุกท่านไปกรอกข้อมูลไว้เป็นพิธีแล้วกลับมาสั่งการทำงาน Add-Ons แล้วเราจะได้ IP มาชุดนึงจากนั้นจึงนำไปกำหนดในส่วนของ Whitelist ที่เคยกล่าวถึงในช่วงแรกก็เป็นอันเสร็จพิธีครับผม

2016-07-09_23-40-08
2016-07-09_23-46-40

หลังจากที่เราเตรียมทุกอย่างเรียบร้อยคราวนี้ก็ถึงเวลาทดสอบกัน การใช้งานก็ไม่ยุ่งยากซับซ้อนอะไรเพียงเรา เพิ่มเพื่อนด้วยการสแกน QR CODE ที่ทางระบบ LINE สร้างให้ จากนั้นจึงทดลองส่งคำสั่งไปเปิดปิดไฟกัน

– ตัวอย่างการสั่งปิดไฟ –

13616165_1212450215474487_333953163_o

– ตัวอย่างการสั่งเปิดไฟ –

13633373_1212450222141153_701777482_o

ที่มาและแหล่งข้อมูล :

  • https://developers.line.me/bot-api/overview
  • https://devcenter.heroku.com/articles/getting-started-with-php#set-up
  • https://github.com/netpieio/microgear-restapi
  • http://iti.hatenablog.jp/entry/2016/04/27/113053
  • http://ola.kironono.com/entry/2016/04/09/205251
  • http://huli.logdown.com/posts/726082-line-bot-api-tutorial
  • http://qiita.com/teyosh/items/567ee416c94c2af2fe91
  • https://github.com/bluerhinos/phpMQTT
  • https://github.com/aszx87410/line-bot/blob/master/src/line-bot.js
  • https://github.com/chavee/PieSonoff

DIY IoT ไร้สายพลังงานแสงอาทิตย์ ด้วย โคมไฟสนามพลังแสงอาทิตย์

DIY IoT ไร้สายพลังงานแสงอาทิตย์ ด้วย โคมไฟสนามพลังแสงอาทิตย์

DIY IoT ESP8266 Solar cell

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

  • แผงพลังงาน
  • วงจรแปลงกระแส
  • แบตเตอรี่สำหรับประจุไฟสำรอง
  • กล่องหรือวัสดุเปลือกหุ้มที่สามารถทนต่อสภาพอากาศภายนอกได้
  • อุปกรณ์ IoT ที่ต้องการใช้งาน

จะเห็นว่าองค์ประกอบเยอะแยะเลยทีเดียว ความวุ่นวายยังไม่จบแค่นั้นเราต้องรวบรวมของเหล่านี้เข้าด้วยกัน หล่อบ้างขี้เหล่บ้างปะปนกันไปแล้วแต่ว่าเราได้อะไรมาทำ ด้วยเหตุผลข้อนี้ผมจึงพับโครงการที่จะทดลองเกี่ยวกับเรื่องดังกล่าวไว้ระยะนึง จนวันหนึ่งบังเอิญได้ไปเดินในห้างค้าวัสดุแถวบ้านแล้วพบเข้ากับโคมสนามรูปทรงสะดุดตาจึงจับมาผลิกไปหมุนมา ทันใดนั้นความคิดก็แล่นเข้ามาในหัวทันทีสนุกล่ะงานนี้

ก่อนอื่นผมขอนำเสนอพระเอกของงานนี้นั่นคือ โคมไฟสนามพลังงานแสงอาทิตย์ที่จะรับบทบาทในการเป็นทั้งแหล่งพลังงานและเปลือกห่อหุ้มชิ้นงานที่แทบจะไม่ต้องทำอะไรเลยหลังจากที่ผมได้สะดุดตากับเจ้าแท่งหรรษาที่ห้างค้าวัสดุ แต่ไม่ได้ซื้อเจ้าชิ้นนั้นกลับมาด้วยเนื่องจากพบว่ามันเก็บและจ่ายไฟได้ไม่มากเพราะเราต้องการจะนำมาใช้กับ ESP8266 ซึ่งตามเอกสารจะบอกไว้ว่าจะใช้พลังงานขณะทำงานรับส่งข้อมูลอยู่ราวๆ 120mA ผมจึงทำการหาข้อมูลทันทีหลังจากกลับถึงบ้าน และได้พบกับข้อมูลว่ามันมีหลายรุ่นให้เลือกมากมายทีเดียว

21-2-2559 22-44-36

แล้วผมก็ได้ตัวที่น่าจะตอบโจทย์ของผมเรื่องปริมาณกระแสและแรงดัน ได้เป็นตัวชุดโคม 24 LED แผงโซล่าเซลล์แรงดัน 6 V 120 mAh มาโดยภายในจะมีถ่าน Ni-MH 1.2V มา 3 ก้อน ความจุ 1800 mAh นับลูกคิดดีดนิ้วแล้วพอไหว แต่ต้องตัดวงจร LED ทิ้งเพราะไม่เช่นนั้นการใช้งานช่วงที่ไม่มีแสงจะแย่งพลังงานกันน่าดูทีเดียว

od
s1
21-2-2559 23-10-29

ภาพและข้อมูลสินค้าจาก http://www.solarexpertshop.com

หลังจากได้มาผมก็จับฉำแหละเพื่อดูไส้ใน สิ่งที่พบคือการเรียงวจจรอย่างง่ายที่ใช้ชิ้นส่วนอิเล็กทรอนิกส์ไม่กี่ชิ้นแต่ก็เพียงพอที่เราจะประยุกต์ใช้กัน

ทดสอบการจ่ายกระแสของแผงโซล่าเซลล์
ทดสอบการจ่ายกระแสของแผงโซล่าเซลล์
ลักษณะของชิ้นส่วนวงจรต่างๆภายในโคม
ลักษณะของชิ้นส่วนวงจรต่างๆภายในโคม
วงจรภายในของโคมไฟสนาม
วงจรภายในของโคมไฟสนาม

จากวงจรจะเห็นว่า โคมไฟนี้ใช้ทรานซิสเตอร์สองตัวทำหน้าที่เป็นสวิตซ์เปิดปิดหลอด Led โดยจะทำงานเมื่อแรงดันจากโซล่าเซลล์ลดต่ำลงทำให้ มีกระแสไหลผ่านทรานซิสเตอร์ T2 หลอด LED ก็จะติด ณ จุดนี้เราไม่ต้องสนใจเลยเพราะเราทำการตัดสายเชื่อมต่อหลอด LED ทั้งหมดออกไปแล้วเพื่อลดการดึงกระแสของแบตสำรอง

การตัดต่อเพิ่มเติมภายในวงจรเดิมของโคมไฟ
การตัดต่อเพิ่มเติมภายในวงจรเดิมของโคมไฟ

สิ่งที่เราต้องทำเพียงแค่ บัดกรีสายไฟบวก ไฟลบเข้าที่ขั้วของถ่านสำรอง จากนั้นก็นำไปพักรอเชื่อมต่อกับบอร์ด IoT ของเราได้เลยโดยจะต้องแน่ใจว่าเราต่อมันผ่านขาที่เป็นขาก่อนเข้า วงจรปรับแรงดันเพื่อป้องกันการทำลายบอร์ดจากแรงดันเกินโดยไม่ตั้งใจ

การต่อสายไฟเลี้ยงเข้ากับวงจรของบอร์ด ESP8266 พร้อมกับเซนเซอร์
การต่อสายไฟเลี้ยงเข้ากับวงจรของบอร์ด ESP8266 พร้อมกับเซนเซอร์

จากนั้นก็ประกอบแล้วเอาไปทดสอบกันเลย จากตัวอย่างผมใช้การทดสอบส่งข้อมูลของเซนเซอร์ตรวจจับอุณหภูมิและความชื้น(ขาประจำ) ส่งค่าไปแสดงผลที่เว็บ thingspeak.com ผลการทำงานเป็นไปได้ด้วยดี

ทดสอบประกอบและเริ่มการส่งข้อมูลขึ้นไปยัง server ของ thingspeak.com
ทดสอบประกอบและเริ่มการส่งข้อมูลขึ้นไปยัง server ของ thingspeak.com
ทดลองติดตั้งภายนอกเพื่อดูผลการทำงาน
ทดลองติดตั้งภายนอกเพื่อดูผลการทำงาน

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

ESP8266 ติดต่อ water flow sensor เพื่อวัดการอัตราการไหลของน้ำ หรือ ของเหลว

ESP8266 ติดต่อ water flow sensor เพื่อวัดการอัตราการไหลของน้ำ หรือ ของเหลว

esp8266_Water_Flow_Sensor

วันนี้มาปัดฝุ่นเว็บด้วยบทความที่เกิดจากความสงสัย(คัน)จากที่มีเพื่อนสมาชิกกลุ่ม ESP8266 Thailand ใน Facebook ขมาสอบถามเรื่องการเขียนโปรแกรมให้เจ้า ESP8266 ติดต่อกับเซนต์เซอร์วัดอัตราการไหลของน้ำ โดยที่ลองทำกับ บอร์ด Arduino แล้วสามารถใช้งานได้แต่ยังไม่สามารถประยุกต์กับเจ้า ESP8266 ได้เป็นผล ผมจึงลองไปซื้อเจ้าเซนเซอร์ตัวดังกล่าวมาเพื่อทดสอบ โดยอ้างอิง code ตัวอย่างของ Arduino ในการประยุกต์


// reading liquid flow rate using Seeeduino and Water Flow Sensor from Seeedstudio.com
// Code adapted by Charles Gantt from PC Fan RPM code written by Crenn @thebestcasescenario.com
// http:/themakersworkbench.com http://thebestcasescenario.com http://seeedstudio.com

volatile int NbTopsFan; //measuring the rising edges of the signal
int Calc;
int hallsensor = 2; //The pin location of the sensor

void rpm () //This is the function that the interupt calls
{
NbTopsFan++; //This function measures the rising and falling edge of the hall effect sensors signal
}
// The setup() method runs once, when the sketch starts
void setup() //
{
pinMode(hallsensor, INPUT); //initializes digital pin 2 as an input
Serial.begin(9600); //This is the setup function where the serial port is

initialised,
attachInterrupt(0, rpm, RISING); //and the interrupt is attached
}
// the loop() method runs over and over again,
// as long as the Arduino has power
void loop ()
{
NbTopsFan = 0; //Set NbTops to 0 ready for calculations
sei(); //Enables interrupts
delay (1000); //Wait 1 second
cli(); //Disable interrupts
Calc = (NbTopsFan * 60 / 7.5); //(Pulse frequency x 60) / 7.5Q, = flow rate

in L/hour
Serial.print (Calc, DEC); //Prints the number calculated above
Serial.print (" L/hour\r\n"); //Prints "L/hour" and returns a new line
}

โดยจะเห็นว่าใน code นั้นจะมีการเรียกใช้ interrupt จำนวนหนึ่งขา เพื่อทำการอ่านสัญญาณที่ส่งมาจากตัวเซนเซอร์ซึ่งจะส่งมาในลักษณะของ สัญญาณแบบ pulse ส่วนหลักการภายในของเซนเซอร์ผมขอยกยอดไว้คุยต่อกันในคราวหน้านะครับ

http://www.seeedstudio.com/depot/images/product/G12%20water%20flow%20sensor.jpg

ทีนี้มาดูกันว่าหากเราจะนำ code ตัวอย่างไปประยุกต์ใช้บน ESP8266 โดยในทีนี้ผมใช้ตัวอย่างเป็นบอร์ด node mcu dev kit นะครับ และใช้ Arduino IDE ในการเขียน เริ่มต้นเราต้องเข้าใจก่อนว่าขาสัญญาณที่เราต้องใช้มันอยู่ตรงไหน อย่างเช่นในตัวอย่างของบอร์ด Arduino นั้นจะมีขาให้เราใช้งานอยู่          ไม่กี่ขาซึ่งเราต้องดูจาก สเปคของ IC ที่ใช้ ซึ่งแตกต่างกันไปตามเบอร์ของบอร์ด Arduino ด้วยเช่นกัน

https://www.arduino.cc/en/Reference/AttachInterrupt
https://www.arduino.cc/en/Reference/AttachInterrupt

คราวนี้มาถึงพระเอกของเรา เจ้า ESP8266 แน่นอนมันก็มีขาที่สามารถใช้งานเป็นขาสัญญาณแบบ interrupt ได้เช่นกันแต่ก็จะแตกต่างออกไปไม่เหมือนหรือตรงกับขาของ บอร์ด Arduino โดยอ้างอิงจากเอกสารของ ESP8266

esp8266-interrupt-pin
https://github.com/esp8266/Arduino/blob/master/doc/reference.md

รายละเอียดการเรียกใช้งาน interrupt ผ่านขา IO ของ ESP8266 ผ่าน Arduino IDE

จากข้อมูลข้างต้นจะเห็นว่าเราสามารถ กำหนดให้ ขาสัญญาณ io ของ ESP8266 ให้เป็นขาสัญญาณ แบบ interrupt ได้ตั้งแต่ io-0 ไปจนถึง io-16 กันเลยทีเดียวเรียกได้ว่าจุใจกว่า Arduino บอร์ดมาก เมื่อรู้ดังนี้เราก็มาลองกำหนดขาสัญญาณให้กับ code ของเราใหม่เพื่อให้สอดคล้องกับขาสัญญาณของ ESP8266 โดยผมเลือกใช้ขาสัญญาณ io5 ในการทำงานในครั้งนี้ซึ่งบนบอร์ด dev kit จะตรงกับขา D1 สำหรับใครที่กลัวจะสับสนแนะนำให้หา Pin map หรือผังขาสัญญาณไว้ข้างตัวจะดีมากเวลาเราต้องต่อขาสัญญาณต่างๆ

nodemcudevkit_v1-0_io

เมื่อเราปรับปรุง code ของเราแล้วก็จะได้หน้าตาประมาณนี้

// reading liquid flow rate using Seeeduino and Water Flow Sensor from Seeedstudio.com

// Code adapted by Charles Gantt from PC Fan RPM code written by Crenn @thebestcasescenario.com

// http:/themakersworkbench.com http://thebestcasescenario.com http://seeedstudio.com

volatile int NbTopsFan; //measuring the rising edges of the signal

int Calc;

int hallsensor = 5;   //The pin location of the sensor

void rpm ()     //This is the function that the interupt calls

{

NbTopsFan++; //This function measures the rising and falling edge of the hall effect sensors signal

}

// The setup() method runs once, when the sketch starts

void setup() //

{

pinMode(hallsensor, INPUT); //initializes digital pin 2 as an input

Serial.begin(9600); //This is the setup function where the serial port is initialised,

attachInterrupt(5, rpm, RISING); //and the interrupt is attached

}

// the loop() method runs over and over again,

// as long as the Arduino has power

void loop ()

{

NbTopsFan = 0;     //Set NbTops to 0 ready for calculations

sei();           //Enables interrupts

delay (1000);     //Wait 1 second

cli();           //Disable interrupts

Calc = (NbTopsFan * 60 / 7.5); //(Pulse frequency x 60) / 7.5Q, = flow rate in L/hour

Serial.print (Calc, DEC); //Prints the number calculated above

Serial.print (" L/hour\r\n"); //Prints "L/hour" and returns a new line

}

แทบจะไม่ต้องเปลี่ยนอะไรมากเน้นว่าต้องเลือกและกำหนดขาให้ถูกต้อง ที่เหลือ ไลบรารี่ของ ESP8266 จัดการให้เกือบหมด (ง่ายเว่อร์จนเกือบจะง่อยรับประทาน 555) เอาละมาว่ากันต่อคราวนี้เราก็ต้องลองของ เอ้ยลอง code ของเรากันหน่อย จัดแจงต่อวงจรตามผังดังนี้เลยครับ เพื่อทดสอบ ย้ำนะครับใครที่ใช้บอร์ดอื่นหรือ เวอร์ชั่นอื่นให้อิงตาม pin map ของรุ่นหรือเวอร์ชั่นของตัวเองนะครับทำตามผมอาจจะไม่เกิดผลได้จ้า

esp8266-interface-waterflow-sensor-diagram

เรียบร้อยคราวนี้เราก็มาดูผลโดย มอนิเตอร์ผ่านทาง serial port จากนั้น เป่าครับ พูดจริงๆ คือเป่าครับถ้า การทำงานไม่ผิดพลาดเราจะพบความฟินที่หน้าจอของเราดังภาพที่ผมได้แนบมา นั่นคือค่าอัตราการไหลที่อ่านได้จากการหนุมของใบพัดข้างในเซนเซอร์

esp8266-interface-waterflow-sensor-arduino

โอเคจบไปแล้วกับบทความสั้นฉบับรีบเขียนรีบใช้ หากท่านใดมีข้อสงสัยติดต่อมาพูดคุยถามไถ่กันได้นะครับ ยินดีให้คำตอบทุกเรื่อง(ที่รู้)จ้า…
สวัสดีครับ

[ที่มา]

  • โปรไฟล์ อุปกรณ์ในโปรแกรม Fritzing

http://www.ayarafun.com/2015/07/esp8266-nodemcu-for-fritzing/
http://omnigatherum.ca/wp/?tag=fritzing

บังคับแขนหุ่นยนต์แบบเสมือน

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

YouTube Preview Image

และนี่เป็น เว็บ เจ้าของต้นแบบ ไอเดียดังในคลิปที่นำมาให้ดูแต่เจ้าตัวนี้เราต้องไปซื้อสินค้าของเขาซึ่งมีชื่อว่า Analogreader มาประกอบเป็นชิ้นงาน หลายท่านก็อาจจะคิดแบบผมว่าถ้าไม่อยากซื้ออยากทำเองได้ไหม ผมตอบให้เลยว่าได้ และผมได้ค้นหาในเบื้องต้นมาให้เรียบร้อยแล้ว โดยเจ้าทางเลือกที่สองนี้จะใช้ Platform ยอดฮิต ที่ตัวผมเองก็ติดงอมแงมนั่นคือ เจ้า Arduino มาช่วยแก้ปัญหาปวดตับให้กับเราในครั้งนี้ได้ โดยรายละเอียดเป็นอย่างไรนั้นเรียนเชิญตามลิงค์ไปเลยจ้า http://hunt.net.nz/users/darran/weblog/a3599/

กล่องปริศนา…….Karakuri boxes

วันนี้เอาสิ่งที่เจอโดยบังเดิญระหว่างนั่งหาข้อมูล ซึ่งพอได้นั่งใช้เวลากับมันซักพักก็พบว่ามันเป็นอะไรที่น่าสนใจไม่น้อย เลย สิ่งที่ผมกำลังเกริ่นถึงอยู่มันคือ กล่อง ปริศนา,กล่องลับ หรือ Puzzle Box,Secret box ซึ่งจากที่ดูๆแล้วก็น่าจะเป็นที่นิยมของต่างประเทศอยู่ไม่น้อยโดยจากที่ลองค้นหาต่อพบว่าเป็นสิ่งที่ได้รับอิทธิพลมาจากวัฒนธรรมของประเทศญี่ปุ่น มีชื่อในภาษาญี่ปุ่นว่า Karakuri boxes

ซึ่งตัวผมเองก็เพิ่งจะเคยเห็นว่าเขาศึกษากันเป็นจริงเป็นจังก็ตอนที่มาเจอเข้าโดยบังเอิญระหว่างนั่งหาข้อมูลเพื่อทำงาน และที่ทำให้ผมต้องเบียดบังเวลางานหลักลงมาอ่านมันอย่างตั้งใจเพราะว่าเจ้าสิ่งนี้เหมือน เป็นสิ่งเติมจินตนาการวัยเด็กของผมเกี่ยวกับหนังผจญภัย หรือ แนวลึกลับซ่อนปม ยกตัวอย่าง Indiana_Jones,National_Treasure หรือ หนังที่ เคยถูกจับตามองอย่าง The_Da_Vinci_Code ล้วนจะมีเจ้ากล่องกลไกอะไรประเภทนี้แฝงอยู่เป็นองค์ประกอบของหนังโดยทั้งสิ้น และมันก็ทำให้ผมตื่นตาตื่นใจไม่ใช่น้อย และเมื่อวันนี้ได้รู้ว่ามันสามารถสร้างได้เองจากวัสดุง่ายๆที่หาได้ตามท้องถิ่นก็เลยคิดว่า ขอเอามาแบ่งปันเพื่อนๆ ด้วยเผื่อมีใครสนใจในเรื่องราวดังกล่าวแบบผม จะได้มีงานอดิเรกเพิ่มอีกซักชิ้นนึง สำหรับรายละเอียดและตัวอย่างการทำ ผมได้แนบท้ายไว้แล้วใน บทความนี้ เพื่อให้ท่านที่สนใจตามไปบูรณาการต่อกันได้ตามสะดวกเลยนะครับ อ่ออีกนิดนึงหลังจากที่ลองตามกลิ่นจาก wording ที่เกี่ยวกับคำว่า “Karakuri” ก็ทำให้ไปพบกับบทสนทนาหนึ่ง ซึ่งพูดคุยเกี่ยวกับความหมาย และหัวข้อที่เกี่ยวกับเจ้าคำนี้ ซึ่งในเนื้อความอธิบายโดยจับใจความได้ว่ามันมีการใช้เจ้าคำนี้ในการจำกัดความถึงวิธีการสร้างเครื่องมือกลไกเพื่อทำให้การทำงานดีขึ้น ตัวรายละเอียดก็น่าใจมิใช่น้อยเช่นกันก็อยากฝากให้ลองติดตามไปอ่านกันดูน่ะครับ โดยในบทสนทนามีการอ้างอิงลิงค์ไปยังเว็บอีกหลายแห่งที่เกี่ยวข้องกันกับเรื่องด้วยและหนึ่งในนั้นมีเว็บที่สร้างไว้เพื่อนำเสนอหลักแนวคิดในแบบ Interactive ที่เราสามารถมีส่วนร่วมไปกับเนื้อหาของเว็บซึ่งส่วนตัวผมคิดว่าทำไว้ได้ดีเลยละ แต่หน้าตาอาจจะเชยไปบ้างแต่สำหรับผมมองว่านั่นไม่สำคัญเท่าความรู้ที่ได้ ก็ฝากลองไปสำรวจกันอีกที่นะครับผม สวัสดีครับ

YouTube Preview Image

ที่มา:

อันนี้เป็นเว็บของทางญี่ปุ่นครับ
>> http://www.karakuri.gr.jp/creation/index.html

ส่วนอันนี้จะเป็นของทางอังกฤษ ที่สำคัญมีแบบแปลนให้เราโหลดได้ฟรีไปลองทำเองกันได้ด้วย
>> http://homepage.ntlworld.com/bruce.viney/

เว็บที่พบบทสนทนาเกี่ยวกับ karakuri
>> http://www.tpa.or.th/tpawbs/viewtopic.php?id=1023

เว็บที่ให้เราลองคิดตามแนวคิดของ karakuri
>> http://www.karakuri.gr.jp/

ถูกใจขวัญใจสาว 2D กันละงานนี้

วันนี้เอาตัวอย่างงานที่ประยุกต์เทคโนโลยี AR (argument reality) มาใช้ในการเติมจินตนาการของผู้ที่คลั่งไคล้ได้สมใจกันเสียทีไม่แน่อนาคตเราอาจจะได้เห็นหนุ่มครองตัวเป็นโสดด้วยเหตุเพราะเจ้าเทคโนโลยีนี้ก็เป็นได้………..

YouTube Preview Image

ที่มา : http://hackaday.com/2012/07/07/going-to-the-park-with-your-augmented-reality-girlfriend/

อีกหน่อยเราจะเห็นมันในงานต่างๆในชีวิตประจำวันอย่างจริงจัง…

หากจะกล่าวถึงวงการอากาศยานไร้นักบินตอนนี้ต้องบอกว่ามันก้าวเกินขีดจำกัดที่ในอดีตมีแล้ว จะเห็นได้ว่าในปัจจุบันเราโลกเรามีอากาศยานไร้นักบินที่สามารถทำงานในรูปแบบที่หลากหลายมากกว่าเมื่อก่อนที่จะมุ่งไปในลักษณะของเครื่องบินทั่วไปและมักใช้ในงานเฉพาะ แต่วันนี้มันถูกนำไปใช้อย่างหลากหลายและผู้ที่สนใจสามารถศึกษาแล้วเข้าถึงได้มากขึ้น วันนี้ไปเจอคลิปน่าสนใจมาซึ่งแสดงถึงศักยภาพของเทคโนโลยีที่พัฒนาไปอย่างรวดเร็วของอากาศยานไร้นักบิน เป็นอย่างไรไปดูกัน

YouTube Preview Image

ที่มา:http://hackaday.com/2012/07/06/lift-beer-with-quadcopters-win-prizes/