{"id":1791,"date":"2015-08-04T15:10:16","date_gmt":"2015-08-04T13:10:16","guid":{"rendered":"https:\/\/www.giannifavilli.it\/blog\/?p=1791"},"modified":"2022-02-22T16:11:11","modified_gmt":"2022-02-22T15:11:11","slug":"arduino-compilare-caricare-sketch-ssh-terminale","status":"publish","type":"post","link":"https:\/\/www.giannifavilli.it\/blog\/arduino-compilare-caricare-sketch-ssh-terminale\/","title":{"rendered":"Arduino: Compilare e caricare sketch via SSH o da terminale"},"content":{"rendered":"<p>Forse non tutti sanno che \u00e8 possibile caricare uno sketch di Arduino direttamente dal terminale o meglio, tramite <strong>SSH<\/strong>. Questa \u00e8 una piccola guida per poterlo fare. Un fattore propedeutico per poterlo fare, \u00e8 un computer con sistema operativo <strong>Linux<\/strong> o un <strong>Raspberry<\/strong> collegato via USB all&#8217;Arduino. Credo sia possibile anche da Windows ma questa guida \u00e8 orientata solo per sistemi operativi Linux (Debian, Ubuntu, CentOS, Fedora, ecc.).<\/p>\n<p><!--more--><\/p>\n<div class=\"clear-block\"><div class=\"ad alignnone\">\n\t\t\t\t<script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n\t\t\t\t<!-- GianniFavilli - Responsive -->\n\t\t\t\t<ins class=\"adsbygoogle\"\n\t\t\t\t     style=\"display:block\"\n\t\t\t\t     data-ad-client=\"ca-pub-1205156047762515\"\n\t\t\t\t     data-ad-slot=\"6873384605\"\n\t\t\t\t     data-ad-format=\"auto\"><\/ins>\n\t\t\t\t<script>\n\t\t\t\t(adsbygoogle = window.adsbygoogle || []).push({});\n\t\t\t\t<\/script>\n\t\t\t\t<\/div><\/div>\n<p>In questi giorni, per comodit\u00e0, ho avuto la necessita di fare del debug su un Arduino, lontano dalla postazione di lavoro (il computer sul quale stavo programmando lo sketch). Avevo la necessit\u00e0 di modificare lo sketch e vedere l&#8217;output sulla seriale, per fortuna vicino all&#8217;Arduino avevo un mediacenter\u00a0con Xubuntu onboard. All&#8217;inizio lavoravo in desktop remoto e Dropbox per condividere lo sketch ma\u00a0la procedura era veramente fastidiosa e le connessioni in desktop remoto su linux sono lente, molto instabili e di scarsa qualit\u00e0 <em>&#8230; e chi vuole smentire questa affermazione \u00e8 un bugiardo \ud83d\ude42 <\/em>inoltre il delay di aggiornamento del file modificato su Dropbox era molto lungo.\u00a0Pertanto dovevo trovare una soluzione rapida, stabile e funzionale. Quindi avendo a disposizione un computer linux con SSH\u00a0abilitato al quale ho collegato il mio Arduino, mi sono orientato su questa via e ho cercato qualcosa online.<\/p>\n<p>La prima cosa che ho trovato \u00e8 una guida per compilare e caricare lo sketch di Arduino direttamente da terminale, funzionava benissimo ma purtroppo ha bisogno di un ambiente\u00a0grafico (es. X11) per lavorare, in quanto lancia la IDE di Arduino in background. Essa controlla se \u00e8 abilitato l&#8217;ambiente grafico in caso negativo l&#8217;applicazione va in crash, quindi non potevo utilizzare una connessione SSH da terminale puro.<\/p>\n<p>Altra ricerca e trovo un applicazione scritta in Phyton su GitHub, non semplicissima da configurare la prima volta, ma una volta capito il funzionamento vi posso garantire che il tutto risulter\u00e0 semplice anche per le volte successive in cui avrete bisogno di questa funzionalit\u00e0.<\/p>\n<p>Il pacchetto si chiama\u00a0<strong><a href=\"https:\/\/github.com\/sudar\/Arduino-Makefile\" target=\"_blank\" rel=\"noopener\">Arduino-Makefile<\/a><\/strong>\u00a0per installarla su Ubuntu e compagnia bella<\/p>\n<pre class=\"lang:sh decode:true \">sudo apt-get install arduino-mk<\/pre>\n<p>Mentre per le altre disto consiglio l&#8217;importazione del <a href=\"https:\/\/github.com\/sudar\/Arduino-Makefile\/tree\/master\/packaging\" target=\"_blank\" rel=\"noopener\">repository<\/a>\u00a0ufficiale. Su GitHub \u00e8 tutto scritto come fare.<\/p>\n<p>Una volta installato il pacchetto va copiato il file\u00a0<strong><em>Arduino.mk<\/em><\/strong> all&#8217;interno della cartella del vostro sketch.<br \/>\nEs. su Ubuntu<\/p>\n<pre class=\"lang:sh decode:true\">cp \/usr\/share\/arduino\/Arduino.mk ~\/Arduino\/Sketch\/MioSketch<\/pre>\n<p>se utilizzate un&#8217;altra distro il file da copiare <strong><em>Arduino.mk<\/em><\/strong> lo troverete dentro la cartella del repository che avete appena scaricato.<br \/>\nCon un edityor di testo (nano, vi, pico, gedit, ecc.) modificate il file <strong><em>Arduino.mk<\/em><\/strong> sopratutto la directory che contiene la IDE di Arduino, il tipo di Arduino utilizzato, la porta USB dove \u00e8 collegato e il file <em>Arduino.mk<\/em> originale<\/p>\n<pre class=\"lang:sh decode:true\">ARDUINO_DIR = \/usr\/share\/arduino\r\nBOARD_TAG = uno\r\nARDUINO_PORT = \/dev\/ttyACM*\r\nARDUINO_LIBS =\r\ninclude \/usr\/share\/arduino\/Arduino.mk\r\n<\/pre>\n<p>Adesso recatevi nella cartella che contiene il vostro Sketch, per capirsi, la cartella che contiene il file con l&#8217;estensione .<em>ino<\/em><\/p>\n<pre class=\"lang:sh decode:true\">cd ~\/Arduino\/Sketch\/MioSketch<\/pre>\n<p>e cambiate il nome al file <strong>Arduino.mk<\/strong> in <strong>Makefile<\/strong><\/p>\n<pre class=\"lang:sh decode:true\">mv Arduino.mk Makefile<\/pre>\n<p>adesso il gioco \u00e8 fatto.<br \/>\nPer caricare lo sketch sul vostro Arduino non dovete far altro che eseguire<\/p>\n<pre class=\"lang:sh decode:true \">make upload<\/pre>\n<div class=\"clear-block\"><div class=\"ad alignnone\">\n\t\t\t\t<script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n\t\t\t\t<!-- GianniFavilli - Responsive -->\n\t\t\t\t<ins class=\"adsbygoogle\"\n\t\t\t\t     style=\"display:block\"\n\t\t\t\t     data-ad-client=\"ca-pub-1205156047762515\"\n\t\t\t\t     data-ad-slot=\"6873384605\"\n\t\t\t\t     data-ad-format=\"auto\"><\/ins>\n\t\t\t\t<script>\n\t\t\t\t(adsbygoogle = window.adsbygoogle || []).push({});\n\t\t\t\t<\/script>\n\t\t\t\t<\/div><\/div>\n<p>Adesso sarebbe bello vedere l&#8217;output di Arduino sulla seriale. Niente paura, per questa funzionalit\u00e0 ci vine incontro un\u00a0altro pacchetto che si chiama\u00a0<strong>picocom<\/strong>. Questo pacchetto ci permette di leggere sul terminale i dati della seriale di Arduino in output. Ed \u00e8\u00a0possibile anche inviare dati in input ad Arduino.<br \/>\nPer installare <strong>picocom<\/strong> su Ubuntu<\/p>\n<pre class=\"lang:sh decode:true\">sudo apt-get install picocom<\/pre>\n<p>Per leggere i dati della seriale di Arduino<\/p>\n<pre class=\"lang:sh decode:true\">picocom \/dev\/ttyACM0 -b 9600 -r -l<\/pre>\n<p>dove <code>\/dev\/ttyACM0<\/code> \u00e8 la porta seriale dove \u00e8 collegato Arduino.<br \/>\nPer uscire da <strong>picocom<\/strong><\/p>\n<pre class=\"lang:sh decode:true\">Ctrl+A\r\nCtrl+X<\/pre>\n<p>Quindi ricapitolando, personalmente, ho usato questa configurazione per caricare e monitorare uno Sktech di Arduino da remoto.<br \/>\nArduino UNO, un server SSH\u00a0e un Client Windows.<br \/>\nSul <em>server<\/em> era abilitato, oltre al server SSH anche un server <em>samba<\/em>\u00a0sul quale avevo condiviso la cartella contente lo Sketch di Arduino, alla quale mi connettevo direttamente da un PC Windows. Ho utilizzato\u00a0la condivisione della cartella Sketch\u00a0di progetto solamente per apportare modifiche in maniera rapida. <em>Nel caso non fosse possibile per voi utilizzare samba perch\u00e9 state effettuando questa questa operazione da due reti diversi e non avete a disposizione un tunnel potete utilizzare un Client SCP che permette tramite portocollo SSH la modifica dei file in maniera semplice e veloce. Per Windows consiglio <a href=\"https:\/\/winscp.net\/\" target=\"_blank\" rel=\"noopener\">WinSCP<\/a>.<\/em><br \/>\nUna volta modificato lo Sketch tramite\u00a0client SSH, (per Windows consiglio <a href=\"http:\/\/www.putty.org\" target=\"_blank\" rel=\"noopener\">PuTTY<\/a>) per prima cosa eseguivo \u00a0<code>make upload<\/code>\u00a0per copilare e caricare lo sketch sull&#8217;Arduino e una volta terminata l&#8217;operazione di upload eseguivo <code>picocom \/dev\/ttyACM0 -b 9600 -r -l<\/code> per leggere l&#8217;output \u00a0prodotto da Arduino sulla seriale.<\/p>\n<p>Spero come sempre di essere stato abbastanza chiaro anche per i neofiti e che questa breve guida sia utile a tutti coloro che si sono trovati nella mia stessa circostanza.<\/p>\n<h3>Reference<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/sudar\/Arduino-Makefile\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/sudar\/Arduino-Makefile<\/a><\/li>\n<li><a href=\"http:\/\/macbury.ninja\/2014\/8\/compiling-sketches-for-arduino-in-linux-console\" target=\"_blank\" rel=\"noopener\">http:\/\/macbury.ninja\/2014\/8\/compiling-sketches-for-arduino-in-linux-console<\/a><\/li>\n<li><a href=\"http:\/\/pblog.ebaker.me.uk\/2014\/01\/uploading-arduino-sketch-from-raspberry.html\" target=\"_blank\" rel=\"noopener\">http:\/\/pblog.ebaker.me.uk\/2014\/01\/uploading-arduino-sketch-from-raspberry.html<\/a><\/li>\n<li><a href=\"http:\/\/www.deanmao.com\/2012\/08\/10\/uploading-sketches-to-the-arduino-on-the-pi\/\" target=\"_blank\" rel=\"noopener\">http:\/\/www.deanmao.com\/2012\/08\/10\/uploading-sketches-to-the-arduino-on-the-pi\/<\/a><\/li>\n<li><a href=\"http:\/\/www.mjoldfield.com\/atelier\/2009\/02\/arduino-cli.html\" target=\"_blank\" rel=\"noopener\">http:\/\/www.mjoldfield.com\/atelier\/2009\/02\/arduino-cli.html<\/a><\/li>\n<li><a href=\"http:\/\/manpages.ubuntu.com\/manpages\/hardy\/man8\/picocom.8.html\" target=\"_blank\" rel=\"noopener\">http:\/\/manpages.ubuntu.com\/manpages\/hardy\/man8\/picocom.8.html<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Forse non tutti sanno che \u00e8 possibile caricare uno sketch di Arduino direttamente dal terminale o meglio, tramite SSH. Questa \u00e8 una piccola guida per poterlo fare. Un fattore propedeutico per poterlo fare, \u00e8 un computer con sistema operativo Linux o un Raspberry collegato via USB all&#8217;Arduino. Credo sia possibile anche da Windows ma questa guida \u00e8 orientata solo per sistemi operativi Linux (Debian, Ubuntu, CentOS, Fedora, ecc.).<\/p>\n","protected":false},"author":2,"featured_media":1812,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":true,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[16,3],"tags":[67,63,10,61,62,33],"class_list":["post-1791","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arduino","category-informatica","tag-arduino","tag-informatica","tag-linux","tag-raspberry","tag-ssh","tag-ubunut"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/www.giannifavilli.it\/blog\/wp-content\/uploads\/2015\/08\/ardutuxelssh.jpg","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p4SGGs-sT","_links":{"self":[{"href":"https:\/\/www.giannifavilli.it\/blog\/wp-json\/wp\/v2\/posts\/1791","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.giannifavilli.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.giannifavilli.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.giannifavilli.it\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.giannifavilli.it\/blog\/wp-json\/wp\/v2\/comments?post=1791"}],"version-history":[{"count":0,"href":"https:\/\/www.giannifavilli.it\/blog\/wp-json\/wp\/v2\/posts\/1791\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.giannifavilli.it\/blog\/wp-json\/wp\/v2\/media\/1812"}],"wp:attachment":[{"href":"https:\/\/www.giannifavilli.it\/blog\/wp-json\/wp\/v2\/media?parent=1791"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.giannifavilli.it\/blog\/wp-json\/wp\/v2\/categories?post=1791"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.giannifavilli.it\/blog\/wp-json\/wp\/v2\/tags?post=1791"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}