Mündəricat:

StandardFirmata -dan kənara çıxmaq - Yenidən baxıldı: 5 addım
StandardFirmata -dan kənara çıxmaq - Yenidən baxıldı: 5 addım

Video: StandardFirmata -dan kənara çıxmaq - Yenidən baxıldı: 5 addım

Video: StandardFirmata -dan kənara çıxmaq - Yenidən baxıldı: 5 addım
Video: Test Firmata.NET on C# with Arduino + StandardFirmata firmware 2024, Iyul
Anonim
StandardFirmata Beyond Going - Yenidən Baxılıb
StandardFirmata Beyond Going - Yenidən Baxılıb

Bir müddət əvvəl, pymata4 kitabxanasına DHT22 Rütubət/Temperatur sensoru dəstəyini əlavə etmək üçün pymata4 istifadəçisi Dr. Martyn Wheeler ilə əlaqə saxladım. Pymata4 kitabxanası, Arduino həmkarı FirmataExpress ilə birlikdə istifadəçilərə Arduino cihazlarını uzaqdan idarə etməyə və izləməyə imkan verir. Bir neçə e -poçt mübadiləsi ərzində Dr Wheeler həm pymata4, həm də FirmataExpress -i dəyişdirməkdə müvəffəq oldu. Nəticədə, DHT22 və DHT11 sensorlarına dəstək indi pymata4 və FirmataExpress -in standart hissəsidir.

2014 -cü ilin may ayında əlavə cihazlar üçün Firmata dəstəyi əlavə etməklə bağlı bir məqalə yazdım. Bu məqalə üzərində düşünərək, bu məqalə üçün qələmdən kağıza keçdikdən sonra nə qədər dəyişdiyini anladım. Bu məqaləyə əlavə olaraq, Dr Wheeler səylərini sənədləşdirdi və bunu da yoxlamaq istəyə bilərsiniz.

FirmataExpress StandardFirmata əsaslanır və StandardFirmata kataloq quruluşu inkişaf etmişdir. Əlavə olaraq, pymata4 API də 2014 -cü ilin orijinal PyMata API -dən bir qədər fərqlidir. Düşünürdüm ki, bu məqaləyə yenidən baxmaq və onu yeniləmək üçün mükəmməl vaxtdır. Dr Wheeler'in işini əsas götürərək, pymata4/FirmataExpress funksiyasını necə genişləndirməyi araşdıraq.

Başlamazdan əvvəl - Arduino/Firmata haqqında bəzi məlumat

Bəs Firmata nədir? Firmata veb səhifəsindən sitat gətirərək, "Firmata, ana kompüterdəki proqramlardan mikrokontrollerlərlə ünsiyyət qurmaq üçün ümumi bir protokoldur."

Arduino Firmata, adətən 57600 bps -ə təyin edilmiş bir serial/USB bağlantısı istifadə edərək, bir Arduino mikro nəzarətçisi ilə bir kompüter arasında həm əmr, həm də hesabat məlumatlarını daşımaq üçün bir sıra interfeysdən istifadə edir. Bu keçiddən ötürülən məlumatlar ikili xarakter daşıyır və protokol müştəri/server modelində tətbiq olunur.

Server tərəfi Arduino eskizi şəklində bir Arduino mikro nəzarətçisinə yüklənir. Arduino IDE -yə daxil olan StandardFirmata eskizi, müştərinin əmr etdiyi kimi Arduino G/Ç pinlərini idarə edir. Eyni zamanda giriş pin dəyişikliklərini və digər hesabat məlumatlarını müştəriyə qaytarır. FirmataExpress, StandardFirmata'nın genişləndirilmiş bir versiyasıdır. 115200 bps seriyalı keçid sürətində işləyir.

Bu məqalə üçün istifadə olunan Arduino müştəri pymata4 -dir. Bir PC -də icra edilən Python tətbiqidir. Həm Arduino serverinə əmr göndərir, həm də hesabat alır. Pymata4 Python -da tətbiq olunduğundan Windows, Linux (Raspberry Pi daxil olmaqla) və macOS kompüterlərində çalışır.

Niyə Firmata istifadə etməliyəm?

Arduino mikro nəzarətçiləri gözəl kiçik cihazlardır, lakin prosessor və yaddaş ehtiyatları bir qədər məhduddur. Prosessor və ya yaddaş sıxlığı olan tətbiqlər üçün, tətbiqin müvəffəqiyyətli olması üçün tez -tez resurs tələbini kompüterə yükləməkdən başqa seçim yoxdur.

Ancaq StandardFirmata istifadə etmənin yeganə səbəbi bu deyil. Daha yüngül Arduino tətbiqləri hazırlayarkən, bir kompüter birbaşa Arduino mikro nəzarətçisində olmayan vasitələr və ayıklama qabiliyyətləri təmin edə bilər. "Sabit" bir müştəri və server istifadə etmək, tətbiqin mürəkkəbliyini daha asan idarə olunan bir PC ilə məhdudlaşdırmağa kömək edir. Tətbiq təkmilləşdirildikdən sonra xüsusi, müstəqil bir Arduino eskizinə çevrilə bilər.

Niyə pymata4 istifadə etməlisiniz?

Müəllifi olduğum üçün, əlbəttə ki, qərəzliyəm. Deyilənə görə, son bir neçə ildə davamlı olaraq saxlanılan Python əsaslı Firmata müştərisidir. İntuitiv və istifadəsi asan bir API təmin edir. StandardFirmata əsaslı eskizlərə əlavə olaraq, StandardFirmataWifI eskizini istifadə edərkən ESP-8266 kimi cihazlar üçün WiFi üzərindən Firmata dəstəkləyir.

Ayrıca, pymata4, StandardFirmata tərəfindən dəstəklənməyən əlavə sensorlar və aktuatorları dəstəkləmək üçün istifadəçi tərəfindən asanlıqla uzadılması üçün hazırlanmışdır.

Addım 1: Firmata Protokolunu anlayın

Firmata Protokolunu anlamaq
Firmata Protokolunu anlamaq

Arduino Firmata rabitə protokolu, məlumatları təmsil etmək üçün bir və ya daha çox 7 bitlik baytdan istifadə edən MIDI protokolundan alınmışdır.

Firmata istifadəçi genişləndirilməsi üçün hazırlanmışdır. Bu genişlənməni təmin edən mexanizm System Exclusive (SysEx) mesajlaşma protokoludur.

Firmata Protokolu ilə müəyyən edilmiş bir SysEx mesajının formatı yuxarıdakı şəkildə göstərilmişdir. Onaltılı 0xF0 sabit dəyəri olan bir START_SYSEX baytı ilə başlayır və unikal bir SysEx əmr baytı izləyir. Komanda baytının dəyəri onaltılı 0x00-0x7F aralığında olmalıdır. Komanda baytından sonra müəyyən edilməmiş sayda 7 bitlik məlumat baytı gəlir. Nəhayət, mesaj, onaltılı 0xF7 sabit dəyəri olan bir END_SYSEX baytı ilə sona çatır.

Firmata Məlumat Kodlaşdırma/Kod Çözmə

Bir SysEx mesajının istifadəçi məlumatları bir sıra 7 bitlik baytlardan ibarət olduğundan, birinin 128 (0x7f) -dən böyük bir dəyəri necə təmsil etdiyini düşünə bilərsiniz. Firmata, məlumatları keçiddən keçmədən əvvəl bu dəyərləri birdən çox 7 bitlik bayt parçalarına ayıraraq kodlaşdırır. Bir məlumat elementinin ən az əhəmiyyətli baytı (LSB) əvvəl göndərilir, daha sonra konvensiya ilə məlumat elementinin getdikcə daha əhəmiyyətli komponentləri göndərilir. Məlumat elementinin ən əhəmiyyətli baytı (MSB) göndərilən son məlumat elementidir.

Bu necə işləyir?

SysEx mesajının məlumat hissəsinə 525 dəyərini daxil etmək istədiyimizi söyləyin. 525 dəyəri 128 dəyərindən açıqca böyük olduğu üçün onu 7 bit baytlıq "hissələrə" bölmək və ya sökmək lazımdır.

Budur bunun necə edildiyi.

Ondalıkdakı 525 dəyəri, 2 baytlıq bir dəyər olan 0x20D onaltılı dəyərinə bərabərdir. LSB -ni əldə etmək üçün dəyəri 0x7F ilə AND AND edərək maskalayırıq. Həm "C", həm də Python tətbiqləri aşağıda göstərilmişdir:

// LSB -ni təcrid etmək üçün "C" tətbiqi

int max_distance_LSB = max_distance & 0x7f; // LSB max_distance_LSB = max_distance & 0x7F # aşağı baytı təcrid etmək üçün aşağı baytı # Python tətbiqini maska edin

Maskelendikten sonra max_distance_LSB 0x0d ehtiva edir. 0x20D və 0x7F = 0x0D.

Sonra, bu 2 baytlıq dəyər üçün MSB-ni təcrid etməliyik. Bunu etmək üçün 0x20D dəyərini sağa, 7 yerə köçürəcəyik.

// 2 bayt dəyərli MSB -ni təcrid etmək üçün "C" tətbiqi

int max_distance_MSB = max_distance >> 7; // yüksək sifariş baytını # Python tətbiqini 2 bayt dəyərli isoloate MSB -ə köçürün max_distance_MSB = max_distance >> 7 # shift üst baytı əldə etmək üçün shiftdən sonra max_distance_MSB 0x04 dəyərini ehtiva edir.

"Köklənmiş" marşallaşdırılmış məlumatlar alındıqda, onları yenidən vahid bir dəyərə yığmaq lazımdır. Verilərin həm "C", həm də Python -da necə bir araya gətirildiyi budur

// 2 baytı yenidən yığmaq üçün "C" tətbiqi, // 7 bit dəyərləri vahid dəyərə int max_distance = argv [0] + (argv [1] << 7); 2 baytlı, # 7 bitlik dəyərləri bir araya gətirmək üçün # Python tətbiqi max_distance = data [0] + (data [1] << 7)

Yenidən yığıldıqdan sonra, dəyər bir daha 525 onluq və ya 0x20D onaltılıdır.

Bu sökmə/yenidən yığma prosesi ya müştəri, ya da server tərəfindən həyata keçirilə bilər.

Addım 2: Başlayaq

Yeni bir cihazı dəstəkləmək üçün həm Arduino rezident serverində, həm də PC sakini Python müştərisində dəyişikliklər tələb olunur. Dr Wheeler'in işləri lazımi dəyişiklikləri göstərmək üçün istifadə ediləcək.

Bəlkə də ən vacib addım, mövcud bir dəstək cihaz kitabxanasını tənliyin Arduino tərəfinə inteqrasiya etmək və ya özünüz yazmaq istəməyinizə qərar verməkdir. Mövcud bir kitabxana tapa bilsəniz, öz kitabınızı sıfırdan yazmaqdan daha asan olması tövsiyə olunur.

DHT cihazı dəstəyi üçün Dr. Wheeler uzantı kodunu DHTNew kitabxanasına söykəndi. Dr Wheeler, DHTNew kitabxanasının funksiyalarını Arduino və pymata4 tərəflərində Arduino tərəfində minimum bloklama təmin etmək üçün ayırdı.

DHTNew -ə baxsaq, aşağıdakıların hamısını yerinə yetirir:

  • Seçilmiş pin rəqəmsal çıxış rejimini təyin edir.
  • Ən son rütubət və temperatur dəyərlərini əldə etmək üçün kodlanmış bir siqnal verir.
  • Səhvləri yoxlayır və bildirir.
  • Alınan xam məlumatlardan insan tərəfindən oxunan temperatur və rütubət dəyərlərini hesablayır.

FirmataExpress tərəfində işlərin mümkün qədər səmərəli olmasını təmin etmək üçün Dr. Wheeler, Arduino -dan pymata4 -ə məlumatların çevrilməsi qaydalarını yüklədi.

Addım 3: DHT Dəstəyi üçün FirmataExpress -in dəyişdirilməsi

FirmataExpress Kataloq Ağacı

Aşağıda FirmataExpress deposunu təşkil edən bütün fayllar verilmişdir. Bu ağac, StandardFiramata ilə eynidir, çünki bəzi fayl adları depo adını əks etdirir.

Dəyişdirməyə ehtiyacı olan fayllar, yanında bir ulduz (*) olanlardır.

FirmataExpress

Bo * lövhələr.h

├── nümunələr

FirmataExpress

X ├── boardx

│ ├── * FirmataExpress.ino

Lisenziya lisenziyası.txt

Makefile

├── * FirmataConstants.h

├── * FirmataDefines.h

├── FirmataExpress.cpp

├── FirmataExpress.h

├── FirmataMarshaller.cpp

├── FirmataMarshaller.h

├── FirmataParser.cpp

└── FirmataParser.h

Faylların hər birinə və edilən dəyişikliklərə baxaq.

Lövhələr.h

Bu fayl, dəstəklənən lövhə növlərinin hər biri üçün pin tipli makro tərifləri ehtiva edir. Birdən çox cihazın dəstəklənməsi lazım olduqda dəstəklənən cihazların maksimum sayını təyin edir.

DHT cihazı üçün bir anda 6 -a qədər cihaz bağlana bilər və bu dəyər aşağıdakı kimi təyin olunur:

#ifndef MAX_DHTS

#dexine MAX_DHTS 6 #endif

Ayrıca, pin tipli makrolar, bütün qurğular üçün və ya yalnız sizin üçün maraqlı olanlar üçün yeni cihaz üçün isteğe bağlı olaraq təyin edilə bilər. Bu makrolar əsasən hesabat vermək üçün istifadə olunur və cihazları idarə etmək üçün istifadə edilmir. Bu makrolar cihazı dəstəkləyən hər iki sancağı təyin edir:

#define IS_PIN_DHT (p) (IS_PIN_DIGITAL (p) && (p) - 2 <MAX_DHTS)

Bir pin nömrəsi çevrilməsini təyin etmək üçün bir makro.

#PIN_TO_DHT (p) PIN_TO_DIGITAL (p) təyin edin

FirmataConstants.h

Bu fayl, Arduino -ya yüklədiyiniz versiyanı izləmək üçün dəyişdirmək istəyə biləcəyiniz firmware versiya nömrəsini ehtiva edir. Firmata SysEx mesajları da daxil olmaqla Firmata mesaj dəyərlərini ehtiva edir.

Bu faylda cihazınız üçün yeni bir mesaj və ya mesaj dəsti təyin etməlisiniz. DHT üçün iki mesaj əlavə edildi. Biri "DHT" pin kimi konfiqurasiya edir, digəri isə son DHT məlumatlarını müştəriyə geri göndərərkən müxbir mesajı olaraq.

statik qur int DHT_CONFIG = 0x64;

statik const int DHT_DATA = 0x65;

Pin faylları da bu faylda göstərilmişdir. DHT üçün yeni bir pin rejimi yaradıldı:

statik qur int PIN_MODE_DHT = 0x0F; // pin DHT üçün konfiqurasiya edilmişdir

Yeni bir pin rejimi əlavə edərkən TOTAL_PIN_MODES tənzimlənməlidir:

statik const int TOTAL_PIN_MODES = 17;

FirmataDefines.h

Bu fayl FirmataConstants.h saytına əlavə edilən yeni mesajları əks etdirmək üçün yenilənməlidir:

#ifdef DHT_CONFIG #undef DHT_CONFIG #endif #define DHT_CONFIG firmata:: DHT_CONFIG // DHT request #ifdef DHT_DATA #undef DHT_DATA #endif #define DHT_DATA firmata:: DHT_DATA // DHT reply #ifdef PIN_FOD_FOD_DOD:: PIN_MODE_DHT

FirmataExpress.ino

Bu müzakirədə, bu Arduino eskizində edilən dəyişikliklərin "yüksək nöqtələrini" əhatə edəcəyik.

FirmataExpress -in eyni anda altı DHT cihazını dəstəkləməsi üçün cihazın əlaqəli hər bir pin nömrəsini, WakeUpDelay dəyərini və cihaz tipini, yəni DHT22 və ya DHT11 -i izləmək üçün 3 sıra yaradılmışdır:

// DHT sensorlar

int numActiveDHTs = 0; // əlavə edilmiş DHT sayı uint8_t DHT_PinNumbers [MAX_DHTS]; uint8_t DHT_WakeUpDelay [MAX_DHTS]; uint8_t DHT_TYPE [MAX_DHTS];

Hər iki cihaz növü oxunuşlar arasında təxminən 2 saniyə tələb etdiyindən, hər DHT-ni 2 saniyəlik zaman aralığında yalnız bir dəfə oxuduğumuzdan əmin olmalıyıq. DHT cihazları və HC-SR04 məsafə sensorları kimi bəzi cihazlara yalnız vaxtaşırı daxil olur. Bu onlara mühitləri ilə ünsiyyət qurmağa vaxt verir.

uint8_t nextDHT = 0; Növbəti cihazın oxunması üçün dht indeksinə salın

uint8_t currentDHT = 0; // Hansı sensorun aktiv olduğunu izləyir. int dhtNumLoops = 0; // DHT int dhtLoopCounter = 0 -a daxil olmaq üçün b4 döngəsi ilə hədəf sayı; // Döngə sayğacı

DHT Cihazının Konfiqurasiyası və Oxunması

FirmataExpress, DHT əməliyyatı üçün bir pin konfiqurasiya etmək üçün bir SysEx əmri aldıqda, DHT cihazlarının maksimum sayının aşılmadığını yoxlayır. Yeni DHT dəstəklənə bilərsə, DHT serialları yenilənir. DHT növü məlum deyilsə, bir SysEx simli mesajı yaradılır və pymata4 -ə geri ötürülür

hal DHT_CONFIG: int DHT_Pin = argv [0]; int DHT_type = argv [1]; if (numActiveDHTs <MAX_DHTS) {if (DHT_type == 22) {DHT_WakeUpDelay [numActiveDHTs] = 1; } başqa əgər (DHT_type == 11) {DHT_WakeUpDelay [numActiveDHTs] = 18; } başqa {Firmata.sendString ("HATA: BİLİNMƏZ SENSOR TİPİ, GÜCÜL SENSORLAR 11, 22"); fasilə; } // sensoru test edin DHT_PinNumbers [numActiveDHTs] = DHT_Pin; DHT_TYPE [numActiveDHTs] = DHT_type; setPinModeCallback (DHT_Pin, PIN_MODE_DHT);

FirmataExpress daha sonra DHT cihazı ilə əlaqə qurmağa çalışır. Hər hansı bir səhv varsa, səhv məlumatları ilə bir SysEx mesajı yaradır və SysEx mesajını yenidən pymat4 -ə göndərir. _Bits dəyişən, istəsən pymata4 tərəfindən əlavə işlənmə üçün DHT cihazı tərəfindən verilən məlumatları saxlayır.

Firmata.write (START_SYSEX);

Firmata.write (DHT_DATA); Firmata.write (DHT_Pin); Firmata.write (DHT_type); üçün (uint8_t i = 0; i> 7 & 0x7f); } Firmata.write (abs (rv)); Firmata.write (1); Firmata.write (END_SYSEX);

Etibarlı məlumatlar qaytarılırsa, aktiv DHT -lərin sayı artır. Növbəti DHT məlumatlarını yoxlamadan əvvəl neçə döngə iterasiyasının tamamlanacağını izləyən bir dəyişən də tənzimlənir. Bu dəyişən sistemə nə qədər DHT əlavə edilsə də, hamısının 2 saniyə ərzində oxunacağını təmin edir.

int rv = readDhtSensor (numActiveDHTs);

əgər (rv == DHTLIB_OK) {numActiveDHTs ++; dhtNumLoops = dhtNumLoops / numActiveDHTs; // hər şey yaxşıdır}

Eskizin döngə funksiyasında bir və ya daha çox DHT cihazı konfiqurasiya edilmişsə, onda növbəti DHT cihazı oxunur. Etibarlı məlumatlar və ya səhv statusu SysEx mesajı şəklində pymata4 -ə qaytarılır:

if (dhtLoopCounter ++> dhtNumLoops) {if (numActiveDHTs) {int rv = readDhtSensor (nextDHT); uint8_t current_pin = DHT_PinSayılar [nextDHT]; uint8_t current_type = DHT_TYPE [nextDHT]; dhtLoopCounter = 0; cariDHT = sonrakıDHT; əgər (nextDHT ++> = numActiveDHTs - 1) {nextDHT = 0; } if (rv == DHTLIB_OK) {// TEST KONTROLÜ uint8_t sum = _bits [0] + _bits [1] + _bits [2] + _bits [3]; əgər (_bits [4]! = cəmi) {rv = -1; }} // mesajı səhv statusu ilə geri göndərin Firmata.write (START_SYSEX); Firmata.write (DHT_DATA); Firmata.write (current_pin); Firmata.write (current_type); for (uint8_t i = 0; i <sizeof (_bits) - 1; ++ i) {Firmata.write (_bits ); // Firmata.write (_bits ;} Firmata.write (abs (rv)); Firmata.write (0); Firmata.write (END_SYSEX);}}

DHT cihazı ilə əlaqə yaratmaq üçün istifadə olunan kod birbaşa DHTNew kitabxanasından alınmışdır:

int readDhtSensor (int indeksi) {

// INIT BUFFERVAR MƏLUMAT ALMAQ uint8_t mask = 128; uint8_t idx = 0; // EMPTY BUFFER // memset (_bits, 0, sizeof (_bits)); for (uint8_t i = 0; i 5 BYTES for (uint8_t i = 40; i! = 0; i--) {loopCnt = DHTLIB_TIMEOUT; while (digitalRead (pin) == LOW) {if (--loopCnt == 0) DHTLIB_ERROR_TIMEOUT;} uint32_t t = micros (); loopCnt = DHTLIB_TIMEOUT; while (digitalRead (pin) == HIGH) {if (--loopCnt == 0) return DHTLIB_ERROR_TIMEOUT;} if ((micros ()-t) 40) {_bits [idx] | = mask;} mask >> = 1; if (mask == 0) // next byte? {Mask = 128; idx ++;}} DHTLIB_OK qaytar;}

Addım 4: DHT Dəstəyi üçün Pymata4 -ün dəyişdirilməsi

özəl_dəyərlər.h

DHT-ni dəstəkləmək üçün bu fayla həm yeni pin tipli həm də SysEx mesajları əlavə etməliyik:

# pin rejimi INPUT = 0x00 # pin giriş olaraq təyin edildi Çıxış = 0x01 # pin ANALOG = 0x02 # analoqdakı analog pin Giriş rejimində PWM = 0x03 # PWM çıxış rejimində rəqəmsal pin SERVO = 0x04 # Servo çıxış rejimində rəqəmsal pin I2C = 0x06 # pin I2C quruluşuna daxil edilir STEPPER = 0x08 # step rejimində hər hansı bir pin SERIAL = 0x0a PULLUP = 0x0b # SONAR rejimində hər hansı bir pin SONAR = 0x0c # SONAR rejimində hər hansı bir pin TONE = 0x0d # Ton rejimində hər hansı bir pin PIXY = 0x0e # pixy kamera rejimi üçün ayrılmışdır DHT = 0x0f # DHT sensoru IGNORE = 0x7f # DHT SysEx əmr mesajları DHT_CONFIG = 0x64 # dht config əmri DHT_DATA = 0x65 # dht sensor cavab

Əlavə edilmiş pin növü və SysEx əmrləri FirmataExpress -ə əlavə olunan FirmataConstants.h dəyərlərinə uyğun olmalıdır.

pymata4.py

Pymata4, daxil olan Firmata mesajını tez bir mesaj işleyicisi ilə əlaqələndirmək üçün Python lüğətindən istifadə edir. Bu lüğətin adı report_dispatch -dir.

Lüğətə giriş formatı belədir:

{MessageID: [message_handler, işlənəcək məlumat baytlarının sayı]}

Gələcək DHT mesajlarını idarə etmək üçün lüğətə bir giriş əlavə edildi:

{PrivateConstants. DHT_DATA: [self._dht_read_response, 7]}

Mesajdakı 7 bayt məlumat Arduino rəqəmsal pin nömrəsi, DHT cihazının növü (22 və ya 11) və 5 bayt xam məlumatdır.

_Dht_read_response metodu bildirilən səhvləri yoxlayır. Bildirilən səhvlər yoxdursa, rütubət və temperatur Arduino DHTNew kitabxanasından alınan alqoritmdən istifadə edərək hesablanır.

Hesablanmış dəyərlər istifadəçi tərəfindən təmin edilən geri çağırma üsulu ilə bildirilir. Daxili pin_data məlumat quruluşunda da saxlanılır. Bildirilən son dəyər, dht_read metodundan istifadə edərək pin_data sorğusu ilə geri çağırıla bilər.

Yeni DHT Cihazının Konfiqurasiyası

Yeni bir DHT cihazı əlavə edərkən set_pin_mode_dht metodu çağırılır. Bu üsul rəqəmsal pinlər üçün pin_datasını yeniləyir. Həm də DHT_CONFIG SysEx mesajı yaradır və FirmataExpress -ə göndərir.

Addım 5: Sarma

Gördüyümüz kimi, yeni bir cihaz üçün Firmata dəstəyi əlavə etmək üçün Arduino FirmataExpress server kodunu və Python əsaslı pymata4 müştəri kodunu dəyişdirməyiniz tələb olunur. FirmataExpress kodunu düzəltmək çətin ola bilər. Hata ayıklamada kömək etmək üçün FirmataExpress -ə printData adlı bir metod əlavə edildi. Bu üsul məlumat dəyərlərini FirmataExpress -dən göndərməyə imkan verir və onları pymata4 konsolunda çap edəcək.

Bu funksiya həm simvol simvolu, həm də görmək istədiyiniz dəyəri tələb edir. Məlumat dəyəri argc adlı bir dəyişəndə varsa, aşağıdakı parametrlərlə printData'ya zəng edə bilərsiniz.

printData ((char*) "argc =", argc);

Hər hansı bir sualınız varsa, bir şərh yazın və cavab verməkdən məmnunam.

Xoşbəxt kodlaşdırma!

Tövsiyə: