
ในบล็อกนี้จะพูดถึงการติดต่อสื่อสารระหว่าง Raspberry PI และ Arduino ผ่านโมดูล Wireless ที่มีราคาถูกมากแต่ความสามารถไม่ถูกตาม คือ nRF24L01
คำถามคือว่า ทำไมถึงเลือกใช้โมดูล NRF24L01
- มีระบบ Automatic Retransmission ซึ่งเป็นระบบช่วยในการส่งข้อมูลซ้ำเมื่อข้อมูลที่ส่งไปนั้น ไม่ถูกต้อง ทำให้เราไม่ต้องมาจัดการเรื่องการ Restransmission เอง จึงทำให้ง่ายต่องานที่ต้องการความถูกต้องสูง โดยไม่ต้องมาออกแบบโปรโตคอลเพื่อจัดการเอง
- มีระบบจัดการกำลังส่ง สามารถเลือกระดับกำลังการส่งได้ เพื่อให้เกิดยึดหยุ่นและตอบโจทย์ในด้านต่างๆมากขึ้น
- สามารถหา Library มาใช้ในการพัฒนาได้ง่าย ไม่ว่าจะเป็นบน Arduino, RaspberryPI, BeagleBone, หรือบอร์ดอะไรก็ตาม เพราะว่า โมดูลตัวนี้เป็นที่แพร่หลายมาก จึงมีคนพัฒนา Library มาให้เราใช้มากมาย
- ราคาถูกมากกกกกกกกกกกกก
- Library เริ่มมีการพัฒนา advance feature ไปในทางที่ดีขึ้นเช่นการทำ routing
- มีเปิดสอนที่ Deaware ( แฮ่ )
- ฯลฯ
NRF24L01
NRF24L01 เป็นไอซีรับส่งไร้สายที่ความถี่ 2.4 GHz ที่รวมโมดูลต่างๆที่ใช้ในการรับส่งข้อมูลและแปลงอินเตอร์เฟสไว้ด้วยกัน โดยเอาท์พุตของไอซีนี้เป็นการติดต่อแบบ SPI ใช้พลังงานต่ำ มีระบบจัดการข้อมูลเช่นพวกการเข้าคิว, การแก้ความผิดพลาดของข้อมูล ฯลฯ ใช้ไฟเลี้ยงได้ตั้งแต่ 1.9 V ถึง 3.6 V แต่สามารถใช้ระดับแรงดันในการติดต่อได้ถึง 5V
TIPS : ดังนั้นเวลาใช้งานจะต้องจ่ายไฟเลี้ยงให้กับโมดูลไม่เกิน 3.6 V เท่านั้น แต่เอา IO 5V เสียบติดต่อได้เหมือนเดิมครับ
เรื่องระยะ?
ระยะการส่งเท่าไร เป็นคำถามที่มีคนถามถึงกันมากที่สุด แต่เป็นคำตอบที่ตอบได้ยากที่สุด เนื่องจากว่าระยะการส่งนั้น ขึ้นอยู่กับหลายปัจจัยมาก ไม่ว่าจะเป็นเรื่องกำลังการส่งที่ปรับตั้ง, สิ่งที่มาขั้นกลาง, สภาพแวดล้อมรอบข้าง หรือแม้แต่สภาพอากาศก็มีผลด้วยเช่นกัน ฉะนั้น ระยะการส่งจึงบอกได้เพียงคร่าวๆเท่านั้น ซึ่งโมดูลตัวนี้ มีระยะการส่งในที่โล้งแจ้ง ได้สูงสุดถึง 200 ฟุต
สิ่งที่เราต้องเตรียมใช้งานในรอบนี้ก็คือ
- Raspberry PI 1690 บาท
- Arduino UNO
- โมดูล NRF24L01 (พระเอกของเราวันนี้) น้อยกว่า 90 บาท
- โมดูลวัดอุณหภูมิ ที่ใช้ไอซีเบอร์ DS18B20 แบบมีสาย Water proof 90 บาท
- จอ Character LCD พร้อมมี keypad 250 บาท
TIPS : สามารปรับเปลี่ยนอุปกรณ์ได้ตามใจชอบครับ
ขั้นถัดไป คือการต่อสายระหว่าง โมดูล NRF24L01 กับ Arduino UNO
การติดต่อสื่อสารจะผ่าน BUS ที่เรียกว่า SPI โดย pin ของ nRF24L01 สามารถดูได้จาก
เรามาเริ่มทดลองกันดีกว่าในรูปด้านล่างเป็นอุปกรณ์ที่เราจะใช้งานครับ ของจริง แอบดูรกไปนิดนะครับ 555+
ต่อไปก็ การต่อสายระหว่าง Raspberry PI กับ โมดูล NRF24L01 ครับบ
แหม่ะ ส่วนของ Raspberry PI นั้น ดูเท่เลยที่เดียว มี Wi-Fi ด้วย (แต่สายก็ยังรกเช่นเดิม 555+)
ต่อไปเป็นการต่อสายระหว่าง Arduino กับ โมดูลวัดอุณหภูมิ DS18ฺB20
โค๊ดในส่วนของ Arduino สามารถดาวน์โหลดได้ที่นี่
โค๊ดในส่วนของ Python ที่รันบน RaspberryPI สามารถดาวน์โหลดได้ที่นี่
การทำงานของโปรแกรมที่เราได้ทดลองเขียนนี้ จะมีรูปแบบคือ Arduino อ่านค่าจากโมดูลวัดอุณหภูมิ แล้วทำการส่งค่าอุณหภูมิขึ้นไปยัง RaspberryPI ผ่าน โมดูล NRF24L01
ฝั่ง Python บน RaspberryPI ก็จะรับค่าจากโมดูล NRF24L01 แล้วก็ทำการเปลี่ยนอินเตอร์เฟส ให้อยู่ในรูปแบบ HTTP เพื่อที่จะสามารถมาเรียกดูค่าได้ผ่านทาง Web Browser โดยตรง
และสุดท้ายนี้ คือ วิดีโอ สาธิตการทดลองครับ ^^
บทความนี้ได้รับการเขียนจากผู้ที่อยากเผยแพร่ความรู้ จากภายนอกทีมงานมาเขียนให้อ่านกันถ้าชอบบทความแบบนี้อย่าลืมให้กำลังใจได้โดยการกดไลค์หรือกดแชร์นะครับ ทางผู้เขียนจะได้มีกำลังใจ
สวัสดีครับ
ผมมีความสนใจเกี่ยวกับ “ตัวอย่างการใช้ RaspberryPI ติดต่อกับ Arduino UNO ผ่านโมดูลไร้สาย NRF24L01” แต่ไม่ทราบว่าจะเริ่มต้นอย่างไร รบกวนช่วยแนะนำหรือช่วยส่ง code ตัวอย่างให้ผมดูหน่อยจะได้ไหมครับ
ขอบคุณครับ