{"id":286,"date":"2019-01-24T23:33:13","date_gmt":"2019-01-24T20:33:13","guid":{"rendered":"http:\/\/itay.mobi\/blog\/?p=286"},"modified":"2020-01-11T13:52:08","modified_gmt":"2020-01-11T10:52:08","slug":"no-suunto-i-wont-pay-100-for-a-data-sync-cable","status":"publish","type":"post","link":"https:\/\/itay.cc\/?p=286","title":{"rendered":"Making a DIY data cable for the Zoop Novo Diving Computer [Old Version]"},"content":{"rendered":"\n<p class=\"has-background has-very-light-gray-background-color\"> <strong>Update 11\/01\/2020:<\/strong> New post with an updated version without an Arduino board can be found <a href=\"http:\/\/itay.cc\/?p=340\">here<\/a><\/p>\n\n\n\n<p><strong>Update 09\/01\/2020:<\/strong> I found it easier to use ESP32 and get it working. You also don&#8217;t need resistors and it&#8217;s safer to use because the ESP32 working voltage is 3.3V.<br>The process is the same, the connections are different.<br>I used the  <a href=\"https:\/\/wiki.wemos.cc\/products:lolin32:lolin32_lite\">Lolin32 Lite<\/a> (which has a CH430 USB-SERIAL).<br>Modified drivers for the CH430 and connection diagram can be found on my <a rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\" href=\"https:\/\/gitlab.com\/itaysp\/suunto-data-cable\/tree\/master\/Lolin32%20lite\" target=\"_blank\">gitlab<\/a>.<\/p>\n\n\n\n<p>Few months ago, I went diving and decided it&#8217;s time to get a my first diving computer.<br>A little research and I came into conclusion that the Suunto Zoop Novo is what I should buy.<br>It&#8217;s cheap (around $200 in Eilat, Israel), and have many positive reviews.<br><br>This diving computer has an option to sync it with your PC and watch the diving logs in Suunto DM5 app (or other open source apps), but unfortunately it sold without the data sync cable \ud83d\ude41 <\/p>\n\n\n\n<p>If you wish to get an<a href=\"https:\/\/www.suunto.com\/Products\/Dive-Accessories\/Suunto-Dive-USB-cable\/\"> official cable from Suunto<\/a>, you will have to pay around $84 on <a href=\"https:\/\/www.amazon.com\/Suunto-USB-Download-Cable-D9tx\/dp\/B007P4FML6\">Amazon<\/a>  ! (with shipping it&#8217;s $100 to Israel )<\/p>\n\n\n\n<p>A little googling and I found many DIY cables, but for the old generation of the Zoop Novo.<\/p>\n\n\n\n<p>How hard can it be to make this diving computer to talk with my PC?<br>Well, not so hard if don&#8217;t care using other apps for syncing , <br>and a little harder if you wish to use Suunto DM5 app.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Lets try to make it short<\/h2>\n\n\n\n<p>I will write in more details when I&#8217;ll have time (it took me 3 months to write this post :S)<\/p>\n\n\n\n<p>The diving computer has a connector with 2 connection points and a ground.<br>After poking with it for a &#8216;few&#8217; hours (I drained all my computer battery and had only 6 dives with it!!) I found that:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"593\" src=\"http:\/\/itay.cc\/wp-content\/uploads\/2019\/01\/Connector-1-1024x593.png\" alt=\"\" class=\"wp-image-325\" srcset=\"https:\/\/itay.cc\/wp-content\/uploads\/2019\/01\/Connector-1-1024x593.png 1024w, https:\/\/itay.cc\/wp-content\/uploads\/2019\/01\/Connector-1-300x174.png 300w, https:\/\/itay.cc\/wp-content\/uploads\/2019\/01\/Connector-1-768x445.png 768w, https:\/\/itay.cc\/wp-content\/uploads\/2019\/01\/Connector-1.png 1827w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li>A voltage on the Enable pin makes the diving computer enter the Data Transfer mode.<\/li><li>The Data pin is a bi-directional line, using UART for communication.<\/li><li>All the metal around the pins is &#8216;ground&#8217;.<\/li><\/ul>\n\n\n\n<p>The Suunto DM5 application is looking for a communication port named &#8216;Suunto USB Serial Port&#8217;.<br>I used an<a href=\"https:\/\/www.aliexpress.com\/item\/Pro-Micro-ATmega32U4-5V-16MHz-Replace-ATmega328-For-Arduino-Pro-Mini-With-2-Row-Pin-Header\/32808519179.html\"> Arduino Pro Micro<\/a>, which has build in USB functions and can act as USB Serial COM device, and had to change the driver so it&#8217;s name will be &#8216;Suunto USB Serial Port&#8217;. It&#8217;s very easy but require to <a href=\"https:\/\/www.howtogeek.com\/167723\/how-to-disable-driver-signature-verification-on-64-bit-windows-8.1-so-that-you-can-install-unsigned-drivers\/\">disable driving signing enforcement<\/a> .<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"326\" height=\"232\" src=\"http:\/\/itay.cc\/wp-content\/uploads\/2019\/01\/device-manager.png\" alt=\"\" class=\"wp-image-328\" srcset=\"https:\/\/itay.cc\/wp-content\/uploads\/2019\/01\/device-manager.png 326w, https:\/\/itay.cc\/wp-content\/uploads\/2019\/01\/device-manager-300x213.png 300w\" sizes=\"auto, (max-width: 326px) 100vw, 326px\" \/><\/figure>\n\n\n\n<p>I can still sync the diving computer without doing this, but I have to use other apps like &#8216;Subsurface&#8217;.<br><\/p>\n\n\n\n<p>Because there is only one data line, it was not possible to connect both RX and TX of the Arduino&#8217;s UART together as is.<br>I used the Arduino&#8217;s hardware  UART to read the data from the diving computer, and used Software Serial to write to the diving computer. When not reading  &#8211; I changed the TX line gpio to &#8216;Input Pullup&#8217; so it&#8217;s won&#8217;t interfere with the reading operation. <\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"480\" src=\"http:\/\/itay.mobi\/blog\/wp-content\/uploads\/2019\/01\/NewFile29.png\" alt=\"\" class=\"wp-image-303\" srcset=\"https:\/\/itay.cc\/wp-content\/uploads\/2019\/01\/NewFile29.png 800w, https:\/\/itay.cc\/wp-content\/uploads\/2019\/01\/NewFile29-300x180.png 300w, https:\/\/itay.cc\/wp-content\/uploads\/2019\/01\/NewFile29-768x461.png 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption>A command that was sent from the Arduino, and a response from the diving computer (the lower voltage signal)<br><\/figcaption><\/figure>\n\n\n\n<p>I used the 5V from the Arduino pins. I didn&#8217;t know it&#8217;s safe to use 5V here, so I used 330ohm resistors in series with for the ENABLE and the TX of the DATA. I found this value gives about 3.2V, but maybe using a higher value will work too and it will be even safer.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"406\" src=\"http:\/\/itay.mobi\/blog\/wp-content\/uploads\/2019\/01\/Mini-Schematic2-1024x406.png\" alt=\"\" class=\"wp-image-316\" srcset=\"https:\/\/itay.cc\/wp-content\/uploads\/2019\/01\/Mini-Schematic2-1024x406.png 1024w, https:\/\/itay.cc\/wp-content\/uploads\/2019\/01\/Mini-Schematic2-300x119.png 300w, https:\/\/itay.cc\/wp-content\/uploads\/2019\/01\/Mini-Schematic2-768x304.png 768w, https:\/\/itay.cc\/wp-content\/uploads\/2019\/01\/Mini-Schematic2.png 1949w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">How it works:<\/h3>\n\n\n\n<p><strong><br><\/strong>DM5 app is sending data for the Diving Computer in a COM port called &#8216;Suunto Diving computer&#8217;, but it&#8217;s actually sending this data to the Arduino.<br>The Arduino receives is in it&#8217;s default serial that is connected to the usb, and forward it to the Diving Computer using SoftwareSerial on gpio 8.<br>When the DM5 app is not sending anymore data, the Arduino change gpio 8 to &#8220;Input Pullup&#8221;, and starts reading data from &#8216;Serial1&#8217; (this is HW serial), and forward is on &#8216;Serial&#8217; (which is connected thru USB to the computer)<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Arduino Code<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;SoftwareSerial.h>\n#define SW_TX 8\n\nSoftwareSerial mySerial(4, SW_TX); \/\/ RX, TX\n\nvoid setup(){\n  Serial.begin(115200);     \/\/ Between computer and Arduino\n  Serial1.begin(115200);    \/\/ Between Arduino and Diving Computer\n  mySerial.begin(115200);   \/\/ Between Arduino and Diving Computer\n  \n    while (!Serial) {\n    ; \/\/ wait for serial port to connect. Needed for native USB port only\n  }\n\n  pinMode(SW_TX,INPUT_PULLUP);\n}\n\nvoid loop(){\n  if(Serial.available() > 0) {\n    pinMode(SW_TX,OUTPUT);  \n    digitalWrite(SW_TX,HIGH); \/\/UART lines should be HIGH on IDLE\n  \n      while(Serial.available()  > 0){\n        mySerial.write(Serial.read());\n      }\n    pinMode(SW_TX,INPUT_PULLUP);\n  }\n  \n  while(Serial1.available() > 0){\n    Serial.write(Serial1.read());\n  }\n}<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">The Ugly Side<\/h4>\n\n\n\n<p>I didn&#8217;t find any novel way to connect with this connector.<br>I took a clamp and drilled holes in it, then pushed &#8216;pogo pins&#8217; in such a way they will touch the connection points.<br>I need to think and make something more simple.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"659\" src=\"http:\/\/itay.mobi\/blog\/wp-content\/uploads\/2019\/01\/CLAMP.png\" alt=\"\" class=\"wp-image-297\" srcset=\"https:\/\/itay.cc\/wp-content\/uploads\/2019\/01\/CLAMP.png 800w, https:\/\/itay.cc\/wp-content\/uploads\/2019\/01\/CLAMP-300x247.png 300w, https:\/\/itay.cc\/wp-content\/uploads\/2019\/01\/CLAMP-768x633.png 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption>awwww..<br><\/figcaption><\/figure>\n\n\n\n<p>And.. that&#8217;s it.<br>I can now sync my diving computer with my PC.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"778\" src=\"http:\/\/itay.mobi\/blog\/wp-content\/uploads\/2019\/01\/ZOOP-APP-1024x778.png\" alt=\"\" class=\"wp-image-298\" srcset=\"https:\/\/itay.cc\/wp-content\/uploads\/2019\/01\/ZOOP-APP-1024x778.png 1024w, https:\/\/itay.cc\/wp-content\/uploads\/2019\/01\/ZOOP-APP-300x228.png 300w, https:\/\/itay.cc\/wp-content\/uploads\/2019\/01\/ZOOP-APP-768x584.png 768w, https:\/\/itay.cc\/wp-content\/uploads\/2019\/01\/ZOOP-APP.png 1026w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>You can find the modified .inf file and the code in my gitlab:<br><a href=\"https:\/\/gitlab.com\/itaysp\/suunto-data-cable\">https:\/\/gitlab.com\/itaysp\/suunto-data-cable<\/a><br><br>And you can download the full driver from <a href=\"https:\/\/learn.sparkfun.com\/tutorials\/pro-micro--fio-v3-hookup-guide\/installing-windows\">Sparkfun&#8217;s website<\/a> (just use my .inf file)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Update 11\/01\/2020: New post with an updated version without an Arduino board can be found here Update 09\/01\/2020: I found it easier to use ESP32 and get it working. You also don&#8217;t need resistors and it&#8217;s safer to use because the ESP32 working voltage is 3.3V.The process is the same, the connections are different.I used &#8230;<br \/><a class=\"btn btn-primary btn-sm read-more\" href=\"https:\/\/itay.cc\/?p=286\" role=\"button\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":287,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[45,44,47,49,43,53,48,52,46,55,51,54],"class_list":{"0":"post-286","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-uncategorized","8":"tag-data-cable","9":"tag-diving","10":"tag-sunnto-data-cable","11":"tag-sunnto-zoop","12":"tag-suunto","13":"tag-suunto-hack","14":"tag-suunto-novo","15":"tag-suunto-zoop-novo","16":"tag-sync-cable","17":"tag-zoop-hack","18":"tag-zoop-novo","19":"tag-zoop-novo-hack","21":"row panel panel-primary"},"_links":{"self":[{"href":"https:\/\/itay.cc\/index.php?rest_route=\/wp\/v2\/posts\/286","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/itay.cc\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/itay.cc\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/itay.cc\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/itay.cc\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=286"}],"version-history":[{"count":29,"href":"https:\/\/itay.cc\/index.php?rest_route=\/wp\/v2\/posts\/286\/revisions"}],"predecessor-version":[{"id":353,"href":"https:\/\/itay.cc\/index.php?rest_route=\/wp\/v2\/posts\/286\/revisions\/353"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/itay.cc\/index.php?rest_route=\/wp\/v2\/media\/287"}],"wp:attachment":[{"href":"https:\/\/itay.cc\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=286"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/itay.cc\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=286"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/itay.cc\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=286"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}