Per poter effettuare gli aggiornamenti di Intel Edison all'interno di una rete proxata si deve configurare il file /etc/opkg/opkg.conf modificando le option
Per motivi che non ho ben definito ho dovuto inserire l'indirizzo numerico del proxy perche' il DNS non riusciva a risolvere l'indirizzo mnemonico (il DNS funzionava correttamente su altre macchine della stessa rete)
Visualizzazione post con etichetta Intel. Mostra tutti i post
Visualizzazione post con etichetta Intel. Mostra tutti i post
lunedì 8 agosto 2016
domenica 7 agosto 2016
GMail Notifier con Yun ed Edison
Per verificare se vi sono messaggi non letti in una casella postale di GMail non e' necessario utilizzare l'accesso POP3 od IMAP. Esiste infatti un servizio Atom che riporta tale informazione
Per fare cio' si usa la url
https://mail.google.com/mail/feed/atom/label
ma prima di fare cio' si deve andare nella configurazione della propria mailbox e configurare almeno una label e poi associare un filtro ad una determinata label
per esempio si puo' creare una label Lavoro e poi creare un filtro che in base ad un indirizzo mail associa l'etichetta Lavoro.
per recuperare il numero delle mail arrivate con la label Lavoro E NON APERTE si puo' usare il comando dove username e' la mail privata di @gmail.com e la password e' quella dell'account
curl -u username:password "https://mail.google.com/mail/feed/atom/Lavoro" -k --silent |grep -o "<fullcount>[0-9]*</fullcount>" |grep -o "[0-9]*"
se si lancia il comanda si ha un errore di violazione. Questo perche' gli account di GMail sono particolarmente protetti. Per fare si' che il comando abbia buon fine si deve andare nel proprio account e cercare Consenti app meno sicure e settare On
Fatto cio' si puo' creare uno script che se il numero delle mail non lette con una determinata label e' maggiore di zero effettua una azione, diciamo azionare un rele' collegato al pin D12 a sua volta collegato per esempio ad una sirena o ad una luce a 12 V
YUN
In YUN si procede caricando lo script bash e poi, dall'interfaccia web, si abilita l'accesso REST senza password (OPEN)
Si carica quindi lo sketch Bridge dagli esempi e si lancia lo script sottostante
------------------------------
gmail=$(curl -u username:password "https://mail.google.com/mail/feed/atom/Lavoro" -k --silent |grep -o "<fullcount>[0-9]*</fullcount>" |grep -o "[0-9]*")
#echo $gmail
if [ "$gmail" -gt "0" ]; then
then curl http://localhost/arduino/digital/12/1;
else
then curl http://localhost/arduino/digital/12/0;
fi
------------------------------
Edison
------------------------------
advertence=$(curl -u username:password "https://mail.google.com/mail/feed/atom/Lavoro" -k --silent |grep -o "<fullcount>[0-9]*</fullcount>" |grep -o "[0-9]*")
echo $advertence
if [ "$advertence" -gt "0" ]; then
./accendi.py
else
./spegni.py
fi
------------------------------
accendi.py
------------------------------
#!/usr/bin/env python
import mraa
x = mraa.Gpio(12)
x.dir(mraa.DIR_OUT)
x.write(1)
------------------------------
Per fare cio' si usa la url
https://mail.google.com/mail/feed/atom/label
ma prima di fare cio' si deve andare nella configurazione della propria mailbox e configurare almeno una label e poi associare un filtro ad una determinata label
per esempio si puo' creare una label Lavoro e poi creare un filtro che in base ad un indirizzo mail associa l'etichetta Lavoro.
per recuperare il numero delle mail arrivate con la label Lavoro E NON APERTE si puo' usare il comando dove username e' la mail privata di @gmail.com e la password e' quella dell'account
curl -u username:password "https://mail.google.com/mail/feed/atom/Lavoro" -k --silent |grep -o "<fullcount>[0-9]*</fullcount>" |grep -o "[0-9]*"
se si lancia il comanda si ha un errore di violazione. Questo perche' gli account di GMail sono particolarmente protetti. Per fare si' che il comando abbia buon fine si deve andare nel proprio account e cercare Consenti app meno sicure e settare On
Fatto cio' si puo' creare uno script che se il numero delle mail non lette con una determinata label e' maggiore di zero effettua una azione, diciamo azionare un rele' collegato al pin D12 a sua volta collegato per esempio ad una sirena o ad una luce a 12 V
YUN
In YUN si procede caricando lo script bash e poi, dall'interfaccia web, si abilita l'accesso REST senza password (OPEN)
Si carica quindi lo sketch Bridge dagli esempi e si lancia lo script sottostante
------------------------------
gmail=$(curl -u username:password "https://mail.google.com/mail/feed/atom/Lavoro" -k --silent |grep -o "<fullcount>[0-9]*</fullcount>" |grep -o "[0-9]*")
#echo $gmail
if [ "$gmail" -gt "0" ]; then
then curl http://localhost/arduino/digital/12/1;
else
then curl http://localhost/arduino/digital/12/0;
fi
------------------------------
Edison
------------------------------
advertence=$(curl -u username:password "https://mail.google.com/mail/feed/atom/Lavoro" -k --silent |grep -o "<fullcount>[0-9]*</fullcount>" |grep -o "[0-9]*")
echo $advertence
if [ "$advertence" -gt "0" ]; then
./accendi.py
else
./spegni.py
fi
------------------------------
accendi.py
------------------------------
#!/usr/bin/env python
import mraa
x = mraa.Gpio(12)
x.dir(mraa.DIR_OUT)
x.write(1)
------------------------------
spegni.py
------------------------------
#!/usr/bin/env python
import mraa
x = mraa.Gpio(12)
x.dir(mraa.DIR_OUT)
x.write(0)
------------------------------
------------------------------
#!/usr/bin/env python
import mraa
x = mraa.Gpio(12)
x.dir(mraa.DIR_OUT)
x.write(0)
------------------------------
lunedì 11 luglio 2016
Intel Compute Stick ed Ubuntu
Ho preso su Ebay per un cinquantina di euro (arrivato nuovo ed impacchettato.. il prezzo su Ebay e' di 136 euro) e' di un Intel Compute Stick, piu' nel dettaglio il modello BOXSTCK1A32WFC con incluso un processore Atom con 2 Gb Ram, 32 Gb di disco e sistema operativo Windows 10...ne esiste anche una versione con premontato Ubuntu ma costa circa uguale e monta solo 1 Gb Ram e 8Gb di disco
Primi dettagli: per usare l'adattore HDMI2VGA ho dovuto comprare un connettore HDMI femmina-femmina
Il modulo non e' proprio parco nei consumi. In fase di boot arriva anche a 1.2 A
Un altro problema e' che il Intel Compute Stick monta una sola USB 2 da 500 mA. Se si monta un Hub USB passivo e si collegamento mouse stampante e network dongle non si riesce ad alimentare il tutto...me ne sono accorto perche' il led sotto il mouse era spento. La soluzione e' quella di usare una HUB alimentato o tastiera e mouse Logitech con Universal Receiver oppure tutto bluetooth (in questo caso pero' non si riesce ad entrare nel BIOS)
Per Compute Stick esiste una apposita distribuzione Linuxium ma ho voluto comunque provare con una Ubuntu 16.04 64 bit standard per vedere come andava.
Per avviare il boot da BIOS si deve selezionare l'apposita opzione (vedi immagine sottostante) Configuration/Select Operating System
Visto che non volevo compromettere l'installazione di Windows 10 ho inserito una SD Card da 16 Gb ed ho installato il sistema con le impostazioni dello screenshot sottostante (la SD Card non e' cosi' lenta nell'uso)
Il sistema si e' installato e riavviato senza problemi tranne il fatto che GRUB, pur presentando l'opzione Windows non riusciva ad avviarlo (leggendo sembra che sia un problema legato a 32/64 bit)
Ubuntu 16.04 funziona bene tranne per il fatto che mancano i moduli per gestire la scheda WiFi e Bluetooth di Compute Stick. Una volta scoperto che il chip interno e' un Realtek 8723bs e' facile trovare i moduli da scaricare e compilare
Wifi
Bluetooth
Cercando di risolvere il problema di Grub e non volendo usare una soluzione preconfenzionata ho provato ad usare Ubuntu 16.04 da questo link ma Grub ha presentato sempre i soliti problemi
Primi dettagli: per usare l'adattore HDMI2VGA ho dovuto comprare un connettore HDMI femmina-femmina
Il modulo non e' proprio parco nei consumi. In fase di boot arriva anche a 1.2 A
Un altro problema e' che il Intel Compute Stick monta una sola USB 2 da 500 mA. Se si monta un Hub USB passivo e si collegamento mouse stampante e network dongle non si riesce ad alimentare il tutto...me ne sono accorto perche' il led sotto il mouse era spento. La soluzione e' quella di usare una HUB alimentato o tastiera e mouse Logitech con Universal Receiver oppure tutto bluetooth (in questo caso pero' non si riesce ad entrare nel BIOS)
Per Compute Stick esiste una apposita distribuzione Linuxium ma ho voluto comunque provare con una Ubuntu 16.04 64 bit standard per vedere come andava.
Per avviare il boot da BIOS si deve selezionare l'apposita opzione (vedi immagine sottostante) Configuration/Select Operating System
Visto che non volevo compromettere l'installazione di Windows 10 ho inserito una SD Card da 16 Gb ed ho installato il sistema con le impostazioni dello screenshot sottostante (la SD Card non e' cosi' lenta nell'uso)
Il sistema si e' installato e riavviato senza problemi tranne il fatto che GRUB, pur presentando l'opzione Windows non riusciva ad avviarlo (leggendo sembra che sia un problema legato a 32/64 bit)
Ubuntu 16.04 funziona bene tranne per il fatto che mancano i moduli per gestire la scheda WiFi e Bluetooth di Compute Stick. Una volta scoperto che il chip interno e' un Realtek 8723bs e' facile trovare i moduli da scaricare e compilare
Wifi
Bluetooth
Cercando di risolvere il problema di Grub e non volendo usare una soluzione preconfenzionata ho provato ad usare Ubuntu 16.04 da questo link ma Grub ha presentato sempre i soliti problemi
lunedì 4 luglio 2016
Wired Ethernet su Intel Edison
Come prova ho provato a connettere via cavo Ethernet la Edison utilizzando un dongle USB-Ethernet
Il primo tentativo (ricordarsi di spostare il selettore verso la porta USB standard per attivarla) , utilizzando un dongle Lenovo USB 3 che usa il modulo cdc_ether, non e' andato a buon fine perche' il modulo non era riconosciuto dal kernel
Successivamente ho provato con un vecchio dongle USB-Ethernet di Apple che utilizza il modulo Asix AX 88772 che e' stato immediatamente riconosciuto
[ 872.328790] usb 1-1: new high-speed USB device number 3 using dwc3-host
[ 872.368156] usb 1-1: New USB device found, idVendor=05ac, idProduct=1402
[ 872.368187] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 872.368209] usb 1-1: Product: Apple USB Ethernet Adapter
[ 872.368228] usb 1-1: Manufacturer: Apple Inc.
[ 872.368247] usb 1-1: SerialNumber: 019F66
[ 873.250659] asix 1-1:1.0 eth0: register 'asix' at usb-dwc3-host.2-1, ASIX AX88772 USB 2.0 Ethernet, 00:1f:5b:ff:27:2e
[ 873.379958] systemd-udevd[410]: renamed network interface eth0 to enp0s17u1
Peraltro il dispositivo ha assunto direttamente l'IP da DHCP
-----------------------------------------------
root@edison:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: sit0: <NOARP> mtu 1480 qdisc noop
link/sit 0.0.0.0 brd 0.0.0.0
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 98:f1:70:67:20:fb brd ff:ff:ff:ff:ff:ff
inet 192.168.43.200/24 brd 192.168.43.255 scope global wlan0
valid_lft forever preferred_lft forever
4: usb0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 02:00:86:73:47:06 brd ff:ff:ff:ff:ff:ff
inet 192.168.2.15/24 brd 192.168.2.255 scope global usb0
valid_lft forever preferred_lft forever
5: enp0s17u1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:1f:5b:ff:27:2e brd ff:ff:ff:ff:ff:ff
inet 10.200.4.12/16 brd 10.200.255.255 scope global enp0s17u1
valid_lft forever preferred_lft forever
inet6 fe80::21f:5bff:feff:272e/64 scope link
valid_lft forever preferred_lft forever
-----------------------------------------------
systemctl start connman
systemctl enable connman
connmnanctl
connmanctl> disable wifi
Il primo tentativo (ricordarsi di spostare il selettore verso la porta USB standard per attivarla) , utilizzando un dongle Lenovo USB 3 che usa il modulo cdc_ether, non e' andato a buon fine perche' il modulo non era riconosciuto dal kernel
Successivamente ho provato con un vecchio dongle USB-Ethernet di Apple che utilizza il modulo Asix AX 88772 che e' stato immediatamente riconosciuto
[ 872.328790] usb 1-1: new high-speed USB device number 3 using dwc3-host
[ 872.368156] usb 1-1: New USB device found, idVendor=05ac, idProduct=1402
[ 872.368187] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 872.368209] usb 1-1: Product: Apple USB Ethernet Adapter
[ 872.368228] usb 1-1: Manufacturer: Apple Inc.
[ 872.368247] usb 1-1: SerialNumber: 019F66
[ 873.250659] asix 1-1:1.0 eth0: register 'asix' at usb-dwc3-host.2-1, ASIX AX88772 USB 2.0 Ethernet, 00:1f:5b:ff:27:2e
[ 873.379958] systemd-udevd[410]: renamed network interface eth0 to enp0s17u1
Peraltro il dispositivo ha assunto direttamente l'IP da DHCP
-----------------------------------------------
root@edison:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: sit0: <NOARP> mtu 1480 qdisc noop
link/sit 0.0.0.0 brd 0.0.0.0
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 98:f1:70:67:20:fb brd ff:ff:ff:ff:ff:ff
inet 192.168.43.200/24 brd 192.168.43.255 scope global wlan0
valid_lft forever preferred_lft forever
4: usb0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 02:00:86:73:47:06 brd ff:ff:ff:ff:ff:ff
inet 192.168.2.15/24 brd 192.168.2.255 scope global usb0
valid_lft forever preferred_lft forever
5: enp0s17u1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:1f:5b:ff:27:2e brd ff:ff:ff:ff:ff:ff
inet 10.200.4.12/16 brd 10.200.255.255 scope global enp0s17u1
valid_lft forever preferred_lft forever
inet6 fe80::21f:5bff:feff:272e/64 scope link
valid_lft forever preferred_lft forever
-----------------------------------------------
A questo puo' essere comodo disabilitare la connessione WiFi con i seguenti comandi
systemctl start connman
systemctl enable connman
connmnanctl
connmanctl> disable wifi
mercoledì 29 giugno 2016
Autostart Python e Sketch in Intel Edison
Gli sketch su Intel Edison, a differenza di Arduino, non vanno in esecuzione automatica.
Per fare cio si deve creare la directory /etc/init.d ed un file sh
mkdir /etc/init.d
cd /etc/init.d
vi automatico.sh
all'interno del file automatico.sh si digita il comando exec puntado al file sketch.elf che dovra' essere stato prima spostato dalla directory /tmp a /sketch
----------------------------
#!/bin/sh
exec /sketch/sketch.elf /dev/ttyGS0 /dev/ttyGS0
----------------------------
a questo punto per l'esecuzione automatica si rende il file eseguibile
root@edison:/etc/init.d# chmod +x /etc/init.d/automatico.sh
root@edison:/etc/init.d# update-rc.d automatico.sh defaults
lo stesso si puo' fare anche con gli script Python modificando il contenuto del file /etc/init.d/automatico.sh come segue
----------------------------
#!/bin/sh
python /home/root/programma.py >> /dev/null 2>&1 &
----------------------------
Per fare cio si deve creare la directory /etc/init.d ed un file sh
mkdir /etc/init.d
cd /etc/init.d
vi automatico.sh
all'interno del file automatico.sh si digita il comando exec puntado al file sketch.elf che dovra' essere stato prima spostato dalla directory /tmp a /sketch
----------------------------
#!/bin/sh
exec /sketch/sketch.elf /dev/ttyGS0 /dev/ttyGS0
----------------------------
a questo punto per l'esecuzione automatica si rende il file eseguibile
root@edison:/etc/init.d# chmod +x /etc/init.d/automatico.sh
root@edison:/etc/init.d# update-rc.d automatico.sh defaults
lo stesso si puo' fare anche con gli script Python modificando il contenuto del file /etc/init.d/automatico.sh come segue
----------------------------
#!/bin/sh
python /home/root/programma.py >> /dev/null 2>&1 &
----------------------------
lunedì 27 giugno 2016
Accedere da Arduino a Yocto su Intel Edison
Un altro sistema (dopo quello via seriale visto qui) per scambiare dati tra il lato Arduino ed il lato Edison e' quello di sfruttare il fatto che Arduino IDE espone il file system.
tramite il comando system e' possibile lanciare dei comandi sulla shell di Yocto e potendo creare file. Nel banale esempio sottostante si appende il valore 1 al file /home/root/luca.txt...forgiando la stringa in modo adeguato si possono per esempio salvare i valori letti da un sensore o le stringhe GPS
mini sketch Arduino
--------------------------
void loop()
{
system("echo '1' >> /home/root/luca.txt");
delay(1000);
}
--------------------------
E' possibile oltre che a scrivere anche leggere i file sul parte Yocto da sketch Arduino
tramite il comando system e' possibile lanciare dei comandi sulla shell di Yocto e potendo creare file. Nel banale esempio sottostante si appende il valore 1 al file /home/root/luca.txt...forgiando la stringa in modo adeguato si possono per esempio salvare i valori letti da un sensore o le stringhe GPS
mini sketch Arduino
--------------------------
void loop()
{
system("echo '1' >> /home/root/luca.txt");
delay(1000);
}
--------------------------
E' possibile oltre che a scrivere anche leggere i file sul parte Yocto da sketch Arduino
Scambio seriale tra Arduino Expansion Board e Intel Edison
Scambiare dati tra il lato Arduino (via Expansion Board) ed Intel Edison non e' immediato perche' in Yocto non sono predisposte porte seriali.(ripreso da questo link)
Per aggirare il problema si deve installare prima socat, con le istruzioni sotto indicate
----------------------------
wget http://www.dest-unreach.org/socat/download/socat-2.0.0-b8.tar.gz
Per aggirare il problema si deve installare prima socat, con le istruzioni sotto indicate
----------------------------
wget http://www.dest-unreach.org/socat/download/socat-2.0.0-b8.tar.gz
tar xvf socat-2.0.0-b8.tar.gz
cd socat-2.0.0-b8
configure
make
make install
nohup socat pty,link=$HOME/tty0,raw,echo=0 pty,link=$HOME/tty1,raw,echo=0 &
(viene generato un messaggio ma non si tratta di un errore)
Si vedra' che in /home/root/ sono comparsi di due dispositivi tty0 e tty1
Adesso si puo' caricare su Arduino IDE lo sketch sottostante che di fatto usa una seriale virtuale che punta su /home/root/tty0
----------------------------------------------
RingBuffer rx_buffer_S1;
TTYUARTClass mySerial(&rx_buffer_S1, 3, false);
void setup() {
mySerial.init_tty("/home/root/tty0");
mySerial.begin(115200);
}
void loop()
{
mySerial.write("luca");
delay(500);
}
---------------------------------------------
Per leggere i dati inviati dal lato Arduino (in questo caso una semplice stringa) e' sufficiente puntare minicom (o altro terminale seriale) su /home/root/tty1 con i parametri 115200 8N1
----------------------------
Una volta installato il programma si creano delle interfacce seriali virtualinohup socat pty,link=$HOME/tty0,raw,echo=0 pty,link=$HOME/tty1,raw,echo=0 &
(viene generato un messaggio ma non si tratta di un errore)
Si vedra' che in /home/root/ sono comparsi di due dispositivi tty0 e tty1
Adesso si puo' caricare su Arduino IDE lo sketch sottostante che di fatto usa una seriale virtuale che punta su /home/root/tty0
----------------------------------------------
RingBuffer rx_buffer_S1;
TTYUARTClass mySerial(&rx_buffer_S1, 3, false);
void setup() {
mySerial.init_tty("/home/root/tty0");
mySerial.begin(115200);
}
void loop()
{
mySerial.write("luca");
delay(500);
}
---------------------------------------------
Per leggere i dati inviati dal lato Arduino (in questo caso una semplice stringa) e' sufficiente puntare minicom (o altro terminale seriale) su /home/root/tty1 con i parametri 115200 8N1
Intel Edison e Xbee
Connettere una Intel Edison ha una rete Xbee e' piuttosto semplice ed automatico
Dopo aver montato uno shield Arduino Xbee con il relativo modulo radio (gia' programmato) si invieranno e riceveranno i dati sulla connessione seriale /dev/ttyMFD1 (che di fatto cortocircuita i pin Rx/Tx 0 ed 1 di Arduino verso Yocto)
Dopo aver montato uno shield Arduino Xbee con il relativo modulo radio (gia' programmato) si invieranno e riceveranno i dati sulla connessione seriale /dev/ttyMFD1 (che di fatto cortocircuita i pin Rx/Tx 0 ed 1 di Arduino verso Yocto)
giovedì 23 giugno 2016
Programmare Arduino Expansion Board su Intel Edison
Edison Intel non e' una vera Arduino (nel senso che non monta un microcontrollore ATMEGA328) ma ha comunque un buon grado di compatibilita' anche per gli shield Arduino
Per la programmazione dei pin Arduino si puo' utilizzare Python o C++ mediante la libreria MRAA ed UPM
Blink led con Python
-----
import mraa
led = mraa.Gpio(13)
led.dir(mraa.DIR_OUT)
led.write(1)
led.write(0)
exit()
Per la programmazione dei pin Arduino si puo' utilizzare Python o C++ mediante la libreria MRAA ed UPM
Blink led con Python
-----
import mraa
led = mraa.Gpio(13)
led.dir(mraa.DIR_OUT)
led.write(1)
led.write(0)
exit()
-----
Lettura della porta analogica 0
-----
import mraa
porta = mraa.Aio(0)
while 1:
while 1:
valore = float(pot.read())
print valore
L'Expansion Board puo' essere programmata anche tramite C/C++. Per fare cio' si usa Intel System Studio IoT Edition (sostanzialmente una versione modificata di Eclipse)
Per lanciare il programma si usa ./iss-iot-launcher
Di fatto si tratta di programmazione remota perche' il file viene compilato sul PC e poi inviato ed eseguito sulla Edison via SSH (WiFi, Ethernet-over-Usb). Si deve quindi, prima di procedere, creare una connessione con Edison
I file compilati vengono copiati sulla /tmp di Edison. Per questo motivo non saranno disponibili dopo un riavvio a meno di non copiare il file eseguibile in un'altra posizione
Blink in C++
----------------------------------------------
/*
* Author: Jessica Gomez <jessica.gomez.hernandez@intel.com>
* Copyright (c) 2015 - 2016 Intel Corporation.
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "mraa.h"
#include <stdio.h>
#include <unistd.h>
/*
* On board LED blink C example
*
* Demonstrate how to blink the on board LED, writing a digital value to an
* output pin using the MRAA library.
* No external hardware is needed.
*
* - digital out: on board LED
*
* Additional linker flags: none
*/
int main()
{
// select onboard LED pin based on the platform type
// create a GPIO object from MRAA using it
mraa_platform_t platform = mraa_get_platform_type();
mraa_gpio_context d_pin = NULL;
switch (platform) {
case MRAA_INTEL_GALILEO_GEN1:
d_pin = mraa_gpio_init_raw(3);
break;
case MRAA_INTEL_GALILEO_GEN2:
d_pin = mraa_gpio_init(13);
break ;
case MRAA_INTEL_EDISON_FAB_C:
d_pin = mraa_gpio_init(13);
break;
default:
fprintf(stderr, "Unsupported platform, exiting");
return MRAA_ERROR_INVALID_PLATFORM;
}
if (d_pin == NULL) {
fprintf(stderr, "MRAA couldn't initialize GPIO, exiting");
return MRAA_ERROR_UNSPECIFIED;
}
// set the pin as output
if (mraa_gpio_dir(d_pin, MRAA_GPIO_OUT) != MRAA_SUCCESS) {
fprintf(stderr, "Can't set digital pin as output, exiting");
return MRAA_ERROR_UNSPECIFIED;
};
// loop forever toggling the on board LED every second
for (;;) {
mraa_gpio_write(d_pin, 0);
sleep(1);
mraa_gpio_write(d_pin, 1);
sleep(1);
}
return MRAA_SUCCESS;
}
-----
usando la libreria UPM sono gia' disponibili molti esempi su diversi sensori a questo indirizzo
Si puo' utilizzare anche Arduino IDE per controllare i pin. In questo caso si deve in modo preliminare configurare la scheda andando in Strumenti/Scheda/Gestore Schede installando Intel i686 Boards (Edison)
Utilizzando Arduino IDE l'upload degli sketch avviene in modo tradizionale. L'unica differenza fondamentale e' che gli sketch vengono salvati in /tmp per cui al successivo riavvio non sara' piu ' disponibile. Per ovviare a questo problema si deve procedere come
cp /tmp/nome_sketch /sketch/sketch.elf
chmod 755 /sketch.sketch.elf
usando la libreria UPM sono gia' disponibili molti esempi su diversi sensori a questo indirizzo
Si puo' utilizzare anche Arduino IDE per controllare i pin. In questo caso si deve in modo preliminare configurare la scheda andando in Strumenti/Scheda/Gestore Schede installando Intel i686 Boards (Edison)
Utilizzando Arduino IDE l'upload degli sketch avviene in modo tradizionale. L'unica differenza fondamentale e' che gli sketch vengono salvati in /tmp per cui al successivo riavvio non sara' piu ' disponibile. Per ovviare a questo problema si deve procedere come
cp /tmp/nome_sketch /sketch/sketch.elf
chmod 755 /sketch.sketch.elf
L'Expansion Board puo' essere programmata anche tramite C/C++. Per fare cio' si usa Intel System Studio IoT Edition (sostanzialmente una versione modificata di Eclipse)
Per lanciare il programma si usa ./iss-iot-launcher
Di fatto si tratta di programmazione remota perche' il file viene compilato sul PC e poi inviato ed eseguito sulla Edison via SSH (WiFi, Ethernet-over-Usb). Si deve quindi, prima di procedere, creare una connessione con Edison
I file compilati vengono copiati sulla /tmp di Edison. Per questo motivo non saranno disponibili dopo un riavvio a meno di non copiare il file eseguibile in un'altra posizione
Blink in C++
----------------------------------------------
/*
* Author: Jessica Gomez <jessica.gomez.hernandez@intel.com>
* Copyright (c) 2015 - 2016 Intel Corporation.
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "mraa.h"
#include <stdio.h>
#include <unistd.h>
/*
* On board LED blink C example
*
* Demonstrate how to blink the on board LED, writing a digital value to an
* output pin using the MRAA library.
* No external hardware is needed.
*
* - digital out: on board LED
*
* Additional linker flags: none
*/
int main()
{
// select onboard LED pin based on the platform type
// create a GPIO object from MRAA using it
mraa_platform_t platform = mraa_get_platform_type();
mraa_gpio_context d_pin = NULL;
switch (platform) {
case MRAA_INTEL_GALILEO_GEN1:
d_pin = mraa_gpio_init_raw(3);
break;
case MRAA_INTEL_GALILEO_GEN2:
d_pin = mraa_gpio_init(13);
break ;
case MRAA_INTEL_EDISON_FAB_C:
d_pin = mraa_gpio_init(13);
break;
default:
fprintf(stderr, "Unsupported platform, exiting");
return MRAA_ERROR_INVALID_PLATFORM;
}
if (d_pin == NULL) {
fprintf(stderr, "MRAA couldn't initialize GPIO, exiting");
return MRAA_ERROR_UNSPECIFIED;
}
// set the pin as output
if (mraa_gpio_dir(d_pin, MRAA_GPIO_OUT) != MRAA_SUCCESS) {
fprintf(stderr, "Can't set digital pin as output, exiting");
return MRAA_ERROR_UNSPECIFIED;
};
// loop forever toggling the on board LED every second
for (;;) {
mraa_gpio_write(d_pin, 0);
sleep(1);
mraa_gpio_write(d_pin, 1);
sleep(1);
}
return MRAA_SUCCESS;
}
----------------------------------------------
Node.JS
nonostante sia possibile programmare Edison con Node:JS non sono riuscito a far funzionare XKD Iot su Centos. Si puo' comunque usare Node. direttamente da shell senza usare la programmazione remota
Blink led con Node.JS
-----
var mraa = require('mraa');
Node.JS
nonostante sia possibile programmare Edison con Node:JS non sono riuscito a far funzionare XKD Iot su Centos. Si puo' comunque usare Node. direttamente da shell senza usare la programmazione remota
Blink led con Node.JS
-----
var mraa = require('mraa');
console.log('MRAA Version: ' + mraa.getVersion());
var myOnboardLed = new mraa.Gpio(13);
myOnboardLed.dir(mraa.DIR_OUT);
-----
Lettura della porta analogica 0
-----
var mraa = require('mraa');
console.log('MRAA Version: ' + mraa.getVersion());
var analogPin0 = new mraa.Aio(0);
var analogValue = analogPin0.read();
console.log(analogValue);
-----
Ethernet-over-USB per Intel Edison su Linux
La Intel Edison oltre alla connessione della consolle via Seriale e via WiFi dispone anche della possibilita' di stabilitre una connessione TCP anche via cavo Usb con il protocollo Ethernet-over-USB (su Windows prende il nome del protocollo proprietario RNDIS)
Se si collega Edison con la porta USB-OTG e si digita sul Pc il comando
ip a
si ottiene un nuovo dispositivo che nel mio caso specifico e' enp0s26u1u1uc2.
Intel Edison ha un Ip statico sulla connessione USB (192.168.2.15). Per ottenere una connessione SSH via USB e' sufficiente impostare l'ip della connessione lato PC con
ifconfig enp0s26u1u1uc2 192.168.2.2
a questo punto si puo' lanciare la sessione ssh con
ssh root@192.168.2.15
questa configurazione puo' essere utile nel caso si voglia programmare il dispositivo utilizzando iss-iot-linux (l'ambiente di sviluppo Linux/Eclipse per Edison) senza la necessita' di attivare un access point
Se si collega Edison con la porta USB-OTG e si digita sul Pc il comando
ip a
si ottiene un nuovo dispositivo che nel mio caso specifico e' enp0s26u1u1uc2.
Intel Edison ha un Ip statico sulla connessione USB (192.168.2.15). Per ottenere una connessione SSH via USB e' sufficiente impostare l'ip della connessione lato PC con
ifconfig enp0s26u1u1uc2 192.168.2.2
a questo punto si puo' lanciare la sessione ssh con
ssh root@192.168.2.15
questa configurazione puo' essere utile nel caso si voglia programmare il dispositivo utilizzando iss-iot-linux (l'ambiente di sviluppo Linux/Eclipse per Edison) senza la necessita' di attivare un access point
Flash firmware su Intel Edison
E' passato un paio di settimane che gioco con Intel Edison e sono gia' nella necessita' di flashare il firmware (cercando di installare un dongle USB-Ethernet ho incasinato la connessione WiFi)
Per ripristinare il sistema operativo di Edison si parte scaricando il file
iot-devkit-prof-dev-image-edison-2010606.zip
p
Prima di procedere oltre si deve installare il programma dfu-util.
La sequenza e' la seguente
git clone git://git.code.sf.net/p/dfu-util/dfu-util
cd dfu-util
./autogen.sh
./configure
make
make install
a questo punto si puo' lanciare il file ./flash_all.sh
Si vedono scorrere i seguenti messaggi (il tempo e' di circa 5 minuti)
------------------------------------------------------
[root@localhost immagine]# ./flashall.sh
Using U-Boot target: edison-blankcdc
Now waiting for dfu device 8087:0a99
Please plug and reboot the board
Flashing IFWI
Download [=========================] 100% 4194304 bytes
Download [=========================] 100% 4194304 bytes
Flashing U-Boot
Download [=========================] 100% 237568 bytes
Flashing U-Boot Environment
Download [=========================] 100% 65536 bytes
Flashing U-Boot Environment Backup
Download [=========================] 100% 65536 bytes
Rebooting to apply partition changes
Now waiting for dfu device 8087:0a99
Flashing boot partition (kernel)
Download [=========================] 100% 6144000 bytes
Flashing rootfs, (it can take up to 5 minutes... Please be patient)
Download [=========================] 100% 1373149184 bytes
Rebooting
U-boot & Kernel System Flash Success...
Your board needs to reboot to complete the flashing procedure, please do not unplug it for 2 minutes.
------------------------------------------------------
Al reboot si collega il cavo USB alla porta seriale per ottenere una consolle
screen /dev/ttyUSB1 115200
(per terminare una connessione screen CTRL+A CTRL+D)
di default l'utente root non ha password. Al login basta digitare root e si entra in shell
Per ottenere la connessione SSH si deve prima configurare la password del dispositivo con
configure-edison --password
a questo punto si configura la connessione WiFi con
configure-edison --wifi
per terminare e' sufficiente installare gli aggiornamenti di sistema
opkg update
opkg upgrade
Facendo cio' si genera il seguente errore
Failed to download http://iotdk.intel.com/repos/3.5/intelgalactic/opkg/i586//Packages
l'errore e' generato dal fatto che la directory non esiste: Guardando al sistema precedente (il 3.0) nella directory http://iotdk.intel.com/repos/3.0/intelgalactic/opkg/i586/ sono contenuti gli aggiornamenti per la libreria mraa e upm ma questi nel sistema 3.5 sono contenuti in http://iotdk.intel.com/repos/3.5/iotdk/edison/core2-32/
Per questo motivo credo si tratti solo di un refuso nel file dei repository nel passaggio da 3.0 a 3.5
Per ripristinare il sistema operativo di Edison si parte scaricando il file
iot-devkit-prof-dev-image-edison-2010606.zip
p
Prima di procedere oltre si deve installare il programma dfu-util.
La sequenza e' la seguente
git clone git://git.code.sf.net/p/dfu-util/dfu-util
cd dfu-util
./autogen.sh
./configure
make
make install
a questo punto si puo' lanciare il file ./flash_all.sh
Si vedono scorrere i seguenti messaggi (il tempo e' di circa 5 minuti)
------------------------------------------------------
[root@localhost immagine]# ./flashall.sh
Using U-Boot target: edison-blankcdc
Now waiting for dfu device 8087:0a99
Please plug and reboot the board
Flashing IFWI
Download [=========================] 100% 4194304 bytes
Download [=========================] 100% 4194304 bytes
Flashing U-Boot
Download [=========================] 100% 237568 bytes
Flashing U-Boot Environment
Download [=========================] 100% 65536 bytes
Flashing U-Boot Environment Backup
Download [=========================] 100% 65536 bytes
Rebooting to apply partition changes
Now waiting for dfu device 8087:0a99
Flashing boot partition (kernel)
Download [=========================] 100% 6144000 bytes
Flashing rootfs, (it can take up to 5 minutes... Please be patient)
Download [=========================] 100% 1373149184 bytes
Rebooting
U-boot & Kernel System Flash Success...
Your board needs to reboot to complete the flashing procedure, please do not unplug it for 2 minutes.
------------------------------------------------------
Al reboot si collega il cavo USB alla porta seriale per ottenere una consolle
screen /dev/ttyUSB1 115200
(per terminare una connessione screen CTRL+A CTRL+D)
di default l'utente root non ha password. Al login basta digitare root e si entra in shell
Per ottenere la connessione SSH si deve prima configurare la password del dispositivo con
configure-edison --password
a questo punto si configura la connessione WiFi con
configure-edison --wifi
il dispositivo, oltre all'Ip, puo' essere anche richiamato come edison.local
per terminare e' sufficiente installare gli aggiornamenti di sistema
opkg update
opkg upgrade
Facendo cio' si genera il seguente errore
Failed to download http://iotdk.intel.com/repos/3.5/intelgalactic/opkg/i586//Packages
l'errore e' generato dal fatto che la directory non esiste: Guardando al sistema precedente (il 3.0) nella directory http://iotdk.intel.com/repos/3.0/intelgalactic/opkg/i586/ sono contenuti gli aggiornamenti per la libreria mraa e upm ma questi nel sistema 3.5 sono contenuti in http://iotdk.intel.com/repos/3.5/iotdk/edison/core2-32/
Per questo motivo credo si tratti solo di un refuso nel file dei repository nel passaggio da 3.0 a 3.5
martedì 21 giugno 2016
Webcam su Intel Edison
Il primo passo per utilizzare una webcam su Intel Edison e' quella di spostare il selettore SW2 dalla parte della porta USB standard. In questo modo si disattiva la porta microUsb OTG e si attiva la porta USB standard
Dal punto di vista dei moduli del kernel la mia Logitech C310 e' stata vista senza troppi problemi e montata in /dev/video0
Partendo dai repositori dai repository di AlexT (vedi qui) e' banale installare motion
In fase di compilazione pero' mjpeg-streamer si e' rifiutato per un errore piuttosto criptico su un plugin, penso dovuto al fatto che io ho installato v4l2 mentre mpjeg-streamer usa v4l.
Frugando su github ho trovato v4l2_mjpeg_streamer, una versione alleggerita di mjpeg_streamer basata su v4l2 che permette una trasmissione a 5 fotogrammi per secondo alla massima risoluzione della camera (al contrario di mjpeg_streamer la porta TCP e' la 8081)
Dal punto di vista dei moduli del kernel la mia Logitech C310 e' stata vista senza troppi problemi e montata in /dev/video0
Partendo dai repositori dai repository di AlexT (vedi qui) e' banale installare motion
motion in azione |
Piu' problematico invece far funzionare mjpeg-streamer. Scaricando via opkg da AlexT il pacchetto risulta andare in segmentation fault. Ho provato a ricompilare quindi dai sorgenti (l'ultima versione disponibile e' la r63) risolvendo le dipendenze e quindi installando anche v4l-utils.
In fase di compilazione pero' mjpeg-streamer si e' rifiutato per un errore piuttosto criptico su un plugin, penso dovuto al fatto che io ho installato v4l2 mentre mpjeg-streamer usa v4l.
Frugando su github ho trovato v4l2_mjpeg_streamer, una versione alleggerita di mjpeg_streamer basata su v4l2 che permette una trasmissione a 5 fotogrammi per secondo alla massima risoluzione della camera (al contrario di mjpeg_streamer la porta TCP e' la 8081)
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 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
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
--------------------------------------------------
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
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
Iscriviti a:
Post (Atom)
Opencv camera calibration in cpp
Oltre che con uno script Python come visto qui la calibrazione della camera si puo' fare anche con il programma in CPP Questo il proce...
-
In questo post viene indicato come creare uno scatterplot dinamico basato da dati ripresi da un file csv (nel dettaglio il file csv e' c...
-
Questo post e' a seguito di quanto gia' visto nella precedente prova Lo scopo e' sempre il solito: creare un sistema che permet...
-
La scheda ESP32-2432S028R monta un Esp Dev Module con uno schermo TFT a driver ILI9341 di 320x240 pixels 16 bit colore.Il sito di riferiment...