{"id":408,"date":"2025-02-18T16:13:09","date_gmt":"2025-02-18T15:13:09","guid":{"rendered":"http:\/\/indonesiafoto.ddns.net\/?p=408"},"modified":"2025-02-19T09:59:27","modified_gmt":"2025-02-19T08:59:27","slug":"nikon-d500-remote-control-solution-from-ai-prompt","status":"publish","type":"post","link":"http:\/\/indonesiafoto.ddns.net\/index.php\/2025\/02\/18\/nikon-d500-remote-control-solution-from-ai-prompt\/","title":{"rendered":"Nikon D500 Remote Control solution from AI prompt"},"content":{"rendered":"\n<p><strong>Local LLM Ollama, Deepseek.r1:70b, OpenWebUI<\/strong><\/p>\n\n\n\n<p>Untuk membuat remote control untuk kamera Nikon D500 menggunakan gphoto2 pada Raspberry Pi Zero dan mengaksesnya melalui REST API dengan FastAPI, Anda perlu melakukan beberapa langkah. Berikut adalah panduan lengkah demi langkah:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Prerequisites<\/h3>\n\n\n\n<p>Sebelum memulai, pastikan Anda memiliki:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Raspberry Pi Zero<\/strong> dengan sistem operasi <strong>Raspbian<\/strong>.<\/li>\n\n\n\n<li><strong>Kamera Nikon D500<\/strong> yang terhubung ke Raspberry Pi Zero (via USB atau koneksi lainnya).<\/li>\n\n\n\n<li><strong>Python 3.x<\/strong> dan <strong>pip<\/strong> sudah terinstall di Raspberry Pi.<\/li>\n\n\n\n<li><strong>gphoto2<\/strong> dan <strong>libgphoto2-dev<\/strong> sudah terinstall.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Langkah-langkah<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">1. Installasi gphoto2<\/h4>\n\n\n\n<p>Pastikan <code>gphoto2<\/code> sudah terinstall dan dapat mendeteksi kamera Nikon D500:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt-get update &amp;&amp; sudo apt-get upgrade -y\nsudo apt-get install gphoto2 libgphoto2-dev -y<\/code><\/pre>\n\n\n\n<p>Setelah instalasi, coba perintah berikut untuk memastikan kamera terdeteksi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gphoto2 --auto-detect<\/code><\/pre>\n\n\n\n<p>Anda seharusnya melihat informasi tentang kamera Nikon D500.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">2. Installasi FastAPI dan Uvicorn<\/h4>\n\n\n\n<p>Install <code>fastapi<\/code> dan <code>uvicorn<\/code> untuk membuat REST API:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pip install fastapi uvicorn python-multipart<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">3. Buat File Konfigurasi gphoto2 (Opsional)<\/h4>\n\n\n\n<p>Jika diperlukan, Anda bisa membuat file konfigurasi sederhana untuk mengatur parameter kamera.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">4. Buat Aplikasi FastAPI untuk Remote Control<\/h4>\n\n\n\n<p>Buat file Python untuk REST API, misalnya <code>main.py<\/code>, dan tambahkan kode berikut:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from fastapi import FastAPI, File, UploadFile\nfrom fastapi.staticfiles import StaticFiles\nimport subprocess\nimport json\n\napp = FastAPI()\n\n# Mount static files (opsional)\napp.mount(\"\/static\", StaticFiles(directory=\"static\"), name=\"static\")\n\ndef execute_gphoto2(command):\n    try:\n        result = subprocess.run(\n            command,\n            shell=True,\n            check=True,\n            capture_output=True,\n            text=True\n        )\n        return {\"status\": \"success\", \"message\": result.stdout}\n    except subprocess.CalledProcessError as e:\n        return {\"status\": \"error\", \"message\": str(e.stderr)}\n\n@app.get(\"\/\")\nasync def root():\n    return {\"message\": \"Nikon D500 Remote Control API\"}\n\n# Capture Image\n@app.post(\"\/capture\")\nasync def capture_image():\n    command = \"gphoto2 --trigger-capture\"\n    return execute_gphoto2(command)\n\n# Start Live View\n@app.post(\"\/liveview\/start\")\nasync def start_live_view():\n    command = \"gphoto2 --start-preview\"\n    return execute_gphoto2(command)\n\n# Stop Live View\n@app.post(\"\/liveview\/stop\")\nasync def stop_live_view():\n    command = \"gphoto2 --stop-preview\"\n    return execute_gphoto2(command)\n\n# Capture and Download Image\n@app.post(\"\/capture-and-download\")\nasync def capture_and_download(file_name: str = \"image.jpg\"):\n    command = f\"gphoto2 --trigger-capture --keep --filename {file_name}\"\n    result = execute_gphoto2(command)\n\n    if result&#91;\"status\"] == \"success\":\n        return {\"message\": f\"Image captured and saved as {file_name}\"}\n    else:\n        return result\n\n# Get Camera Info\n@app.get(\"\/camera\/info\")\nasync def get_camera_info():\n    command = \"gphoto2 --about\"\n    return execute_gphoto2(command)\n\n# Set Camera Configuration (contoh: ISO)\n@app.post(\"\/config\/set\/{parameter}\/{value}\")\nasync def set_camera_config(parameter: str, value: str):\n    command = f\"gphoto2 --set-config {parameter}={value}\"\n    return execute_gphoto2(command)\n\n# Get Camera Configuration (contoh: ISO)\n@app.get(\"\/config\/get\/{parameter}\")\nasync def get_camera_config(parameter: str):\n    command = f\"gphoto2 --get-config {parameter}\"\n    return execute_gphoto2(command)<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">5. Jalankan FastAPI<\/h4>\n\n\n\n<p>Untuk menjalankan server, gunakan perintah:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>uvicorn main:app --reload<\/code><\/pre>\n\n\n\n<p>Sekarang Anda bisa mengakses API melalui alamat <code>http:\/\/&lt;IP-RPI&gt;:8000\/docs<\/code> untuk melihat dokumentasi Swagger.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">6. Akses dan Penggunaan<\/h4>\n\n\n\n<p>Anda bisa menggunakan <code>curl<\/code> atau tools lainnya untuk mengakses API:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Capture Image: <code>curl -X POST http:\/\/&lt;IP-RPI&gt;:8000\/capture<\/code><\/li>\n\n\n\n<li>Start Live View: <code>curl -X POST http:\/\/&lt;IP-RPI&gt;:8000\/liveview\/start<\/code><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">7. Konfigurasi Gphoto2 (Opsional)<\/h4>\n\n\n\n<p>Untuk mengkonfigurasi gphoto2, Anda bisa menambahkan fungsi tambahan dalam kode di atas, misalnya untuk mengatur ISO, white balance, atau parameter lainnya.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">8. Testing<\/h4>\n\n\n\n<p>Pastikan semua perintah berjalan dengan benar dan kamera merespons. Jika ada error, periksa output dari <code>gphoto2<\/code> dan pastikan kamera terhubung dengan baik.<\/p>\n\n\n\n<p>Dengan ini, Anda telah berhasil membuat remote control untuk Nikon D500 menggunakan Raspberry Pi Zero dan FastAPI!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Local LLM Ollama, Deepseek.r1:70b, OpenWebUI Untuk membuat remote control untuk kamera Nikon D500 menggunakan gphoto2 pada Raspberry Pi Zero dan mengaksesnya melalui REST API dengan FastAPI, Anda perlu melakukan beberapa langkah. Berikut adalah panduan lengkah demi langkah: Prerequisites Sebelum memulai, pastikan Anda memiliki: Langkah-langkah 1. Installasi gphoto2 Pastikan gphoto2 sudah terinstall dan dapat mendeteksi kamera Nikon D500: Setelah instalasi, coba perintah berikut untuk memastikan kamera terdeteksi: Anda seharusnya melihat informasi tentang kamera Nikon D500. 2. Installasi FastAPI dan Uvicorn Install fastapi dan uvicorn untuk membuat REST API: 3. Buat File Konfigurasi gphoto2 (Opsional) Jika diperlukan, Anda bisa membuat file konfigurasi sederhana untuk mengatur parameter kamera. 4. Buat Aplikasi FastAPI untuk Remote Control Buat file Python untuk REST API, misalnya main.py, dan tambahkan kode berikut: 5. Jalankan FastAPI Untuk menjalankan server, gunakan perintah: Sekarang Anda bisa mengakses API melalui alamat http:\/\/&lt;IP-RPI&gt;:8000\/docs untuk melihat dokumentasi Swagger. 6. Akses dan Penggunaan Anda bisa menggunakan curl atau tools lainnya untuk mengakses API: 7. Konfigurasi Gphoto2 (Opsional) Untuk mengkonfigurasi gphoto2, Anda bisa menambahkan fungsi tambahan dalam kode di atas, misalnya untuk mengatur ISO, white balance, atau parameter lainnya. 8. Testing Pastikan semua perintah berjalan dengan benar dan kamera merespons. Jika ada error, periksa output dari gphoto2 dan pastikan kamera terhubung dengan baik. Dengan ini, Anda telah berhasil membuat remote control untuk Nikon D500 menggunakan Raspberry Pi Zero dan FastAPI!<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[31,32,29],"class_list":["post-408","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-fastapi","tag-gphoto","tag-nikon-d500"],"_links":{"self":[{"href":"http:\/\/indonesiafoto.ddns.net\/index.php\/wp-json\/wp\/v2\/posts\/408","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/indonesiafoto.ddns.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/indonesiafoto.ddns.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/indonesiafoto.ddns.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/indonesiafoto.ddns.net\/index.php\/wp-json\/wp\/v2\/comments?post=408"}],"version-history":[{"count":2,"href":"http:\/\/indonesiafoto.ddns.net\/index.php\/wp-json\/wp\/v2\/posts\/408\/revisions"}],"predecessor-version":[{"id":415,"href":"http:\/\/indonesiafoto.ddns.net\/index.php\/wp-json\/wp\/v2\/posts\/408\/revisions\/415"}],"wp:attachment":[{"href":"http:\/\/indonesiafoto.ddns.net\/index.php\/wp-json\/wp\/v2\/media?parent=408"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/indonesiafoto.ddns.net\/index.php\/wp-json\/wp\/v2\/categories?post=408"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/indonesiafoto.ddns.net\/index.php\/wp-json\/wp\/v2\/tags?post=408"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}