วันพฤหัสบดีที่ 3 กันยายน พ.ศ. 2558

Node-RED - คุยกับ Arduino ผ่าน Serial port อาศัย Firmata protocol


Node-RED มี nodes ที่ใช้ในการเชื่อมต่อกับ Arduino โดยอาศัย Firmata protocol
วิธีการติดตั้ง เหมือนกับการติดตั้ง Dweetio ของตอนที่แล้ว ผ่านทาง npm
ติดตั้ง Arduino nodes
ไปที่ user directory พิมพ์คำสั่ง
npm install node-red-node-arduino
เปิด NodeRed server
เปิด nodered ด้วย browser
image
จะพบแท๊ป Arduino ประกอบด้วย Arduino in และ Arduino out
Arduino in เหมือนกับ Dweetio in จะถูกกระตุ้นเมื่อมีการเปลี่ยนที่ pin ที่กำหนด
Arduino out จะส่งคำสั่งไปที่ pin ที่กำหนด อาจจเป็น on-off digital pin ตั้งค่าให้กับ Analog pin และตั้งค่าให้กับ Servo pin
ลง Firmata ให้กับบอร์ด Arduino
ก่อนใช้งานให้เปิดตัวอย่าง Firmata เลือก StandardFirmata และ upload ไปที่ Arduino board เพื่อให้สามารถรับคำสั่งและส่งผลกับ Node-RED จะเป็นบอร์ด UNO หรือ Nano หรือบอร์ดรุ่นอื่นๆก็ได้
สร้าง Flow เพื่อทดสอบ

image
ตามรูปครับ
สำหรับ Node Pin2 ให้ตั้งค่าตามนี้
image
ในช่อง จะเห็นชื่อพอร์ทที่บอร์ดต่ออยู่ หรือ Add new arduino-board… ให้กดที่รูปดินสอ Node-RED จะตรวจหาบอร์ด Arduino แล้วแสดงชื่อพอร์ทให้เลือก
image
เลือกพอร์ทที่บอร์ดต่ออยู่ กด update จะย้อนกลับมาที่หน้าตั้งค่า เลือก pin = 2 Type = Digital pin กด OK เป็นการเลือก pin 2 เป็น digital pin การทดสอบให้หารีซิสเตอร์ค่าประมาณ 1 – 10K ต่อระหว่าง pin 2 กับ GND การลอย pin 2 ไว้จะทำให้มีการส่งค่าที่ไม่สามารถคาดเดาได้
จากนั้นให้นำสายจั้มเปอร์อีกเส้นหนึ่งเชื่อมที่ pin 2 ไว้ เพื่อตอนทดสอบจะเลือกให้ต่อกับ +5v หรือ GND
Node Arduino out เลือก pin 13 หมายเลข Arduino ใช้อันเดียวกันกับ Node Pin 2 จริงแล้วก็ใช้พอร์ทเดียวกันทั้ง Flow
image
สำหรับ Node Pin A0 ใช้รับค่าจาก Analog pin A0 
image
เชื่อมต่อกับ debug node เพื่อแสดงค่า
จากนั้น deploy
จะเห็นค่าที่ Pin A0 รับมาถูกแสดงที่ debug แท๊ป เป็นค่าที่เกิดจากสัญญาณรบวน อาจต่อรีซิสเตอร์จาก pin A0 กับ GND ไว้เพื่อตัดสัญญาณรบกวน
ให้ทดลองต่อสายจั้มเปอร์ที่ pin 2 กับ +5v หรือ GND ที่แท๊ป debug จะแสดง True และ False ตามที่เราทำ อาจจะสังเกตุยาก ให้นำสายจั้มเปอร์ต่อ pin A0 กับ +5v หรือ GND ค่าที่แสดงให้กับ pin A0 จะไม่อัพเดท เพราะค่าไม่เปลี่ยนแปลง แล้วทดลองกับ pin 2 จะเห็นว่าหลอด LED ที่ต่อกับ pin 13 จะติดดับตามที่เราทำกับสายจั้มเปอร์ของ pin 2 ด้วย
อาจนำรีซิสเอร์ปรับค่าได้ ปรับค่าแรงดันไฟฟ้า ให้กับ pin A0 แล้วดูผล
ส่วนของ Servo อาจนำค่าที่รับจาก pin A0 ค่า 0 – 1023 มาปรับให้มีค่าเป็น 0 – 180 แล้วส่งไปที่ servo pin จะเห็นการขยับของแกน servo
สำหรับ Hardware node จะมี Raspberry pi และ Beagle bone ด้วย แต่ผมไม่มีบอร์ดจะนำมาทดสอบ



ไม่มีความคิดเห็น:

แสดงความคิดเห็น