Utöver StandardFirmata - lägger till stöd för nya (3 / 10 steg)
Steg 3: Du väljer och anger SysEx kommando och Pin-läge
Firmata var avsedd att vara användare extensible. Den mekanism som ger denna utökning är den System Exclusive (SysEx) messaging protocol.
Formatet för en SysEx meddelande enligt Firmata protokoll, visas på bilden ovan. Det börjar med en START_SYSEX byte med ett fast värde för hexadecimala 0xF0, och följs av en unik SysEx kommandobyte. Värdet av kommandobyte måste vara i intervallet hexadecimala 0x00-0x7F. Kommandobyte följs sedan av ett ospecificerat antal 7 bitars data-byte och slutligen meddelandet avslutas med en END_SYSEX byte, som har ett fast värde för hexadecimala 0xF7.
Efter att ha fått ett komplett SysEx-kommando från en klient, skickar servern kommandot till den skiss sysexCallback() funktion, där de bearbetas.
Utdrag från FirmataPlus.ino
/*=================================================================
* SYSEX-baserade kommandon
*================================================================*/
void sysexCallback (byte kommando, byte argc, byte * argv) {
byte läge;
byte slaveAddress;
byte slaveRegister;
byte data.
unsigned int fördröjningstid;
byte pin ;// används för ton
int frekvens;
int varaktighet;
Växla (kommandot) {
fall STEPPER_DATA: / / behandla kommandot
....
För att stödja en ny enhet, måste vi ange en ny SysEx kommando, som ska användas av både Firmata klienten och servern. Vi kan också behöva ange en ny pin-läge.
Att lägga till det nya SysEx kommandot och Pin läge i FirmataPlus.h
Öppna med din favorit texteditor FirmataPlus.h i Arduino skissbok. På mitt system finns denna fil på:
~/Arduino/libraries/FirmataPlus
Leta upp avsnittet Användar definierade kommandon i filen. Hexadecimala värdet 0x72 har ännu inte tilldelats, så vi kommer att tilldela detta värde till våra nya kommandot. För att vara förenligt med Firmata namngivning konventioner, kommer namnet på det nya SysEx-kommandot att STEPPER_DATA.
Ange det nya kommandot i filen som visas nedan:
/ * användardefinierad kommandon * /
#define ENCODER_CONFIG 0x20 / / skapa och aktivera encoder objekt
#define ENCODER_DATA 0x21 / / aktuella encoder data
#define TONE_DATA 0x5F / / förfrågan en ton ska spelas
#define SONAR_CONFIG 0x60 / / configure sonar avstånd
sensor för drift
#define SONAR_DATA 0x61 / / Data returneras från ekolod
avståndet sensor
/ * Nytt kommando för stegmotor
#define STEPPER_DATA 0x72 / / stepper motor kommando
*/
Vi måste också lägga till en ny pin läge för nummerlistan och justera antalet stift i denna fil. Det finns 13 pin lägen, inklusive in- och utdata.
PIN lägen
#define INPUT 0x00 / / definieras i wiring.h
#define utdata 0x01 / / definieras i wiring.h
#define analoga 0x02 / / analog pin i analogInput läge
#define PWM 0x03 / / digital pin i PWM-utgång läge
#define SERVO 0x04 / / digital pin i Servo output mode
#define SKIFT 0x05 / / at/shiftOut läge
#define I2C 0x06 / / pin ingår i I2C setup
#define ONEWIRE 0x07
Ny Pin läge
#define STEPPER 0x08 / / någon pin-Stepper läge
//
#define ton 0x09 / / någon pin-klangfärg
#define ENCODER 0x0a
#define SONAR 0x0b / / någon pin-Ping läge
#define ignorera 0x7f
#define TOTAL_PIN_MODES 13
FirmataPlus.h redigering är klar. Spara och stäng filen
Att lägga till kommandot SysEx pymata_command_handler.py
Nu ska vi lägga till den nya SysEx kommando (0x72) för PyMata.
Öppna med din favorit editor pymata_command_handler.py finns i katalogen PyMata-master/PyMata eller i katalogen där du packade upp filerna PyMata .
Leta upp avsnittet Firmata sysex kommandon och lägga till det nya kommandot.
# Firmata sysex kommandon
SERVO_CONFIG = 0x70 # set servo pin och max och min vinklar
STRING_DATA = 0x71 # en sträng meddelande med 14-bitar per röding
### Nytt kommando
STEPPER_DATA = 0x72 # Stepper motor kommando
###
I2C_REQUEST = 0x76 # skicka en begäran om I2C Läs/skriv
I2C_REPLY = 0x77 # besvara en I2C läsa begäran
I2C_CONFIG = 0x78 # config I2C inställningar som fördröjningstider
REPORT_FIRMWARE = 0x79 # rapportens namn och version av firmware
SAMPLING_INTERVAL = 0x7A # ändra provtagning intervallet
Spara och stäng filen.
Att lägga till Pin läge i pymata.py
Slutligen måste vi lägga till pin läge till pymata.py.
Använd din favorit editor, öppna pymata.py och lägga till den nya pin-läget.
# pin lägen
INPUT = 0x00 # pin som indata
OUTPUT = 0x01 # pin ange
ANALOGA = 0x02 # analog pinne i analogInput läge
PWM = 0x03 # digital pin i Utläge för PWM
SERVO = 0x04 # digital pin i Utläge för Servo
I2C = 0x06 # pin ingår i I2C setup
ONEWIRE = 0x07 # möjliga framtida funktion
### Ny Pin läge
STEPPER = 0x08 # någon pin-stepper läge
###
TON = 0x09 # någon pin-klangfärg
ENCODER = 0X0A
SONAR = 0x0b # någon pin-SONAR-läge
IGNORERA = 0X7F
PyMata använder inte TOTAL_PIN_MODES, och det läggs inte till i filen. Spara och stäng filen.
Obs: För närvarande endast ingångsstift läge typer används faktiskt av PyMata koden, men vi lägger till bägge indata- och pin-läge pin för att vara förenligt med FirmataPlus kod.