โปรเจกต์ IoT & Home Automation ด้วย nRF24l01 & Raspberry Pi
วิธีการติดตั้งอุปกรณ์ IoT ด้วย Arduino และ Raspberry Pi สำหรับระบบ Home Automation
วิธีการติดตั้งอุปกรณ์ IoT ด้วย Arduino และ Raspberry Pi สำหรับระบบ Home Automation
▶ กดเพื่อดูวิดีโอสาธิตโปรเจกต์
ผมได้พัฒนา communication stack ที่อ้างอิงตาม OSI model สำหรับวิทยุ nRF24 ในช่วงหลายปีที่ผ่านมา ซึ่งตอนนี้ค่อนข้างสมบูรณ์และใช้งานได้เต็มรูปแบบ มันรองรับรูปแบบการสื่อสารที่หลากหลาย พร้อมด้วย mesh layer ที่ช่วยให้ wireless nodes ค้นหาเส้นทางสื่อสารผ่านเครือข่ายได้โดยอัตโนมัติเมื่อการเชื่อมต่อล้มเหลว และใช้ node อื่นๆ เป็นตัวเชื่อมระยะทางระหว่างจุดต่างๆ ในเครือข่าย
นี่เป็นหนึ่งในสถานการณ์ขั้นสูงเกี่ยวกับการใช้งาน
โดยพื้นฐานแล้ว สิ่งที่ผมกำลังทำคือการใช้ Raspberry Pi ที่เชื่อมต่ออินเทอร์เน็ตเป็น gateway สำหรับอุปกรณ์ Arduino ทั้งหมดของผม ซึ่งจะรัน IP stack ของตัวเองและสื่อสารโดยตรงกับ Raspberry Pi โดยใช้โปรโตคอล MQTT สิ่งนี้ช่วยให้ผมสามารถส่งและรับข้อมูลไปยัง Arduino ได้โดยใช้อุปกรณ์หรือซอฟต์แวร์ใดๆ ที่รองรับ MQTT รวมถึงอุปกรณ์มือถือ ทั้งหมดนี้ทำแบบไร้สายโดยใช้วิทยุ nrf24l01
คำแนะนำเหล่านี้สมมติว่าผู้ใช้มีวิทยุที่ต่อสายและพร้อมใช้งานแล้ว มีบทช่วยสอนมากมายเกี่ยวกับการตั้งค่าและการส่งข้อความง่ายๆ

ขั้นตอนแรกคือการติดตั้ง RF24 libraries สำหรับ Arduino วิธีที่ง่ายที่สุดคือเปิด Arduino Library Manager และเลือก RF24Ethernet library ซึ่งมันควรจะติดตั้ง RF24 libraries ที่จำเป็นทั้งหมด สำหรับอุปกรณ์ linux ได้มีการเขียนสคริปต์ติดตั้งไว้แล้ว ซึ่งสามารถดูคำแนะนำได้ ที่นี่ หรือผ่านหน้าเอกสารหลัก https://nrf24.github.io/RF24 ในสถานการณ์นี้ เราจะเลือกติดตั้ง RF24 libraries ทั้งหมดรวมถึง ncurses library และใช้ SPIDEV driver เมื่อระบบถาม และให้เลือก build ตัวอย่าง (examples) เมื่อระบบถามเช่นกัน
หากมีปัญหาใดๆ เกี่ยวกับตัวติดตั้งหรือ libraries กรุณารายงานได้ที่ https://github.com/nRF24

เมื่อติดตั้งแล้ว บน Raspberry Pi เราจำเป็นต้องเข้าไปยังไฟล์ตัวอย่างและ build มัน:
1. cd rf24libs/RF24Gateway/examples/ncurses
2. หากคุณใช้การเชื่อมต่อ Pins พื้นฐานเพื่อต่อ Module nrf24 เข้ากับ RPi จาก directory ncurses ให้ใช้คำสั่ง cd ../build จากนั้นรัน make เพื่อ build ไฟล์ตัวอย่าง มิฉะนั้นให้แก้ไขไฟล์ตามขั้นตอนที่ 3
3. รัน nano RF24Gateway_ncurses.cpp เพื่อแก้ไขไฟล์และเปลี่ยนบรรทัด RF24 radio(22, 0); ให้ตรงกับการเชื่อมต่อ Pins ที่คุณเลือก จากนั้นรัน make ตามขั้นตอนที่ 2
เลื่อนลงไปที่ https://nrf24.github.io/RF24/index.html สำหรับข้อมูลการต่อสาย (wiring)
4. RF24Gateway ถูกออกแบบมาให้รันใน screen สิ่งนี้ช่วยให้คุณรันมันใน background ในขณะที่ยังสามารถเข้าถึง GUI ได้ตามต้องการ ใช้ sudo apt-get install screen เพื่อติดตั้ง จากนั้นรัน screen ใช้การกดปุ่ม ctrl+A+D เพื่อออกจากหน้าจอ (detatch) และใช้คำสั่ง screen -r เพื่อกลับเข้าสู่หน้าจอ (resume)
5. รันคำสั่งต่อไปนี้เพื่อตั้งค่า interface ด้วยตนเอง (การตั้งค่าอัตโนมัติกำหนดให้รัน gateway ในฐานะ root) หาก username ของคุณเป็นอย่างอื่นที่ไม่ใช่ 'pi' ให้แก้ไขคำสั่งเพื่อระบุชื่อหลังคำว่า 'user'
sudo ip tuntap add dev tun_nrf24 mode tun user pi multi_queuesudo ifconfig tun_nrf24 10.10.2.2/246. หากยังไม่ได้เปิดใช้งาน ให้เปิดใช้งาน SPI interface บน RPi โดยรัน sudo raspi-config
7. เมื่อ build บน Raspberry Pi เสร็จแล้ว เราสามารถ cd ncurses จาก build directory แล้วรัน ./RF24Gateway_ncurses เพื่อเริ่มทำงานตัวอย่าง
เกือบพร้อมใช้งานแล้ว! มันควรจะมีหน้าตาประมาณนี้:

ขั้นตอนต่อไปบน RPi คือการติดตั้ง mosquitto ซึ่งเป็น MQTT broker:
8. รัน sudo apt-get install mosquitto
9. รัน nano /etc/mosquitto/mosquitto.conf และเพิ่มสองบรรทัดนี้:
a: allow_anonymous true
b: listener 1883
10. รัน sudo service mosquitto restart เพื่อโหลดการตั้งค่าใหม่
เสร็จสิ้นขั้นตอนบน Raspberry Pi แล้ว!
ขั้นตอนสำหรับ Arduino:
1. เปิด Arduino library manager และค้นหา RF24Ethernet ติดตั้ง library นั้น นอกจากนี้เรายังต้องการ MQTT library ที่ชื่อ "MQTT" โดย Joel Gaehwiler
2. เปิดหนึ่งในตัวอย่าง: File -> Examples -> RF24Ethernet -> MQTT -> mqtt_basic
3. หากไม่ได้ใช้ Pins 7 และ 8 สำหรับ CE และ CS ตามลำดับ ให้ตั้งค่าการเชื่อมต่อ Pins ของคุณใน RF24 radio(7, 8);
4. Upload ลงใน Arduino ของคุณ
ขั้นตอนสำหรับอุปกรณ์มือถือ:
บนอุปกรณ์ iOS ของผม ผมได้ติดตั้ง MQTTool และมันค่อนข้างใช้งานง่าย ตราบใดที่ Raspberry Pi เชื่อมต่อกับ LAN เดียวกับอุปกรณ์มือถือของคุณ คุณควรจะสามารถส่งและรับข้อความไปยัง Arduino ของคุณได้แล้ว
1. บน Raspberry Pi ให้พิมพ์ ifconfig เพื่อดู IP address ปกติจะเป็น interface eth0 หรือ wlan0 ขึ้นอยู่กับว่าคุณเชื่อมต่อผ่าน WiFi หรือสายเคเบิล
2. IP จากขั้นตอนที่ 1 คือสิ่งที่คุณต้องกรอกลงในแอปบนโทรศัพท์ของคุณ ในส่วนของการเชื่อมต่อ (connection area)
3. เมื่อเชื่อมต่อแล้ว คุณสามารถ publish ข้อความใดๆ ไปยัง inTopic และ MQTT server จะส่งข้อมูลนั้นไปยัง Arduino ของคุณ ซึ่งจะพิมพ์ออกมาทาง serial port

4. คุณยังสามารถ subscribe ไปที่ 'outTopic' และอุปกรณ์มือถือของคุณควรเริ่มได้รับข้อความจาก node ที่เชื่อมต่ออยู่
หากต้องการเพิ่มอุปกรณ์อื่นๆ เพียงเปลี่ยน IP address ใน sketch ตัวอย่างจาก 10.10.2.4 เป็นเลขอื่นในหลักสุดท้ายตั้งแต่ 3-254 เช่น 10.10.2.5
นั่นน่าจะช่วยให้คุณเริ่มต้นใช้งาน RF24Gateway/RF24Ethernet และ MQTT ได้ ส่วนที่ยากที่สุดคือการทำให้อุปกรณ์ชิ้นแรกทำงานได้ จากจุดนี้ไปจะเป็นเรื่องของการปรับแต่ง MQTT topics และข้อมูลที่คุณส่ง/รับ
เพื่อต่อยอดจากจุดนี้ ผู้ใช้สามารถติดตั้งซอฟต์แวร์เช่น Node Red บน Raspberry Pi เพื่อสร้างแผนภูมิและกราฟ ออกแบบสถานการณ์ input/output เช่น สวิตช์เปิด/ปิดสำหรับอุปกรณ์ต่างๆ เป็นต้น เหมือนในระบบ home automation
radio interface ของ RPi ทำงานเหมือนกับว่ามันเป็น network interface มาตรฐาน ดังนั้นเครื่องมือ โปรโตคอล และซอฟต์แวร์ที่หลากหลายจึงสามารถสื่อสารกับ Arduino nodes ที่รัน RF24Ethernet ได้ สิ่งนี้สามารถขยายขอบเขตออกไปได้อีกโดยการติดตั้ง vpn บน RPi เพื่อให้สามารถเข้าถึงการควบคุม แผนภูมิ และอื่นๆ ได้จากทุกที่
ดูข้อมูลเพิ่มเติมได้ที่ http://tmrh20.blogspot.com และ https://github.com/nRF24 สำหรับการสนับสนุน (support)

หมายเหตุ:
การตั้งค่านี้เป็นการสร้าง wireless interface ที่รองรับ IP บน Raspberry Pi ของคุณ ดังนั้นควรใช้กฎ firewall ที่เหมาะสมและรหัสผ่านที่คาดเดายากเพื่อป้องกันการเข้าถึงที่ไม่พึงประสงค์
สนับสนุนเพื่อรับ Source Code หรือแอปพลิเคชันสำหรับโปรเจกต์นี้