{"id":97,"date":"2026-08-11T06:32:31","date_gmt":"2026-08-11T06:32:31","guid":{"rendered":"https:\/\/yaba.net.tr\/?p=97"},"modified":"2026-08-13T06:41:12","modified_gmt":"2026-08-13T06:41:12","slug":"python-ile-pymavlink-kutuphanesi","status":"publish","type":"post","link":"https:\/\/yaba.net.tr\/?p=97","title":{"rendered":"Python \u0130le &#8220;pymavlink&#8221; K\u00fct\u00fcphanesi"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>K\u00fc\u00e7\u00fck Bir Not:<\/strong> Bu yaz\u0131da anlat\u0131lanlar\u0131 ve kodlar\u0131 rahat\u00e7a takip edebilmeniz i\u00e7in temel d\u00fczeyde Python bilgisine sahip olman\u0131z yeterlidir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0130HA&#8217;lar (\u0130nsans\u0131z Hava Ara\u00e7lar\u0131) havada u\u00e7arken yerdeki istasyonla ve kendi i\u00e7indeki sens\u00f6rlerle s\u00fcrekli bir veri al\u0131\u015fveri\u015fi yapmak zorunda. \u0130\u015fte bu veri al\u0131\u015fveri\u015finin arkas\u0131ndaki <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\">MAVLINK<\/mark><\/strong> ad\u0131nda \u00f6zel bir haberle\u015fme dili var.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\">pymavlink<\/mark> k\u00fct\u00fcphanesi de Python ile bu dilde konu\u015fmam\u0131z\u0131, yani drone&#8217;a \u015furaya git, \u015fu sens\u00f6rden gelen veriyi oku veya motora \u015fu komutu ver dememizi sa\u011flayan en pratik ara\u00e7. Kod taraf\u0131nda i\u015fler tam olarak bu k\u00f6pr\u00fcy\u00fc kurmakla d\u00f6n\u00fcyor.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bu yaz\u0131da ise projemizde de aktif olarak kulland\u0131\u011f\u0131m\u0131z <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\">pymavlink<\/mark> k\u00fct\u00fcphanesinin detaylar\u0131na ve i\u015fin pratikine yak\u0131ndan bakaca\u011f\u0131z.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"has-large-font-size wp-block-paragraph\"><em><strong>Kurulum A\u015famas\u0131<\/strong><\/em><\/p>\n\n\n\n<p class=\"has-regular-font-size wp-block-paragraph\"><strong>Windows i\u00e7in:<\/strong> <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">1-\u00d6ncelikle bilgisiyar\u0131m\u0131zda python kurulumu onu kontrol ediyoruz , bunun i\u00e7in bilgisiyar\u0131m\u0131zda ayn\u0131 anda win+r tu\u015funa bas\u0131yoruz , ard\u0131ndan a\u00e7\u0131lan run penceresine<strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-black-color\"> cmd <\/mark><\/strong>yaz\u0131p enter tu\u015funa bas\u0131yoruz<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"738\" height=\"345\" src=\"https:\/\/yaba.net.tr\/wp-content\/uploads\/2026\/08\/images.png\" alt=\"\" class=\"wp-image-109\" srcset=\"https:\/\/yaba.net.tr\/wp-content\/uploads\/2026\/08\/images.png 738w, https:\/\/yaba.net.tr\/wp-content\/uploads\/2026\/08\/images-300x140.png 300w\" sizes=\"auto, (max-width: 738px) 100vw, 738px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">2-A\u00e7\u0131lan komut istemi sayfas\u0131na <code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-cyan-bluish-gray-color\">python3 --version<\/mark><\/code> yaz\u0131yoruz E\u011fer kar\u015f\u0131m\u0131za <code>Python x.x.x<\/code> gibi bir yaz\u0131 \u00e7\u0131karsa sistemimizde Python&#8217;\u0131n ba\u015far\u0131yla kurulu oldu\u011funu ve terminal \u00fczerinden sorunsuz \u00e7al\u0131\u015ft\u0131r\u0131labildi\u011fini anlar\u0131z.\u00c7\u0131kmad\u0131\u011f\u0131 taktirde l\u00fctfen <a href=\"https:\/\/www.python.org\/ftp\/python\/3.14.7\/Python-3.14.7.tar.xz\" data-type=\"page\" data-id=\"6\">t\u0131klay\u0131n\u0131z.<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">3-<code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-cyan-bluish-gray-color\">python3 -m venv venv <\/mark><\/code>kodu ile sanal alan olu\u015fturun  ve <code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-cyan-bluish-gray-color\">source venv\/bin\/active<\/mark><\/code> ile olu\u015fturdu\u011funuz alana girin.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">4-Komut istemi sayfas\u0131na <code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-cyan-bluish-gray-color\">pip install pymavlink<\/mark><\/code> kodunu yaz\u0131n\u0131z. Hata alan olursa yorumlarda belirtsin, beraber \u00e7\u00f6zeriz.<\/p>\n\n\n\n<p class=\"has-regular-font-size wp-block-paragraph\"><strong>Linux i\u00e7in:<\/strong> <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">1-Klavyenizden ctrl+alt+t tu\u015flar\u0131na basarak terminalinizi a\u00e7\u0131n\u0131z .<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"738\" height=\"345\" src=\"https:\/\/yaba.net.tr\/wp-content\/uploads\/2026\/08\/images-1.png\" alt=\"\" class=\"wp-image-116\" srcset=\"https:\/\/yaba.net.tr\/wp-content\/uploads\/2026\/08\/images-1.png 738w, https:\/\/yaba.net.tr\/wp-content\/uploads\/2026\/08\/images-1-300x140.png 300w\" sizes=\"auto, (max-width: 738px) 100vw, 738px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">2-a\u00e7\u0131lan sekmede <code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-cyan-bluish-gray-color\">python3 --version<\/mark><\/code> kodu ile python kurulumu kontrol ediniz .E\u011fer kar\u015f\u0131m\u0131za <code>Python x.x.x<\/code> gibi bir yaz\u0131 \u00e7\u0131karsa sistemimizde Python&#8217;\u0131n ba\u015far\u0131yla kurulu oldu\u011funu ve terminal \u00fczerinden sorunsuz \u00e7al\u0131\u015ft\u0131r\u0131labildi\u011fini anlar\u0131z.\u00c7\u0131kmad\u0131\u011f\u0131 taktirde l\u00fctfen <a href=\"https:\/\/www.python.org\/ftp\/python\/3.14.7\/Python-3.14.7.tar.xz\" data-type=\"page\" data-id=\"6\">t\u0131klay\u0131n\u0131z.<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">3-<code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-cyan-bluish-gray-color\">python3 -m venv venv <\/mark><\/code>kodu ile sanal alan olu\u015fturun  ve <code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-cyan-bluish-gray-color\">source venv\/bin\/active<\/mark><\/code> ile olu\u015fturdu\u011funuz alana girin.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">4-son olarak terminal ekran\u0131na <code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-cyan-bluish-gray-color\">pip install pymavlink<\/mark><\/code> kodunu yaz\u0131n\u0131z. Hata al\u0131rsan\u0131z  yorumlarda belirtin, beraber \u00e7\u00f6zeriz.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"has-large-font-size wp-block-paragraph\"><em><strong>Kurulumdan Sonra<\/strong><\/em><\/p>\n\n\n\n<p class=\"has-regular-font-size wp-block-paragraph\">S\u0131rada, k\u00fct\u00fcphaneyi kurduktan sonra i\u015fin as\u0131l keyifli k\u0131sm\u0131 olan <strong>Python ile ilk ba\u011flant\u0131y\u0131 kurma ve telemetri verilerini okuma<\/strong> a\u015famas\u0131 var.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ba\u011flant\u0131y\u0131 kurabilmek i\u00e7in \u00f6nce elinizdeki u\u00e7u\u015f kontrol kart\u0131n\u0131 bilgisayara ba\u011flaman\u0131z gerekiyor. Ben bu yaz\u0131da ger\u00e7ek bir kart yerine sim\u00fclasyon ortam\u0131 kullanaca\u011f\u0131m, bilgisayar olarak ise kendi diz\u00fcst\u00fc bilgisayar\u0131m\u0131 tercih ediyorum.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bilgisiyar\u0131n\u0131zda herhangibi bir kod edit\u00f6r\u00fc a\u00e7arak u\u00e7u\u015f kontrolc\u00fcs\u00fcne(Fly Controller) ba\u011flanmak i\u00e7in k\u00fct\u00fcphanemizi dahil ediyoruz .<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>from pymavlink import mavutil<\/code><br><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"657\" height=\"83\" src=\"https:\/\/yaba.net.tr\/wp-content\/uploads\/2026\/08\/7CABFB5E-D234-4965-8645-9EB459CD536D.png\" alt=\"\" class=\"wp-image-129\" srcset=\"https:\/\/yaba.net.tr\/wp-content\/uploads\/2026\/08\/7CABFB5E-D234-4965-8645-9EB459CD536D.png 657w, https:\/\/yaba.net.tr\/wp-content\/uploads\/2026\/08\/7CABFB5E-D234-4965-8645-9EB459CD536D-300x38.png 300w\" sizes=\"auto, (max-width: 657px) 100vw, 657px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">ard\u0131ndan u\u00e7u\u015f kontrol kart\u0131na ba\u011flant\u0131m\u0131z\u0131 ger\u00e7ekle\u015ftiriyoruz , ba\u011flant\u0131 adresini nas\u0131l bulaca\u011f\u0131n\u0131z\u0131 bilmiyorsan\u0131z <a href=\"https:\/\/mavlink.io\/en\/mavgen_python\/#connection-strings\" data-type=\"page\" data-id=\"6\">t\u0131klay\u0131n\u0131z<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>master = mavutil.mavlink_connection('ba\u011flant\u0131 adresi')<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ba\u011flant\u0131y\u0131 yapt\u0131ktan sonra, drone ile haberle\u015fmenin kesilmemesi ve kart\u0131n aktif kalmas\u0131n\u0131 sa\u011flamak i\u00e7in s\u00fcrekli bir kalp at\u0131\u015f\u0131 (heartbeat) sinyali g\u00f6ndermemiz gerekir. Bunun i\u00e7in Python&#8217;\u0131n <code>threading<\/code> k\u00fct\u00fcphanesini kullanarak arka planda s\u00fcrekli kalp at\u0131\u015f\u0131 yayan bir fonksiyon yaz\u0131yoruz:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>print(\"Drona ba\u011flan\u0131l\u0131yor ...\")\nmaster.wait_heartbeat()\nprint(\"Dron AKT\u0130F \")\n\ndef kalpAtisi(yol):\n    while True:\n        yol.mav.heartbeat_send(\n            0,\n            0,\n            0,\n            0,\n            0,\n            0\n        )\nthreading.Thread(target=kalpAtisi , args=(master,) , daemon=True).start()\nprint(\"Kalp at\u0131\u015f\u0131 ba\u015flad\u0131\",)\ntime.sleep(1)<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"861\" height=\"412\" src=\"https:\/\/yaba.net.tr\/wp-content\/uploads\/2026\/08\/image.png\" alt=\"\" class=\"wp-image-136\" srcset=\"https:\/\/yaba.net.tr\/wp-content\/uploads\/2026\/08\/image.png 861w, https:\/\/yaba.net.tr\/wp-content\/uploads\/2026\/08\/image-300x144.png 300w, https:\/\/yaba.net.tr\/wp-content\/uploads\/2026\/08\/image-768x367.png 768w\" sizes=\"auto, (max-width: 861px) 100vw, 861px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Buraya kadar yapt\u0131klar\u0131m\u0131zla, ister sim\u00fclasyon ortam\u0131nda ister ger\u00e7ek bir u\u00e7u\u015f kontrol kart\u0131nda olun, sistemle g\u00fcvenli bir ba\u011flant\u0131 kurmay\u0131 ve MAVLink protokol\u00fcn\u00fcn en temel kural\u0131 olan &#8220;kalp at\u0131\u015f\u0131&#8221; (heartbeat) sinyaliyle ba\u011flant\u0131n\u0131n kopmas\u0131n\u0131 engellemeyi ba\u015fard\u0131k.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Art\u0131k kart\u0131m\u0131zla s\u00fcrekli ileti\u015fim halinde oldu\u011fumuza g\u00f6re, bir sonraki ad\u0131mda bu ba\u011flant\u0131 \u00fczerinden anl\u0131k telemetri verilerini okumay\u0131 ve drone&#8217;umuzu y\u00f6netmeyi \u00f6\u011frenece\u011fiz.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u015eimdi MAVlink protokol\u00fcn\u00fc bir ana yol gibi d\u00fc\u015f\u00fcn\u00fcn a noktas\u0131ndan b noktas\u0131na giden bir anayol bu anayolda t\u0131rlar\u0131n oldu\u011funu ve t\u0131ralar\u0131dna paketler ta\u015f\u0131d\u0131\u011f\u0131n\u0131 d\u00fc\u015f\u00fcn\u00fcn .Bu t\u0131rlardan bizim i\u015fimize yarayan t\u0131r\u0131 al\u0131yoruz \u00f6rnek verecek olursak GLOBAL_POSITION_INT t\u0131r\u0131 ve bu t\u0131r\u0131n i\u00e7indeki bir paketi yani relative_alt paketini al\u0131yoruz , bu kod \u00fczerinde g\u00f6sterecek olursak.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pos = master.recv_match(type='GLOBAL_POSITION_INT', blocking=True)\nif pos:\n    yerden_yukseklik = pos.relative_alt \/ 1000.0\n    print(f\"Yerden Y\u00fckseklik: {yerden_yukseklik} metre\")<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Kodun bu son k\u0131sm\u0131nda iki \u00f6nemli olay ger\u00e7ekle\u015fiyor. \u0130lk olarak <code>recv_match<\/code> ve <code>type<\/code> mant\u0131\u011f\u0131 sayesinde, u\u00e7u\u015f kontrol kart\u0131ndan veya sim\u00fclat\u00f6rden akan veri ak\u0131\u015f\u0131n\u0131 dinliyoruz. \u0130\u00e7ine yazd\u0131\u011f\u0131m\u0131z <code>type='GLOBAL_POSITION_INT'<\/code> parametresi, o kalabal\u0131k veri ak\u0131\u015f\u0131 i\u00e7erisinden sadece bizim o an ilgilendi\u011fimiz, yani anl\u0131k konum ve y\u00fckseklik bilgilerini bar\u0131nd\u0131ran veri paketini filtreleyip \u00e7ekmemize yar\u0131yor. <code>blocking=True<\/code> k\u0131sm\u0131 ise o paket gelene kadar kodun durup beklemesini, veri gelmeden alt sat\u0131rlara ge\u00e7memesini sa\u011fl\u0131yor. \u0130kinci olarak t\u0131r ve paket benzetmesini ele al\u0131rsak; MAVLink protokol\u00fcn\u00fc A noktas\u0131ndan B noktas\u0131na giden b\u00fcy\u00fck bir otoyol gibi d\u00fc\u015f\u00fcnebilirsiniz. Bu otoyol \u00fczerinde s\u00fcrekli veri ta\u015f\u0131yan &#8220;t\u0131rlar&#8221; yani mesaj paketleri ge\u00e7er. Biz <code>type='GLOBAL_POSITION_INT'<\/code> diyerek o otoyoldan tam olarak i\u015fimize yarayan o t\u0131r\u0131 se\u00e7iyoruz. T\u0131r\u0131n i\u00e7ine bakt\u0131\u011f\u0131m\u0131zda ise bizi <code>relative_alt<\/code> gibi de\u011fi\u015fkenler yani t\u0131r\u0131n ta\u015f\u0131d\u0131\u011f\u0131 paketler bekliyor. Kod i\u00e7erisindeki <code>pos.relative_alt<\/code> ifadesi de o t\u0131r\u0131n kasas\u0131ndaki paketi a\u00e7\u0131p i\u00e7indeki yerden y\u00fckseklik verisini al\u0131p milimetreden metreye \u00e7evirmemizi sa\u011fl\u0131yor. \u0130htiyac\u0131n\u0131z olan t\u00fcm bu mesaj t\u00fcrlerine ve detayl\u0131 protokol yap\u0131lar\u0131na <a href=\"https:\/\/mavlink.io\/en\/messages\/common.html\" data-type=\"link\" data-id=\"https:\/\/mavlink.io\/en\/messages\/common.html\"><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">MAVLink<\/mark><\/a> resmi web sitesinden ula\u015fabilirsiniz.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>K\u00fc\u00e7\u00fck Bir Not: Bu yaz\u0131da anlat\u0131lanlar\u0131 ve kodlar\u0131 rahat\u00e7a takip edebilmeniz i\u00e7in temel d\u00fczeyde Python bilgisine sahip olman\u0131z yeterlidir. \u0130HA&#8217;lar (\u0130nsans\u0131z Hava Ara\u00e7lar\u0131) havada u\u00e7arken yerdeki istasyonla ve kendi i\u00e7indeki sens\u00f6rlerle s\u00fcrekli bir veri al\u0131\u015fveri\u015fi yapmak zorunda. \u0130\u015fte bu veri al\u0131\u015fveri\u015finin arkas\u0131ndaki MAVLINK ad\u0131nda \u00f6zel bir haberle\u015fme dili var. pymavlink k\u00fct\u00fcphanesi de Python ile bu&hellip; <br \/> <a class=\"read-more\" href=\"https:\/\/yaba.net.tr\/?p=97\">Devam\u0131<\/a><\/p>\n","protected":false},"author":1,"featured_media":185,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[13,12],"class_list":["post-97","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-yb-1","tag-otonom","tag-yazilim"],"_links":{"self":[{"href":"https:\/\/yaba.net.tr\/index.php?rest_route=\/wp\/v2\/posts\/97","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/yaba.net.tr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/yaba.net.tr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/yaba.net.tr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/yaba.net.tr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=97"}],"version-history":[{"count":27,"href":"https:\/\/yaba.net.tr\/index.php?rest_route=\/wp\/v2\/posts\/97\/revisions"}],"predecessor-version":[{"id":153,"href":"https:\/\/yaba.net.tr\/index.php?rest_route=\/wp\/v2\/posts\/97\/revisions\/153"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/yaba.net.tr\/index.php?rest_route=\/wp\/v2\/media\/185"}],"wp:attachment":[{"href":"https:\/\/yaba.net.tr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=97"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/yaba.net.tr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=97"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/yaba.net.tr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=97"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}