{"id":49,"date":"2024-06-15T14:11:29","date_gmt":"2024-06-15T12:11:29","guid":{"rendered":"https:\/\/www.f1rtd.com\/?p=49"},"modified":"2025-01-26T17:55:01","modified_gmt":"2025-01-26T16:55:01","slug":"dual-icom-ci-v-to-udp-ip","status":"publish","type":"post","link":"https:\/\/www.f1rtd.com\/index.php\/2024\/06\/15\/dual-icom-ci-v-to-udp-ip\/","title":{"rendered":"Dual Icom CI-V to UDP\/IP"},"content":{"rendered":"\n<p><em>Update 08\/01\/2025<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1 &#8211; l&rsquo;Id\u00e9e<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"771\" height=\"234\" src=\"https:\/\/www.f1rtd.com\/wp-content\/uploads\/2024\/06\/2civ2udp.png\" alt=\"\" class=\"wp-image-60\" srcset=\"https:\/\/www.f1rtd.com\/wp-content\/uploads\/2024\/06\/2civ2udp.png 771w, https:\/\/www.f1rtd.com\/wp-content\/uploads\/2024\/06\/2civ2udp-300x91.png 300w, https:\/\/www.f1rtd.com\/wp-content\/uploads\/2024\/06\/2civ2udp-768x233.png 768w\" sizes=\"auto, (max-width: 771px) 100vw, 771px\" \/><\/figure>\n\n\n\n<p>Depuis bien longtemps, les transceivers ICOM disposent d&rsquo;une interface CI-V (Communication interface V) qui permet de piloter certaines fonctions de ces appareils sur une liaison s\u00e9rie. Je me souvient que je m&rsquo;\u00e9tais d\u00e9j\u00e0 bien amus\u00e9 avec \u00e7a et mon IC275e.  J&rsquo;avais d\u00e9velopp\u00e9 une belle application graphique qui repr\u00e9sentait l&rsquo;exactitude de la face avant du poste et je pouvais s\u00e9lectionner la fr\u00e9quence et les diff\u00e9rents modes directement depuis l&rsquo;\u00e9cran de l&rsquo;ordinateur. Le PC \u00e9tait un Goupil G5 286 qui tournait sous Windows 3.1 et le soft \u00e9tait d\u00e9velopp\u00e9 en Visual Basic 3 &#8230;<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>30 ans plus tard, je dispose toujours de beaux appareils Icom mais beaucoup plus moderne.&nbsp; Alors pourquoi ne pas jouer encore&nbsp;\ud83d\ude0a&nbsp;? L\u2019id\u00e9e, c\u2019est de connecter mes 2 transceivers \u00e0 un petit serveur local tout en gardant leur connexion USB libre pour les modes num\u00e9rique. Pour \u00e7a, il y avait 2 solutions :<\/p>\n\n\n\n<p>1 &#8211; &nbsp;Tirer du fil depuis le shack jusqu\u2019au serveur qui est dans la baie de brassage pour monter 2 liaisons s\u00e9rie (et donc occuper 2 ports rs232 sur le serveur \u2026).<\/p>\n\n\n\n<p>2 &#8211; Bricolouiller un truc sans fil en Wifi.<\/p>\n\n\n\n<p>J\u2019ai \u00e9videmment choisi la seconde solution et bricol\u00e9 un petit adaptateur wifi bidirectionnel qui me converti les ports CI-V des 2 transceivers en une liaison Wifi. On va appeler ce truc le &lsquo;<em><strong>Dual Icom CI-V &lt;-&gt; UDP\/IP<\/strong><\/em>. La suite de l\u2019id\u00e9e, c\u2019est d\u2019acc\u00e9der aux 2 postes depuis n\u2019importe quel client local ou distant (pc, smartphone, tablette \u2026) sans rien installer dessus et faire en sorte que les fr\u00e9quences et modes de mes 2 Icom soit afficher sur ce site en temps reel.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2 &#8211; Le hardware<\/h2>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"alignleft size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"424\" height=\"280\" src=\"https:\/\/www.f1rtd.com\/wp-content\/uploads\/2024\/06\/2civ2udp_hrd.png\" alt=\"\" class=\"wp-image-91\" style=\"width:335px;height:auto\" srcset=\"https:\/\/www.f1rtd.com\/wp-content\/uploads\/2024\/06\/2civ2udp_hrd.png 424w, https:\/\/www.f1rtd.com\/wp-content\/uploads\/2024\/06\/2civ2udp_hrd-300x198.png 300w\" sizes=\"auto, (max-width: 424px) 100vw, 424px\" \/><\/figure>\n<\/div>\n\n\n<p>Pour bricoler du Wifi, pas besoin de tout r\u00e9inventer. En fouillant dans mon bazar, j\u2019ai remis la main sur un ESP32 qui fera parfaitement l\u2019affaire. La seule chose \u00e0 faire est de convertir ses lignes de donn\u00e9es 3v vers du 5v et pour ca, pas besoin de se casser le trognon non plus, on trouve facilement des \u2018level converter\u2019 tout fait sur les sites de vente en ligne. Il restait juste \u00e0 mettre une diode sur chaque ligne s\u00e9rie pour s\u2019adapter au mode HalfDuplex du CI-V. Comme l\u2019ESP32 dispose de nombreuse IO, j\u2019en ai profit\u00e9 pour ajouter quelques leds de contr\u00f4le (cnx wifi, les activit\u00e9s ci-v 1,ci-v 2 et udp).<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"alignright size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"545\" height=\"403\" src=\"https:\/\/www.f1rtd.com\/wp-content\/uploads\/2024\/06\/2civ2udp_exp.png\" alt=\"\" class=\"wp-image-86\" style=\"width:396px;height:auto\" srcset=\"https:\/\/www.f1rtd.com\/wp-content\/uploads\/2024\/06\/2civ2udp_exp.png 545w, https:\/\/www.f1rtd.com\/wp-content\/uploads\/2024\/06\/2civ2udp_exp-300x222.png 300w\" sizes=\"auto, (max-width: 545px) 100vw, 545px\" \/><\/figure>\n<\/div>\n\n\n<p>Pas de myst\u00e8re, rien ne remplace la vielle planche \u00e0 pain et quelques bouts de fils. Un Esp32 VROOM, un level converter (je n\u2019avais que du 8 lignes, mais 4 auraient suffit), une paire de diodes (ici des 1N4148 qui seront par la suite remplac\u00e9 par des BAS16) et 4 leds rectangulaire avec leur r\u00e9sistance (choisir de pr\u00e9f\u00e9rence des leds 10ma maxi et des r\u00e9sistance qui limitent suffisamment le courant pour ne pas trop tirer sur les sorties de l\u2019ESP32). L\u2019alimentation est assur\u00e9e par l\u2019USB du module ESP32 et 2 cordons avec une fiche jack 3.5 st\u00e9r\u00e9o au bout pour relier les transceivers. les premiers essais on \u00e9t\u00e9 fait avec l\u2019IC-7300 et comme je n\u2019avais pas encore l\u2019IC-9700, j\u2019avais utilis\u00e9 un vieil IC-820h. La bonne nouvelle, c\u2019est que cela fonctionne tout aussi bien avec les appareils moderne qu\u2019avec les anciens.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"767\" height=\"553\" src=\"https:\/\/www.f1rtd.com\/wp-content\/uploads\/2024\/06\/2icudp_shm.png\" alt=\"\" class=\"wp-image-127\" srcset=\"https:\/\/www.f1rtd.com\/wp-content\/uploads\/2024\/06\/2icudp_shm.png 767w, https:\/\/www.f1rtd.com\/wp-content\/uploads\/2024\/06\/2icudp_shm-300x216.png 300w\" sizes=\"auto, (max-width: 767px) 100vw, 767px\" \/><\/figure>\n\n\n\n<p>J\u2019aurais pu souder ca vite fait sur une \u2018plakatrou atrou\u2019, mais nous avons la chance aujourd\u2019hui de pouvoir faire graver des circuits imprim\u00e9s de qualit\u00e9 pro pour vraiment pas cher donc autant faire propre. J\u2019ai trouver une petite boite plastique qui devrait convenir et j\u2019ai tracer un petit pcb qui viendra y prendre place. J\u2019aurais pu ajouter une r\u00e9gulation 5v et piquer le 13.8v sur un des postes, mais j\u2019ais fait le choix de garder l\u2019alimentation par la prise USB de l\u2019ESP avec un petit chargeur de t\u00e9l\u00e9phone.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"511\" src=\"https:\/\/www.f1rtd.com\/wp-content\/uploads\/2024\/06\/2civ2udp_pcb.png\" alt=\"\" class=\"wp-image-158\" style=\"width:666px;height:auto\" srcset=\"https:\/\/www.f1rtd.com\/wp-content\/uploads\/2024\/06\/2civ2udp_pcb.png 800w, https:\/\/www.f1rtd.com\/wp-content\/uploads\/2024\/06\/2civ2udp_pcb-300x192.png 300w, https:\/\/www.f1rtd.com\/wp-content\/uploads\/2024\/06\/2civ2udp_pcb-768x491.png 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/figure>\n<\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"414\" src=\"https:\/\/www.f1rtd.com\/wp-content\/uploads\/2024\/06\/2civ2udp_pcb3d.png\" alt=\"\" class=\"wp-image-159\" srcset=\"https:\/\/www.f1rtd.com\/wp-content\/uploads\/2024\/06\/2civ2udp_pcb3d.png 800w, https:\/\/www.f1rtd.com\/wp-content\/uploads\/2024\/06\/2civ2udp_pcb3d-300x155.png 300w, https:\/\/www.f1rtd.com\/wp-content\/uploads\/2024\/06\/2civ2udp_pcb3d-768x397.png 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/figure>\n<\/div>\n\n\n<p>L&rsquo;assemblage du premier prototype est termin\u00e9. J\u2019ai fais le choix d\u2019une prise jack 3.5 St\u00e9r\u00e9o pour raccorder les 2 Icom et je me suis fabriquer un petit cordon.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"705\" src=\"https:\/\/www.f1rtd.com\/wp-content\/uploads\/2024\/06\/2civ2udp_pcbasmb.png\" alt=\"\" class=\"wp-image-163\" srcset=\"https:\/\/www.f1rtd.com\/wp-content\/uploads\/2024\/06\/2civ2udp_pcbasmb.png 800w, https:\/\/www.f1rtd.com\/wp-content\/uploads\/2024\/06\/2civ2udp_pcbasmb-300x264.png 300w, https:\/\/www.f1rtd.com\/wp-content\/uploads\/2024\/06\/2civ2udp_pcbasmb-768x677.png 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"548\" src=\"https:\/\/www.f1rtd.com\/wp-content\/uploads\/2024\/06\/2civ2udp_pcbibox.png\" alt=\"\" class=\"wp-image-165\" srcset=\"https:\/\/www.f1rtd.com\/wp-content\/uploads\/2024\/06\/2civ2udp_pcbibox.png 800w, https:\/\/www.f1rtd.com\/wp-content\/uploads\/2024\/06\/2civ2udp_pcbibox-300x206.png 300w, https:\/\/www.f1rtd.com\/wp-content\/uploads\/2024\/06\/2civ2udp_pcbibox-768x526.png 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"571\" src=\"https:\/\/www.f1rtd.com\/wp-content\/uploads\/2024\/06\/wire1to2.png\" alt=\"\" class=\"wp-image-166\" srcset=\"https:\/\/www.f1rtd.com\/wp-content\/uploads\/2024\/06\/wire1to2.png 800w, https:\/\/www.f1rtd.com\/wp-content\/uploads\/2024\/06\/wire1to2-300x214.png 300w, https:\/\/www.f1rtd.com\/wp-content\/uploads\/2024\/06\/wire1to2-768x548.png 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/figure>\n\n\n\n<p>Voila, le bazar est fabriqu\u00e9 et il ni a plus qu\u2019a gribouiller quelques lignes de code pour le rendre op\u00e9rationnel.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3 &#8211; Le Software<\/h2>\n\n\n\n<p>L\u2019avantage des mini-cartes \u00e0 microcontr\u00f4leurs et des petits modules tout pr\u00eat, c\u2019est que l\u2019on simplifie \u00e9norm\u00e9ment la partie \u00e9lectronique et finalement, c\u2019est le programme qui fait tout le boulot. La aussi, des outils de d\u00e9veloppement tr\u00e8s simple \u00e0 utiliser nous offre des possibilit\u00e9s qui n\u2019ont comme limite que notre imagination.&nbsp; Concernant l\u2019ESP32, on peut utiliser une multitude de langage de programmation et tout autant de m\u00e9thodes pour injecter le programme dans la \u2018puce\u2019.<\/p>\n\n\n\n<p>Pour programmer mon ESP32, j\u2019ai utilis\u00e9&nbsp;<a href=\"https:\/\/www.arduino.cc\/en\/software\"><em>Arduino IDE<\/em><\/a>.  En synth\u00e8se, Il y a dans ce bout de code un \u00e9couteur UDP et 2 \u00e9couteurs s\u00e9rie. Quand des donn\u00e9es sont pr\u00e9sent\u00e9es sur un des port s\u00e9rie, elles sont pouss\u00e9es sur la liaison UDP et quand des donn\u00e9es arrivent sur l\u2019UDP elles sont envoy\u00e9es vers un des port s\u00e9rie. La s\u00e9lection du bon port s\u00e9rie est faite automatiquement en d\u00e9codant l&rsquo;adresse du transceiver qui a \u00e9mis. Ajoutons \u00e0 cela la connexion wifi avec reconnexion automatique et quelques lignes pour les leds et c\u2019est tout. Avec des petits carr\u00e9s, \u00e7a donne un truc comme ca :<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"431\" height=\"346\" src=\"https:\/\/www.f1rtd.com\/wp-content\/uploads\/2024\/06\/2civ2udp_org.png\" alt=\"\" class=\"wp-image-133\" srcset=\"https:\/\/www.f1rtd.com\/wp-content\/uploads\/2024\/06\/2civ2udp_org.png 431w, https:\/\/www.f1rtd.com\/wp-content\/uploads\/2024\/06\/2civ2udp_org-300x241.png 300w\" sizes=\"auto, (max-width: 431px) 100vw, 431px\" \/><\/figure>\n<\/div>\n\n\n<p>Tout \u00e7a est fait dans une premi\u00e8re version de test qui demande encore \u00e0 \u00eatre am\u00e9lior\u00e9e, mais pour les premiers essais, cela fera l&rsquo;affaire. Pour la connexion wifi, j\u2019ai fait le choix pour l&rsquo;instant de la laisser en DHCP plut\u00f4t que de lui imposer une adresse fixe. Toute les 10 secondes, l\u2019esp balance un broadcast UDP sur le r\u00e9seau local pour informer de son adresse IP. Tous les hosts \u00e0 l&rsquo;\u00e9coute s&rsquo;adaptent ainsi automatiquement pour transmettre vers cette IP. De cette fa\u00e7on, on se fout de savoir quelles sont les IP des tout ces trucs, l\u2019important c\u2019est qu\u2019il soit sur le m\u00eame r\u00e9seaux.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Le code inject\u00e9 dans le bazar :<\/h2>\n\n\n\n<p><em>Update 26\/01\/2025 : Les codes source du projet<\/em> sont d\u00e9sormais disponible sur le GitHub F1RTD ( <a href=\"https:\/\/github.com\/F1RTD\/2civ1udp\">F1RTD\/2civ1udp<\/a> )<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p> <\/p>\n\n\n\n<p>Voila, \u00e0 ce stade, le machin est fabriqu\u00e9 et programm\u00e9.  Il \u00e0 m\u00eame d\u00e9j\u00e0 trouv\u00e9 une petite place provisoire et est pr\u00eat \u00e0 dialoguer.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"238\" src=\"https:\/\/www.f1rtd.com\/wp-content\/uploads\/2024\/06\/inplace.png\" alt=\"\" class=\"wp-image-185\" srcset=\"https:\/\/www.f1rtd.com\/wp-content\/uploads\/2024\/06\/inplace.png 800w, https:\/\/www.f1rtd.com\/wp-content\/uploads\/2024\/06\/inplace-300x89.png 300w, https:\/\/www.f1rtd.com\/wp-content\/uploads\/2024\/06\/inplace-768x228.png 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/figure>\n\n\n\n<p>La led verte clignote jusqu\u2019\u00e0 ce que la connexion wifi soit \u00e9tablie puis devient fixe. La led jaune bagote quand le truc recoit des datas sur le port UDP et la led rouge respective de chaque appareil bagote bien quand je tourne les vfo&rsquo;s (Pour l&rsquo;instant, ca ne sert \u00e0 mais \u00e7a fait joli et c\u2019est d\u00e9j\u00e0 ca de pris \ud83d\ude42 ).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Les composants utilis\u00e9s :<\/h2>\n\n\n\n<p>J&rsquo;ai fait avec ce que j&rsquo;avais dans mes tiroirs et voila ce que cela donne : 1 module ESP32 VROOM (38 pins), 1 Level Converter 8 voies (10 pins), 2 diodes BAS16, 4 r\u00e9sistance 1206 330 ohms, 4 leds rectangulaires (1 verte pour le wifi, 1 jaune pour l&rsquo;activit\u00e9 UDP, et 2 rouges pour l&rsquo;activit\u00e9 s\u00e9rie des 2 postes), un petit bornier \u00e0 vis au pas de 2.54, une prise jack st\u00e9r\u00e9o 3.5 et une petite boite en plastok.<\/p>\n\n\n\n<p class=\"has-text-align-center\"><strong><em>Un prochain article sera d\u00e9di\u00e9 aux diff\u00e9rents cas d&rsquo;usages.<\/em><\/strong><\/p>\n<div class=\"pdfprnt-buttons pdfprnt-buttons-post pdfprnt-bottom-right\"><a href=\"https:\/\/www.f1rtd.com\/index.php\/wp-json\/wp\/v2\/posts\/49?print=print\" class=\"pdfprnt-button pdfprnt-button-print\" target=\"_blank\" ><img decoding=\"async\" src=\"https:\/\/www.f1rtd.com\/wp-content\/plugins\/pdf-print\/images\/print.png\" alt=\"image_print\" title=\"Contenu imprim\u00e9\" \/><\/a><\/div>","protected":false},"excerpt":{"rendered":"<p>Update 08\/01\/2025 1 &#8211; l&rsquo;Id\u00e9e Depuis bien longtemps, les transceivers ICOM disposent d&rsquo;une interface CI-V (Communication interface V) qui permet de piloter certaines fonctions de ces appareils sur une liaison s\u00e9rie. Je me souvient que je m&rsquo;\u00e9tais d\u00e9j\u00e0 bien amus\u00e9 &hellip; <a href=\"https:\/\/www.f1rtd.com\/index.php\/2024\/06\/15\/dual-icom-ci-v-to-udp-ip\/\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_themeisle_gutenberg_block_has_review":false,"footnotes":""},"categories":[5],"tags":[7],"class_list":["post-49","post","type-post","status-publish","format-standard","hentry","category-bricolouillage","tag-icom-ci-v"],"_links":{"self":[{"href":"https:\/\/www.f1rtd.com\/index.php\/wp-json\/wp\/v2\/posts\/49","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.f1rtd.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.f1rtd.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.f1rtd.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.f1rtd.com\/index.php\/wp-json\/wp\/v2\/comments?post=49"}],"version-history":[{"count":47,"href":"https:\/\/www.f1rtd.com\/index.php\/wp-json\/wp\/v2\/posts\/49\/revisions"}],"predecessor-version":[{"id":435,"href":"https:\/\/www.f1rtd.com\/index.php\/wp-json\/wp\/v2\/posts\/49\/revisions\/435"}],"wp:attachment":[{"href":"https:\/\/www.f1rtd.com\/index.php\/wp-json\/wp\/v2\/media?parent=49"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.f1rtd.com\/index.php\/wp-json\/wp\/v2\/categories?post=49"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.f1rtd.com\/index.php\/wp-json\/wp\/v2\/tags?post=49"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}