venerdì 13 maggio 2016

Intel Edison ed Arduino

La programmazione della parte Arduino Kit legato ad una Intel Edison si effettua mediante l'Arduino IDE.
La prima cosa da fare e' configurare il dispositivo perche' di default non e' inserito nella lista delle schede conosciute dall'IDE


Si procede selezionando il menu Strumenti dalla Arduino IDE/Scheda/Gestore Scheda. Si apre un menu e si cerca e si installa Intel i686 Boards

Per la programmazione si deve usare la microUsb di collegamento seriale OTG (J22) e non la porta J16 (terminale seriale) che puo' essere disconnessa.

A questo punto vengono scaricati i file e l'installazione ....si pianta (almeno sulla mia Centos 7). Per installare la Edison si deve andare nella propria home nella sottocartella (o qualcosa di simile)

/home/linnocenti/.arduino15/packages/Intel/tools/core2-32-poky-linux/1.6.2+1.0/i686

ed editare il file ./install_script.sh alla riga 106 (link originale) da

executable_files=$($SUDO_EXEC find "$native_sysroot" -type f -perm +111 -exec printf "\"%s\" " {} \; )

a
executable_files=$($SUDO_EXEC find "$native_sysroot" -type f -perm /111 -exec printf "\"%s\" " {} \; )


Si deve ovviamente cambiare i permessi dell'utente per poter accedere alla porta seriale con

sudo usermod -a -G tty yourUserName
sudo usermod -a -G dialout yourUserName

Edison e Arduino condividono le seguenti porte
Serial (Arduino)-> /dev/ttySG0 (Edison)
Serial1 (Arduino)-> /dev/ttyMFD1 (Edison) corrisponde ai pin D0 e D1 Rx e Tx di Arduino
Serial2 (Arduino)-> /dev/ttyMDF2 (Edison) messaggi del kernel per debug

Compilando e lanciando l'esempio blink si hanno i seguenti messaggi. Per quanto riguarda i messaggi di errore a questo link viene consigliato di usare la IDE 1.6.0 che risulterebbe piu' stabile
--------------------------------------------------
La scheda Intel:i686:izmir_ec non ha la proprietà 'build.board' definita. La imposto automaticamente a I686_IZMIR_EC
ATTENZIONE: La categoria '' della libreria DallasTemperature non è valida. La imposto a 'Uncategorized'
ATTENZIONE: La categoria '' della libreria EEPROM non è valida. La imposto a 'Uncategorized'
ATTENZIONE: La categoria '' della libreria Ethernet non è valida. La imposto a 'Uncategorized'
ATTENZIONE: La categoria '' della libreria EthernetShield non è valida. La imposto a 'Uncategorized'
ATTENZIONE: La categoria '' della libreria OneWire non è valida. La imposto a 'Uncategorized'
ATTENZIONE: La categoria '' della libreria SD non è valida. La imposto a 'Uncategorized'
ATTENZIONE: La categoria '' della libreria SPI non è valida. La imposto a 'Uncategorized'
ATTENZIONE: La categoria '' della libreria Servo non è valida. La imposto a 'Uncategorized'
ATTENZIONE: La categoria '' della libreria SoftwareServo non è valida. La imposto a 'Uncategorized'
ATTENZIONE: La categoria '' della libreria TimerOne non è valida. La imposto a 'Uncategorized'
ATTENZIONE: La categoria '' della libreria USBHost non è valida. La imposto a 'Uncategorized'
ATTENZIONE: La categoria '' della libreria WiFi non è valida. La imposto a 'Uncategorized'
Attenzione: platform.txt del core 'Arduino i686 Boards' contiene la stringa deprecata recipe.ar.pattern="{compiler.path}{compiler.ar.cmd}" {compiler.ar.flags} "{build.path}/{archive_file}" "{object_file}" convertita automaticamente in recipe.ar.pattern="{compiler.path}{compiler.ar.cmd}" {compiler.ar.flags} "{archive_file_path}" "{object_file}". Verifica la disponibilità di un aggiornamento di questo core.

Lo sketch usa 76.331 byte (0%) dello spazio disponibile per i programmi. Il massimo è 10.000.000 byte.
#!/bin/sh

# clupload script to invoke lsz
# Copyright (C) 2014 Intel Corporation
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
starting download script
Args to shell: /home/linnocenti/.arduino15/packages/Intel/tools/sketchUploader/1.6.2+1.0/x86/bin /tmp/buildccb8e9535cf076aa288bd991e81fb898.tmp/Blink.ino.elf /dev/ttyACM0
Serial Port PORT
Using tty Port /dev/ttyACM0
Sending Command String to move to download if not already in download mode
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
#

echo "starting download script"
echo "Args to shell:" $*
#
# ARG 1: Path to lsz executable.
# ARG 2: Elf File to download
# ARG 3: TTY port to use.
#
#path may contain \ need to change all to /
path_to_exe=$1
fixed_path=${path_to_exe//\\/\/}
#
tty_port_id=$3
echo "Serial Port PORT" $com_port_id
echo "Using tty Port" $tty_port_id
#
echo "Sending Command String to move to download if not already in download mode"
echo "~sketch downloadEdison" > $tty_port_id
#Give the host time to stop the process and wait for download
sleep 1
#
Deleting existing sketch on target
#Move the existing sketch on target.
echo "Deleting existing sketch on target"
"$fixed_path/lsz" --escape -c "mv -f /sketch/sketch.elf /sketch/sketch.elf.old" < $tty_port_id > $tty_port_id

Transfer incomplete
#
# Execute the target download command
#
#Download the file.
host_file_name=$2
"$fixed_path/lsz" --escape --binary --overwrite $host_file_name < $tty_port_id  > $tty_port_id
Sending: Blink.ino.elf

Bytes Sent:   1024/  75668   BPS:226647   ETA 00:00 
Bytes Sent:   9216/  75668   BPS:1890482  ETA 00:00 
Bytes Sent:  10240/  75668   BPS:2070761  ETA 00:00 
Bytes Sent:  11264/  75668   BPS:2253715  ETA 00:00 
Bytes Sent:  12288/  75668   BPS:2433294  ETA 00:00 
Bytes Sent:  13312/  75668   BPS:2606047  ETA 00:00 
Bytes Sent:  14336/  75668   BPS:2777730  ETA 00:00 
Bytes Sent:  15360/  75668   BPS:2945389  ETA 00:00 
Bytes Sent:  16384/  75668   BPS:3104141  ETA 00:00 
Bytes Sent:  17408/  75668   BPS:3263507  ETA 00:00 
Bytes Sent:  18432/  75668   BPS:3425317  ETA 00:00 
Bytes Sent:  19456/  75668   BPS:3599663  ETA 00:00 
Bytes Sent:  20480/  75668   BPS:3766689  ETA 00:00 
Bytes Sent:  21504/  75668   BPS:3928323  ETA 00:00 
Bytes Sent:  22528/  75668   BPS:4096652  ETA 00:00 
Bytes Sent:  23552/  75668   BPS:4257391  ETA 00:00 
Bytes Sent:  24576/  75668   BPS:4423241  ETA 00:00 
Bytes Sent:  25600/  75668   BPS:3941494  ETA 00:00 
Bytes Sent:  26624/  75668   BPS:4046863  ETA 00:00 
Bytes Sent:  27648/  75668   BPS:4164480  ETA 00:00 
Bytes Sent:  28672/  75668   BPS:4279378  ETA 00:00 
Bytes Sent:  29696/  75668   BPS:4388951  ETA 00:00 
Bytes Sent:  30720/  75668   BPS:4498447  ETA 00:00 
Bytes Sent:  31744/  75668   BPS:4498867  ETA 00:00 
Bytes Sent:  32768/  75668   BPS:4569569  ETA 00:00 
Bytes Sent:  33792/  75668   BPS:4632887  ETA 00:00 
Bytes Sent:  34816/  75668   BPS:4747208  ETA 00:00 
Bytes Sent:  35840/  75668   BPS:4831544  ETA 00:00 
Bytes Sent:  36864/  75668   BPS:4884653  ETA 00:00 
Bytes Sent:  37888/  75668   BPS:4943039  ETA 00:00 
Bytes Sent:  38912/  75668   BPS:4955029  ETA 00:00 
Bytes Sent:  39936/  75668   BPS:5038615  ETA 00:00 
Bytes Sent:  40960/  75668   BPS:5125718  ETA 00:00 
Bytes Sent:  41984/  75668   BPS:5210179  ETA 00:00 
Bytes Sent:  43008/  75668   BPS:5259603  ETA 00:00 
Bytes Sent:  44032/  75668   BPS:5306389  ETA 00:00 
Bytes Sent:  45056/  75668   BPS:5350468  ETA 00:00 
Bytes Sent:  46080/  75668   BPS:5378120  ETA 00:00 
Bytes Sent:  47104/  75668   BPS:5376598  ETA 00:00 
Bytes Sent:  48128/  75668   BPS:5456654  ETA 00:00 
Bytes Sent:  49152/  75668   BPS:5510342  ETA 00:00 
Bytes Sent:  50176/  75668   BPS:5585577  ETA 00:00 
Bytes Sent:  51200/  75668   BPS:5663045  ETA 00:00 
Bytes Sent:  52224/  75668   BPS:5692542  ETA 00:00 
Bytes Sent:  53248/  75668   BPS:5729267  ETA 00:00 
Bytes Sent:  54272/  75668   BPS:5753981  ETA 00:00 
Bytes Sent:  55296/  75668   BPS:5690094  ETA 00:00 
Bytes Sent:  56320/  75668   BPS:5758030  ETA 00:00 
Bytes Sent:  57344/  75668   BPS:5826506  ETA 00:00 
Bytes Sent:  58368/  75668   BPS:5883234  ETA 00:00 
Bytes Sent:  59392/  75668   BPS:5862332  ETA 00:00 
Bytes Sent:  60416/  75668   BPS:5914414  ETA 00:00 
Bytes Sent:  61440/  75668   BPS:5967995  ETA 00:00 
Bytes Sent:  62464/  75668   BPS:5987179  ETA 00:00 
Bytes Sent:  63488/  75668   BPS:5945122  ETA 00:00 
Bytes Sent:  64512/  75668   BPS:6002283  ETA 00:00 
Bytes Sent:  65536/  75668   BPS:6065936  ETA 00:00 
Bytes Sent:  66560/  75668   BPS:6095743  ETA 00:00 
Bytes Sent:  67584/  75668   BPS:6121225  ETA 00:00 
Bytes Sent:  68608/  75668   BPS:6139987  ETA 00:00 
Bytes Sent:  69632/  75668   BPS:6167541  ETA 00:00 
Bytes Sent:  70656/  75668   BPS:6235591  ETA 00:00 
Bytes Sent:  71680/  75668   BPS:6278929  ETA 00:00 
Bytes Sent:  72704/  75668   BPS:6299557  ETA 00:00 
Bytes Sent:  73728/  75668   BPS:6317676  ETA 00:00 
Bytes Sent:  74752/  75668   BPS:6339755  ETA 00:00  Moving downloaded file to /sketch/sketch.elf on target

Bytes Sent:  75668   BPS:3078945                        

Transfer complete
#
#mv the downloaded file to /sketch/sketch.elf
target_download_name="${host_file_name##*/}"
echo "Moving downloaded file to /sketch/sketch.elf on target"
"$fixed_path/lsz" --escape -c "mv $target_download_name /sketch/sketch.elf; chmod +x /sketch/sketch.elf" < $tty_port_id > $tty_port_id

Transfer complete
#
#
Trovata libreria non valida in /home/linnocenti/.arduino15/packages/Intel/hardware/i686/1.6.2+1.0/libraries/Wire: /home/linnocenti/.arduino15/packages/Intel/hardware/i686/1.6.2+1.0/libraries/Wire
Trovata libreria non valida in /home/linnocenti/.arduino15/packages/Intel/hardware/i686/1.6.2+1.0/libraries/Wire: /home/linnocenti/.arduino15/packages/Intel/hardware/i686/1.6.2+1.0/libraries/Wire
--------------------------------------------------

Ublox M8T + Intel Edison + RTKLib

Collegare un Ublox M8T e processare i dati direttamente all'interno della Edison con RTKLib e' un procedimento estremamente lineare e simile a quello di un normale PC


Il GPS, al contrario di YUN, viene riconosciuto immediatamente e le librerie RTKLib si compilano direttamente sulla Intel, complice anche l'assenza di dipendenze da altre librerie

L'unica accortezza e' quella di spostare lo switch SW1 verso la porta USB tipo A per abilitare questa porta (e conseguentemente disabilitare la porta microUsb OTG)

giovedì 12 maggio 2016

Primi passi con Intel Edison

ATTEZIONE: un avvertimento importante. La Intel Edison lavora a 1.8V. Nell'Arduino Kit sono installati molti shift level per venire incontro ai dispositivi a 5V e 3.3V che si usano con Arduino. Il MiniBreakout non dispone degli shift level ed ha connessioni dirette con i piedini del processore con la ovvia conseguenza che una sovratensione distrugge il processore

Ho avuto modo di provare la Intel Edison (collegata alla scheda di sviluppo Edison Kit per Arduino).
Il modulo Edison di per se' e' microscopico, poco piu' grande di una moneta da 2 euro, ma monta un processore Atom dual core con 1Gb DDR e 4 Gb di Flash Ram con connettivita' Bluetooth Le e WiFI.

Per lo sviluppo la sola Edison non riesce a vivere da sola e deve essere accoppiata all'Edison kit per Arduino (scelta piu' costosa ma ottimale) oppure all'Edison Kit BreakOut



La Edison viene alimentata tramite un connettore microUsb vicino alla sigla J16 ma viene fortemente consigliato di accoppiare un trasformatore da 220V a (7-15V) con polo centrale positivo. Altrimenti si puo' alimentare con una LiPo usando il connettore J2



Il collegamento tra il vero e proprio modulo Edison e la scheda di sviluppo avviene con un socket (credo proprietario) ed impossibile da saldare in  proprio


L'unico sistema di svincolare la Edison dalla scheda di sviluppo e' quello di utilizzare i moduli Blocks di SparkFun, tipo questo che monta LSM9DS0 9DOF IMU


Prima cosa importante: non c'e' uscita video e non c'e' installato X (quindi niente possibilita' di montare VNC). Il sistema operativo e' ridotto all'osso .. anche di piu'.

Il consumo della Edison collegata ad un Arduino Kit ha una punta in fase di boot di circa 130 mA ma si stabilizza in idle a circa 80 mA

Per comunicare con la Edison si puo' usare una connessione seriale connettendo un cavo USB nella microUsb piu'  vicina allo spigolo della scheda (accanto al simbolo J3) e digitando

screen /dev/ttyUSB1 115200

(ovviamente /dev/ttyUSBx puo' variare a seconda della configurazione del client)

altrimenti ci si puo' collegare via SSH in WiFi. Ovviamente prima di fare cio' bisogna collegare la Edison all'access point e cio' si effettua con il comando

configure_edison --wifi (per dettagli vedi qui)

cambiando gli switch del comando si puo' cambiare il nome del dispositivo oppure anche effettuare un setup completo compreso riflashare il firmware

Il sistema operativo di default e' Yocto Linux, una versione sostanzialmente embedded, che ha come packet manager opkg (lo stesso di Yun/Linino) . I pacchetti disponibili nel repository Intel di opkg non sono moltissimi e sono quasi tutti strumenti di sviluppo (gcc, python, git, automake, wget etc). Per esempio manca una versione pacchettizzata di Midnight Commander che e' gia' pronta per OpenWrt (e' comunque possibile compilarlo da sorgenti senza nessun problema)

Di fatto c'e' solo l'utente root configurato ed in modo curioso la sua home e' in /home/root invece che in /root

Per quanto i connettori (riferimento):
SW1 : permette di selezionare la modalita Host e Device del dispositivo.In Host mode si possono connettere alla porta USB Type A i dispositivi come mouse e tastiere Usb. In modalita' Device il dispositivo deriva corrente dalla porta USB
J2 : connettore per una LiPo (possibilita' di ricaricare la batteria se e' disponibile corrente da J3)
J3 : FTDI to serial. Connessione per il terminale seriale
J16 : USB OTG. Questa e' la porta per la programmazione Arduino
SW1 UI5 : reset
SW1 UI1 : reset dello shield


Abilitare il core dump su gcc

Nelle distro attuali di Linux all'utente normale viene disabilitata la possibilita' di scrivere un core dump nel caso di crash di una applicazione (tanto non saprebbe come cosa farsene)




Quando invece si sta sviluppando un programma e' molto utile avere a disposizione un core dump. Si puo' abilitare con il comando

ulimit -c unlimited

per debuggare il core dump si usa
gdb nome_programma  nome_core_dump
con subito dopo il comando di backtrace
bt

mercoledì 11 maggio 2016

Passaggio di Mercurio del 9 maggio

cronaca di un fallimento.....

Lunedi' 9 maggio nel pomeriggio Mercurio era in transito davanti al Sole ed avevo letto che non era possibile vederlo ad occhio nudo (previa protezione) ma era possibile con binocolo o con piccoli telescopi

Fortunatamente le nuvole per le 13 erano scomparse ed ho provato se riuscivo ad osservare il transito. L'immagine, peraltro abbastanza sgranata, sottostante rende l'idea di cio' stavo (non osservando)


Certo la mia attrezzatura era un po' (troppo artigianale)..un binocolo da campagna con un oculare oscurato ed un altro a cui erano stati messi due filtri da saldatore (una non era sufficiente) in entrata (i filtri devono essere messi in entrata allo strumento ottico...non tra lo strumento e l'occhio)




Deluso mi sono messo a guardare il live streaming della Nasa...da notare il confronto tra il piccolo cerchietto nero (Mercurio) e la curvatura del Sole


Per rendere l'idea ancora meglio delle differenza di dimensioni angolari questo e' tutto il disco solare con sovraimpresso il disco di Mercurio


Non si vede ??? E' il puntino nero poco al di sotto dell'equatore circa sulla meta' verticale del disco solare


Dire che era possibile vederlo con un binocolo era diciamo di un estremo ottimismo...


martedì 10 maggio 2016

Arduino YUN e Centos 7

In modo un po' curioso Centos 7 non riesce a risolvere l'indirizzo arduino.local (default di Yun) usando Avahi/Bonjour



Dopo un po' di tentativi, in modo molto pragamatico, ho preferito effettuare un ping sweep con nmap per trovare l'indirizzo ip della Yun tramite

nmap -sP 192.168.43.1/24

(di solito uso l'hotspot di Android come access point il cui DHCP stranamente non distribuisce gli ip in modo sequenziale, per esempio il telefono e' 192.168.43.1, Centos aveva preso 192.168.43.4  mentre la Yun l'ho trovata su 192.168.43.174)

Un altro piccolo dettaglio: tentando di aprire minicom dall'interno di una sessione SSH compare l'errore

Cannot find termcap entry for 'xterm-256color'

che si risolve digitando 

TERM=xterm screen

NTP Server con GPS Seriale e Arduino YUN

Nel precedente post avevo utilizzato i dati derivati da un modulo GPS collegato via USB ad una Arduino YUN come fonte dati per un server NTP


Questa configurazione e' un po' costosa ed occupa la porta USB della YUN. Usando un modulo GPS con una seriale TTL con una connessiona a soli tre fili (VCC, GND e GPS-Tx collegato ad Arduino, il cavo GPS-Rx non e' necessaria perche' la comunicazione e' a senso unico) si puo' ottenere lo stesso risultato risparmiando un po'

Per prima cosa si deve configuare la YUN modificando il file /etc/inittab e commentando la terza riga (quella che inizia con ttyATH0...) e si riavvia il dispositivo

si collega poi il pin TX del GPS al pin D8 dell'Arduino e si carica lo sketch che semplicemente prende i dati dalla SoftSeriale e li spedisce sulla Serial1 (che e' quella di collegamento tra Linino ed Arduino)

-------------------------------------------------------
#include <SoftwareSerial.h>

SoftwareSerial mySerial(8, 3); // RX, TX

void setup() {
  delay(150000); //questo serve a non inviare dati sulla seriale in fase di boot altrimenti si blocca tutto
  Serial1.begin(115200);
  Serial.begin(115200);
  mySerial.begin(9600);
}

void loop() { 
  if (mySerial.available()) {
    char c = mySerial.read();
    Serial1.write(c);
    Serial.write(c);    
  }
}
---------------------------------------------------
A questo punto doveva essere tutto facile e si dovevano solo replicare i passi del precedente post...in realta', nonostante fosse possibile visualizzare il flusso seriale mediante minicom, il demone di gpsd non riusciva ad agganciarlo. Dopo varie prove ho messo il Serial1 a 115200 e installato stty con il comando

opkg update 
opkg install coreutils-stty
a questo punto ho forzato il riconoscimento della velocita' della seriale con stty
stty -F /dev/ttyATH0 ispeed 115200 && cat </dev/ttyXXX

e lanciato demonizzato gpsd

gpsd -D 5 -N -n /dev/ttyATH0 -F /var/run/gpsd.sock
a questo punto ha iniziato a funzionare cpgs


Debugger integrato ESP32S3

Aggiornamento In realta' il Jtag USB funziona anche sui moduli cinesi Il problema risiede  nell'ID USB della porta Jtag. Nel modulo...