{"id":51253148,"url":"https://github.com/hurui200320/nsg","last_synced_at":"2026-06-29T08:01:44.053Z","repository":{"id":367065855,"uuid":"1278017078","full_name":"hurui200320/nsg","owner":"hurui200320","description":"Nikon Smart GPS, providing GPS data to Nikon Z cameras without using SnapBridge","archived":false,"fork":false,"pushed_at":"2026-06-24T11:03:09.000Z","size":254,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-06-24T13:07:04.447Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hurui200320.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-23T11:42:15.000Z","updated_at":"2026-06-24T11:03:20.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/hurui200320/nsg","commit_stats":null,"previous_names":["hurui200320/nsg"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/hurui200320/nsg","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hurui200320%2Fnsg","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hurui200320%2Fnsg/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hurui200320%2Fnsg/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hurui200320%2Fnsg/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hurui200320","download_url":"https://codeload.github.com/hurui200320/nsg/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hurui200320%2Fnsg/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34918101,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-29T02:00:05.398Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-29T08:01:42.449Z","updated_at":"2026-06-29T08:01:43.946Z","avatar_url":"https://github.com/hurui200320.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# nsg - Nikon Smart GPS\n\nAn alternative for Nikon's SnapBridge, which provide GPS location to Z cameras via the bluetooth smart mode (the mode you connect with SnapBridge).\n\n## Why?\n\nI own Z 50 II and Z 8 camera, and I'm living in China. China has a law to forbiden all cameras from having built-in GPS for some reason. However, a workaround is using SnapBridge to provide GPS locations. However, on my Samsung, it's not stable (often disconnected from camera), and consume a lot of battery.\n\nWith my new Z8, I'm thinking maybe I can made my own GPS using the 10 pin connector since it's talking NEMA-0183 at 4800 bps. But sadly the Chinese firmware blocks the GPS setting, so even you have Z9, which has built-in GPS, you can't use it.\n\nSo for me, and other Chinese users, SnapBridge is the only way to feed GPS into the camera and geotagging the photo.\n\n## Android PoC\n\nThis project steals the reverse engineer result from [gkoh/furble](https://github.com/gkoh/furble). Initially I thought I have to go through the SnapBridge APK and capture the bluetooth package, but thankfully the community has already done that.\n\nThe Android PoC has been verified to work with both the Nikon Z50 II and Nikon Z8 over Bluetooth smart-device mode.\n\nTo first proof things works, I build an Android APP for testing. Once finished and verified things works, I'll buy a M5StackS3 and built a dedicated hardware for it, because again, my samsung phone doesn't have a big battery.\n\n## Kotlin PoC\n\nApparently Android's BLE and BT stack is not easy to use. Using it as a PoC defeat the purpose of clean code just focusing on the core features. So, as a backend developer, I decide to use whatever I'm comfortable: the good old JVM.\n\nCurrently the kotlin PoC can pair new devices (test with Z50II and Z8) and connecting to saved devices. Also can send fake GPS payload to the camera.\n\nTODO: make it more robus? Like auto-reconnect when camera wakes up from idle. Also maybe connecting to multiple BLE devices?\n\n## M5Stack Core 2\n\nThe current plan is to use an M5Stack Core2 as the dedicated hardware. The original M5StackS3/CoreS3 idea was ruled out because the ESP32-S3 only supports BLE and does not have Bluetooth Classic, which the Nikon smart-device protocol requires for bonding. The Core2 uses the original ESP32, which has both BLE and Bluetooth Classic.\n\nMoved from PlatformIO to [pioarduino](https://github.com/pioarduino/platform-espressif32) because platformio sucks. They stay at old version of arduino-esp32. The pioarduino fixed this.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhurui200320%2Fnsg","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhurui200320%2Fnsg","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhurui200320%2Fnsg/lists"}