วันเสาร์ที่ 7 มกราคม พ.ศ. 2560

iBeacon ด้วย HM10 BLE (Bluetooth Low Energy)




iBeacon ก่อกำเนิดจากค่าย Apple จุดประสงค์หลักๆ เพื่อใช้ในการระบุตำแหน่งภายในอาคาร ที่เป็นข้อหนึ่งที่ GPS ทำไม่ได้ เพราะดาวเทียมส่งพิกัดเข้ามาไม่ได้ จึงนำเอาความสามารถของ Bluetooth 4.0 มาประยุกต์ใช้

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

การจะทำได้ตัวชิป Bluetooth ต้องรองรับเทคโนโลยี 4.0 ซึ่ง HM-10 ขึ้นไปจึงจะใช้ได้

จริงแล้วการตั้งค่าให้ HM-10 ให้ทำหน้าที่ iBeacon ก็ไม่ได้ยุ่งยากอะไร ถ้าซื้อแบบที่มี Breakout board คือติดตั้ง HM-10 ก็อุปกรณ์เสรืมนิดหน่อยเพื่อให้เชื่อต่อกับ PC ได้ ก็ทำการเชื่อมต่อสาย Tx Rx VCC GND แล้วส่งชุดคำสั่ง AT Command ผ่าน Serial monitor เข้าไป ก็เรียบร้อยแล้ว

แต่ปัญหามันก็เกิดขึ้นจนได้

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

ก็มีทั้งบทความและคลิปบนยูทูป แนะนำวิธีการ แต่ก็น่าจะมาจากแหล่งเดียวกัน

ก็ถือโอกาสทำความเข้าใจแล้วก็มานำเสนอต่ออีกที

ยังไงก็ให้เครดิตกับคนที่คิดค้นวิธีการด้วยนะครับ ดูได้จากท้ายบทความนี้

ส่วนแรกจะมากล่าวถึงการทำบอร์ดไม่แท้ ให้สามารถรับคำสั่งที่บอร์ดแท้สามารถทำได้เสียก่อน

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

สิ่งแรกจะต้องมีสิ่งเหล่านี้

1. บอร์ด Arduino รุ่นไหนก็ได้ ถ้าแน่ๆที่ได้ทดลองคือ UNO
2. สายไฟเพื่อเชื่อมต่อจาก HM-10 อันนี้ต้องมีหัวแร้งเพื่อทำการบัดกรี
3. สร้าง Sketch บน Arduino แล้วนำโค๊ด CCLoder.ino มาวาง ก๊อปปี้ได้จาก ที่นี่ แล้วก็อัพโหลด
4. CCLoader.exe  โปรแกรมช่วยในการนำ Firmware ใส่เข้าใน HM-10 โหลดจาก ที่นี่ เปิดโปรแกรมด้วย Command prompt (Admin)
5. HM-10 firmware  โหลดจาก ที่นี่

ถ้ากดลิ้งค์ไม่ได้ ให้พิมพ์ตามทีวางไว้ให้ด้านท้ายบทความ

การเชื่อมต่อสาย (CC2541 คือ HM-10)



























Arduino อัพโหลดให้เรียบร้อยก่อนนะครับ

อัพโหลดเฟิร์มแวร์

ไฟล์ที่เป็นตัวเฟิร์มแวร์ (CC2541hm10v540.bin) ต้องวางไว้ในโฟลเดอร์เดียวกันกับโปรแกรม CCLoader.exe นะครับ

เปิดหน้าต่าง Command Prompt แล้วก็วิ่งไปที่โฟลเดอร์ที่เก็บไฟล์ไว้ พิมพ์คำสั่งตามนี้

D;\Downloads>ccloader 4 CC2541hm10v540.bin 0

ตัวเลข 4 เป็นหมายเลขคอมพอร์ทที่ Arduino ต่ออยู่
ตัวเลข 0 คือชนิดของบอร์ด Arduino ถ้าเป็นบอร์ด Leonardo ให้ใส่ 1 นอกนั้นใส่ 0

โปรแกรมจะส่งเฟิร์มแวร์


เป็นอันเสร็จเรียบร้อย

iBeacon พร้อมแล้ว

ตอนนี้ HM-10 ก็พร้อมที่จะเป็น iBeacon แล้ว เหลือขั้นตอนสุดท้าย

ก่อนอื่นทดสอบก่อนว่าลงเฟิร์มแวร์สมบูรณ์หรือไม่ ให้ถอดสายทั้งหมดที่เชื่อมต่อกับบอร์ดอาร์ดูโน่ออก แล้วต่อ USB to Serial เข้ากับ HM-10

ให้เปิด Serial Monitor ของอาร์ดูโน่ เลือกพอร์ทที่เชื่อมต่อ HM-10 ตั้งค่า 9600 และ No line ending

พิมพ์ AT ต้องตอบมาเป็น OK
พิมพ์ AT+VERR? ต้องตอบมาเป็น HMSoft V540

ได้ตามนี้ก็ขั้นตอนต่อไป

ตั้งค่าให้เป็น iBeacon

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

1. AT+RENEW  
ทำการรีเซทให้เป็นค่าเริ่มต้นจากโรงงาน

2. AT+RESET    
รีบู๊ท

3. AT                   
รอให้ตอบกลับ OK หลังจากรีบู๊ท

4. AT+MARJ0x1234  
เป็นการตั้งค่า iBeacon Major number ให้เป็น 0x1234 (hexadecimal) 
ค่านี้ถ้าต้องการให้เป็นกลุ่มเดียวกันให้ตั้งค่าเดียวกันให้กับทุกตัว

5. AT+MINO0xFA01  
เป็นการตั้งค่า iBeacon Minor number ให้เป็น 0xFA01 (hexadecimal) 
เลือกค่าให้ไม่เหมือนกัน ถ้าต้องการหลายตัว

6. AT+ADVI5  
กำหนดให้ส่งค่าเป็นจังหวะ ตัวเลข 5 จะเท่ากับทุกๆ  546.25 มิลลิวินาที

7. AT+NAMEDOPEY 
ตั้งชื่อให้แต่ละตัว ถ้าดูในมือถือจะเห็นชื่อ DOPEY 
ถ้าต้องการชื่ออื่นก็เปลี่ยนไปตามต้องการ

8. AT+ADTY3  
ทำให้ตัวอุปกรณ์ไม่สามารถถูกเชื่อมต่อได้ คือให้ส่งแต่ค่าเฉพาะตัวออกไปอย่างเดียว

9. AT+IBEA1  
เปิดโหมด iBeacon

10.AT+DELO2
ให้ทำหน้าที่เป็น  iBeacon อย่างเดียว

11.AT+PWRM0
เปิดการทำงาน auto-sleep. ทำให้สิ้นเปลืองพลังงานลดลงจาก  8 mA. ลงมาเป็น 0.18 mA 

12.AT+RESET  
รีบู๊ท

เมื่อจบการป้อนคำสั่ง ทุกอย่างก็จะเงียบ ต้องหาโปรแกรมมาตรวจสอบ
ให้ติดตั้ง iBeacon Scanner บน Android เสียก่อน



เปิดโปรแกรม




จะเห็นรายการ iBeacon ที่ตรวจพบ ในรูปมีอยู่ 2 ตัว สังเกตุว่าชื่อ HMSoft ทั้งสองตัว ทั้งๆที่ตั้งชื่อไม่เหมือนกัน ส่วนนี้จะหาข้อมูลเพิ่มเติมอีกที ว่าเกิดจากสาเหตุอะไร และต้องแก้ไขอย่างไร

ถ้าเลิกเป็นแบบ Radar จะเห็นระยะโดยประมาณ ของแต่ละตัว


แตะที่แต่ละตัวจะเห็นข้อมูล อันนี้ตัวแรก
อันนี้ของอีกตัว


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

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

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



ส่วนของสิ่งที่นำมาเสนอ ถ้าทำตามแล้วไม่ได้ ก็ลองเข้าไปอ่านดู

บทความต้นเรื่อง
http://forum.arduino.cc/index.php?topic=393655

คลิปบน Youtube
https://www.youtube.com/watch?v=ez3491-v8Og&feature=youtu.be

โค๊ดสำหรับ Arduino
https://github.com/RedBearLab/CCLoader/tree/master/Arduino/CCLoader

โปรแกรมช่วยอัพโหลดเฟิร์มแวร์
https://github.com/RedBearLab/CCLoader/tree/master/Windows

ไฟล์ไบนารี่ของเฟิร์มแวร์
http://forum.arduino.cc/index.php?action=dlattach;topic=393655.0;attach=183702

2 ความคิดเห็น: