Firmata เป็น software ที่จะช่วยให้คอมพิวเตอร์สั่งงานที่ I/O ของ Arduino ที่ต่อไว้ได้ด้วยโค้ดโปรแกรมในตัวคอมพิวเตอร์นั้น โดยไม่ต้องสร้างระบบการสื่อสารกับ Arduino ขึ้นมาเอง โค้ดภาษาโปรแกรมที่ใช้ได้ก็มี Python คือ pyFirmata อยู่ด้วย และใช้ได้กับคอมพิวเตอร์ Raspberry Pi
ทดลองกันเลยครับ ที่ Raspberry Pi ติดตั้ง software ที่ pyFirmata ต้องพึ่งพิง และติดตั้งตัวมันเองด้วย pip
sudo apt-get install python-pip python-serial sudo pip install pyfirmata
เมื่อเสร้จแล้ว เพื่อทดสอบว่า การติดตั้งนั้นมีให้ใช้งานนั้นมาแล้วหรือไม่ ใช้สคริป Python
import pyfirmata dir(pyfirmata)
ถ้าสำเร็จ ไม่ควรเจอ error
จากนั้นที่ Arduino ก็ทำการ upload โปรแกรม sketch ที่เป็น Firmata เข้าไป มีให้มาแล้วใน Arduino IDE ซึ่งเป็นโปรแกรมที่ใช้ upload ด้วย ผมใช้ Arduino Leonardo จึงต้องใช้ Arduino IDE เวอร์ชัน 1.5.4 ขึ้นไป โดยผมใช้เวอร์ชัน 1.5.7 ซึ่งรองรับ Arduino Yún (ใช้ไอซี ATmega32U4 เหมือน Arduino Leonardo) และ Arduino Due ด้วย โดยเลือก sketch ที่ File -> Examples -> Firmata -> StandardFirmata
จะได้หน้าต่างที่มีโค้ด Firmata ขึ้นมา จากนั้นที่เมนู Tools ไปที่ Port และ Board เลือกให้ตรงกับ Arduino ของเรา แล้วก็กดปุ่มรูปลูกศรเพื่อคอมไพล์และ upload ไปยัง Arduino เมื่อมันขึ้น Done uploading (ถ้ามีปัญหา upload ลองกดซ้ำอีกที) อ้อ ผมทำการ upload จาก PC เครื่องอื่น ไม่ใช่จาก Raspberry Pi นะครับ งานนี้ไม่จำเป็นต้องทำที่ Pi และเมื่อเสร็จจากงานนี้เราจะได้ Arduino ที่มี sketch ของ Firmata พร้อมที่จะไปต่อกับคอมพิวเตอร์เพื่อรับคำสั่ง Firmata
โดยเราจะต่อกับคอมพิวเตอร์ Raspberry Pi ผ่านทาง USB แต่ผมเจอปัญหาว่าไม่พบ /dev/ttyACM0 หรือ /dev/ttyUSB0 แต่ก็เจอวิธีแก้ปัญหาว่าให้สั่ง sudo rpi-update เสร็จแล้ว reboot ก็จะหายครับ โดยของผมได้เป็น /dev/ttyACM0 จากนั้้นก็ทดลองเบื้องต้น ว่าจะสั่งจาก Raspberry Pi ให้เปิดดวงไฟ LED บน Arduino ได้ไหม ซึ่งมันควรจะเป็นขา 13 (ดูจาก sketch Blink ใน Arduino IDE) ก็เขียนสคริปภาษา Python
from pyfirmata import Arduino, util board = Arduino('/dev/ttyACM0') board.digital[13].write(1)
ถ้าจะดับไฟ ก็เปลี่ยนเป็น write(0) แทนนะครับ
ได้แนวทางการทำ และวิธีแก่ไขปัญหาจาก
http://raspberrypi-aa.github.io/session3/firmata.html
http://www.nagar-world.fr/2014/05/brancher-une-arduino-sur-un-raspberry.html